@iowarp/clio-coder 0.4.0 → 0.4.2

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 (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -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,
@@ -370,6 +368,13 @@ function contextComposition(context: ContextEngineFacts): {
370
368
  };
371
369
  }
372
370
 
371
+ /** The live window after the percent; null when unknown or the row is too narrow to carry it. */
372
+ export function compactContextWindowLabel(context: ContextEngineFacts, width: number): string | null {
373
+ if (width < 72) return null;
374
+ const window = finiteNonNegative(context.ledger?.contextWindow ?? context.contextWindow);
375
+ return window > 0 ? formatFooterTokens(window) : null;
376
+ }
377
+
373
378
  export function compactSecondaryLine(
374
379
  context: ContextEngineFacts,
375
380
  agent: AgentWorkFacts,
@@ -405,6 +410,12 @@ export function compactSecondaryLine(
405
410
  } else {
406
411
  left = buildSegmentedContextBar(theme, barCells, context.contextWindow ?? 0, contextBreakdownForBar(context));
407
412
  }
413
+ // A percentage alone does not say whether the window is 128k or 1M, so at
414
+ // widths that can afford it the live window follows the percent. It comes
415
+ // from the ledger when one is bound (the layer that answered the window is
416
+ // also the layer that produced the percent) and from the facts otherwise.
417
+ const windowLabel = compactContextWindowLabel(context, safeWidth);
418
+ if (windowLabel) left = `${left} ${theme.fg("dim", "of")} ${theme.fg("muted", windowLabel)}`;
408
419
  const maxRightWidth = Math.max(0, safeWidth - visibleWidth(left) - 1);
409
420
  const right = buildMetricStrip(
410
421
  theme,
@@ -700,46 +711,6 @@ function stopReasonStyle(reason: TurnSummary["stopReason"]): { glyph: string; to
700
711
  return { glyph: GLYPH.ok, token: "success" };
701
712
  }
702
713
 
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
714
  /**
744
715
  * One row per live worker: the origin glyph, the sub-process glyph when Clio
745
716
  * started the run for itself, the agent's own name, the fleet node it landed
@@ -1099,7 +1070,7 @@ function outputVerbosityLabel(verbosity: OutputVerbosity): string {
1099
1070
  return verbosity === "minimal" ? "min" : verbosity === "verbose" ? "verbose" : "default";
1100
1071
  }
1101
1072
 
1102
- export function buildHarnessStatePill(
1073
+ function buildHarnessStatePill(
1103
1074
  theme: ClioTheme,
1104
1075
  status: AgentStatus,
1105
1076
  toolCounts: ToolTallySnapshot,
@@ -1175,7 +1146,7 @@ function selectChips(
1175
1146
  return surviving();
1176
1147
  }
1177
1148
 
1178
- export function buildMetricStrip(
1149
+ function buildMetricStrip(
1179
1150
  theme: ClioTheme,
1180
1151
  status: AgentStatus,
1181
1152
  throughput: TokenThroughputSnapshot | null | undefined,