@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,365 @@
1
+ /**
2
+ * Dock geometry and lifecycle: the managed tier of Clio-owned panes.
3
+ *
4
+ * A dock is a pane in a fixed position relative to Clio's anchor pane with a
5
+ * target share of the anchor's axis, a minimum size in cells, and a managed
6
+ * lifecycle. Two slots exist: `workers` to the right of the anchor and
7
+ * `files` below it. Ad-hoc utility panes are not docks and are never touched
8
+ * here.
9
+ *
10
+ * The controller owns geometry only. Ownership stays in the pane registry,
11
+ * error swallowing stays in the contract's `attempt` wrapper: every method
12
+ * here that talks to the socket may throw a `MuxError`, and the contract is
13
+ * the layer that turns that into a null/false answer.
14
+ *
15
+ * Three rules run through the reconciliation logic:
16
+ *
17
+ * 1. A user action is a decision. A resize observed via `layout.updated`
18
+ * that does not match what Clio last applied becomes the new target; a
19
+ * closed dock stays closed; a moved dock is followed to its new id.
20
+ * 2. Clio's own corrections must not read as user actions. Every applied
21
+ * share is remembered and an observation matching it (or the target)
22
+ * within {@link SHARE_EPSILON} is a no-op.
23
+ * 3. Opening never steals focus. Focus and zoom live on the contract and
24
+ * only ever run on explicit request.
25
+ */
26
+
27
+ import type { MuxClient } from "./socket-client.js";
28
+ import type { MuxLayoutNode, MuxLog, MuxPaneRef, MuxRect, MuxTabGeometry } from "./types.js";
29
+
30
+ /** The two managed dock positions. */
31
+ export type DockSlot = "workers" | "files";
32
+
33
+ export interface DockSpec {
34
+ slot: DockSlot;
35
+ direction: "right" | "down";
36
+ /** Default share of the anchor's axis the dock takes when none is configured. */
37
+ defaultShare: number;
38
+ /** Floor in cells (columns for `right`, rows for `down`) below which a dock is useless. */
39
+ minCells: number;
40
+ }
41
+
42
+ /**
43
+ * Fixed per slot rather than heuristic: the workers viewer wants columns, the
44
+ * file pane wants rows, and a dock that wanders per terminal width would make
45
+ * the layout feel like weather.
46
+ */
47
+ export const DOCK_SPECS: Readonly<Record<DockSlot, DockSpec>> = {
48
+ workers: { slot: "workers", direction: "right", defaultShare: 0.34, minCells: 48 },
49
+ files: { slot: "files", direction: "down", defaultShare: 0.3, minCells: 12 },
50
+ };
51
+
52
+ /** A dock may never take more than half the axis, whatever the share asks. */
53
+ export const DOCK_MAX_SHARE = 0.5;
54
+ /** Observed-vs-applied share differences below this are rounding, not a user drag. */
55
+ export const SHARE_EPSILON = 0.02;
56
+
57
+ export interface DockState {
58
+ slot: DockSlot;
59
+ paneId: string;
60
+ tabId: string;
61
+ /** Share of the axis the dock should hold; user resizes overwrite it. */
62
+ targetShare: number;
63
+ /** What Clio last set, so its own correction is not adopted as a user drag. */
64
+ lastAppliedShare: number;
65
+ }
66
+
67
+ /** Wire ratio for a split where the dock is the `second` child: the anchor keeps the rest. */
68
+ export function ratioForDockShare(share: number): number {
69
+ return 1 - share;
70
+ }
71
+
72
+ /** Clamps a requested share into (0, DOCK_MAX_SHARE]. */
73
+ export function clampDockShare(share: number): number {
74
+ if (!Number.isFinite(share) || share <= 0) return DOCK_SPECS.workers.defaultShare;
75
+ return Math.min(DOCK_MAX_SHARE, share);
76
+ }
77
+
78
+ /** The axis length in cells a spec's direction measures on a rect. */
79
+ function axisCells(rect: { width: number; height: number }, spec: DockSpec): number {
80
+ return spec.direction === "right" ? rect.width : rect.height;
81
+ }
82
+
83
+ /**
84
+ * Boolean path from the root to the split separating `anchorPaneId` from
85
+ * `dockPaneId`, plus which side the dock sits on. Null when the tree does not
86
+ * hold such a split, which is how a stale path is detected after user moves.
87
+ */
88
+ export function deriveSplitPath(
89
+ root: MuxLayoutNode,
90
+ anchorPaneId: string,
91
+ dockPaneId: string,
92
+ ): { path: ReadonlyArray<boolean>; dockIsSecond: boolean; direction: "right" | "down" } | null {
93
+ const contains = (node: MuxLayoutNode, paneId: string): boolean => {
94
+ if (node.type === "pane") return node.paneId === paneId;
95
+ return contains(node.first, paneId) || contains(node.second, paneId);
96
+ };
97
+ const walk = (
98
+ node: MuxLayoutNode,
99
+ path: boolean[],
100
+ ): { path: boolean[]; dockIsSecond: boolean; direction: "right" | "down" } | null => {
101
+ if (node.type !== "split") return null;
102
+ const dockFirst = contains(node.first, dockPaneId);
103
+ const dockSecond = contains(node.second, dockPaneId);
104
+ const anchorFirst = contains(node.first, anchorPaneId);
105
+ const anchorSecond = contains(node.second, anchorPaneId);
106
+ if (dockFirst && anchorSecond) return { path, dockIsSecond: false, direction: node.direction };
107
+ if (dockSecond && anchorFirst) return { path, dockIsSecond: true, direction: node.direction };
108
+ if (dockFirst && anchorFirst) return walk(node.first, [...path, false]);
109
+ if (dockSecond && anchorSecond) return walk(node.second, [...path, true]);
110
+ return null;
111
+ };
112
+ return walk(root, []);
113
+ }
114
+
115
+ /** Whether `outer` contains `inner`, cell-inclusive. */
116
+ function containsRect(outer: MuxRect, inner: MuxRect): boolean {
117
+ return (
118
+ outer.x <= inner.x &&
119
+ outer.y <= inner.y &&
120
+ outer.x + outer.width >= inner.x + inner.width &&
121
+ outer.y + outer.height >= inner.y + inner.height
122
+ );
123
+ }
124
+
125
+ /**
126
+ * The dock side's observed share at the split separating it from the anchor,
127
+ * from live geometry. The separating split is the smallest split rect holding
128
+ * both panes: split rects nest, so that is their lowest common ancestor. Its
129
+ * live ratio is read directly rather than summing pane cells, because the
130
+ * anchor's rect stops standing for its whole side the moment the user splits
131
+ * it for something else, and a cell sum then misreads an untouched dock as a
132
+ * resize. A separating split on the wrong axis measures nothing.
133
+ */
134
+ export function observedDockShare(
135
+ geometry: MuxTabGeometry,
136
+ spec: DockSpec,
137
+ anchorPaneId: string,
138
+ dockPaneId: string,
139
+ ): number | null {
140
+ const anchor = geometry.panes.find((pane) => pane.paneId === anchorPaneId);
141
+ const dock = geometry.panes.find((pane) => pane.paneId === dockPaneId);
142
+ if (!anchor || !dock) return null;
143
+ let separating: MuxTabGeometry["splits"][number] | null = null;
144
+ for (const split of geometry.splits) {
145
+ if (!containsRect(split.rect, anchor.rect) || !containsRect(split.rect, dock.rect)) continue;
146
+ if (!separating || split.rect.width * split.rect.height < separating.rect.width * separating.rect.height) {
147
+ separating = split;
148
+ }
149
+ }
150
+ if (!separating || separating.direction !== spec.direction) return null;
151
+ // On opposite sides of the divider, the second child always starts past the
152
+ // first, so a coordinate compare says which side the dock holds.
153
+ const dockIsSecond = spec.direction === "right" ? dock.rect.x > anchor.rect.x : dock.rect.y > anchor.rect.y;
154
+ return dockIsSecond ? 1 - separating.ratio : separating.ratio;
155
+ }
156
+
157
+ export interface DockOpenPlan {
158
+ direction: "right" | "down";
159
+ /** Wire ratio for `pane.split`: the share the anchor keeps. */
160
+ ratio: number;
161
+ share: number;
162
+ }
163
+
164
+ /**
165
+ * Decides whether a dock fits beside the anchor and with what split ratio,
166
+ * from the anchor's current rect. Refusal happens here, before any split
167
+ * reaches the wire, so a too-small terminal never flashes a sliver pane.
168
+ */
169
+ export function planDockOpen(
170
+ anchorRect: { width: number; height: number },
171
+ spec: DockSpec,
172
+ requestedShare?: number,
173
+ ): DockOpenPlan | { refused: string } {
174
+ const axis = axisCells(anchorRect, spec);
175
+ if (axis * DOCK_MAX_SHARE < spec.minCells) {
176
+ return {
177
+ refused: `the ${spec.slot} dock needs ${spec.minCells} cells and at most half of ${axis} is available`,
178
+ };
179
+ }
180
+ const share = Math.max(clampDockShare(requestedShare ?? spec.defaultShare), spec.minCells / axis);
181
+ return { direction: spec.direction, ratio: ratioForDockShare(share), share };
182
+ }
183
+
184
+ export interface DockControllerOptions {
185
+ client: MuxClient;
186
+ anchorPaneId: string;
187
+ log?: MuxLog;
188
+ }
189
+
190
+ export interface DockController {
191
+ /** Live dock states, for status output. */
192
+ states(): ReadonlyArray<DockState>;
193
+ stateFor(slot: DockSlot): DockState | null;
194
+ /**
195
+ * Splits the anchor for a dock and converges it to its cell floor. Returns
196
+ * the new pane, or null when the anchor is too small. Throws MuxError on
197
+ * wire failure; the contract's attempt wrapper owns that.
198
+ */
199
+ open(
200
+ slot: DockSlot,
201
+ options?: { share?: number; cwd?: string; env?: Readonly<Record<string, string>> },
202
+ ): Promise<MuxPaneRef | null>;
203
+ /** Record an adopted pane (crash recovery) as this slot's dock. */
204
+ adopt(slot: DockSlot, ref: MuxPaneRef): void;
205
+ /** Set a dock's share explicitly, as `/panes` resize does. */
206
+ resize(slot: DockSlot, share: number): Promise<boolean>;
207
+ /** Feed a `layout.updated` push; user resizes become the new target. */
208
+ noteLayoutUpdated(geometry: MuxTabGeometry): void;
209
+ /** Feed a pane departure; a closed dock is a decision, not a fault. */
210
+ notePaneGone(paneId: string): void;
211
+ /** Feed a `pane.moved` id rewrite; the dock is followed to its new id. */
212
+ notePaneMoved(previousPaneId: string, paneId: string, tabId: string): void;
213
+ /** Pane ids of every live dock, for the contract's clean-exit sweep. */
214
+ paneIds(): ReadonlyArray<string>;
215
+ clear(): void;
216
+ }
217
+
218
+ export function createDockController(options: DockControllerOptions): DockController {
219
+ const { client, anchorPaneId } = options;
220
+ const log = options.log ?? ((): void => undefined);
221
+ const bySlot = new Map<DockSlot, DockState>();
222
+
223
+ /**
224
+ * Re-derives the split path from a fresh export and applies a ratio for the
225
+ * dock's share. The path is never cached: user splits and moves invalidate
226
+ * it silently, and one export per resize is cheap.
227
+ */
228
+ const applyShare = async (state: DockState, share: number): Promise<boolean> => {
229
+ const tree = await client.layoutExport({ tabId: state.tabId });
230
+ const derived = deriveSplitPath(tree.root, anchorPaneId, state.paneId);
231
+ if (!derived) {
232
+ log("debug", `mux ${state.slot} dock split path is gone from ${state.tabId}; leaving layout alone`);
233
+ return false;
234
+ }
235
+ // After a user move the separating split can run the other axis, and the
236
+ // share would then set a height where minCells measures columns. Wrong-axis
237
+ // geometry is declined, not silently applied.
238
+ if (derived.direction !== DOCK_SPECS[state.slot].direction) {
239
+ log("debug", `mux ${state.slot} dock split runs ${derived.direction}; declining the wrong-axis resize`);
240
+ return false;
241
+ }
242
+ const ratio = derived.dockIsSecond ? ratioForDockShare(share) : share;
243
+ await client.layoutSetSplitRatio({ tabId: state.tabId, path: derived.path, ratio });
244
+ state.targetShare = share;
245
+ state.lastAppliedShare = share;
246
+ return true;
247
+ };
248
+
249
+ return {
250
+ states(): ReadonlyArray<DockState> {
251
+ return [...bySlot.values()].map((state) => ({ ...state }));
252
+ },
253
+
254
+ stateFor(slot: DockSlot): DockState | null {
255
+ const state = bySlot.get(slot);
256
+ return state ? { ...state } : null;
257
+ },
258
+
259
+ async open(slot, openOptions = {}): Promise<MuxPaneRef | null> {
260
+ const existing = bySlot.get(slot);
261
+ if (existing) {
262
+ return { paneId: existing.paneId, tabId: existing.tabId, workspaceId: "" };
263
+ }
264
+ const spec = DOCK_SPECS[slot];
265
+ const geometry = await client.paneLayout(anchorPaneId);
266
+ const anchorRect = geometry.panes.find((pane) => pane.paneId === anchorPaneId)?.rect;
267
+ if (!anchorRect) {
268
+ log("debug", `mux ${slot} dock open found no anchor rect for ${anchorPaneId}`);
269
+ return null;
270
+ }
271
+ const plan = planDockOpen(anchorRect, spec, openOptions.share);
272
+ if ("refused" in plan) {
273
+ log("info", `mux ${slot} dock refused: ${plan.refused}`);
274
+ return null;
275
+ }
276
+ const pane = await client.paneSplit({
277
+ direction: plan.direction,
278
+ targetPaneId: anchorPaneId,
279
+ ratio: plan.ratio,
280
+ focus: false,
281
+ ...(openOptions.cwd !== undefined ? { cwd: openOptions.cwd } : {}),
282
+ ...(openOptions.env ? { env: openOptions.env } : {}),
283
+ });
284
+ const state: DockState = {
285
+ slot,
286
+ paneId: pane.paneId,
287
+ tabId: pane.tabId,
288
+ targetShare: plan.share,
289
+ lastAppliedShare: plan.share,
290
+ };
291
+ bySlot.set(slot, state);
292
+ // Ratio-at-split lands on the anchor's old rect; prior splits or a
293
+ // resize since the read can leave the dock under its floor. One
294
+ // converge pass fixes it; failure to converge is not failure to open.
295
+ try {
296
+ const after = await client.paneLayout(anchorPaneId);
297
+ const dockRect = after.panes.find((entry) => entry.paneId === pane.paneId)?.rect;
298
+ if (dockRect && axisCells(dockRect, spec) < spec.minCells) {
299
+ const anchorAfter = after.panes.find((entry) => entry.paneId === anchorPaneId)?.rect;
300
+ const total = anchorAfter ? axisCells(anchorAfter, spec) + axisCells(dockRect, spec) : 0;
301
+ if (total > 0) await applyShare(state, Math.min(DOCK_MAX_SHARE, spec.minCells / total));
302
+ }
303
+ } catch (error) {
304
+ log("debug", `mux ${slot} dock converge skipped: ${error instanceof Error ? error.message : String(error)}`);
305
+ }
306
+ return { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
307
+ },
308
+
309
+ adopt(slot: DockSlot, ref: MuxPaneRef): void {
310
+ const spec = DOCK_SPECS[slot];
311
+ bySlot.set(slot, {
312
+ slot,
313
+ paneId: ref.paneId,
314
+ tabId: ref.tabId,
315
+ // The surviving pane's actual share is adopted lazily by the next
316
+ // layout observation; until then the default is the best guess.
317
+ targetShare: spec.defaultShare,
318
+ lastAppliedShare: spec.defaultShare,
319
+ });
320
+ },
321
+
322
+ async resize(slot: DockSlot, share: number): Promise<boolean> {
323
+ const state = bySlot.get(slot);
324
+ if (!state) return false;
325
+ return await applyShare(state, Math.max(clampDockShare(share), 0.01));
326
+ },
327
+
328
+ noteLayoutUpdated(geometry: MuxTabGeometry): void {
329
+ for (const state of bySlot.values()) {
330
+ if (state.tabId !== geometry.tabId) continue;
331
+ const observed = observedDockShare(geometry, DOCK_SPECS[state.slot], anchorPaneId, state.paneId);
332
+ if (observed === null) continue;
333
+ if (Math.abs(observed - state.targetShare) <= SHARE_EPSILON) continue;
334
+ if (Math.abs(observed - state.lastAppliedShare) <= SHARE_EPSILON) continue;
335
+ // The user dragged the divider. Their ratio is the target now, and a
336
+ // later terminal resize must not fight them back to the old one.
337
+ log("debug", `mux ${state.slot} dock resized by the user to ${(observed * 100).toFixed(0)}%`);
338
+ state.targetShare = observed;
339
+ state.lastAppliedShare = observed;
340
+ }
341
+ },
342
+
343
+ notePaneGone(paneId: string): void {
344
+ for (const [slot, state] of bySlot) {
345
+ if (state.paneId === paneId) bySlot.delete(slot);
346
+ }
347
+ },
348
+
349
+ notePaneMoved(previousPaneId: string, paneId: string, tabId: string): void {
350
+ for (const state of bySlot.values()) {
351
+ if (state.paneId !== previousPaneId) continue;
352
+ state.paneId = paneId;
353
+ state.tabId = tabId;
354
+ }
355
+ },
356
+
357
+ paneIds(): ReadonlyArray<string> {
358
+ return [...bySlot.values()].map((state) => state.paneId);
359
+ },
360
+
361
+ clear(): void {
362
+ bySlot.clear();
363
+ },
364
+ };
365
+ }
@@ -30,7 +30,13 @@ export async function createMuxBundle(
30
30
  ...(options.env ? { env: options.env } : {}),
31
31
  log,
32
32
  });
33
- log(detection.mode === "none" ? "debug" : "info", `mux mode ${detection.mode}: ${detection.reason}`);
33
+ // A `none` that nobody asked for is background noise and stays at debug. A
34
+ // refusal is the operator's own setting being turned down, so it goes to
35
+ // `warning`, which the orchestrator routes to boot stderr.
36
+ log(
37
+ detection.refused ? "warning" : detection.mode === "none" ? "debug" : "info",
38
+ detection.refused ? `panes refused: ${detection.reason}` : `mux mode ${detection.mode}: ${detection.reason}`,
39
+ );
34
40
 
35
41
  const runtime = createMuxRuntime({ detection, client, log });
36
42
 
@@ -26,6 +26,20 @@ export type {
26
26
  } from "./contract.js";
27
27
  export { createMuxRuntime } from "./contract.js";
28
28
  export { detectMux, type MuxDetection, type MuxEnablement, resolveSocketCandidates } from "./detect.js";
29
+ export {
30
+ clampDockShare,
31
+ DOCK_MAX_SHARE,
32
+ DOCK_SPECS,
33
+ type DockController,
34
+ type DockSlot,
35
+ type DockSpec,
36
+ type DockState,
37
+ deriveSplitPath,
38
+ observedDockShare,
39
+ planDockOpen,
40
+ ratioForDockShare,
41
+ SHARE_EPSILON,
42
+ } from "./dock-controller.js";
29
43
  export type { MuxDomainOptions } from "./extension.js";
30
44
  export { MuxManifest } from "./manifest.js";
31
45
  export { createPaneRegistry, type MuxPaneRegistry, paneRecord } from "./pane-registry.js";
@@ -37,12 +51,15 @@ export {
37
51
  type MuxErrorKind,
38
52
  type MuxEvent,
39
53
  type MuxEventKind,
54
+ type MuxLayoutNode,
55
+ type MuxLayoutTree,
40
56
  type MuxLog,
41
57
  type MuxMode,
42
58
  type MuxNotificationSound,
43
59
  type MuxPanePurpose,
44
60
  type MuxPaneRecord,
45
61
  type MuxPaneRef,
62
+ type MuxRect,
46
63
  type MuxReportableAgentState,
47
64
  MuxRequestTimeout,
48
65
  type MuxSelfLocation,
@@ -50,12 +67,15 @@ export {
50
67
  type MuxServerInfo,
51
68
  type MuxSnapshot,
52
69
  type MuxTab,
70
+ type MuxTabGeometry,
53
71
  muxErrorKind,
54
72
  } from "./types.js";
55
73
  export { clioCliEntryPath, type ViewerCommandOptions, watchViewerCommand } from "./viewer-command.js";
56
74
  export {
57
75
  createYaziEventStream,
76
+ LEGACY_YAZI_PICK_EVENT,
58
77
  parseYaziEventLine,
78
+ YAZI_PICK_EVENT,
59
79
  YAZI_STREAM_MAX_BYTES,
60
80
  YAZI_STREAM_POLL_MS,
61
81
  type YaziCdEvent,
@@ -93,4 +113,4 @@ export {
93
113
  type YaziSessionOptions,
94
114
  type YaziSessionSnapshot,
95
115
  } from "./yazi/session.js";
96
- export { renderYaziTheme } from "./yazi/theme.js";
116
+ export { renderHerdrThemeBlock, renderYaziTheme } from "./yazi/theme.js";
@@ -14,13 +14,19 @@
14
14
  * shell-escape territory (spec 4.8, and the risk register's "tool misuse" row).
15
15
  */
16
16
 
17
- /** Utility pane presets, in the order `/panes open` lists them. */
17
+ /**
18
+ * Utility pane presets, in the order `/panes open` lists them.
19
+ *
20
+ * The files preset is a Clio Coder surface named for what it does; yazi is
21
+ * the engine behind it and shows up only in the install command, because
22
+ * that is the registry id an operator types.
23
+ */
18
24
  export const PANES_PRESETS = [
19
25
  {
20
- id: "yazi",
26
+ id: "files",
21
27
  /** Probed through the toolchain resolution ladder before the pane is split. */
22
28
  binary: "yazi",
23
- summary: "file manager rooted at the workspace",
29
+ summary: "file view rooted at the workspace; picks land in the composer",
24
30
  /** Printed verbatim when the probe finds nothing. */
25
31
  installHint: "clio-coder tools install yazi",
26
32
  },
@@ -42,10 +48,23 @@ export type PanesPresetId = (typeof PANES_PRESETS)[number]["id"];
42
48
 
43
49
  export const PANES_PRESET_IDS: ReadonlyArray<PanesPresetId> = PANES_PRESETS.map((preset) => preset.id);
44
50
 
45
- export function isPanesPresetId(value: string): value is PanesPresetId {
51
+ function isPanesPresetId(value: string): value is PanesPresetId {
46
52
  return PANES_PRESETS.some((preset) => preset.id === value);
47
53
  }
48
54
 
55
+ /**
56
+ * Retired preset spellings that still parse. The files preset shipped as
57
+ * `yazi` in 0.4.0 and 0.4.1, so an operator's muscle memory and any script
58
+ * that says `/panes open yazi` keeps working and lands on the same pane.
59
+ */
60
+ export const PANES_PRESET_ALIASES: Readonly<Record<string, PanesPresetId>> = { yazi: "files" };
61
+
62
+ /** The canonical preset id for an operator-typed name, or null when it is not a preset. */
63
+ export function resolvePanesPresetId(value: string): PanesPresetId | null {
64
+ if (isPanesPresetId(value)) return value;
65
+ return PANES_PRESET_ALIASES[value] ?? null;
66
+ }
67
+
49
68
  /** One pane Clio owns, flattened for display. */
50
69
  export interface PanesInventoryEntry {
51
70
  paneId: string;
@@ -61,6 +80,8 @@ export interface PanesInventoryEntry {
61
80
  export interface PanesEffectiveSettings {
62
81
  enabled: string;
63
82
  notifications: string;
83
+ /** Boot composition: off, workers, or cockpit. */
84
+ layout: string;
64
85
  journal: boolean;
65
86
  yazi: {
66
87
  enabled: boolean;
@@ -70,6 +91,14 @@ export interface PanesEffectiveSettings {
70
91
  };
71
92
  }
72
93
 
94
+ /** One managed dock's live geometry, flattened for `/panes` status. */
95
+ export interface PanesDockStatus {
96
+ slot: "workers" | "files";
97
+ paneId: string;
98
+ /** Share of the axis the dock currently targets, 0..0.5. */
99
+ targetShare: number;
100
+ }
101
+
73
102
  /** File-pane return-path state flattened for `/panes` and the model tool. */
74
103
  export interface PanesYaziStatus {
75
104
  mode: "companion" | "chooser" | "closed";
@@ -89,6 +118,8 @@ export interface PanesStatus {
89
118
  server: { version: string; protocol: number } | null;
90
119
  settings: PanesEffectiveSettings;
91
120
  yazi: PanesYaziStatus;
121
+ /** Managed docks with live geometry; empty below the layout tier. */
122
+ docks: ReadonlyArray<PanesDockStatus>;
92
123
  panes: ReadonlyArray<PanesInventoryEntry>;
93
124
  }
94
125
 
@@ -109,6 +140,11 @@ export type PanesWatchResult =
109
140
  * is: neither the domain nor the tool may import the interactive tree.
110
141
  */
111
142
  export interface PanesWatchController {
143
+ /**
144
+ * Open (or adopt) the watch pane without retargeting it, for boot
145
+ * composition under `interface.panes.layout`. False when the host refused.
146
+ */
147
+ ensureOpen(): Promise<boolean>;
112
148
  /** Point the watch pane at a run, opening or adopting the pane first if needed. */
113
149
  watch(runId: string): Promise<PanesWatchResult>;
114
150
  /** Retarget only; false when no watch pane is open or the write failed. */
@@ -118,11 +154,17 @@ export interface PanesWatchController {
118
154
  }
119
155
 
120
156
  export type PanesOpenResult =
121
- | { status: "opened"; label: string; paneId: string | null }
157
+ /** `existing` is true when the preset already had a live pane and it was focused instead of split again. */
158
+ | { status: "opened"; label: string; paneId: string | null; existing?: boolean }
122
159
  | { status: "missing-binary"; preset: string; binary: string; installHint: string; detail: string }
123
160
  | { status: "refused"; reason: string }
124
161
  | { status: "unavailable"; reason: string };
125
162
 
163
+ export type PanesZoomResult =
164
+ | { status: "zoomed"; paneId: string; label: string }
165
+ | { status: "not-found"; target: string }
166
+ | { status: "unavailable"; reason: string };
167
+
126
168
  export type PanesCloseResult =
127
169
  | { status: "closed"; closed: number; labels: ReadonlyArray<string> }
128
170
  | { status: "not-found"; target: string }
@@ -144,9 +186,21 @@ export interface PanesYaziController {
144
186
  | { status: "profile-error"; reason: string }
145
187
  | { status: "unavailable"; reason: string }
146
188
  >;
189
+ /** Close the files pane if it is open; false when nothing was open. */
190
+ close(): Promise<boolean>;
191
+ /** True while a files pane the host still reports is open. */
192
+ isOpen(): boolean;
147
193
  status(): Readonly<PanesYaziStatus>;
148
194
  }
149
195
 
196
+ /** What `/files` and the files keybinding settle to. */
197
+ export type PanesFilesResult =
198
+ | { status: "opened"; paneId: string | null; existing: boolean }
199
+ | { status: "closed" }
200
+ | { status: "missing-binary"; binary: string; installHint: string; detail: string }
201
+ | { status: "refused"; reason: string }
202
+ | { status: "unavailable"; reason: string };
203
+
150
204
  /**
151
205
  * The operations both callers drive. The tool sees a narrower door: its schema
152
206
  * has no argv field at all, and `open` refuses one even if a caller fabricates
@@ -156,7 +210,20 @@ export interface PanesOperations {
156
210
  status(): PanesStatus;
157
211
  show(target: string): Promise<PanesShowResult>;
158
212
  open(request: { preset?: string; argv?: ReadonlyArray<string>; once?: boolean }): Promise<PanesOpenResult>;
213
+ /**
214
+ * Toggle zoom on one Clio-owned pane, matched like `close` (pane id, label
215
+ * substring, then purpose; newest first). Zooming steals focus, so this is
216
+ * operator-only and never reachable from the model tool.
217
+ */
218
+ zoom(target: string): Promise<PanesZoomResult>;
159
219
  close(target: string): Promise<PanesCloseResult>;
220
+ /**
221
+ * The files pane as one operator verb. `toggle` opens it when closed and
222
+ * closes it when open, which is what a keybinding needs; `open` and
223
+ * `close` are the explicit halves; `pick` borrows the pane for one
224
+ * selection and closes it afterwards.
225
+ */
226
+ files(action: "toggle" | "open" | "close" | "pick"): Promise<PanesFilesResult>;
160
227
  /** Bind the composer-facing Yazi bridge without rebuilding this shared object. */
161
228
  attachYazi(controller: PanesYaziController): () => void;
162
229
  /** Bind the workers-view watch controller; `show` routes runs through it. */
@@ -7,14 +7,19 @@
7
7
  * adds the worktree family: a herdr old
8
8
  * enough to predate them answers `invalid_request`, and the honest response is
9
9
  * to take the documented fallback rather than to log a failure per call.
10
- * (`agent.focus` was gated here too until the per-run focus ladder was
11
- * removed with the run viewer panes; nothing drives it any more.)
12
10
  *
13
11
  * The floors are protocol introductions checked against herdr's changelog and
14
- * then re-verified with `herdr api schema --json` from PATH 0.7.5/protocol 17
15
- * and pinned 0.8.2/protocol 21. Worktrees arrived in protocol 10; notification.show
16
- * arrived in 17. Lower one only after checking the schema of
17
- * the release you are lowering it to.
12
+ * then re-verified with `herdr api schema --json` on the released artifacts
13
+ * themselves: 0.7.5 (protocol 17) and the pinned 0.8.2, whose hash-verified
14
+ * binary speaks protocol 20, not 21. Both schemas carry pane.focus,
15
+ * layout.export, and layout.set_split_ratio as method constants, so the whole
16
+ * dock tier floors at 17 alongside notification.show and pane.zoom. (An
17
+ * earlier attestation put these at 21 after reading a stray dev build that
18
+ * self-reported "0.8.2" while speaking protocol 21; on the real pin that
19
+ * floor gated the dock tier off entirely.) Worktrees arrived in protocol 10.
20
+ * 17 is the oldest schema actually read, not the oldest that might work.
21
+ * Lower one only after checking the schema of the release you are lowering
22
+ * it to.
18
23
  */
19
24
 
20
25
  import type { MuxServerInfo } from "./types.js";
@@ -23,6 +28,10 @@ import type { MuxServerInfo } from "./types.js";
23
28
  export type MuxGatedMethod =
24
29
  | "notification.show"
25
30
  | "pane.rename"
31
+ | "pane.focus"
32
+ | "pane.zoom"
33
+ | "layout.export"
34
+ | "layout.set_split_ratio"
26
35
  | "worktree.list"
27
36
  | "worktree.create"
28
37
  | "worktree.open"
@@ -31,6 +40,10 @@ export type MuxGatedMethod =
31
40
  export const MUX_METHOD_MIN_PROTOCOL: Readonly<Record<MuxGatedMethod, number>> = {
32
41
  "notification.show": 17,
33
42
  "pane.rename": 17,
43
+ "pane.focus": 17,
44
+ "pane.zoom": 17,
45
+ "layout.export": 17,
46
+ "layout.set_split_ratio": 17,
34
47
  "worktree.list": 10,
35
48
  "worktree.create": 10,
36
49
  "worktree.open": 10,