@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,360 @@
1
+ import { execFile } from "node:child_process";
2
+ import { open, readdir, stat } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { basename, dirname, join, relative, resolve, sep } from "node:path";
5
+ import { enumerateWorkspaceFilesAsync } from "../core/workspace-files.js";
6
+ import { fuzzyFilter, stripTerminalSequences } from "../engine/tui.js";
7
+ import { isEditorSteerTargetToken } from "./editor-steer.js";
8
+
9
+ const MAX_COMPLETION_ROWS = 40;
10
+ const PREVIEW_BYTES = 2048;
11
+ const PREVIEW_CHARS = 120;
12
+ const SNAPSHOT_TTL_MS = 2_000;
13
+ const GIT_OUTPUT_LIMIT_BYTES = 128 * 1024 * 1024;
14
+
15
+ export interface FileReferenceCompletionRequest {
16
+ /** Text after the active `@`, decoded when the reference is quoted. */
17
+ query: string;
18
+ signal: AbortSignal;
19
+ }
20
+
21
+ export interface FileReferenceCompletionValue {
22
+ id: string;
23
+ /** Complete inline reference spelling, including `@` and any quotes. */
24
+ value: string;
25
+ /** Workspace/path spelling without the leading `@` or a trailing slash. */
26
+ path: string;
27
+ label: string;
28
+ description: string;
29
+ isDirectory: boolean;
30
+ tracked: boolean;
31
+ }
32
+
33
+ export type FileReferenceCompletionSource = (
34
+ request: FileReferenceCompletionRequest,
35
+ ) => Promise<ReadonlyArray<FileReferenceCompletionValue>>;
36
+
37
+ export interface FileReferenceCompletionOptions {
38
+ basePath: string;
39
+ cacheTtlMs?: number;
40
+ /** Test/runtime seam; defaults to the repository's authoritative visible-file enumerator. */
41
+ listWorkspaceFiles?: (basePath: string) => Promise<ReadonlyArray<string>>;
42
+ /** Test/runtime seam; defaults to `git ls-files --cached`. */
43
+ listTrackedFiles?: (basePath: string) => Promise<ReadonlySet<string>>;
44
+ }
45
+
46
+ interface FileCandidate {
47
+ path: string;
48
+ absolutePath: string;
49
+ isDirectory: boolean;
50
+ tracked: boolean;
51
+ descendantFiles: number;
52
+ workspace: boolean;
53
+ }
54
+
55
+ interface WorkspaceSnapshot {
56
+ candidates: FileCandidate[];
57
+ directories: ReadonlySet<string>;
58
+ trackedFiles: ReadonlySet<string>;
59
+ }
60
+
61
+ function posixPath(path: string): string {
62
+ return sep === "\\" ? path.replaceAll("\\", "/") : path;
63
+ }
64
+
65
+ function safeRelativePath(path: string): string | null {
66
+ const normalized = posixPath(path).replace(/^\.\//u, "").replace(/\/$/u, "");
67
+ if (normalized.length === 0 || normalized.startsWith("/") || normalized.includes("\0") || /[\r\n]/u.test(normalized)) {
68
+ return null;
69
+ }
70
+ const segments = normalized.split("/");
71
+ if (segments.some((segment) => segment.length === 0 || segment === "." || segment === "..")) return null;
72
+ return segments.join("/");
73
+ }
74
+
75
+ function gitTrackedFiles(basePath: string): Promise<ReadonlySet<string>> {
76
+ return new Promise((resolveTracked) => {
77
+ execFile(
78
+ "git",
79
+ ["--literal-pathspecs", "ls-files", "-z", "--cached"],
80
+ { cwd: basePath, encoding: "utf8", maxBuffer: GIT_OUTPUT_LIMIT_BYTES },
81
+ (error, stdout) => {
82
+ if (error) {
83
+ resolveTracked(new Set());
84
+ return;
85
+ }
86
+ const tracked = new Set<string>();
87
+ for (const raw of stdout.split("\0")) {
88
+ const normalized = safeRelativePath(raw);
89
+ if (normalized) tracked.add(normalized);
90
+ }
91
+ resolveTracked(tracked);
92
+ },
93
+ );
94
+ });
95
+ }
96
+
97
+ function buildWorkspaceSnapshot(
98
+ basePath: string,
99
+ visibleFiles: ReadonlyArray<string>,
100
+ trackedFiles: ReadonlySet<string>,
101
+ ): WorkspaceSnapshot {
102
+ const files: FileCandidate[] = [];
103
+ const directoryFacts = new Map<string, { tracked: boolean; descendantFiles: number }>();
104
+ for (const raw of visibleFiles) {
105
+ const path = safeRelativePath(raw);
106
+ if (!path) continue;
107
+ const tracked = trackedFiles.has(path);
108
+ files.push({
109
+ path,
110
+ absolutePath: join(basePath, path),
111
+ isDirectory: false,
112
+ tracked,
113
+ descendantFiles: 0,
114
+ workspace: true,
115
+ });
116
+ const segments = path.split("/");
117
+ for (let index = 1; index < segments.length; index += 1) {
118
+ const directory = segments.slice(0, index).join("/");
119
+ const facts = directoryFacts.get(directory) ?? { tracked: false, descendantFiles: 0 };
120
+ facts.tracked ||= tracked;
121
+ facts.descendantFiles += 1;
122
+ directoryFacts.set(directory, facts);
123
+ }
124
+ }
125
+ const directories = [...directoryFacts].map(
126
+ ([path, facts]): FileCandidate => ({
127
+ path,
128
+ absolutePath: join(basePath, path),
129
+ isDirectory: true,
130
+ tracked: facts.tracked,
131
+ descendantFiles: facts.descendantFiles,
132
+ workspace: true,
133
+ }),
134
+ );
135
+ return {
136
+ candidates: [...directories, ...files],
137
+ directories: new Set(directoryFacts.keys()),
138
+ trackedFiles,
139
+ };
140
+ }
141
+
142
+ function candidateParent(path: string): string {
143
+ const parent = posixPath(dirname(path));
144
+ return parent === "." ? "" : parent;
145
+ }
146
+
147
+ function fuzzyOrdered(candidates: ReadonlyArray<FileCandidate>, query: string): FileCandidate[] {
148
+ const buckets: FileCandidate[][] = [[], [], [], []];
149
+ for (const candidate of candidates) {
150
+ const bucket = candidate.tracked ? (candidate.isDirectory ? 0 : 1) : candidate.isDirectory ? 2 : 3;
151
+ buckets[bucket]?.push(candidate);
152
+ }
153
+ return buckets.flatMap((bucket) =>
154
+ fuzzyFilter(bucket, query, (candidate) => `${basename(candidate.path)} ${candidate.path}`),
155
+ );
156
+ }
157
+
158
+ function workspaceCandidates(snapshot: WorkspaceSnapshot, rawQuery: string): FileCandidate[] {
159
+ const explicitDot = rawQuery.startsWith("./");
160
+ const query = explicitDot ? rawQuery.slice(2) : rawQuery;
161
+ const slash = query.lastIndexOf("/");
162
+ if (query.length === 0) {
163
+ return fuzzyOrdered(
164
+ snapshot.candidates
165
+ .filter((candidate) => candidateParent(candidate.path) === "")
166
+ .map((candidate) => (explicitDot ? { ...candidate, path: `./${candidate.path}` } : candidate)),
167
+ "",
168
+ );
169
+ }
170
+ if (slash >= 0) {
171
+ const parent = query.slice(0, slash);
172
+ const fragment = query.slice(slash + 1);
173
+ if (parent.length === 0 || snapshot.directories.has(parent)) {
174
+ const displayPrefix = explicitDot ? "./" : "";
175
+ return fuzzyOrdered(
176
+ snapshot.candidates
177
+ .filter((candidate) => candidateParent(candidate.path) === parent)
178
+ .map((candidate) => ({ ...candidate, path: `${displayPrefix}${candidate.path}` })),
179
+ fragment,
180
+ );
181
+ }
182
+ }
183
+ return fuzzyOrdered(
184
+ snapshot.candidates.map((candidate) => (explicitDot ? { ...candidate, path: `./${candidate.path}` } : candidate)),
185
+ query,
186
+ );
187
+ }
188
+
189
+ function explicitPathQuery(query: string): boolean {
190
+ return query.startsWith("../") || query.startsWith("~/") || query.startsWith("/");
191
+ }
192
+
193
+ function resolveDisplayBase(basePath: string, displayBase: string): string {
194
+ if (displayBase.startsWith("~/")) return resolve(homedir(), displayBase.slice(2));
195
+ if (displayBase.startsWith("/")) return resolve(displayBase);
196
+ return resolve(basePath, displayBase);
197
+ }
198
+
199
+ function workspaceRelative(basePath: string, absolutePath: string): string | null {
200
+ const candidate = posixPath(relative(basePath, absolutePath));
201
+ if (candidate.length === 0 || candidate === ".." || candidate.startsWith("../")) return null;
202
+ return safeRelativePath(candidate);
203
+ }
204
+
205
+ async function explicitCandidates(
206
+ basePath: string,
207
+ query: string,
208
+ trackedFiles: ReadonlySet<string>,
209
+ ): Promise<FileCandidate[]> {
210
+ const slash = query.lastIndexOf("/");
211
+ if (slash < 0) return [];
212
+ const displayBase = query.slice(0, slash + 1);
213
+ const fragment = query.slice(slash + 1);
214
+ const directory = resolveDisplayBase(basePath, displayBase);
215
+ const candidates: FileCandidate[] = [];
216
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
217
+ if (entry.name === ".git" || /[\r\n\0]/u.test(entry.name)) continue;
218
+ const absolutePath = join(directory, entry.name);
219
+ let isDirectory = entry.isDirectory();
220
+ let isFile = entry.isFile();
221
+ if (!isDirectory && !isFile && entry.isSymbolicLink()) {
222
+ try {
223
+ const facts = await stat(absolutePath);
224
+ isDirectory = facts.isDirectory();
225
+ isFile = facts.isFile();
226
+ } catch {
227
+ continue;
228
+ }
229
+ }
230
+ if (!isDirectory && !isFile) continue;
231
+ const relativePath = workspaceRelative(basePath, absolutePath);
232
+ candidates.push({
233
+ path: `${displayBase}${entry.name}`,
234
+ absolutePath,
235
+ isDirectory,
236
+ tracked: relativePath !== null && trackedFiles.has(relativePath),
237
+ descendantFiles: 0,
238
+ workspace: relativePath !== null,
239
+ });
240
+ }
241
+ return fuzzyOrdered(candidates, fragment);
242
+ }
243
+
244
+ function formatBytes(bytes: number): string {
245
+ if (bytes < 1024) return `${bytes}B`;
246
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(bytes < 10 * 1024 ? 1 : 0)}KB`;
247
+ return `${(bytes / (1024 * 1024)).toFixed(bytes < 10 * 1024 * 1024 ? 1 : 0)}MB`;
248
+ }
249
+
250
+ function cleanPreview(bytes: Buffer): string | null {
251
+ if (bytes.includes(0)) return "binary file";
252
+ const text = stripTerminalSequences(bytes.toString("utf8"));
253
+ const line = text
254
+ .split(/\r?\n/u)
255
+ .map((candidate) =>
256
+ Array.from(candidate, (character) => {
257
+ const code = character.codePointAt(0) ?? 0;
258
+ return code < 32 || code === 127 ? " " : character;
259
+ })
260
+ .join("")
261
+ .trim(),
262
+ )
263
+ .find((candidate) => candidate.length > 0);
264
+ if (!line) return null;
265
+ return line.length > PREVIEW_CHARS ? `${line.slice(0, PREVIEW_CHARS - 1)}…` : line;
266
+ }
267
+
268
+ async function candidateDescription(candidate: FileCandidate): Promise<string> {
269
+ const provenance = candidate.tracked ? "git tracked" : candidate.workspace ? "untracked" : "filesystem";
270
+ if (candidate.isDirectory) {
271
+ const count = candidate.descendantFiles > 0 ? ` · ${candidate.descendantFiles} files` : "";
272
+ return `${provenance} directory${count} · Tab/Enter opens`;
273
+ }
274
+ try {
275
+ const facts = await stat(candidate.absolutePath);
276
+ const handle = await open(candidate.absolutePath, "r");
277
+ let preview: string | null = null;
278
+ try {
279
+ const buffer = Buffer.alloc(Math.min(PREVIEW_BYTES, Math.max(0, facts.size)));
280
+ if (buffer.length > 0) {
281
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
282
+ preview = cleanPreview(buffer.subarray(0, bytesRead));
283
+ }
284
+ } finally {
285
+ await handle.close();
286
+ }
287
+ return `${provenance} · ${formatBytes(facts.size)}${preview ? ` · ${preview}` : ""}`;
288
+ } catch {
289
+ return `${provenance} · preview unavailable`;
290
+ }
291
+ }
292
+
293
+ /** Quote a completion exactly the way the inline-reference scanner accepts. */
294
+ function formatInlineFileReference(path: string, isDirectory: boolean): string {
295
+ const completionPath = isDirectory ? `${path.replace(/\/$/u, "")}/` : path;
296
+ if (!/[\s"'\\]/u.test(completionPath) && !isEditorSteerTargetToken(completionPath)) return `@${completionPath}`;
297
+ return `@"${completionPath.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
298
+ }
299
+
300
+ function completionId(candidate: FileCandidate): string {
301
+ return `file-reference:${candidate.isDirectory ? "directory" : "file"}:${candidate.absolutePath}`;
302
+ }
303
+
304
+ /**
305
+ * Workspace-aware `@` source for Clio's one grammar-aware composer provider.
306
+ * A bare `@` is a top-level tree; text without a slash fuzzes the whole
307
+ * workspace; a real directory prefix becomes its child submenu. Explicit
308
+ * `../`, `~/`, and absolute prefixes stay scoped filesystem navigation.
309
+ */
310
+ export function createFileReferenceCompletionSource(
311
+ options: FileReferenceCompletionOptions,
312
+ ): FileReferenceCompletionSource {
313
+ const basePath = resolve(options.basePath);
314
+ const listWorkspaceFiles = options.listWorkspaceFiles ?? ((cwd: string) => enumerateWorkspaceFilesAsync(cwd));
315
+ const listTrackedFiles = options.listTrackedFiles ?? gitTrackedFiles;
316
+ const cacheTtlMs = options.cacheTtlMs ?? SNAPSHOT_TTL_MS;
317
+ let cached: { expiresAt: number; snapshot: WorkspaceSnapshot } | null = null;
318
+ let loading: Promise<WorkspaceSnapshot> | null = null;
319
+
320
+ const snapshot = async (): Promise<WorkspaceSnapshot> => {
321
+ const now = Date.now();
322
+ if (cached && cached.expiresAt > now) return cached.snapshot;
323
+ loading ??= Promise.all([listWorkspaceFiles(basePath), listTrackedFiles(basePath)]).then(([visible, tracked]) =>
324
+ buildWorkspaceSnapshot(basePath, visible, tracked),
325
+ );
326
+ try {
327
+ const next = await loading;
328
+ cached = { expiresAt: now + cacheTtlMs, snapshot: next };
329
+ return next;
330
+ } finally {
331
+ loading = null;
332
+ }
333
+ };
334
+
335
+ return async (request) => {
336
+ if (request.signal.aborted) return [];
337
+ try {
338
+ const workspace = await snapshot();
339
+ if (request.signal.aborted) return [];
340
+ const candidates = explicitPathQuery(request.query)
341
+ ? await explicitCandidates(basePath, request.query, workspace.trackedFiles)
342
+ : workspaceCandidates(workspace, request.query);
343
+ if (request.signal.aborted) return [];
344
+ const top = candidates.slice(0, MAX_COMPLETION_ROWS);
345
+ const descriptions = await Promise.all(top.map(candidateDescription));
346
+ if (request.signal.aborted) return [];
347
+ return top.map((candidate, index) => ({
348
+ id: completionId(candidate),
349
+ value: formatInlineFileReference(candidate.path, candidate.isDirectory),
350
+ path: candidate.path,
351
+ label: `${candidate.path}${candidate.isDirectory ? "/" : ""}`,
352
+ description: descriptions[index] ?? "preview unavailable",
353
+ isDirectory: candidate.isDirectory,
354
+ tracked: candidate.tracked,
355
+ }));
356
+ } catch {
357
+ return [];
358
+ }
359
+ };
360
+ }
@@ -208,7 +208,7 @@ function renderFooterDashboardLines(
208
208
  * Widths from 80 to 119 columns use a two by two grid.
209
209
  * Widths below 80 columns use a vertical stack with all sections retained.
210
210
  */
211
- export function renderFooterStatusLines(state: FooterDashboardRenderState, width: number): string[] {
211
+ function renderFooterStatusLines(state: FooterDashboardRenderState, width: number): string[] {
212
212
  const theme = clioTheme();
213
213
  const safeWidth = Math.max(1, Math.floor(width));
214
214
  const header = headerLine(state.session, safeWidth);
@@ -297,7 +297,7 @@ export function renderFooterStatusLines(state: FooterDashboardRenderState, width
297
297
  * current work the strongest column; surplus is shared by urgency until the
298
298
  * lower-priority sections reach their caps, then spills into Activity.
299
299
  */
300
- export function expandedWideColumnWidths(width: number, totalSepWidth: number): [number, number, number, number] {
300
+ function expandedWideColumnWidths(width: number, totalSepWidth: number): [number, number, number, number] {
301
301
  const available = Math.max(0, width - totalSepWidth);
302
302
  const widths: [number, number, number, number] = [32, 31, 27, 21];
303
303
  let remaining = Math.max(0, available - widths.reduce((sum, item) => sum + item, 0));
@@ -392,33 +392,31 @@ export function buildFooterDashboard(deps: FooterDashboardDeps): FooterDashboard
392
392
  const tokensLabel = tokens || (usage?.totalTokens ? `Σ${formatFooterTokens(usage.totalTokens)}` : null);
393
393
 
394
394
  const statuses = deps.providers.list();
395
- const current = settings?.orchestrator?.target
396
- ? (statuses.find((s) => s.target.id === settings.orchestrator?.target) ?? null)
397
- : null;
395
+ const current = settings?.chat?.target ? (statuses.find((s) => s.target.id === settings.chat?.target) ?? null) : null;
398
396
 
399
- const target = formatTargetLabel(settings?.orchestrator?.target, settings?.orchestrator?.model);
397
+ const target = formatTargetLabel(settings?.chat?.target, settings?.chat?.model);
400
398
 
401
399
  const resolution = resolveModelRuntimeCapabilitiesForProviders(
402
400
  deps.providers,
403
- settings?.orchestrator?.target,
404
- settings?.orchestrator?.model,
405
- settings?.orchestrator?.thinkingLevel ?? "off",
401
+ settings?.chat?.target,
402
+ settings?.chat?.model,
403
+ settings?.chat?.thinkingLevel ?? "off",
406
404
  );
407
405
 
408
- const thinking = resolution?.thinking.display ?? settings?.orchestrator?.thinkingLevel ?? "off";
406
+ const thinking = resolution?.thinking.display ?? settings?.chat?.thinkingLevel ?? "off";
409
407
 
410
- const wireModelId = settings?.orchestrator?.model ?? current?.target.defaultModel ?? null;
408
+ const wireModelId = settings?.chat?.model ?? current?.target.defaultModel ?? null;
411
409
  const detectedReasoning =
412
410
  wireModelId && typeof deps.providers.getDetectedReasoning === "function"
413
- ? deps.providers.getDetectedReasoning(settings?.orchestrator?.target ?? "", wireModelId)
411
+ ? deps.providers.getDetectedReasoning(settings?.chat?.target ?? "", wireModelId)
414
412
  : null;
415
413
  const caps = current
416
414
  ? resolveModelCapabilities(current, wireModelId, deps.providers.knowledgeBase, { detectedReasoning })
417
415
  : null;
418
416
  const capabilities = capabilityLabels(caps);
419
417
 
420
- const safety = settings?.autonomy ?? "auto-edit";
421
- const toolProfile = settings?.delegation?.defaults?.toolGovernance ?? "clio-policy";
418
+ const safety = settings?.safety.autonomy ?? "auto-edit";
419
+ const toolProfile = settings?.integrations.externalAgents?.defaults?.toolGovernance ?? "clio-coder-policy";
422
420
 
423
421
  return {
424
422
  workspace: workspaceFacts(deps, branchSlot),
@@ -436,7 +434,7 @@ export function buildFooterDashboard(deps: FooterDashboardDeps): FooterDashboard
436
434
  capabilities,
437
435
  safety,
438
436
  toolProfile,
439
- outputVerbosity: settings?.terminal.outputVerbosity ?? "default",
437
+ outputVerbosity: settings?.interface.outputDetail ?? "default",
440
438
  leaderArmed: deps.getLeaderArmed?.() ?? false,
441
439
  shutdownArmed: deps.getShutdownArmed?.() ?? false,
442
440
  memoryIntervention: taskMemory
@@ -454,8 +452,8 @@ export function buildFooterDashboard(deps: FooterDashboardDeps): FooterDashboard
454
452
  used: contextUsage?.tokens ?? null,
455
453
  contextWindow: contextUsage?.contextWindow ?? null,
456
454
  toolSchemaTokens: contextUsage?.breakdown?.toolSchemaTokens ?? null,
457
- compactionThreshold: settings?.compaction?.threshold ?? null,
458
- compactionAuto: settings?.compaction?.auto ?? null,
455
+ compactionThreshold: settings?.context.compaction?.threshold ?? null,
456
+ compactionAuto: settings?.context.compaction?.auto ?? null,
459
457
  compactionActive,
460
458
  clioMd: formatClioMdState(contextState?.clioMd),
461
459
  memory: formatMemoryState(contextState?.memoryCount),
@@ -14,7 +14,7 @@
14
14
  * color lives in `theme/**`; every emitted line is width-clamped.
15
15
  */
16
16
 
17
- import { truncateToWidth, visibleWidth } from "../../engine/tui.js";
17
+ import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
18
18
  import { fitFooterText } from "../footer-panel.js";
19
19
  import { type ClioTheme, type ClioToken, clioTheme, GLYPH, rule } from "../theme/index.js";
20
20
 
@@ -152,7 +152,7 @@ function boundNotifyBytes(text: string, maxBytes: number): string {
152
152
  }
153
153
 
154
154
  /** The closed-vocabulary body for one event. */
155
- export function desktopNotifyBody(event: DesktopNotifyEvent): string {
155
+ function desktopNotifyBody(event: DesktopNotifyEvent): string {
156
156
  if (event.kind === "turn-finished") return "turn finished";
157
157
  if (event.kind === "approval-needed") return "approval needed";
158
158
  const shortId = boundNotifyBytes(sanitizeNotifyText(event.shortId), 32);
@@ -160,7 +160,7 @@ export function desktopNotifyBody(event: DesktopNotifyEvent): string {
160
160
  }
161
161
 
162
162
  /** True when the environment names a terminal that answers OSC 9 rather than OSC 777. */
163
- export function prefersOsc9(env: Readonly<Record<string, string | undefined>>): boolean {
163
+ function prefersOsc9(env: Readonly<Record<string, string | undefined>>): boolean {
164
164
  if (typeof env.WT_SESSION === "string" && env.WT_SESSION.length > 0) return true;
165
165
  const program = (env.TERM_PROGRAM ?? "").trim().toLowerCase();
166
166
  if (program.length === 0) return false;
@@ -173,7 +173,7 @@ export function prefersOsc9(env: Readonly<Record<string, string | undefined>>):
173
173
  * chosen for the terminals that implement it instead. Exactly one sequence is
174
174
  * returned, so a single event can never produce two notifications.
175
175
  */
176
- export function buildDesktopNotifySequence(
176
+ function buildDesktopNotifySequence(
177
177
  event: DesktopNotifyEvent,
178
178
  env: Readonly<Record<string, string | undefined>> = process.env,
179
179
  ): string {
@@ -208,7 +208,7 @@ export interface DesktopNotifier {
208
208
  * events. Every call re-checks the setting and the surface, so turning
209
209
  * `terminal.notify` off mid-session silences the next event.
210
210
  */
211
- export function createDesktopNotifier(deps: DesktopNotifierDeps): DesktopNotifier {
211
+ function createDesktopNotifier(deps: DesktopNotifierDeps): DesktopNotifier {
212
212
  const env = deps.env ?? process.env;
213
213
  return {
214
214
  notify(event) {
@@ -470,8 +470,9 @@ export function formatNotificationBadge(
470
470
  }
471
471
 
472
472
  /**
473
- * Expanded notices panel for the dashboard. Header rule + one styled line per
474
- * entry, capped so a noisy boot cannot push the dashboard off-screen.
473
+ * Expanded notices panel for the dashboard. The entry count is capped so a
474
+ * noisy boot cannot take over the dashboard, but every included notice wraps
475
+ * in full: this is the detail surface that the compact badge points toward.
475
476
  */
476
477
  export function formatNotificationPanel(
477
478
  entries: ReadonlyArray<Notification>,
@@ -485,7 +486,12 @@ export function formatNotificationPanel(
485
486
  const lines: string[] = [rule(theme, width, { left: "notices" })];
486
487
  for (const entry of entries.slice(0, maxRows)) {
487
488
  const glyph = theme.fg(notificationToken(entry.level), notificationGlyph(entry.level));
488
- lines.push(fitFooterText(`${glyph} ${theme.fg("muted", entry.text)}`, width, GLYPH.ellipsis));
489
+ const prefix = `${glyph} `;
490
+ const prefixWidth = visibleWidth(prefix);
491
+ const wrapped = wrapTextWithAnsi(theme.fg("muted", entry.text), Math.max(1, width - prefixWidth));
492
+ lines.push(
493
+ ...wrapped.map((line, index) => fitFooterText(`${index === 0 ? prefix : " ".repeat(prefixWidth)}${line}`, width)),
494
+ );
489
495
  }
490
496
  const overflow = entries.length - maxRows;
491
497
  const hint = overflow > 0 ? `+${overflow} more · ${dismiss} dismiss` : `${dismiss} dismiss`;
@@ -1,5 +1,4 @@
1
1
  import type { OutputVerbosity } from "../../core/defaults.js";
2
- import { responseModelIdObservationLabel } from "../../core/response-model-id.js";
3
2
  import { ToolNames } from "../../core/tool-names.js";
4
3
  import {
5
4
  type CostAggregate,
@@ -28,7 +27,6 @@ import {
28
27
  type TurnSummary,
29
28
  } from "../status/index.js";
30
29
  import {
31
- abbreviateModelId,
32
30
  type ClioTheme,
33
31
  type ClioToken,
34
32
  clioTheme,
@@ -700,46 +698,6 @@ function stopReasonStyle(reason: TurnSummary["stopReason"]): { glyph: string; to
700
698
  return { glyph: GLYPH.ok, token: "success" };
701
699
  }
702
700
 
703
- /**
704
- * Elegant single-line readout of the most recent completed turn. This is the
705
- * footer home for the metrics that used to print faintly under each assistant
706
- * reply: stop outcome, wall time, token in/out, reasoning, and tool work. The
707
- * model is intentionally omitted because the editor rail already carries it.
708
- */
709
- export function formatLastTurn(theme: ClioTheme, summary: TurnSummary): string {
710
- const stop = stopReasonStyle(summary.stopReason);
711
- const parts: string[] = [
712
- theme.fg(stop.token, `${stop.glyph} ${formatCompactMs(summary.elapsedMs)}`),
713
- theme.fg("muted", `${GLYPH.up}${summary.inputTokens} ${GLYPH.down}${summary.outputTokens}`),
714
- ];
715
- // Zero suppresses the chip, the same rule the chat panel's turn line follows:
716
- // a turn that spent no reasoning tokens states nothing by printing `r0`.
717
- const chip = formatReasoningChip(reasoningFromSummary(summary), String);
718
- if (chip !== null) parts.push(theme.fg("reason", chip));
719
- if (summary.cacheReadTokens > 0 || summary.cacheWriteTokens > 0) {
720
- parts.push(theme.fg("dim", `cache ${summary.cacheReadTokens}/${summary.cacheWriteTokens}`));
721
- }
722
- if (summary.toolCount > 0) {
723
- const label = `${summary.toolCount} tool${summary.toolCount === 1 ? "" : "s"}`;
724
- const errors = summary.toolErrorCount > 0 ? theme.fg("error", ` ${summary.toolErrorCount}${GLYPH.error}`) : "";
725
- parts.push(`${theme.fg("muted", label)}${errors}`);
726
- }
727
- if (summary.watchdogPeak >= 2) parts.push(theme.fg("warning", "slow"));
728
- if (summary.truncated) parts.push(theme.fg("warning", "trunc"));
729
- const observation = summary.responseModelIdObservation;
730
- const observedId =
731
- observation.state === "reported"
732
- ? observation.reportedModelId
733
- : observation.state === "legacy-difference-only"
734
- ? observation.differingModelId
735
- : null;
736
- const observationText = `response model id observation ${responseModelIdObservationLabel(observation)}${
737
- observedId === null ? "" : ` ${abbreviateModelId(observedId)}`
738
- }`;
739
- parts.push(theme.fg("warning", observationText));
740
- return parts.join(theme.fg("dim", " · "));
741
- }
742
-
743
701
  /**
744
702
  * One row per live worker: the origin glyph, the sub-process glyph when Clio
745
703
  * started the run for itself, the agent's own name, the fleet node it landed
@@ -1099,7 +1057,7 @@ function outputVerbosityLabel(verbosity: OutputVerbosity): string {
1099
1057
  return verbosity === "minimal" ? "min" : verbosity === "verbose" ? "verbose" : "default";
1100
1058
  }
1101
1059
 
1102
- export function buildHarnessStatePill(
1060
+ function buildHarnessStatePill(
1103
1061
  theme: ClioTheme,
1104
1062
  status: AgentStatus,
1105
1063
  toolCounts: ToolTallySnapshot,
@@ -1175,7 +1133,7 @@ function selectChips(
1175
1133
  return surviving();
1176
1134
  }
1177
1135
 
1178
- export function buildMetricStrip(
1136
+ function buildMetricStrip(
1179
1137
  theme: ClioTheme,
1180
1138
  status: AgentStatus,
1181
1139
  throughput: TokenThroughputSnapshot | null | undefined,