@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
@@ -36,14 +36,18 @@ import {
36
36
  MuxError,
37
37
  type MuxEvent,
38
38
  type MuxEventKind,
39
+ type MuxLayoutNode,
40
+ type MuxLayoutTree,
39
41
  type MuxLog,
40
42
  type MuxNotificationSound,
41
43
  type MuxPane,
44
+ type MuxRect,
42
45
  type MuxReportableAgentState,
43
46
  MuxRequestTimeout,
44
47
  type MuxServerInfo,
45
48
  type MuxSnapshot,
46
49
  type MuxTab,
50
+ type MuxTabGeometry,
47
51
  type MuxWorktree,
48
52
  type MuxWorktreeSource,
49
53
  muxErrorKind,
@@ -192,8 +196,32 @@ export interface MuxClient {
192
196
  /** Set the pane's operator-facing label. Available on herdr protocol 17. */
193
197
  paneRename(paneId: string, label: string): Promise<void>;
194
198
  paneClose(paneId: string): Promise<void>;
195
- /** Pane ids sharing a tab with `paneId`, read off the tab's layout snapshot. */
196
- paneLayout(paneId?: string): Promise<ReadonlyArray<string>>;
199
+ /**
200
+ * Cell-precise geometry of the tab holding `paneId` (the server's focused
201
+ * pane when omitted): outer area, pane rects, and live split ratios.
202
+ */
203
+ paneLayout(paneId?: string): Promise<MuxTabGeometry>;
204
+ /**
205
+ * Focus a pane. This switches the focused tab as well as the pane (verified
206
+ * on 0.8.2), so it is only ever driven by an explicit "show me" request,
207
+ * never by background bookkeeping.
208
+ */
209
+ paneFocus(paneId: string): Promise<void>;
210
+ /** Zoom a pane. Zooming an unfocused pane steals focus; same rule as paneFocus. */
211
+ paneZoom(paneId: string, mode: "on" | "off" | "toggle"): Promise<{ changed: boolean; focusChanged: boolean }>;
212
+ /** Portable layout tree for a tab, or the tab holding `paneId`. */
213
+ layoutExport(request?: { tabId?: string; paneId?: string }): Promise<MuxLayoutTree>;
214
+ /**
215
+ * Set one split's ratio, addressed by a boolean path from the root split
216
+ * (`false` descends first, `true` second; `[]` is the root). Returns the
217
+ * updated tree.
218
+ */
219
+ layoutSetSplitRatio(request: {
220
+ tabId?: string;
221
+ paneId?: string;
222
+ path: ReadonlyArray<boolean>;
223
+ ratio: number;
224
+ }): Promise<MuxLayoutTree>;
197
225
  worktreeList(request?: MuxWorktreeListRequest): Promise<MuxWorktreeListResult>;
198
226
  worktreeCreate(request: MuxWorktreeCreateRequest): Promise<MuxWorktreeCreatedResult>;
199
227
  worktreeOpen(request: MuxWorktreeOpenRequest): Promise<MuxWorktreeOpenedResult>;
@@ -410,8 +438,93 @@ function readSnapshot(value: unknown): MuxSnapshot {
410
438
  };
411
439
  }
412
440
 
441
+ function requireNumber(source: Record<string, unknown>, key: string, context: string): number {
442
+ const value = source[key];
443
+ if (typeof value !== "number") {
444
+ throw new MuxError("protocol", `mux ${context} response is missing number field ${key}`);
445
+ }
446
+ return value;
447
+ }
448
+
449
+ function readRect(value: unknown, context: string): MuxRect {
450
+ const source = asRecord(value);
451
+ if (!source) throw new MuxError("protocol", `mux ${context} rect is not an object`);
452
+ return {
453
+ x: requireNumber(source, "x", context),
454
+ y: requireNumber(source, "y", context),
455
+ width: requireNumber(source, "width", context),
456
+ height: requireNumber(source, "height", context),
457
+ };
458
+ }
459
+
460
+ function readSplitDirection(value: unknown, context: string): "right" | "down" {
461
+ if (value === "right" || value === "down") return value;
462
+ throw new MuxError("protocol", `mux ${context} split direction is not right/down`);
463
+ }
464
+
465
+ /** Parses a `PaneLayoutSnapshot`: the shape `pane.layout` and `layout_updated` both carry. */
466
+ function readTabGeometry(value: unknown): MuxTabGeometry {
467
+ const source = asRecord(value);
468
+ if (!source) throw new MuxError("protocol", "mux layout snapshot is not an object");
469
+ return {
470
+ workspaceId: requireString(source, "workspace_id", "layout"),
471
+ tabId: requireString(source, "tab_id", "layout"),
472
+ zoomed: source.zoomed === true,
473
+ area: readRect(source.area, "layout"),
474
+ focusedPaneId: optionalString(source, "focused_pane_id"),
475
+ panes: readArray(source, "panes").map((entry) => {
476
+ const pane = asRecord(entry);
477
+ if (!pane) throw new MuxError("protocol", "mux layout pane entry is not an object");
478
+ return {
479
+ paneId: requireString(pane, "pane_id", "layout pane"),
480
+ focused: pane.focused === true,
481
+ rect: readRect(pane.rect, "layout pane"),
482
+ };
483
+ }),
484
+ splits: readArray(source, "splits").map((entry) => {
485
+ const split = asRecord(entry);
486
+ if (!split) throw new MuxError("protocol", "mux layout split entry is not an object");
487
+ return {
488
+ direction: readSplitDirection(split.direction, "layout"),
489
+ ratio: requireNumber(split, "ratio", "layout split"),
490
+ rect: readRect(split.rect, "layout split"),
491
+ };
492
+ }),
493
+ };
494
+ }
495
+
496
+ function readLayoutNode(value: unknown): MuxLayoutNode {
497
+ const source = asRecord(value);
498
+ if (!source) throw new MuxError("protocol", "mux layout node is not an object");
499
+ if (source.type === "pane") {
500
+ return { type: "pane", paneId: optionalString(source, "pane_id"), label: optionalString(source, "label") };
501
+ }
502
+ if (source.type === "split") {
503
+ return {
504
+ type: "split",
505
+ direction: readSplitDirection(source.direction, "layout tree"),
506
+ ratio: requireNumber(source, "ratio", "layout tree split"),
507
+ first: readLayoutNode(source.first),
508
+ second: readLayoutNode(source.second),
509
+ };
510
+ }
511
+ throw new MuxError("protocol", "mux layout node has an unknown type");
512
+ }
513
+
514
+ function readLayoutTree(value: unknown): MuxLayoutTree {
515
+ const source = asRecord(value);
516
+ if (!source) throw new MuxError("protocol", "mux layout tree is not an object");
517
+ return {
518
+ workspaceId: requireString(source, "workspace_id", "layout tree"),
519
+ tabId: requireString(source, "tab_id", "layout tree"),
520
+ zoomed: source.zoomed === true,
521
+ focusedPaneId: optionalString(source, "focused_pane_id"),
522
+ root: readLayoutNode(source.root),
523
+ };
524
+ }
525
+
413
526
  /** herdr names lifecycle event kinds with underscores on the wire and dots in subscriptions. */
414
- const EVENT_KIND_BY_WIRE: Readonly<Record<string, MuxEventKind>> = {
527
+ const PANE_LEAVE_KIND_BY_WIRE: Readonly<Record<string, "pane.closed" | "pane.exited">> = {
415
528
  pane_closed: "pane.closed",
416
529
  pane_exited: "pane.exited",
417
530
  };
@@ -419,14 +532,37 @@ const EVENT_KIND_BY_WIRE: Readonly<Record<string, MuxEventKind>> = {
419
532
  function readEvent(line: Record<string, unknown>): MuxEvent | null {
420
533
  const wireKind = line.event;
421
534
  if (typeof wireKind !== "string") return null;
422
- const kind = EVENT_KIND_BY_WIRE[wireKind];
423
- if (!kind) return null;
424
535
  const data = asRecord(line.data);
425
536
  if (!data) return null;
426
- const paneId = data.pane_id;
427
- const workspaceId = data.workspace_id;
428
- if (typeof paneId !== "string" || typeof workspaceId !== "string") return null;
429
- return { kind, paneId, workspaceId };
537
+ const leaveKind = PANE_LEAVE_KIND_BY_WIRE[wireKind];
538
+ if (leaveKind) {
539
+ const paneId = data.pane_id;
540
+ const workspaceId = data.workspace_id;
541
+ if (typeof paneId !== "string" || typeof workspaceId !== "string") return null;
542
+ return { kind: leaveKind, paneId, workspaceId };
543
+ }
544
+ if (wireKind === "pane_moved") {
545
+ // The move rewrites the pane id; the payload carries the new pane record
546
+ // plus the id it replaced, and consumers continue from the new one.
547
+ const pane = asRecord(data.pane);
548
+ const previousPaneId = data.previous_pane_id;
549
+ if (!pane || typeof previousPaneId !== "string") return null;
550
+ const paneId = pane.pane_id;
551
+ const tabId = pane.tab_id;
552
+ const workspaceId = pane.workspace_id;
553
+ if (typeof paneId !== "string" || typeof tabId !== "string" || typeof workspaceId !== "string") return null;
554
+ return { kind: "pane.moved", paneId, previousPaneId, tabId, workspaceId };
555
+ }
556
+ if (wireKind === "layout_updated") {
557
+ // The push already carries the full tab geometry, so a consumer never
558
+ // has to answer a layout event with a layout request.
559
+ try {
560
+ return { kind: "layout.updated", geometry: readTabGeometry(data.layout) };
561
+ } catch {
562
+ return null;
563
+ }
564
+ }
565
+ return null;
430
566
  }
431
567
 
432
568
  /** Drops undefined entries so an optional field is absent rather than `null` on the wire. */
@@ -693,17 +829,29 @@ export function createMuxClient(options: MuxClientOptions): MuxClient {
693
829
  async paneClose(paneId: string): Promise<void> {
694
830
  await call("pane.close", { pane_id: paneId });
695
831
  },
696
- async paneLayout(paneId?: string): Promise<ReadonlyArray<string>> {
832
+ async paneLayout(paneId?: string): Promise<MuxTabGeometry> {
697
833
  const result = await callObject("pane.layout", params({ pane_id: paneId }));
698
- const layout = asRecord(result.layout);
699
- if (!layout) throw new MuxError("protocol", "mux pane.layout returned no layout");
700
- const ids: string[] = [];
701
- for (const entry of readArray(layout, "panes")) {
702
- const pane = asRecord(entry);
703
- const id = pane ? pane.pane_id : undefined;
704
- if (typeof id === "string") ids.push(id);
705
- }
706
- return ids;
834
+ return readTabGeometry(result.layout);
835
+ },
836
+ async paneFocus(paneId: string): Promise<void> {
837
+ await call("pane.focus", { pane_id: paneId });
838
+ },
839
+ async paneZoom(paneId: string, mode: "on" | "off" | "toggle"): Promise<{ changed: boolean; focusChanged: boolean }> {
840
+ const result = await callObject("pane.zoom", { pane_id: paneId, mode });
841
+ const zoom = asRecord(result.zoom);
842
+ if (!zoom) throw new MuxError("protocol", "mux pane.zoom returned no zoom result");
843
+ return { changed: zoom.changed === true, focusChanged: zoom.focus_changed === true };
844
+ },
845
+ async layoutExport(request = {}): Promise<MuxLayoutTree> {
846
+ const result = await callObject("layout.export", params({ tab_id: request.tabId, pane_id: request.paneId }));
847
+ return readLayoutTree(result.layout);
848
+ },
849
+ async layoutSetSplitRatio(request): Promise<MuxLayoutTree> {
850
+ const result = await callObject(
851
+ "layout.set_split_ratio",
852
+ params({ tab_id: request.tabId, pane_id: request.paneId, path: [...request.path], ratio: request.ratio }),
853
+ );
854
+ return readLayoutTree(result.layout);
707
855
  },
708
856
  async worktreeList(request = {}): Promise<MuxWorktreeListResult> {
709
857
  const result = await callObject("worktree.list", params({ workspace_id: request.workspaceId, cwd: request.cwd }));
@@ -97,14 +97,57 @@ export interface MuxSnapshot {
97
97
  tabs: ReadonlyArray<MuxTab>;
98
98
  }
99
99
 
100
- /** Lifecycle event kinds Phase 1 subscribes to. */
101
- export type MuxEventKind = "pane.closed" | "pane.exited";
100
+ /** Lifecycle event kinds the pane layer can subscribe to. */
101
+ export type MuxEventKind = "pane.closed" | "pane.exited" | "pane.moved" | "layout.updated";
102
102
 
103
- /** One pushed lifecycle event. */
104
- export interface MuxEvent {
105
- kind: MuxEventKind;
106
- paneId: string;
103
+ /**
104
+ * One pushed lifecycle event. A discriminated union because the payloads
105
+ * differ: pane leave events carry the pane, a move carries the id rewrite
106
+ * herdr performs, and a layout update carries the whole tab geometry so a
107
+ * consumer does not have to turn around and fetch what the push already said.
108
+ */
109
+ export type MuxEvent =
110
+ | { kind: "pane.closed" | "pane.exited"; paneId: string; workspaceId: string }
111
+ | { kind: "pane.moved"; paneId: string; previousPaneId: string; tabId: string; workspaceId: string }
112
+ | { kind: "layout.updated"; geometry: MuxTabGeometry };
113
+
114
+ /** One rectangle in terminal cells, as herdr's layout snapshots report them. */
115
+ export interface MuxRect {
116
+ x: number;
117
+ y: number;
118
+ width: number;
119
+ height: number;
120
+ }
121
+
122
+ /**
123
+ * Cell-precise geometry of one tab: the outer area, every pane's rect, and
124
+ * every split with its live ratio. This is what dock sizing converges on.
125
+ */
126
+ export interface MuxTabGeometry {
127
+ workspaceId: string;
128
+ tabId: string;
129
+ zoomed: boolean;
130
+ area: MuxRect;
131
+ focusedPaneId: string | null;
132
+ panes: ReadonlyArray<{ paneId: string; focused: boolean; rect: MuxRect }>;
133
+ splits: ReadonlyArray<{ direction: "right" | "down"; ratio: number; rect: MuxRect }>;
134
+ }
135
+
136
+ /**
137
+ * One node of a portable tab layout tree, as `layout.export` describes it.
138
+ * Split ratio is the share of the axis the `first` child keeps.
139
+ */
140
+ export type MuxLayoutNode =
141
+ | { type: "pane"; paneId: string | null; label: string | null }
142
+ | { type: "split"; direction: "right" | "down"; ratio: number; first: MuxLayoutNode; second: MuxLayoutNode };
143
+
144
+ /** A whole tab's portable layout tree. */
145
+ export interface MuxLayoutTree {
107
146
  workspaceId: string;
147
+ tabId: string;
148
+ zoomed: boolean;
149
+ focusedPaneId: string | null;
150
+ root: MuxLayoutNode;
108
151
  }
109
152
 
110
153
  /** Where Clio's own pane lives, read from the herdr environment. */
@@ -1,5 +1,5 @@
1
- # Yazi config for orchestration TUI
2
- # Git status integration
1
+ # Clio Coder files pane: engine configuration. The pane host lists the pane by
2
+ # the label Clio sets ("files"); this file only shapes what the engine shows.
3
3
 
4
4
  [mgr]
5
5
  show_hidden = true
@@ -3,6 +3,8 @@ import { StringDecoder } from "node:string_decoder";
3
3
 
4
4
  export const YAZI_STREAM_POLL_MS = 250;
5
5
  export const YAZI_STREAM_MAX_BYTES = 1024 * 1024;
6
+ export const YAZI_PICK_EVENT = "clio-coder-pick";
7
+ export const LEGACY_YAZI_PICK_EVENT = "clio-pick";
6
8
 
7
9
  export interface YaziCdEvent {
8
10
  kind: "cd";
@@ -13,7 +15,7 @@ export interface YaziCdEvent {
13
15
  }
14
16
 
15
17
  export interface YaziPickEvent {
16
- kind: "clio-pick";
18
+ kind: typeof YAZI_PICK_EVENT;
17
19
  receiver: string;
18
20
  sender: string;
19
21
  values: ReadonlyArray<string>;
@@ -61,7 +63,7 @@ export function parseYaziEventLine(line: string): YaziEvent | null {
61
63
  const third = second < 0 ? -1 : line.indexOf(",", second + 1);
62
64
  if (first <= 0 || second <= first + 1 || third <= second + 1) return null;
63
65
  const kind = line.slice(0, first);
64
- if (kind !== "cd" && kind !== "clio-pick") return null;
66
+ if (kind !== "cd" && kind !== YAZI_PICK_EVENT && kind !== LEGACY_YAZI_PICK_EVENT) return null;
65
67
  const receiver = line.slice(first + 1, second);
66
68
  const sender = line.slice(second + 1, third);
67
69
  try {
@@ -73,7 +75,7 @@ export function parseYaziEventLine(line: string): YaziEvent | null {
73
75
  return { kind, receiver, sender, tab: String(tab), cwd: body.url };
74
76
  }
75
77
  if (!Array.isArray(body) || !body.every((value) => typeof value === "string")) return null;
76
- return { kind, receiver, sender, values: body };
78
+ return { kind: YAZI_PICK_EVENT, receiver, sender, values: body };
77
79
  } catch {
78
80
  return null;
79
81
  }
@@ -152,7 +154,7 @@ export function createYaziEventStream(options: YaziEventStreamOptions): YaziEven
152
154
  const line = raw.endsWith("\r") ? raw.slice(0, -1) : raw;
153
155
  if (line.length === 0) continue;
154
156
  const kind = line.slice(0, line.indexOf(","));
155
- if (kind !== "cd" && kind !== "clio-pick") continue;
157
+ if (kind !== "cd" && kind !== YAZI_PICK_EVENT && kind !== LEGACY_YAZI_PICK_EVENT) continue;
156
158
  const event = parseYaziEventLine(line);
157
159
  if (!event) {
158
160
  state.malformedLines += 1;
@@ -119,7 +119,7 @@ function shellQuote(value: string): string {
119
119
 
120
120
  /** Render the one Clio key chord, with an absolute `ya` path for vendored installs. */
121
121
  export function renderYaziKeymap(yaPath: string): string {
122
- const command = `shell -- ${shellQuote(yaPath)} pub-to "$YAZI_ID" clio-pick --list "$CLIO_YAZI_PICK_TOKEN" %s`;
122
+ const command = `shell -- ${shellQuote(yaPath)} pub-to "$YAZI_ID" clio-coder-pick --list "$CLIO_CODER_YAZI_PICK_TOKEN" %s`;
123
123
  return `# Generated by Clio Coder. Changes are replaced when the managed profile regenerates.
124
124
 
125
125
  [[mgr.prepend_keymap]]
@@ -1,13 +1,21 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { randomUUID } from "node:crypto";
3
- import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
4
4
  import { join } from "node:path";
5
+ import { namingCompatibilityEnvironment } from "../../../core/naming-compat.js";
5
6
  import { clioCacheDir } from "../../../core/xdg.js";
6
7
  import { findPinnedTool } from "../../toolchain/registry.js";
7
8
  import { describeResolution, resolveToolBinary, toolStatus } from "../../toolchain/resolve.js";
8
9
  import type { MuxContract } from "../contract.js";
9
10
  import type { MuxPaneRef } from "../types.js";
10
- import { createYaziEventStream, YAZI_STREAM_POLL_MS, type YaziEvent, type YaziEventStream } from "./event-stream.js";
11
+ import {
12
+ createYaziEventStream,
13
+ LEGACY_YAZI_PICK_EVENT,
14
+ YAZI_PICK_EVENT,
15
+ YAZI_STREAM_POLL_MS,
16
+ type YaziEvent,
17
+ type YaziEventStream,
18
+ } from "./event-stream.js";
11
19
  import { ensureYaziProfile, type YaziProfile, yaziProfileDir } from "./profile.js";
12
20
 
13
21
  export type YaziSessionMode = "companion" | "chooser";
@@ -55,6 +63,11 @@ export interface YaziSessionOptions {
55
63
  mode: YaziSessionMode;
56
64
  profileMode: YaziProfileMode;
57
65
  cwd: string;
66
+ /**
67
+ * Files-dock share of the height. Set by the interactive bridge from
68
+ * `interface.panes.files.ratio`; absent it, the dock spec's default governs.
69
+ */
70
+ dockShare?: number;
58
71
  onEvent: (event: YaziEvent) => void;
59
72
  onChooser: (result: YaziChooserResult) => void;
60
73
  onStopped?: (reason: string) => void;
@@ -94,6 +107,37 @@ function readOptional(path: string): string {
94
107
  }
95
108
  }
96
109
 
110
+ /** Transport files older than this are leftovers of a process that never reached its cleanup. */
111
+ export const YAZI_STALE_TRANSPORT_MS = 24 * 60 * 60 * 1000;
112
+
113
+ /**
114
+ * Drop transport files no live session can own. A crash, a kill, or a
115
+ * release before cleanup existed leaves `.stream`, `.chooser`, and `.cwd`
116
+ * files behind; a day is long past any pane's life, so anything older goes.
117
+ */
118
+ export function sweepStaleTransportFiles(sessionsDir: string, now: number = Date.now()): number {
119
+ let removed = 0;
120
+ let entries: string[];
121
+ try {
122
+ entries = readdirSync(sessionsDir);
123
+ } catch {
124
+ return 0;
125
+ }
126
+ for (const name of entries) {
127
+ if (!/\.(stream|chooser|cwd)$/u.test(name)) continue;
128
+ const path = join(sessionsDir, name);
129
+ try {
130
+ if (now - statSync(path).mtimeMs > YAZI_STALE_TRANSPORT_MS) {
131
+ rmSync(path, { force: true });
132
+ removed += 1;
133
+ }
134
+ } catch {
135
+ // A file that vanished between readdir and stat was someone else's to remove.
136
+ }
137
+ }
138
+ return removed;
139
+ }
140
+
97
141
  /** Open one mux-hosted Yazi process and own its DDS or chooser-file transport. */
98
142
  export async function createYaziSession(options: YaziSessionOptions): Promise<YaziSessionOpenResult> {
99
143
  const binaries = (options.resolveBinaries ?? resolveYaziBinaries)();
@@ -112,6 +156,7 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
112
156
  const sessionId = options.sessionId ?? randomUUID();
113
157
  const sessionsDir = join(cacheDir, "yazi", "sessions");
114
158
  mkdirSync(sessionsDir, { recursive: true });
159
+ sweepStaleTransportFiles(sessionsDir);
115
160
  const managedProfile =
116
161
  options.profileMode === "managed"
117
162
  ? (options.ensureProfile ?? ensureYaziProfile)({
@@ -130,13 +175,19 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
130
175
  const token = options.mode === "companion" ? (options.pickToken ?? randomUUID()) : null;
131
176
  const env: Record<string, string> = {
132
177
  ...(managedProfile ? { YAZI_CONFIG_HOME: managedProfile.dir } : {}),
133
- ...(token ? { CLIO_YAZI_PICK_TOKEN: token } : {}),
178
+ ...(token ? namingCompatibilityEnvironment("CLIO_CODER_YAZI_PICK_TOKEN", "CLIO_YAZI_PICK_TOKEN", token) : {}),
134
179
  };
135
180
  let argv: ReadonlyArray<string>;
136
181
  let stdoutPath: string | undefined;
137
182
  if (options.mode === "companion") {
138
183
  writeFileSync(streamPath, "");
139
- argv = [binaries.yaziPath, "--local-events", "cd,clio-pick", "--remote-events", "clio-pick"];
184
+ argv = [
185
+ binaries.yaziPath,
186
+ "--local-events",
187
+ `cd,${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`,
188
+ "--remote-events",
189
+ `${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`,
190
+ ];
140
191
  stdoutPath = streamPath;
141
192
  } else {
142
193
  writeFileSync(chooserPath, "");
@@ -144,14 +195,30 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
144
195
  argv = [binaries.yaziPath, options.cwd, "--chooser-file", chooserPath, "--cwd-file", cwdPath];
145
196
  }
146
197
 
198
+ // Transport files are per session and worthless once it ends: a pick has
199
+ // already been consumed by the bridge, and a chooser file has been read.
200
+ // Removing them here is what keeps `<cache>/yazi/sessions` from growing by
201
+ // three files per open for the life of the install.
202
+ const removeTransportFiles = (): void => {
203
+ for (const path of [streamPath, chooserPath, cwdPath]) rmSync(path, { force: true });
204
+ };
205
+
147
206
  const pane = await options.mux.openUtilityPane({
148
207
  argv,
149
208
  cwd: options.cwd,
150
- label: "yazi",
209
+ label: "files",
210
+ title: "files",
211
+ // The files dock: split down from the anchor at the configured share.
212
+ // Degrades to a plain split inside the contract when the layout tier is
213
+ // absent.
214
+ dock: { slot: "files", ...(options.dockShare === undefined ? {} : { share: options.dockShare }) },
151
215
  ...(Object.keys(env).length > 0 ? { env } : {}),
152
216
  ...(stdoutPath ? { stdoutPath } : {}),
153
217
  });
154
- if (!pane) return { status: "unavailable", reason: "pane host refused to open yazi" };
218
+ if (!pane) {
219
+ removeTransportFiles();
220
+ return { status: "unavailable", reason: "the pane host refused to open the files pane" };
221
+ }
155
222
 
156
223
  let paneCwd = options.cwd;
157
224
  let instanceId: string | null = null;
@@ -165,6 +232,7 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
165
232
  if (chooserTimer) clearInterval(chooserTimer);
166
233
  chooserTimer = null;
167
234
  options.onStopped?.(reason);
235
+ removeTransportFiles();
168
236
  };
169
237
 
170
238
  if (options.mode === "companion") {
@@ -181,7 +249,11 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
181
249
  options.onEvent(event);
182
250
  },
183
251
  });
184
- void stream.done.then((reason) => stop(reason));
252
+ void stream.done.then((reason) => {
253
+ // A stream that ended on its own means the pane is gone or the file
254
+ // was lost; either way the session is over and says so.
255
+ stop(reason);
256
+ });
185
257
  } else {
186
258
  const pollChooser = (): void => {
187
259
  if (stopped || alive()) return;
@@ -1,30 +1,130 @@
1
1
  import { tokenHex } from "../../../core/theme-token-hex.js";
2
2
 
3
- /** Render the deliberately small Clio overlay on Yazi's pinned preset theme. */
3
+ /**
4
+ * Render the Clio overlay on Yazi's pinned preset theme.
5
+ *
6
+ * Every color comes from Clio's own token palette (`core/theme-token-hex.ts`),
7
+ * read when the managed profile is generated, which happens on the open that
8
+ * finds no current profile. The profile stamp carries this file's output hash,
9
+ * so a palette change regenerates the profile on the next open rather than
10
+ * leaving a pane in last release's colors. Only keys Yazi 26.8 documents are
11
+ * set; the rest of the preset stays, because a wrong key here is rejected by
12
+ * the validation open in `profile.ts` and would leave the operator with no
13
+ * files pane at all.
14
+ */
4
15
  export function renderYaziTheme(): string {
5
- return `# Generated by Clio Coder. Changes are replaced when the managed profile regenerates.
16
+ const accent = tokenHex("accent");
17
+ const action = tokenHex("action");
18
+ const success = tokenHex("success");
19
+ const warning = tokenHex("warning");
20
+ const error = tokenHex("error");
21
+ const info = tokenHex("info");
22
+ const dim = tokenHex("dim");
23
+ const muted = tokenHex("muted");
24
+ const frame = tokenHex("frame");
25
+ const frameStrong = tokenHex("frameStrong");
26
+ return `# Generated by Clio Coder from its theme tokens. Changes are replaced when the managed profile regenerates.
6
27
 
7
28
  [mgr]
8
- cwd = { fg = "${tokenHex("accent")}" }
9
- find_keyword = { fg = "${tokenHex("warning")}" }
10
- marker_selected = { fg = "${tokenHex("success")}", bg = "${tokenHex("success")}" }
11
- marker_copied = { fg = "${tokenHex("accent")}", bg = "${tokenHex("accent")}" }
12
- marker_cut = { fg = "${tokenHex("error")}", bg = "${tokenHex("error")}" }
13
- border_style = { fg = "${tokenHex("frame")}" }
29
+ cwd = { fg = "${accent}" }
30
+ hovered = { reversed = true }
31
+ preview_hovered = { underline = true }
32
+ find_keyword = { fg = "${warning}", bold = true }
33
+ find_position = { fg = "${action}", italic = true }
34
+ marker_selected = { fg = "${success}", bg = "${success}" }
35
+ marker_copied = { fg = "${accent}", bg = "${accent}" }
36
+ marker_cut = { fg = "${error}", bg = "${error}" }
37
+ marker_marked = { fg = "${info}", bg = "${info}" }
38
+ count_copied = { fg = "${accent}", bg = "${frame}" }
39
+ count_cut = { fg = "${error}", bg = "${frame}" }
40
+ count_selected = { fg = "${success}", bg = "${frame}" }
41
+ border_style = { fg = "${frame}" }
42
+ syntect_theme = ""
14
43
 
15
44
  [mode]
16
- normal_main = { bg = "${tokenHex("accent")}" }
17
- normal_alt = { fg = "${tokenHex("accent")}" }
18
- select_main = { bg = "${tokenHex("action")}" }
19
- select_alt = { fg = "${tokenHex("action")}" }
20
- unset_main = { bg = "${tokenHex("error")}" }
21
- unset_alt = { fg = "${tokenHex("error")}" }
45
+ normal_main = { bg = "${accent}", bold = true }
46
+ normal_alt = { fg = "${accent}" }
47
+ select_main = { bg = "${action}", bold = true }
48
+ select_alt = { fg = "${action}" }
49
+ unset_main = { bg = "${error}", bold = true }
50
+ unset_alt = { fg = "${error}" }
22
51
 
23
52
  [tabs]
24
- active = { bg = "${tokenHex("accent")}" }
25
- inactive = { fg = "${tokenHex("accent")}" }
53
+ active = { bg = "${accent}", bold = true }
54
+ inactive = { fg = "${accent}" }
26
55
 
27
56
  [status]
28
- perm_sep = { fg = "${tokenHex("dim")}" }
57
+ perm_type = { fg = "${accent}" }
58
+ perm_read = { fg = "${warning}" }
59
+ perm_write = { fg = "${error}" }
60
+ perm_exec = { fg = "${success}" }
61
+ perm_sep = { fg = "${dim}" }
62
+ progress_label = { bold = true }
63
+ progress_normal = { fg = "${accent}" }
64
+ progress_error = { fg = "${error}" }
65
+
66
+ [which]
67
+ cols = 3
68
+ mask = { bg = "${frame}" }
69
+ cand = { fg = "${accent}" }
70
+ rest = { fg = "${muted}" }
71
+ desc = { fg = "${action}" }
72
+ separator_style = { fg = "${dim}" }
73
+
74
+ [confirm]
75
+ border = { fg = "${frameStrong}" }
76
+ title = { fg = "${accent}" }
77
+ btn_yes = { reversed = true }
78
+ btn_no = {}
79
+
80
+ [pick]
81
+ border = { fg = "${frameStrong}" }
82
+ active = { fg = "${action}", bold = true }
83
+
84
+ [input]
85
+ border = { fg = "${frameStrong}" }
86
+ title = { fg = "${accent}" }
87
+ selected = { reversed = true }
88
+
89
+ [cmp]
90
+ border = { fg = "${frameStrong}" }
91
+ active = { reversed = true }
92
+
93
+ [tasks]
94
+ border = { fg = "${frameStrong}" }
95
+ title = { fg = "${accent}" }
96
+ hovered = { fg = "${action}", underline = true }
97
+
98
+ [help]
99
+ on = { fg = "${accent}" }
100
+ run = { fg = "${action}" }
101
+ footer = { fg = "${muted}" }
102
+
103
+ [notify]
104
+ title_info = { fg = "${info}" }
105
+ title_warn = { fg = "${warning}" }
106
+ title_error = { fg = "${error}" }
107
+ `;
108
+ }
109
+
110
+ /**
111
+ * The same palette as a herdr `[theme.custom]` block.
112
+ *
113
+ * herdr themes its chrome (sidebar, tab bar, borders, agent rows) from its own
114
+ * config.toml and has no per-pane styling on the wire, so Clio cannot color
115
+ * the panes it opens. What it can do is hand the operator the block that makes
116
+ * herdr's chrome match Clio, to paste into herdr's config; Clio never writes
117
+ * another program's configuration itself.
118
+ */
119
+ export function renderHerdrThemeBlock(): string {
120
+ return `# Clio Coder theme tokens for herdr. Paste into ~/.config/herdr/config.toml, then run \`herdr server reload-config\`.
121
+ [theme.custom]
122
+ accent = "${tokenHex("accent")}"
123
+ green = "${tokenHex("success")}"
124
+ blue = "${tokenHex("info")}"
125
+ red = "${tokenHex("error")}"
126
+ yellow = "${tokenHex("warning")}"
127
+ selection_bg = "${tokenHex("frame")}"
128
+ active_row_bg = "${tokenHex("frame")}"
29
129
  `;
30
130
  }