@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
@@ -52,7 +52,7 @@ import type { TurnMiddleware } from "./turn-middleware.js";
52
52
  import type { TurnPersistence } from "./turn-persistence.js";
53
53
  import type { AgentRuntime, ChatLoopTarget, ChatTurnState } from "./turn-state.js";
54
54
 
55
- const LOCAL_API_KEY_FALLBACK = "clio-local-target";
55
+ const LOCAL_API_KEY_FALLBACK = "clio-coder-local-target";
56
56
 
57
57
  /**
58
58
  * A turn that never started, with a machine-readable reason attached. The
@@ -85,7 +85,7 @@ export class TurnAdmissionError extends Error {
85
85
  * same discovery view the planner budgets against, so a model Clio is planning
86
86
  * a loaded window for is never announced as absent.
87
87
  */
88
- export function coldModelNotice(
88
+ function coldModelNotice(
89
89
  status: TargetStatus | null | undefined,
90
90
  targetId: string,
91
91
  wireModelId: string,
@@ -183,13 +183,13 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
183
183
 
184
184
  const readTarget = (): ChatLoopTarget | null => {
185
185
  const settings = deps.getSettings();
186
- const targetId = settings.orchestrator.target?.trim();
187
- const wireModelId = settings.orchestrator.model?.trim();
186
+ const targetId = settings.chat.target?.trim();
187
+ const wireModelId = settings.chat.model?.trim();
188
188
  if (!targetId || !wireModelId) return null;
189
189
  const resolved = resolveRuntimeTarget(deps.providers, {
190
190
  targetId,
191
191
  wireModelId,
192
- requestedThinkingLevel: settings.orchestrator.thinkingLevel ?? "off",
192
+ requestedThinkingLevel: settings.chat.thinkingLevel ?? "off",
193
193
  use: "orchestrator",
194
194
  requireTools: false,
195
195
  requireOutputBudget: true,
@@ -243,8 +243,8 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
243
243
  const targetProbesInFlight = new Map<string, Promise<void>>();
244
244
  const ensureLiveCapabilitiesForSelectedModel = async (): Promise<void> => {
245
245
  const settings = deps.getSettings();
246
- const targetId = settings.orchestrator.target?.trim();
247
- const wireModelId = settings.orchestrator.model?.trim();
246
+ const targetId = settings.chat.target?.trim();
247
+ const wireModelId = settings.chat.model?.trim();
248
248
  if (!targetId || !wireModelId) return;
249
249
  const target = deps.providers.getTarget(targetId);
250
250
  if (!target) return;
@@ -316,7 +316,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
316
316
  const refreshed = resolveRuntimeTarget(deps.providers, {
317
317
  targetId: target.target.id,
318
318
  wireModelId: target.wireModelId,
319
- requestedThinkingLevel: deps.getSettings().orchestrator.thinkingLevel ?? "off",
319
+ requestedThinkingLevel: deps.getSettings().chat.thinkingLevel ?? "off",
320
320
  use: "orchestrator",
321
321
  requireTools: false,
322
322
  requireOutputBudget: true,
@@ -43,7 +43,7 @@ export interface ChatLoopRunSnapshot {
43
43
  runtimeId: string;
44
44
  runtimeKind: RuntimeDescriptor["kind"];
45
45
  wireModelId: string;
46
- autonomy: ClioSettings["autonomy"];
46
+ autonomy: ClioSettings["safety"]["autonomy"];
47
47
  compiledPromptHash: string | null;
48
48
  staticCompositionHash: string | null;
49
49
  promptSignature: string | null;
@@ -151,7 +151,6 @@ const RECEIPT_REQUIRED_KEYS = [
151
151
  "costUsd",
152
152
  "compiledPromptHash",
153
153
  "staticCompositionHash",
154
- "clioVersion",
155
154
  "piMonoVersion",
156
155
  "platform",
157
156
  "nodeVersion",
@@ -255,7 +254,7 @@ export function receiptFilePath(stateDir: string, runId: string): string {
255
254
  return join(stateDir, "receipts", `${runId}.json`);
256
255
  }
257
256
 
258
- export function runLedgerPath(stateDir: string): string {
257
+ function runLedgerPath(stateDir: string): string {
259
258
  return join(stateDir, "runs.json");
260
259
  }
261
260
 
@@ -317,7 +316,7 @@ type ReadLedgerResult = { ok: true; envelope: RunEnvelope } | { ok: false; reaso
317
316
  * the same file and ledger row, projected through the shared boundary so the
318
317
  * receipt view spells its verdict exactly as the board and the CLI do.
319
318
  */
320
- export function receiptTrustDetail(stateDir: string, runId: string): string {
319
+ function receiptTrustDetail(stateDir: string, runId: string): string {
321
320
  try {
322
321
  const receipt = JSON.parse(readFileSync(receiptFilePath(stateDir, runId), "utf8")) as RunReceipt;
323
322
  const ledger = readRunEnvelope(stateDir, runId);
@@ -335,7 +334,7 @@ function readRunEnvelope(stateDir: string, runId: string): ReadLedgerResult {
335
334
  return { ok: false, reason: runs.length === 0 ? "run ledger not found" : "run not found in ledger" };
336
335
  }
337
336
 
338
- export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerifyResult {
337
+ function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerifyResult {
339
338
  const target = receiptFilePath(stateDir, runId);
340
339
  let raw: string;
341
340
  try {
@@ -358,6 +357,9 @@ export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerif
358
357
  for (const key of RECEIPT_REQUIRED_KEYS) {
359
358
  if (!(key in r)) return { ok: false, reason: `missing field: ${key}` };
360
359
  }
360
+ if (!("clioCoderVersion" in r) && !("clioVersion" in r)) {
361
+ return { ok: false, reason: "missing field: clioCoderVersion" };
362
+ }
361
363
  if (!isNonEmptyString(r.runId)) {
362
364
  return { ok: false, reason: `runId invalid: ${String(r.runId)}` };
363
365
  }
@@ -413,8 +415,9 @@ export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerif
413
415
  if (!isIso8601(r.endedAt)) {
414
416
  return { ok: false, reason: `endedAt not ISO-8601: ${String(r.endedAt)}` };
415
417
  }
416
- if (typeof r.clioVersion !== "string" || r.clioVersion.length === 0) {
417
- return { ok: false, reason: "clioVersion empty" };
418
+ const clioCoderVersion = r.clioCoderVersion ?? r.clioVersion;
419
+ if (typeof clioCoderVersion !== "string" || clioCoderVersion.length === 0) {
420
+ return { ok: false, reason: "clioCoderVersion empty" };
418
421
  }
419
422
  if (!isNonEmptyString(r.piMonoVersion)) {
420
423
  return { ok: false, reason: `piMonoVersion invalid: ${String(r.piMonoVersion)}` };
@@ -453,7 +456,7 @@ export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerif
453
456
 
454
457
  const RECEIPT_FILE_FAILURE = /^(?:receipt file not found|read error:)/u;
455
458
  const RECEIPT_CONTRACT_FAILURE =
456
- /^(?:invalid json:|receipt is not an object|missing field:|runId invalid:|runId mismatch:|agentId invalid:|task invalid:|targetId invalid:|wireModelId invalid:|runtimeId invalid:|runtimeKind invalid:|exitCode out of range:|tokenCount out of range:|inputTokenCount out of range:|outputTokenCount out of range:|cacheReadTokenCount out of range:|cacheWriteTokenCount out of range:|costUsd out of range:|reasoningTokenCount out of range:|startedAt not ISO-8601:|endedAt not ISO-8601:|clioVersion empty|piMonoVersion invalid:|platform invalid:|nodeVersion invalid:|toolCalls out of range:|toolStats\[|compiledPromptHash invalid:|staticCompositionHash invalid:|sessionId invalid:|integrity invalid|execution role invalid|routing intent invalid|route decision invalid)/u;
459
+ /^(?:invalid json:|receipt is not an object|missing field:|runId invalid:|runId mismatch:|agentId invalid:|task invalid:|targetId invalid:|wireModelId invalid:|runtimeId invalid:|runtimeKind invalid:|exitCode out of range:|tokenCount out of range:|inputTokenCount out of range:|outputTokenCount out of range:|cacheReadTokenCount out of range:|cacheWriteTokenCount out of range:|costUsd out of range:|reasoningTokenCount out of range:|startedAt not ISO-8601:|endedAt not ISO-8601:|clioCoderVersion empty|piMonoVersion invalid:|platform invalid:|nodeVersion invalid:|toolCalls out of range:|toolStats\[|compiledPromptHash invalid:|staticCompositionHash invalid:|sessionId invalid:|integrity invalid|execution role invalid|routing intent invalid|route decision invalid)/u;
457
460
  const LEDGER_FAILURE = /^(?:run ledger not found|run not found in ledger|ledger mismatch:)/u;
458
461
 
459
462
  function receiptIntegrityDigest(value: unknown): string | null {
@@ -586,7 +589,7 @@ function splitLinesCapped(text: string, path?: string, maxLines = VIEW_ARTIFACT_
586
589
  return [...lines.slice(0, maxLines), `[truncated, open file directly${path ? `: ${path}` : ""}]`];
587
590
  }
588
591
 
589
- export async function loadJsonFileLines(path: string): Promise<ViewArtifactLoadResult> {
592
+ async function loadJsonFileLines(path: string): Promise<ViewArtifactLoadResult> {
590
593
  let canPrettyPrint = false;
591
594
  try {
592
595
  const info = await stat(path);
@@ -1569,7 +1572,7 @@ export function createDefaultArtifactProviders(deps: ArtifactProviderDeps): Arti
1569
1572
  ];
1570
1573
  }
1571
1574
 
1572
- export function sortViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
1575
+ function sortViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
1573
1576
  return [...artifacts].sort((a, b) => {
1574
1577
  const time = b.timestamp - a.timestamp;
1575
1578
  if (time !== 0) return time;
@@ -141,7 +141,7 @@ function isViewArtifactCategory(value: string): value is ViewArtifactCategory {
141
141
  return VIEW_ARTIFACT_CATEGORY_SET.has(value as ViewArtifactCategory);
142
142
  }
143
143
 
144
- export function parseViewFilterQuery(query: string): ViewFilterQuery {
144
+ function parseViewFilterQuery(query: string): ViewFilterQuery {
145
145
  const text = query.trim();
146
146
  if (text.length === 0) return { kind: "text", text };
147
147
  const colon = text.indexOf(":");
@@ -215,7 +215,7 @@ function formatLocalTime(timestamp: number): string {
215
215
  return !Number.isFinite(timestamp) || timestamp <= 0 ? "unknown time" : clockLocal(timestamp);
216
216
  }
217
217
 
218
- export function filterViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>, query: string): ViewArtifact[] {
218
+ function filterViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>, query: string): ViewArtifact[] {
219
219
  const parsed = parseViewFilterQuery(query);
220
220
  if (parsed.kind === "category") {
221
221
  const categoryArtifacts = artifacts.filter((artifact) => artifact.category === parsed.category);
@@ -226,11 +226,11 @@ export function filterViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>, quer
226
226
  return fuzzyFilter([...artifacts], parsed.text, broadFilterText);
227
227
  }
228
228
 
229
- export function artifactsInCategoryOrder(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
229
+ function artifactsInCategoryOrder(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
230
230
  return VIEW_ARTIFACT_CATEGORIES.flatMap((category) => artifacts.filter((artifact) => artifact.category === category));
231
231
  }
232
232
 
233
- export function initialViewSelection(artifacts: ReadonlyArray<ViewArtifact>, initialFilter = ""): number {
233
+ function initialViewSelection(artifacts: ReadonlyArray<ViewArtifact>, initialFilter = ""): number {
234
234
  const filtered = filterViewArtifacts(artifacts, initialFilter);
235
235
  const first = filtered[0];
236
236
  if (!first) return 0;
@@ -252,7 +252,7 @@ export function initialViewSelection(artifacts: ReadonlyArray<ViewArtifact>, ini
252
252
  return Math.max(0, artifactsInCategoryOrder(filtered).indexOf(selected));
253
253
  }
254
254
 
255
- export function nextCategorySelection(
255
+ function nextCategorySelection(
256
256
  artifacts: ReadonlyArray<ViewArtifact>,
257
257
  currentIndex: number,
258
258
  direction: -1 | 1,
@@ -271,7 +271,7 @@ export function nextCategorySelection(
271
271
  return safeCurrent;
272
272
  }
273
273
 
274
- export function groupedViewRows(artifacts: ReadonlyArray<ViewArtifact>): RenderedViewRow[] {
274
+ function groupedViewRows(artifacts: ReadonlyArray<ViewArtifact>): RenderedViewRow[] {
275
275
  const rows: RenderedViewRow[] = [];
276
276
  for (const category of VIEW_ARTIFACT_CATEGORIES) {
277
277
  const items = artifacts.filter((artifact) => artifact.category === category);
@@ -334,7 +334,7 @@ function verificationText(state: ViewVerificationState | undefined): string {
334
334
  return `${GLYPH.error} verify fail ${state.detail}`;
335
335
  }
336
336
 
337
- export function buildArtifactHeader(
337
+ function buildArtifactHeader(
338
338
  artifact: ViewArtifact | undefined,
339
339
  verification: ViewVerificationState | undefined,
340
340
  width: number,
@@ -361,7 +361,7 @@ export function buildArtifactHeader(
361
361
  }
362
362
 
363
363
  /** Put verification on wrapped rows so a canonical receipt verdict is never reduced to a prefix. */
364
- export function buildArtifactHeaderLines(
364
+ function buildArtifactHeaderLines(
365
365
  artifact: ViewArtifact | undefined,
366
366
  verification: ViewVerificationState | undefined,
367
367
  width: number,
@@ -384,7 +384,7 @@ export function buildArtifactHeaderLines(
384
384
  ];
385
385
  }
386
386
 
387
- export function viewFooterHint(focus: ViewPaneFocus, canVerify: boolean, innerWidth?: number): string {
387
+ function viewFooterHint(focus: ViewPaneFocus, canVerify: boolean, innerWidth?: number): string {
388
388
  // One pane at a time means Tab is how the other one is reached, so the
389
389
  // narrow footer states it. The generic elider drops middle entries, and Tab
390
390
  // sits in the middle.
@@ -527,6 +527,7 @@ export class ViewOverlayView implements Component {
527
527
  private renderedContentLines(width: number): string[] {
528
528
  const content = this.content;
529
529
  if (!content) return [];
530
+ if (content.status === "error") return content.lines.flatMap((line) => wrapTextWithAnsi(line, Math.max(1, width)));
530
531
  if (content.format !== "markdown") return content.lines;
531
532
  if (content.renderedLines && content.renderWidth === width) return content.renderedLines;
532
533
  const md = new Markdown(content.lines.join("\n"), 0, 0, markdownTheme(clioTheme()));
@@ -548,7 +549,9 @@ export class ViewOverlayView implements Component {
548
549
  return this.fixedLines(lines, width, height);
549
550
  }
550
551
  if (this.artifactError) {
551
- lines.push(padAnsi(theme.fg("error", this.artifactError), width, ELLIPSIS));
552
+ lines.push(
553
+ ...wrapTextWithAnsi(theme.fg("error", this.artifactError), Math.max(1, width)).map((line) => padAnsi(line, width)),
554
+ );
552
555
  return this.fixedLines(lines, width, height);
553
556
  }
554
557
 
@@ -21,7 +21,7 @@
21
21
  import { mkdirSync, renameSync, writeFileSync } from "node:fs";
22
22
  import { dirname, join } from "node:path";
23
23
  import { type ClioDirs, clioCacheDir, clioConfigDir, clioDataDir, clioStateDir } from "../core/xdg.js";
24
- import type { MuxContract } from "../domains/mux/index.js";
24
+ import type { MuxContract, MuxPaneRef } from "../domains/mux/index.js";
25
25
  import type { PanesWatchController, PanesWatchResult } from "../domains/mux/operations.js";
26
26
  import { watchViewerCommand } from "../domains/mux/viewer-command.js";
27
27
 
@@ -38,6 +38,12 @@ function watchSelectionPath(stateDir: string = clioStateDir()): string {
38
38
  export interface WatchPaneDeps {
39
39
  mux: MuxContract;
40
40
  getCwd: () => string;
41
+ /**
42
+ * Live workers-dock share, read at each open so a `/settings` edit applies
43
+ * to the next pane. Absent (tests, minimal wiring) the dock spec's default
44
+ * governs.
45
+ */
46
+ getWorkersRatio?: () => number;
41
47
  /** Selection-file override for tests. */
42
48
  selectionPath?: string;
43
49
  /** Resolved-layout override for tests. Production pins this process's four cached roots. */
@@ -78,7 +84,7 @@ export function createWatchPaneController(deps: WatchPaneDeps): PanesWatchContro
78
84
  if (disposed || paneId !== null) return Promise.resolve(true);
79
85
  if (adoptionInFlight !== null) return adoptionInFlight;
80
86
  const attempt = Promise.resolve()
81
- .then(() => deps.mux.adoptPane({ purpose: "watch", label: "watch" }))
87
+ .then(() => deps.mux.adoptPane({ purpose: "watch", label: "watch", dock: "workers" }))
82
88
  .then((adopted) => {
83
89
  if (!disposed && paneId === null && adopted !== null) paneId = adopted.paneId;
84
90
  return true;
@@ -104,11 +110,40 @@ export function createWatchPaneController(deps: WatchPaneDeps): PanesWatchContro
104
110
  }
105
111
  };
106
112
 
113
+ /**
114
+ * The one place a watch pane is created: the workers dock slot, split right
115
+ * of Clio's pane at the configured share. On a host without the layout tier
116
+ * the dock request degrades inside the contract to a plain right split.
117
+ */
118
+ const openPane = (): Promise<MuxPaneRef | null> =>
119
+ deps.mux.openUtilityPane({
120
+ argv: command(selectionPath, dirs),
121
+ cwd: deps.getCwd(),
122
+ label: "watch",
123
+ title: "clio-coder watch",
124
+ purpose: "watch",
125
+ dock: { slot: "workers", ...(deps.getWorkersRatio ? { share: deps.getWorkersRatio() } : {}) },
126
+ });
127
+
107
128
  // Reclaim durable ownership for inventory and navigation immediately. The
108
129
  // scan remains best effort and never opens a replacement pane on its own.
109
130
  void adoptExistingPane();
110
131
 
111
132
  return {
133
+ async ensureOpen(): Promise<boolean> {
134
+ // Boot composition: the pane exists and parks on the last selection
135
+ // (the viewer renders "no selection" until one is written). Adoption
136
+ // first, so a surviving dock is reused rather than doubled.
137
+ if (disposed) return false;
138
+ if (paneId !== null) return true;
139
+ await adoptExistingPane();
140
+ if (paneId !== null) return true;
141
+ const opened = await openPane();
142
+ if (opened === null) return false;
143
+ paneId = opened.paneId;
144
+ return true;
145
+ },
146
+
112
147
  async watch(runId: string): Promise<PanesWatchResult> {
113
148
  if (!writeSelection(runId)) {
114
149
  return { status: "unavailable", reason: `cannot write the watch selection at ${selectionPath}` };
@@ -117,14 +152,7 @@ export function createWatchPaneController(deps: WatchPaneDeps): PanesWatchContro
117
152
  const scanned = await adoptExistingPane();
118
153
  if (!scanned) await adoptExistingPane();
119
154
  if (paneId !== null) return { status: "watching", runId, paneId, opened: false };
120
- const opened = await deps.mux.openUtilityPane({
121
- argv: command(selectionPath, dirs),
122
- cwd: deps.getCwd(),
123
- label: "watch",
124
- title: "clio watch",
125
- purpose: "watch",
126
- direction: "right",
127
- });
155
+ const opened = await openPane();
128
156
  if (opened === null) {
129
157
  return { status: "unavailable", reason: "the pane host refused to open the watch pane" };
130
158
  }
@@ -103,7 +103,7 @@ function findCurrentStatus(
103
103
  statuses: ReadonlyArray<TargetStatus>,
104
104
  settings: Readonly<ClioSettings> | undefined,
105
105
  ): TargetStatus | null {
106
- const targetId = settings?.orchestrator?.target ?? null;
106
+ const targetId = settings?.chat?.target ?? null;
107
107
  if (!targetId) return null;
108
108
  return statuses.find((status) => status.target.id === targetId) ?? null;
109
109
  }
@@ -127,7 +127,7 @@ function selectedModelCapabilities(
127
127
  providers: ProvidersContract,
128
128
  ): CapabilityFlags | null {
129
129
  if (!status) return null;
130
- const wireModelId = settings?.orchestrator?.model ?? status.target.defaultModel ?? null;
130
+ const wireModelId = settings?.chat?.model ?? status.target.defaultModel ?? null;
131
131
  const detectedReasoning =
132
132
  wireModelId && typeof providers.getDetectedReasoning === "function"
133
133
  ? providers.getDetectedReasoning(status.target.id, wireModelId)
@@ -216,7 +216,7 @@ function handoffFacts(cwd: string): { handoffCount: number; handoffFreshness: st
216
216
  }
217
217
  }
218
218
 
219
- export function readWelcomeRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
219
+ function readWelcomeRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
220
220
  const codewiki = readCodewiki(cwd);
221
221
  const wiki = codewiki ? wikiFactsFrom(cwd, wikiStaleness(cwd)) : { wikiPageCount: 0, wikiStatus: NO_WIKI_STATUS };
222
222
  return {
@@ -255,7 +255,7 @@ async function readWelcomeRepositoryFactsAsync(cwd: string): Promise<WelcomeRepo
255
255
  * guessed, because it decides whether the Wiki row exists at all and the whole
256
256
  * point of a placeholder is that the banner never changes height.
257
257
  */
258
- export function placeholderRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
258
+ function placeholderRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
259
259
  return {
260
260
  clioMdStatus: clioMdStatusFor(cwd),
261
261
  hasCodewiki: existsSync(join(cwd, ".clio-coder", "codewiki.json")),
@@ -269,13 +269,13 @@ export function placeholderRepositoryFacts(cwd: string): WelcomeRepositoryFacts
269
269
  };
270
270
  }
271
271
 
272
- export function deriveWelcomeDashboardStats(deps: WelcomeDashboardDeps): WelcomeDashboardStats {
272
+ function deriveWelcomeDashboardStats(deps: WelcomeDashboardDeps): WelcomeDashboardStats {
273
273
  const settings = deps.getSettings?.();
274
274
  const statuses = deps.providers.list();
275
275
  const current = findCurrentStatus(statuses, settings);
276
276
  // Left null when unset; formatTargetLabel owns the one spelling for that.
277
- const targetLabel = current?.target.id ?? settings?.orchestrator?.target ?? null;
278
- const modelLabel = settings?.orchestrator?.model ?? current?.target.defaultModel ?? null;
277
+ const targetLabel = current?.target.id ?? settings?.chat?.target ?? null;
278
+ const modelLabel = settings?.chat?.model ?? current?.target.defaultModel ?? null;
279
279
  const workspace = deps.getWorkspaceSnapshot?.() ?? null;
280
280
  const cwd = workspace?.cwd ?? process.cwd();
281
281
  const currentAvailable = current ? activeStatus(current) : false;
@@ -283,16 +283,16 @@ export function deriveWelcomeDashboardStats(deps: WelcomeDashboardDeps): Welcome
283
283
  const thinkingLevel =
284
284
  resolveModelRuntimeCapabilitiesForProviders(
285
285
  deps.providers,
286
- settings?.orchestrator?.target,
287
- settings?.orchestrator?.model,
288
- settings?.orchestrator?.thinkingLevel ?? "off",
286
+ settings?.chat?.target,
287
+ settings?.chat?.model,
288
+ settings?.chat?.thinkingLevel ?? "off",
289
289
  )?.thinking.display ??
290
- settings?.orchestrator?.thinkingLevel ??
290
+ settings?.chat?.thinkingLevel ??
291
291
  "off";
292
292
 
293
- const autonomy = settings?.autonomy ?? "auto-edit";
294
- const toolProfile = settings?.delegation?.defaults?.toolGovernance ?? "clio-policy";
295
- const threshold = settings?.compaction?.threshold;
293
+ const autonomy = settings?.safety.autonomy ?? "auto-edit";
294
+ const toolProfile = settings?.integrations.externalAgents?.defaults?.toolGovernance ?? "clio-coder-policy";
295
+ const threshold = settings?.context.compaction?.threshold;
296
296
  const compactionThreshold =
297
297
  typeof threshold === "number" && Number.isFinite(threshold) ? `${Math.round(threshold * 100)}%` : "80%";
298
298
 
@@ -376,7 +376,7 @@ function nextValue(stats: WelcomeDashboardStats): string {
376
376
  * route answers, and what the context is ready for. Maturity caveats belong
377
377
  * in the README, not in a line the operator reads on every turn.
378
378
  */
379
- export function buildWelcomeDashboardLines(
379
+ function buildWelcomeDashboardLines(
380
380
  stats: WelcomeDashboardStats,
381
381
  width: number,
382
382
  mode: WelcomeDashboardMode = "launchpad",
@@ -164,9 +164,9 @@ function isThinkingEvent(event: Record<string, unknown>): boolean {
164
164
  return assistantEvent?.type === "thinking_delta";
165
165
  }
166
166
 
167
- /** The action a `clio_tool_start`/`clio_tool_finish` event names, or null when it is neither. */
167
+ /** The action a `clio_coder_tool_start`/`clio_coder_tool_finish` event names, or null when it is neither. */
168
168
  function toolEventAction(event: Record<string, unknown>): WorkerAction | null {
169
- if (event.type !== "clio_tool_start" && event.type !== "clio_tool_finish") return null;
169
+ if (event.type !== "clio_coder_tool_start" && event.type !== "clio_coder_tool_finish") return null;
170
170
  const payload = isRecord(event.payload) ? event.payload : null;
171
171
  const tool = nonEmptyString(payload?.tool);
172
172
  if (tool === undefined) return null;
@@ -363,7 +363,7 @@ export function createWorkerProgressFold(): WorkerProgressFold {
363
363
  }
364
364
 
365
365
  const action = toolEventAction(event);
366
- if (action !== null && event.type === "clio_tool_start") {
366
+ if (action !== null && event.type === "clio_coder_tool_start") {
367
367
  if (action.toolCallId !== undefined) {
368
368
  const duplicate = pendingActionsById.get(action.toolCallId);
369
369
  if (duplicate !== undefined) removePendingAction(duplicate);
@@ -375,7 +375,7 @@ export function createWorkerProgressFold(): WorkerProgressFold {
375
375
  touch();
376
376
  setPhase("tool");
377
377
  changed = true;
378
- } else if (action !== null && event.type === "clio_tool_finish") {
378
+ } else if (action !== null && event.type === "clio_coder_tool_finish") {
379
379
  // An id is authoritative when both sides carry it. If either side came
380
380
  // from an older or incomplete producer, retain the historical name match.
381
381
  const finished =
@@ -77,7 +77,7 @@ function contractKindFrom(receipt: Record<string, unknown>): WorkerPresentedResu
77
77
  * by older versions of Clio are still valid history, so every field is read
78
78
  * structurally and a missing one degrades the footer rather than the render.
79
79
  */
80
- export function workerReceiptFacts(receipt: Record<string, unknown>): WorkerReceiptFacts | null {
80
+ function workerReceiptFacts(receipt: Record<string, unknown>): WorkerReceiptFacts | null {
81
81
  const outcome = optionalString(receipt.outcome);
82
82
  if (outcome === undefined) return null;
83
83
  const output = isRecord(receipt.output) ? receipt.output : null;
@@ -185,10 +185,7 @@ function finiteNumber(value: unknown): number | undefined {
185
185
  return typeof value === "number" && Number.isFinite(value) ? value : undefined;
186
186
  }
187
187
 
188
- export function workerRuntimeKind(
189
- runtimeKind: RunKind | undefined,
190
- runtimeId: string | undefined,
191
- ): WorkerRunRuntimeKind {
188
+ function workerRuntimeKind(runtimeKind: RunKind | undefined, runtimeId: string | undefined): WorkerRunRuntimeKind {
192
189
  if (runtimeKind === "acp-delegation") return "acp";
193
190
  if (runtimeId === "claude-code") return "claude-code";
194
191
  if (runtimeId === "claude-sdk") return "claude-sdk";
@@ -25,6 +25,8 @@ export interface YaziBridgeSettings {
25
25
  mode: YaziSessionMode;
26
26
  profile: YaziProfileMode;
27
27
  followCwd: boolean;
28
+ /** Files-dock share of the height; absent leaves the dock spec's default. */
29
+ ratio?: number;
28
30
  }
29
31
 
30
32
  export interface YaziMentionBatch {
@@ -50,6 +52,10 @@ export type YaziBridgeOpenResult =
50
52
 
51
53
  export interface YaziBridge {
52
54
  open(options?: { once?: boolean }): Promise<YaziBridgeOpenResult>;
55
+ /** Close the files pane and hand focus back to the composer; false when nothing was open. */
56
+ close(): Promise<boolean>;
57
+ /** True while the pane host still reports the files pane. */
58
+ isOpen(): boolean;
53
59
  status(): Readonly<YaziBridgeStatus>;
54
60
  dispose(): void;
55
61
  }
@@ -111,7 +117,7 @@ function readOptional(path: string): string {
111
117
  * before the TUI lease is released. A missing or below-floor binary therefore
112
118
  * leaves the screen intact and returns the shared doctor sentence verbatim.
113
119
  */
114
- export async function runYaziTerminalChooser(options: YaziTerminalChooserOptions): Promise<YaziTerminalChooserResult> {
120
+ async function runYaziTerminalChooser(options: YaziTerminalChooserOptions): Promise<YaziTerminalChooserResult> {
115
121
  const binaries = (options.resolveBinaries ?? resolveYaziBinaries)();
116
122
  if (!binaries.yaziPath) {
117
123
  return { status: "missing-binary", binary: "yazi", detail: binaries.missingYaziDetail };
@@ -217,7 +223,7 @@ function pathKind(path: string): "file" | "directory" | "other" {
217
223
  }
218
224
 
219
225
  /** Format one DDS or chooser batch for the composer without ever submitting it. */
220
- export function formatYaziMentions(
226
+ function formatYaziMentions(
221
227
  paths: ReadonlyArray<string>,
222
228
  options: {
223
229
  cwd: string;
@@ -310,9 +316,12 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
310
316
  }
311
317
  deps.setDraft(appendDraft(draft, batch.text));
312
318
  deps.requestRender();
319
+ // The pick is the end of the operator's trip into the files pane, so the
320
+ // keyboard comes back to the composer without a click.
321
+ void deps.mux?.focusSelf();
313
322
  deps.notice(
314
323
  "info",
315
- `${batch.inserted} ${batch.inserted === 1 ? "path" : "paths"} from the file pane added to the draft`,
324
+ `${batch.inserted} ${batch.inserted === 1 ? "path" : "paths"} from the files pane added to the draft`,
316
325
  );
317
326
  if (batch.plainPaths > 0) {
318
327
  deps.notice(
@@ -328,7 +337,11 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
328
337
  }
329
338
  };
330
339
 
331
- const start = async (mode: YaziSessionMode, profileMode: YaziProfileMode): Promise<YaziBridgeOpenResult> => {
340
+ const start = async (
341
+ mode: YaziSessionMode,
342
+ profileMode: YaziProfileMode,
343
+ dockShare?: number,
344
+ ): Promise<YaziBridgeOpenResult> => {
332
345
  const mux = deps.mux;
333
346
  if (!mux?.available()) return { status: "unavailable", reason: "the pane layer is not available" };
334
347
  generation += 1;
@@ -341,6 +354,7 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
341
354
  mode,
342
355
  profileMode,
343
356
  cwd: deps.getCwd(),
357
+ ...(dockShare === undefined ? {} : { dockShare }),
344
358
  pickToken: token,
345
359
  onEvent: (event: YaziEvent) => {
346
360
  if (disposed || ownGeneration !== generation) return;
@@ -359,6 +373,8 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
359
373
  if (disposed || ownGeneration !== generation) return;
360
374
  paneCwd = choice.cwd;
361
375
  if (choice.paths.length > 0) insert(choice.paths, choice.cwd);
376
+ // A cancelled pick still ends the trip; the composer gets the keyboard back.
377
+ else void deps.mux?.focusSelf();
362
378
  },
363
379
  onStopped: () => {
364
380
  if (ownGeneration !== generation) return;
@@ -372,14 +388,18 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
372
388
  return { status: "unavailable", reason: "the file pane was closed while it was opening" };
373
389
  }
374
390
  active = result.session;
391
+ // An explicit open is a request to go and pick something, so the keyboard
392
+ // follows the pane. The dock tier itself never steals focus; this is the
393
+ // one caller entitled to ask.
394
+ await mux.focusPane(result.session.pane.paneId);
375
395
  if (mode === "companion") {
376
396
  livenessTimer = setTimeout(() => {
377
397
  if (disposed || ownGeneration !== generation || sawLine || active === null) return;
378
398
  const stale = active;
379
399
  active = null;
380
- deps.notice("warning", "the file-pane event stream did not start; reopening yazi in chooser mode");
400
+ deps.notice("warning", "the files pane did not report back in time; reopening it in pick mode");
381
401
  void stale.close().finally(() => {
382
- if (!disposed && ownGeneration === generation) void start("chooser", profileMode);
402
+ if (!disposed && ownGeneration === generation) void start("chooser", profileMode, dockShare);
383
403
  });
384
404
  }, deps.livenessMs ?? YAZI_LIVENESS_MS);
385
405
  livenessTimer.unref();
@@ -387,16 +407,49 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
387
407
  return { status: "opened", mode, paneId: result.session.pane.paneId, existing: false };
388
408
  };
389
409
 
410
+ /**
411
+ * The pane host is the authority on whether the pane exists. `active` lags
412
+ * it by one event at most, but a caller deciding between open and close
413
+ * must not be told a pane is open when herdr already reported it gone.
414
+ */
415
+ const liveSession = (): YaziSession | null => {
416
+ if (active === null) return null;
417
+ const mux = deps.mux;
418
+ if (mux?.available() && !mux.list().some((record) => record.ref.paneId === active?.pane.paneId)) {
419
+ active = null;
420
+ return null;
421
+ }
422
+ return active;
423
+ };
424
+
425
+ const closeActive = async (): Promise<boolean> => {
426
+ const session = liveSession();
427
+ if (session === null) return false;
428
+ generation += 1;
429
+ clearLiveness();
430
+ active = null;
431
+ await session.close();
432
+ // Closing the dock the operator was looking at would otherwise leave
433
+ // focus wherever herdr puts it after a close, which is not the composer.
434
+ await deps.mux?.focusSelf();
435
+ return true;
436
+ };
437
+
390
438
  return {
391
439
  async open(options = {}): Promise<YaziBridgeOpenResult> {
392
- if (disposed) return { status: "unavailable", reason: "the file-pane bridge is closed" };
440
+ if (disposed) return { status: "unavailable", reason: "the files pane bridge is closed" };
393
441
  const settings = deps.getSettings?.() ?? { mode: "companion", profile: "managed", followCwd: true };
394
- if (active) {
442
+ const existing = liveSession();
443
+ if (existing) {
395
444
  if (settings.followCwd) {
396
445
  const cwd = deps.getCwd();
397
- if (await active.pushCwd(cwd)) paneCwd = cwd;
446
+ if (await existing.pushCwd(cwd)) paneCwd = cwd;
398
447
  }
399
- return { status: "opened", mode: active.mode, paneId: active.pane.paneId, existing: true };
448
+ // Re-opening an open pane means "take me there": leave any zoom that
449
+ // hides it and put the keyboard in it.
450
+ await deps.mux?.unzoomSelf();
451
+ await deps.mux?.focusPane(existing.pane.paneId);
452
+ return { status: "opened", mode: existing.mode, paneId: existing.pane.paneId, existing: true };
400
453
  }
401
454
  const mode = options.once || settings.profile === "user" ? "chooser" : settings.mode;
402
455
  if (!deps.mux?.available()) {
@@ -419,7 +472,15 @@ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
419
472
  }
420
473
  return result;
421
474
  }
422
- return await start(mode, settings.profile);
475
+ await deps.mux.unzoomSelf();
476
+ return await start(mode, settings.profile, settings.ratio);
477
+ },
478
+ close(): Promise<boolean> {
479
+ if (disposed) return Promise.resolve(false);
480
+ return closeActive();
481
+ },
482
+ isOpen(): boolean {
483
+ return liveSession() !== null;
423
484
  },
424
485
  status(): Readonly<YaziBridgeStatus> {
425
486
  const snapshot = active?.snapshot();