@iowarp/clio-coder 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +116 -16
  3. package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
  4. package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
  7. package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
  8. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  9. package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
  10. package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
  11. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  12. package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
  13. package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
  14. package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
  15. package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
  16. package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
  17. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  18. package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
  19. package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
  20. package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
  21. package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
  22. package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
  23. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  24. package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
  25. package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
  26. package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
  27. package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
  28. package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
  29. package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
  30. package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
  33. package/dist/chunk-AP73CFDC.js +308 -0
  34. package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
  35. package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
  36. package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
  37. package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
  38. package/dist/chunk-BTK3SSSK.js +67 -0
  39. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  40. package/dist/chunk-BWW4HLO4.js +301 -0
  41. package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
  42. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  43. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  44. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  45. package/dist/chunk-D7E7WCDF.js +27 -0
  46. package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
  47. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  48. package/dist/chunk-EIMVLWB3.js +1842 -0
  49. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  50. package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
  51. package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
  52. package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
  53. package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
  54. package/dist/chunk-HJWWJ6IL.js +184 -0
  55. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  56. package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
  57. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  58. package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
  59. package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
  60. package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
  61. package/dist/chunk-J5LZHVIT.js +284 -0
  62. package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
  63. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  64. package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
  65. package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
  66. package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
  67. package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
  68. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  69. package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
  70. package/dist/chunk-NDDGJUXD.js +81 -0
  71. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  72. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  73. package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
  74. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  75. package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
  76. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  77. package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
  78. package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
  79. package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
  80. package/dist/chunk-QTFGO774.js +644 -0
  81. package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
  82. package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
  83. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  84. package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
  85. package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
  86. package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
  87. package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
  88. package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
  89. package/dist/chunk-U2WB7TZS.js +271 -0
  90. package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
  91. package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
  92. package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
  93. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  94. package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
  95. package/dist/chunk-VKFQTNDV.js +66 -0
  96. package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
  97. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  98. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  99. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  100. package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
  101. package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
  102. package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
  103. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  104. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  105. package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
  106. package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
  107. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  108. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  109. package/dist/cli/index.js +36 -36
  110. package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
  111. package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
  112. package/dist/codewiki/build-worker.js +1 -1
  113. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  114. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  115. package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
  116. package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
  117. package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
  118. package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
  119. package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
  120. package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
  121. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
  122. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
  123. package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
  124. package/dist/doctor-ZGPEGHIP.js +772 -0
  125. package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
  126. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
  127. package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
  128. package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
  129. package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
  130. package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
  131. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
  132. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
  133. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
  134. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
  135. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
  136. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
  137. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
  138. package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
  139. package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
  140. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  141. package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
  142. package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
  143. package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
  144. package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
  145. package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
  146. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
  147. package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
  148. package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
  149. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  150. package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
  151. package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
  152. package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
  153. package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
  154. package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
  155. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
  156. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
  157. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
  158. package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
  159. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  160. package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
  161. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
  162. package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
  163. package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
  164. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  165. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  166. package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
  167. package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
  168. package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
  169. package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
  170. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
  171. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
  172. package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
  173. package/dist/worker/entry.js +57 -52
  174. package/docs/acp.md +1 -1
  175. package/docs/built-in-agents.md +40 -32
  176. package/docs/commands-and-modes.md +9 -3
  177. package/docs/config-knobs-audit.md +3 -0
  178. package/docs/configuration-and-targets.md +105 -164
  179. package/docs/environment-variables.md +2 -1
  180. package/docs/exit-codes-and-output.md +2 -0
  181. package/docs/fleet-demo-runbook.md +6 -3
  182. package/docs/fleet-dispatch.md +8 -6
  183. package/docs/installation-and-lifecycle.md +1 -1
  184. package/docs/release-cut-checklist.md +164 -177
  185. package/docs/trace-store.md +15 -10
  186. package/docs/troubleshooting.md +1 -1
  187. package/evals/README.md +5 -0
  188. package/evals/behavioral-corpus-grader.mjs +103 -0
  189. package/evals/behavioral-machinery-baseline.json +2276 -0
  190. package/evals/behavioral-machinery-driver.ts +250 -0
  191. package/evals/behavioral-machinery-support.ts +253 -0
  192. package/evals/behavioral-machinery.yaml +614 -0
  193. package/evals/behavioral-model-negative-control.yaml +68 -0
  194. package/evals/behavioral-model.yaml +216 -0
  195. package/evals/fixtures/behavioral-facts.txt +3 -0
  196. package/evals/fixtures/behavioral-main.ts +7 -0
  197. package/evals/fixtures/decoy/note.txt +2 -0
  198. package/evals/fixtures/private/credentials.txt +1 -0
  199. package/evals/tracked-metrics-baseline.yaml +229 -0
  200. package/evals/tracked-metrics-grader.mjs +129 -0
  201. package/package.json +5 -15
  202. package/skills/README.md +6 -6
  203. package/skills/coding/ast-grep/SKILL.md +8 -2
  204. package/skills/coding/coding-standards/SKILL.md +8 -2
  205. package/skills/coding/prototype/SKILL.md +8 -2
  206. package/skills/coding/tdd/SKILL.md +8 -2
  207. package/skills/context/context-handoff/SKILL.md +12 -3
  208. package/skills/context/context-handoff/evals.md +3 -3
  209. package/skills/context/context-prime/SKILL.md +8 -2
  210. package/skills/context/context-prime/evals.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +9 -4
  212. package/skills/git/file-ticket/evals.md +2 -2
  213. package/skills/git/fix-issue/SKILL.md +12 -5
  214. package/skills/git/fix-issue/evals.md +4 -4
  215. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  216. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  217. package/skills/git/ship/SKILL.md +9 -3
  218. package/skills/git/ship/evals.md +4 -4
  219. package/skills/git/worktree-create/SKILL.md +7 -2
  220. package/skills/git/worktree-create/evals.md +6 -6
  221. package/skills/git/worktree-merge/SKILL.md +7 -2
  222. package/skills/git/worktree-merge/evals.md +6 -6
  223. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  224. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  225. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  226. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  227. package/skills/meta/credentials/SKILL.md +9 -2
  228. package/skills/meta/find-skills/SKILL.md +8 -2
  229. package/skills/meta/herdr/SKILL.md +8 -2
  230. package/skills/meta/skill-craft/SKILL.md +21 -4
  231. package/skills/planning/architecture/SKILL.md +9 -3
  232. package/skills/planning/backlog/SKILL.md +8 -2
  233. package/skills/planning/prd/SKILL.md +8 -2
  234. package/skills/planning/product-intent/SKILL.md +8 -2
  235. package/skills/planning/tech-spec/SKILL.md +9 -3
  236. package/skills/registry.yaml +66 -66
  237. package/skills/research/arxiv-literature/SKILL.md +8 -2
  238. package/skills/research/experiment-protocol/SKILL.md +9 -2
  239. package/skills/research/scientific-debugging/SKILL.md +9 -2
  240. package/skills/research/scientific-debugging/evals.md +2 -2
  241. package/skills/research/scientific-modernization/SKILL.md +9 -2
  242. package/skills/skill-marketplace.json +257 -38
  243. package/skills/workflow/cut-it/SKILL.md +10 -2
  244. package/skills/workflow/design-council/SKILL.md +11 -2
  245. package/skills/workflow/grill-me/SKILL.md +8 -2
  246. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  247. package/src/cli/acp.ts +2 -2
  248. package/src/cli/auth.ts +2 -2
  249. package/src/cli/bootstrap-generate.ts +5 -5
  250. package/src/cli/clio.ts +6 -1
  251. package/src/cli/config-inspect.ts +3 -3
  252. package/src/cli/configure-interop.ts +1 -1
  253. package/src/cli/configure.ts +27 -27
  254. package/src/cli/default-target.ts +1 -1
  255. package/src/cli/docs.ts +6 -6
  256. package/src/cli/doctor-naming.ts +323 -0
  257. package/src/cli/doctor-panes.ts +46 -14
  258. package/src/cli/doctor-toolchain.ts +29 -8
  259. package/src/cli/doctor.ts +15 -1
  260. package/src/cli/eval-inventory.ts +8 -8
  261. package/src/cli/evidence-detail.ts +1 -1
  262. package/src/cli/evidence-inventory.ts +1 -1
  263. package/src/cli/fleet-decisions.ts +1 -1
  264. package/src/cli/fleet-inspect.ts +1 -1
  265. package/src/cli/fleet-preflight.ts +1 -1
  266. package/src/cli/fleet-verify.ts +1 -1
  267. package/src/cli/fleet-view.ts +40 -23
  268. package/src/cli/fleet.ts +8 -5
  269. package/src/cli/interop-inspect.ts +2 -2
  270. package/src/cli/models.ts +3 -3
  271. package/src/cli/modes/print.ts +1 -1
  272. package/src/cli/reset.ts +1 -1
  273. package/src/cli/run.ts +11 -15
  274. package/src/cli/share.ts +1 -1
  275. package/src/cli/skills-eval.ts +11 -11
  276. package/src/cli/targets.ts +23 -24
  277. package/src/cli/trace-inspect.ts +1 -1
  278. package/src/cli/trace.ts +41 -0
  279. package/src/cli/uninstall.ts +2 -2
  280. package/src/cli/upgrade.ts +29 -34
  281. package/src/cli/usage.ts +2 -2
  282. package/src/cli/validate-model.ts +1 -1
  283. package/src/cli/verifiers-inspect.ts +1 -1
  284. package/src/cli/wiki-generate.ts +5 -5
  285. package/src/core/bash-exec.ts +1 -1
  286. package/src/core/boot-trace.ts +3 -3
  287. package/src/core/bus-trace.ts +2 -2
  288. package/src/core/compile-cache.ts +1 -1
  289. package/src/core/config.ts +1062 -886
  290. package/src/core/defaults.ts +321 -528
  291. package/src/core/domain-loader.ts +6 -4
  292. package/src/core/event-bus.ts +1 -1
  293. package/src/core/file-references.ts +78 -88
  294. package/src/core/git-commit-attribution.ts +3 -9
  295. package/src/core/guardrails.ts +24 -4
  296. package/src/core/naming-compat.ts +45 -0
  297. package/src/core/naming-events.ts +62 -0
  298. package/src/core/recent-models.ts +1 -7
  299. package/src/core/residency-protection.ts +4 -8
  300. package/src/core/resolve-config-value.ts +1 -1
  301. package/src/core/response-model-id.ts +0 -14
  302. package/src/core/session-routing.ts +84 -74
  303. package/src/core/skill-activation.ts +18 -0
  304. package/src/core/termination.ts +4 -4
  305. package/src/core/timers.ts +2 -12
  306. package/src/domains/agents/catalog.ts +2 -12
  307. package/src/domains/agents/extension.ts +3 -3
  308. package/src/domains/agents/registry.ts +7 -7
  309. package/src/domains/agents/result-contract.ts +1 -1
  310. package/src/domains/agents/spec.ts +0 -11
  311. package/src/domains/config/classify.ts +35 -47
  312. package/src/domains/config/extension.ts +5 -5
  313. package/src/domains/config/keybindings.ts +48 -47
  314. package/src/domains/config/watcher.ts +1 -1
  315. package/src/domains/context/codewiki/indexer.ts +1 -1
  316. package/src/domains/context/extension.ts +3 -3
  317. package/src/domains/context/prompt-context.ts +1 -1
  318. package/src/domains/context/wiki/assemble.ts +2 -2
  319. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  320. package/src/domains/context/working-set/replay/report.ts +1 -1
  321. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  322. package/src/domains/dispatch/active-route-planner.ts +2 -2
  323. package/src/domains/dispatch/agent-candidates.ts +1 -1
  324. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  325. package/src/domains/dispatch/agent-ledger.ts +1 -1
  326. package/src/domains/dispatch/assignment.ts +5 -5
  327. package/src/domains/dispatch/capacity-lease.ts +2 -5
  328. package/src/domains/dispatch/code-step.ts +1 -1
  329. package/src/domains/dispatch/contract.ts +2 -2
  330. package/src/domains/dispatch/extension.ts +65 -61
  331. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  332. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  333. package/src/domains/dispatch/fleet-run.ts +0 -7
  334. package/src/domains/dispatch/gate-decisions.ts +25 -14
  335. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  336. package/src/domains/dispatch/path-scope.ts +0 -61
  337. package/src/domains/dispatch/placement.ts +2 -2
  338. package/src/domains/dispatch/receipt-findings.ts +1 -1
  339. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  340. package/src/domains/dispatch/reservation-store.ts +0 -23
  341. package/src/domains/dispatch/route-decision.ts +1 -1
  342. package/src/domains/dispatch/route-history.ts +1 -1
  343. package/src/domains/dispatch/route-policy.ts +1 -1
  344. package/src/domains/dispatch/route-readiness.ts +0 -28
  345. package/src/domains/dispatch/run-event-journal.ts +6 -5
  346. package/src/domains/dispatch/tool-stats.ts +1 -1
  347. package/src/domains/dispatch/transport.ts +2 -19
  348. package/src/domains/dispatch/types.ts +3 -3
  349. package/src/domains/dispatch/worker-protocol.ts +2 -2
  350. package/src/domains/eval/artifacts/store.ts +5 -4
  351. package/src/domains/eval/compare/thresholds.ts +0 -8
  352. package/src/domains/eval/execution-provenance.ts +1 -1
  353. package/src/domains/eval/metrics/token-stream.ts +0 -7
  354. package/src/domains/eval/report.ts +1 -1
  355. package/src/domains/eval/runner.ts +1 -1
  356. package/src/domains/eval/runners/clio-run.ts +7 -6
  357. package/src/domains/eval/runners/external-command.ts +4 -3
  358. package/src/domains/eval/schema/artifact.ts +1 -1
  359. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  360. package/src/domains/eval/schema/behavioral.ts +7 -6
  361. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  362. package/src/domains/eval/schema/naming.ts +10 -0
  363. package/src/domains/eval/schema/suite.ts +2 -2
  364. package/src/domains/eval/schema/validate.ts +9 -5
  365. package/src/domains/eval/schema/verdict.ts +4 -2
  366. package/src/domains/eval/store.ts +12 -2
  367. package/src/domains/eval/suites/run.ts +12 -6
  368. package/src/domains/eval/types.ts +1 -1
  369. package/src/domains/eval/workspaces/git.ts +1 -1
  370. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  371. package/src/domains/evidence/build.ts +13 -5
  372. package/src/domains/interop/consent.ts +7 -7
  373. package/src/domains/interop/extension.ts +1 -1
  374. package/src/domains/lifecycle/doctor.ts +27 -21
  375. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  376. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  377. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  378. package/src/domains/lifecycle/migrations/index.ts +20 -1
  379. package/src/domains/lifecycle/naming-history.ts +153 -0
  380. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  381. package/src/domains/lifecycle/naming-resources.ts +261 -0
  382. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  383. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  384. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  385. package/src/domains/memory/task-memory-handoff.ts +6 -3
  386. package/src/domains/middleware/index.ts +7 -0
  387. package/src/domains/middleware/marketplace-offer.ts +339 -0
  388. package/src/domains/middleware/runtime.ts +2 -2
  389. package/src/domains/mux/contract.ts +157 -25
  390. package/src/domains/mux/detect.ts +29 -5
  391. package/src/domains/mux/dock-controller.ts +365 -0
  392. package/src/domains/mux/extension.ts +7 -1
  393. package/src/domains/mux/index.ts +20 -0
  394. package/src/domains/mux/operations.ts +28 -0
  395. package/src/domains/mux/protocol.ts +19 -6
  396. package/src/domains/mux/socket-client.ts +167 -19
  397. package/src/domains/mux/types.ts +49 -6
  398. package/src/domains/mux/yazi/event-stream.ts +6 -4
  399. package/src/domains/mux/yazi/profile.ts +1 -1
  400. package/src/domains/mux/yazi/session.ts +26 -3
  401. package/src/domains/observability/extension.ts +1 -1
  402. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  403. package/src/domains/observability/projection.ts +1 -1
  404. package/src/domains/observability/trace-store.ts +22 -12
  405. package/src/domains/prompts/compiler.ts +2 -2
  406. package/src/domains/prompts/extension.ts +3 -3
  407. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  408. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  409. package/src/domains/providers/extension.ts +5 -5
  410. package/src/domains/providers/knowledge-base-path.ts +1 -1
  411. package/src/domains/providers/model-runtime-capabilities.ts +14 -2
  412. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  413. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  414. package/src/domains/providers/plugins.ts +1 -1
  415. package/src/domains/providers/resolver.ts +1 -1
  416. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  417. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  418. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  419. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  420. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  421. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  422. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  423. package/src/domains/providers/types/knowledge-base.ts +13 -0
  424. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  425. package/src/domains/providers/types/target-descriptor.ts +3 -3
  426. package/src/domains/resources/extension.ts +1 -1
  427. package/src/domains/resources/library.ts +6 -6
  428. package/src/domains/resources/prompts/loader.ts +1 -1
  429. package/src/domains/resources/skills/content-hash.ts +7 -6
  430. package/src/domains/resources/skills/evals.ts +1 -1
  431. package/src/domains/resources/skills/install.ts +36 -12
  432. package/src/domains/resources/skills/loader.ts +39 -13
  433. package/src/domains/resources/skills/marketplace.ts +21 -2
  434. package/src/domains/resources/skills/promotion.ts +214 -0
  435. package/src/domains/safety/audit.ts +2 -2
  436. package/src/domains/safety/finish-contract.ts +2 -1
  437. package/src/domains/safety/run-effects.ts +1 -1
  438. package/src/domains/scheduling/extension.ts +4 -4
  439. package/src/domains/session/archive-readers.ts +9 -1
  440. package/src/domains/session/compaction/branch-summary.ts +4 -0
  441. package/src/domains/session/compaction/compact.ts +1 -1
  442. package/src/domains/session/compaction/tokens.ts +4 -0
  443. package/src/domains/session/context-accounting.ts +1 -1
  444. package/src/domains/session/decision-board.ts +1 -1
  445. package/src/domains/session/extension.ts +1 -1
  446. package/src/domains/session/handoff.ts +2 -2
  447. package/src/domains/session/prompt-manifest.ts +0 -5
  448. package/src/domains/session/protected-artifact-journal.ts +12 -6
  449. package/src/domains/session/retry.ts +1 -1
  450. package/src/domains/share/archive.ts +85 -36
  451. package/src/domains/toolchain/install.ts +1 -1
  452. package/src/engine/acp/adapter.ts +3 -3
  453. package/src/engine/acp/event-mapper.ts +3 -3
  454. package/src/engine/acp/server.ts +27 -26
  455. package/src/engine/acp/tool-mediator.ts +2 -2
  456. package/src/engine/acp/types.ts +1 -1
  457. package/src/engine/alcf-oauth.ts +5 -5
  458. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  459. package/src/engine/api-registry.ts +1 -1
  460. package/src/engine/apis/llamacpp-residency.ts +1 -19
  461. package/src/engine/apis/lmstudio.ts +1 -6
  462. package/src/engine/apis/ollama-native.ts +3 -3
  463. package/src/engine/apis/openai-completions.ts +2 -2
  464. package/src/engine/apis/residency.ts +3 -9
  465. package/src/engine/claude/sdk-module.ts +1 -12
  466. package/src/engine/claude/sdk-runtime.ts +6 -6
  467. package/src/engine/claude/subprocess-runtime.ts +1 -1
  468. package/src/engine/claude/tool-safety.ts +4 -4
  469. package/src/engine/loop-guard.ts +0 -5
  470. package/src/engine/session.ts +14 -7
  471. package/src/engine/tui-primitives.ts +1 -1
  472. package/src/engine/worker-events.ts +6 -6
  473. package/src/engine/worker-runtime.ts +14 -13
  474. package/src/entry/orchestrator.ts +107 -88
  475. package/src/interactive/application-controller.ts +21 -21
  476. package/src/interactive/bus-notices.ts +2 -2
  477. package/src/interactive/chat-loop.ts +8 -8
  478. package/src/interactive/chat-panel.ts +1 -1
  479. package/src/interactive/clio-editor.ts +105 -1
  480. package/src/interactive/context-activity.ts +8 -6
  481. package/src/interactive/context-meter.ts +3 -6
  482. package/src/interactive/context-overlay.ts +1 -1
  483. package/src/interactive/cost-overlay.ts +1 -1
  484. package/src/interactive/council-grid.ts +2 -2
  485. package/src/interactive/dispatch-board.ts +30 -33
  486. package/src/interactive/editor-bash.ts +21 -0
  487. package/src/interactive/editor-steer.ts +9 -4
  488. package/src/interactive/editor-submit.ts +24 -18
  489. package/src/interactive/external-editor.ts +1 -1
  490. package/src/interactive/file-reference-completion.ts +360 -0
  491. package/src/interactive/footer/dashboard.ts +15 -17
  492. package/src/interactive/footer/notifications.ts +14 -8
  493. package/src/interactive/footer/widgets.ts +2 -44
  494. package/src/interactive/interactive-application.ts +79 -59
  495. package/src/interactive/interactive-event-projection.ts +1 -1
  496. package/src/interactive/interactive-input-runtime.ts +2 -2
  497. package/src/interactive/interactive-presentation.ts +21 -16
  498. package/src/interactive/interactive-shell.ts +2 -2
  499. package/src/interactive/interactive-slash-runtime.ts +63 -17
  500. package/src/interactive/interactive-subscriptions.ts +1 -1
  501. package/src/interactive/interactive-tickers.ts +1 -1
  502. package/src/interactive/keybinding-manager.ts +4 -4
  503. package/src/interactive/layout.ts +1 -1
  504. package/src/interactive/memory-overlay.ts +2 -2
  505. package/src/interactive/modal-marker.ts +2 -21
  506. package/src/interactive/mutation-preview.ts +1 -1
  507. package/src/interactive/overlay-frame.ts +4 -12
  508. package/src/interactive/overlay-general-openers.ts +6 -2
  509. package/src/interactive/overlay-key-routing.ts +7 -7
  510. package/src/interactive/overlay-lifecycle.ts +1 -1
  511. package/src/interactive/overlay-model-selectors.ts +3 -3
  512. package/src/interactive/overlays/agents.ts +2 -2
  513. package/src/interactive/overlays/ask-user.ts +25 -11
  514. package/src/interactive/overlays/context-reset.ts +28 -4
  515. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  516. package/src/interactive/overlays/decisions.ts +4 -2
  517. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  518. package/src/interactive/overlays/handoff-review.ts +2 -2
  519. package/src/interactive/overlays/interop.ts +1 -1
  520. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  521. package/src/interactive/overlays/message-picker.ts +1 -1
  522. package/src/interactive/overlays/model-selector.ts +39 -31
  523. package/src/interactive/overlays/prompts.ts +10 -4
  524. package/src/interactive/overlays/session-selector.ts +2 -2
  525. package/src/interactive/overlays/settings.ts +339 -293
  526. package/src/interactive/overlays/side-question.ts +2 -2
  527. package/src/interactive/overlays/skills-hub.ts +8 -8
  528. package/src/interactive/overlays/tree-selector.ts +2 -2
  529. package/src/interactive/panes-runtime.ts +36 -10
  530. package/src/interactive/permission-overlay.ts +2 -2
  531. package/src/interactive/renderers/retry-status.ts +12 -4
  532. package/src/interactive/renderers/tool-execution.ts +4 -4
  533. package/src/interactive/session-transcript.ts +3 -3
  534. package/src/interactive/slash-autocomplete.ts +454 -165
  535. package/src/interactive/slash-commands.ts +279 -183
  536. package/src/interactive/slash-spec.ts +160 -17
  537. package/src/interactive/status/controller.ts +2 -2
  538. package/src/interactive/stream-pacing-policy.ts +1 -1
  539. package/src/interactive/tasks-overlay.ts +20 -13
  540. package/src/interactive/terminal-lease.ts +6 -7
  541. package/src/interactive/turn-context.ts +11 -11
  542. package/src/interactive/turn-persistence.ts +2 -2
  543. package/src/interactive/turn-prewarm.ts +2 -2
  544. package/src/interactive/turn-runtime.ts +8 -8
  545. package/src/interactive/turn-state.ts +1 -1
  546. package/src/interactive/view/artifacts.ts +12 -9
  547. package/src/interactive/view/view-overlay.ts +13 -10
  548. package/src/interactive/watch-pane.ts +38 -10
  549. package/src/interactive/welcome-dashboard.ts +15 -15
  550. package/src/interactive/worker-progress.ts +4 -4
  551. package/src/interactive/worker-receipts.ts +1 -1
  552. package/src/interactive/worker-stream.ts +1 -4
  553. package/src/interactive/yazi-bridge.ts +12 -5
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/builtin-tool-catalog.ts +1 -1
  557. package/src/tools/compete-worktrees.ts +27 -17
  558. package/src/tools/context/index.ts +15 -1
  559. package/src/tools/dispatch-admission.ts +4 -2
  560. package/src/tools/dispatch-arguments.ts +1 -1
  561. package/src/tools/dispatch-plan.ts +0 -11
  562. package/src/tools/dispatch-run-events.ts +12 -10
  563. package/src/tools/dispatch-runner.ts +11 -6
  564. package/src/tools/dispatch.ts +1 -1
  565. package/src/tools/find.ts +1 -6
  566. package/src/tools/monitor.ts +4 -4
  567. package/src/tools/observers.ts +0 -33
  568. package/src/tools/task-worktree.ts +28 -7
  569. package/src/tools/verify/authoring.ts +3 -6
  570. package/src/tools/verify/frontend.ts +1 -1
  571. package/src/tools/web-fetch.ts +1 -1
  572. package/src/worker/entry.ts +4 -3
  573. package/src/worker/protocol.ts +16 -14
  574. package/src/worker/spec-contract.ts +2 -2
  575. package/src/worker/stdin-demux.ts +2 -2
  576. package/dist/chunk-GXNLGKAB.js +0 -571
  577. package/dist/chunk-VFA6GDY5.js +0 -1625
  578. package/dist/doctor-QOA5FNY5.js +0 -313
  579. package/src/engine/apis/degraded-inference.ts +0 -95
  580. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  581. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -1,7 +1,8 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
- parseTomlDocument
4
- } from "./chunk-LCGCVYZ4.js";
3
+ ensureYaziProfile,
4
+ yaziProfileDir
5
+ } from "./chunk-J5LZHVIT.js";
5
6
  import {
6
7
  describeResolution,
7
8
  resolveToolBinary,
@@ -11,279 +12,217 @@ import {
11
12
  findPinnedTool
12
13
  } from "./chunk-QDC3K2U3.js";
13
14
  import {
14
- readClioVersion,
15
+ namingCompatibilityEnvironment
16
+ } from "./chunk-D7E7WCDF.js";
17
+ import {
15
18
  resolvePackageRoot
16
19
  } from "./chunk-IWHMRKLL.js";
17
20
  import {
18
- clioCacheDir,
19
- resolveClioDirs
21
+ clioCacheDir
20
22
  } from "./chunk-BYP5D4HI.js";
21
23
  import {
22
24
  init_esm_shims
23
25
  } from "./chunk-3R73A4XB.js";
24
26
 
25
- // src/domains/mux/yazi/profile.ts
27
+ // src/domains/mux/index.ts
26
28
  init_esm_shims();
27
- import { spawnSync } from "node:child_process";
28
- import { createHash } from "node:crypto";
29
- import {
30
- cpSync,
31
- mkdirSync,
32
- mkdtempSync,
33
- readdirSync,
34
- readFileSync,
35
- renameSync,
36
- rmSync,
37
- statSync,
38
- writeFileSync
39
- } from "node:fs";
40
- import { homedir } from "node:os";
41
- import { dirname, isAbsolute, join, relative } from "node:path";
42
29
 
43
- // src/domains/mux/yazi/theme.ts
30
+ // src/domains/mux/extension.ts
44
31
  init_esm_shims();
45
32
 
46
- // src/core/theme-token-hex.ts
33
+ // src/domains/mux/contract.ts
47
34
  init_esm_shims();
48
- var TOKEN_HEX = {
49
- accent: "#46e5d0",
50
- accentDeep: "#1fb7a6",
51
- action: "#ff7e29",
52
- success: "#57e389",
53
- warning: "#ffb454",
54
- error: "#ff5c66",
55
- info: "#5ba8ff",
56
- reason: "#9d8cff",
57
- dim: "#6a7a85",
58
- muted: "#8a99a4",
59
- title: "#46e5d0",
60
- frame: "#2f5d5a",
61
- frameStrong: "#2aab9e"
62
- };
63
- function tokenHex(token2) {
64
- return TOKEN_HEX[token2];
65
- }
66
-
67
- // src/domains/mux/yazi/theme.ts
68
- function renderYaziTheme() {
69
- return `# Generated by Clio Coder. Changes are replaced when the managed profile regenerates.
70
-
71
- [mgr]
72
- cwd = { fg = "${tokenHex("accent")}" }
73
- find_keyword = { fg = "${tokenHex("warning")}" }
74
- marker_selected = { fg = "${tokenHex("success")}", bg = "${tokenHex("success")}" }
75
- marker_copied = { fg = "${tokenHex("accent")}", bg = "${tokenHex("accent")}" }
76
- marker_cut = { fg = "${tokenHex("error")}", bg = "${tokenHex("error")}" }
77
- border_style = { fg = "${tokenHex("frame")}" }
78
-
79
- [mode]
80
- normal_main = { bg = "${tokenHex("accent")}" }
81
- normal_alt = { fg = "${tokenHex("accent")}" }
82
- select_main = { bg = "${tokenHex("action")}" }
83
- select_alt = { fg = "${tokenHex("action")}" }
84
- unset_main = { bg = "${tokenHex("error")}" }
85
- unset_alt = { fg = "${tokenHex("error")}" }
86
35
 
87
- [tabs]
88
- active = { bg = "${tokenHex("accent")}" }
89
- inactive = { fg = "${tokenHex("accent")}" }
90
-
91
- [status]
92
- perm_sep = { fg = "${tokenHex("dim")}" }
93
- `;
94
- }
95
-
96
- // src/domains/mux/yazi/profile.ts
97
- var PROFILE_FILES = ["yazi.toml", "keymap.toml", "theme.toml", "init.lua"];
98
- var PROFILE_PLUGIN_FILES = ["main.lua", "types.lua", "LICENSE", "README.md"];
99
- var STAMP_FILE = "stamp.json";
100
- function yaziProfileDir(cacheDir = resolveClioDirs().cache) {
101
- return join(cacheDir, "yazi", "profile");
102
- }
103
- function userYaziConfigDir(env = process.env, home = homedir()) {
104
- const xdg = env.XDG_CONFIG_HOME;
105
- return xdg && isAbsolute(xdg) ? join(xdg, "yazi") : join(home, ".config", "yazi");
106
- }
107
- function resetYaziProfile(profileDir = yaziProfileDir()) {
108
- rmSync(profileDir, { recursive: true, force: true });
109
- }
110
- function defaultAssetDir() {
111
- return join(resolvePackageRoot(), "src", "domains", "mux", "yazi", "assets");
112
- }
113
- function yaziPin() {
114
- return findPinnedTool("yazi")?.version ?? "unknown";
115
- }
116
- function sha256(input) {
117
- return createHash("sha256").update(input).digest("hex");
118
- }
119
- function filesBelow(root, current = root) {
120
- const files = [];
121
- for (const entry of readdirSync(current, { withFileTypes: true }).sort(
122
- (left, right) => left.name.localeCompare(right.name)
123
- )) {
124
- const path = join(current, entry.name);
125
- if (entry.isDirectory()) files.push(...filesBelow(root, path));
126
- else if (entry.isFile()) files.push(relative(root, path).replaceAll("\\", "/"));
127
- }
128
- return files;
129
- }
130
- function hashYaziAssetTree(assetDir) {
131
- const hash = createHash("sha256");
132
- for (const file of filesBelow(assetDir)) {
133
- hash.update(file);
134
- hash.update("\0");
135
- hash.update(readFileSync(join(assetDir, file)));
136
- hash.update("\0");
137
- }
138
- return hash.digest("hex");
36
+ // src/domains/mux/dock-controller.ts
37
+ init_esm_shims();
38
+ var DOCK_SPECS = {
39
+ workers: { slot: "workers", direction: "right", defaultShare: 0.34, minCells: 48 },
40
+ files: { slot: "files", direction: "down", defaultShare: 0.3, minCells: 12 }
41
+ };
42
+ var DOCK_MAX_SHARE = 0.5;
43
+ var SHARE_EPSILON = 0.02;
44
+ function ratioForDockShare(share) {
45
+ return 1 - share;
139
46
  }
140
- function shellQuote(value) {
141
- return `'${value.replaceAll("'", `'\\''`)}'`;
47
+ function clampDockShare(share) {
48
+ if (!Number.isFinite(share) || share <= 0) return DOCK_SPECS.workers.defaultShare;
49
+ return Math.min(DOCK_MAX_SHARE, share);
142
50
  }
143
- function renderYaziKeymap(yaPath) {
144
- const command = `shell -- ${shellQuote(yaPath)} pub-to "$YAZI_ID" clio-pick --list "$CLIO_YAZI_PICK_TOKEN" %s`;
145
- return `# Generated by Clio Coder. Changes are replaced when the managed profile regenerates.
146
-
147
- [[mgr.prepend_keymap]]
148
- on = "<C-y>"
149
- run = ${JSON.stringify(command)}
150
- desc = "Send the selection to Clio"
151
- `;
51
+ function axisCells(rect, spec) {
52
+ return spec.direction === "right" ? rect.width : rect.height;
152
53
  }
153
- function expected(options) {
154
- const assetDir = options.assetDir ?? defaultAssetDir();
155
- const themeToml = options.themeToml ?? renderYaziTheme();
156
- const yaziToml = options.yaziToml ?? readFileSync(join(assetDir, "yazi.toml"), "utf8");
157
- const keymapToml = options.keymapToml ?? renderYaziKeymap(options.yaPath);
158
- return {
159
- dir: options.profileDir ?? yaziProfileDir(),
160
- assetDir,
161
- yaziToml,
162
- keymapToml,
163
- themeToml,
164
- stamp: {
165
- yaziVersion: options.yaziVersion ?? yaziPin(),
166
- clioVersion: options.clioVersion ?? readClioVersion(),
167
- yaPath: options.yaPath,
168
- assetSha256: hashYaziAssetTree(assetDir),
169
- themeSha256: sha256(themeToml)
170
- }
54
+ function deriveSplitPath(root, anchorPaneId, dockPaneId) {
55
+ const contains = (node, paneId) => {
56
+ if (node.type === "pane") return node.paneId === paneId;
57
+ return contains(node.first, paneId) || contains(node.second, paneId);
171
58
  };
172
- }
173
- function readStamp(dir) {
174
- try {
175
- const value = JSON.parse(readFileSync(join(dir, STAMP_FILE), "utf8"));
176
- if (typeof value.yaziVersion !== "string" || typeof value.clioVersion !== "string" || typeof value.yaPath !== "string" || typeof value.assetSha256 !== "string" || typeof value.themeSha256 !== "string") {
177
- return null;
178
- }
179
- return value;
180
- } catch {
59
+ const walk = (node, path) => {
60
+ if (node.type !== "split") return null;
61
+ const dockFirst = contains(node.first, dockPaneId);
62
+ const dockSecond = contains(node.second, dockPaneId);
63
+ const anchorFirst = contains(node.first, anchorPaneId);
64
+ const anchorSecond = contains(node.second, anchorPaneId);
65
+ if (dockFirst && anchorSecond) return { path, dockIsSecond: false, direction: node.direction };
66
+ if (dockSecond && anchorFirst) return { path, dockIsSecond: true, direction: node.direction };
67
+ if (dockFirst && anchorFirst) return walk(node.first, [...path, false]);
68
+ if (dockSecond && anchorSecond) return walk(node.second, [...path, true]);
181
69
  return null;
182
- }
183
- }
184
- function sameStamp(left, right) {
185
- return left !== null && left.yaziVersion === right.yaziVersion && left.clioVersion === right.clioVersion && left.yaPath === right.yaPath && left.assetSha256 === right.assetSha256 && left.themeSha256 === right.themeSha256;
186
- }
187
- function profileFilesExist(dir) {
188
- return PROFILE_FILES.every((file) => statSync(join(dir, file), { throwIfNoEntry: false })?.isFile()) && PROFILE_PLUGIN_FILES.every(
189
- (file) => statSync(join(dir, "plugins", "git.yazi", file), { throwIfNoEntry: false })?.isFile() === true
190
- );
191
- }
192
- function inspectYaziProfile(options) {
193
- const inputs = expected(options);
194
- const present = statSync(inputs.dir, { throwIfNoEntry: false })?.isDirectory() === true;
195
- const current = present && profileFilesExist(inputs.dir) && sameStamp(readStamp(inputs.dir), inputs.stamp);
196
- return {
197
- dir: inputs.dir,
198
- userConfigDir: userYaziConfigDir(),
199
- state: current ? "current" : present ? "stale" : "missing",
200
- stamp: inputs.stamp
201
70
  };
71
+ return walk(root, []);
202
72
  }
203
- function inspectCurrentYaziProfile() {
204
- return inspectYaziProfile({ yaPath: resolveToolBinary("ya").binaryPath ?? "(unresolved)" });
205
- }
206
- function describeYaziProfile(inspection) {
207
- return `${inspection.dir} (${inspection.state}); user config ${inspection.userConfigDir} is separate and untouched`;
73
+ function containsRect(outer, inner) {
74
+ return outer.x <= inner.x && outer.y <= inner.y && outer.x + outer.width >= inner.x + inner.width && outer.y + outer.height >= inner.y + inner.height;
208
75
  }
209
- function parseGenerated(dir) {
210
- return ["yazi.toml", "keymap.toml", "theme.toml"].every((file) => {
211
- try {
212
- return parseTomlDocument(readFileSync(join(dir, file), "utf8")) !== null;
213
- } catch {
214
- return false;
76
+ function observedDockShare(geometry, spec, anchorPaneId, dockPaneId) {
77
+ const anchor = geometry.panes.find((pane) => pane.paneId === anchorPaneId);
78
+ const dock = geometry.panes.find((pane) => pane.paneId === dockPaneId);
79
+ if (!anchor || !dock) return null;
80
+ let separating = null;
81
+ for (const split of geometry.splits) {
82
+ if (!containsRect(split.rect, anchor.rect) || !containsRect(split.rect, dock.rect)) continue;
83
+ if (!separating || split.rect.width * split.rect.height < separating.rect.width * separating.rect.height) {
84
+ separating = split;
215
85
  }
216
- });
217
- }
218
- var YAZI_CONFIG_ERROR_MARKERS = ["Failed to parse config", "Press <Enter> to continue with preset settings"];
219
- function validatesWithYazi(dir, yaziPath) {
220
- const scratchHome = mkdtempSync(join(dirname(dir), ".yazi-validation-"));
221
- try {
222
- const result = spawnSync(yaziPath, ["--debug"], {
223
- cwd: scratchHome,
224
- env: {
225
- ...process.env,
226
- HOME: scratchHome,
227
- XDG_CACHE_HOME: join(scratchHome, "cache"),
228
- XDG_CONFIG_HOME: join(scratchHome, "config"),
229
- YAZI_CONFIG_HOME: dir
230
- },
231
- encoding: "utf8",
232
- timeout: 5e3
233
- });
234
- const output = `${result.stdout ?? ""}
235
- ${result.stderr ?? ""}`;
236
- return result.error === void 0 && result.status === 0 && YAZI_CONFIG_ERROR_MARKERS.every((marker) => !output.includes(marker));
237
- } catch {
238
- return false;
239
- } finally {
240
- rmSync(scratchHome, { recursive: true, force: true });
241
86
  }
87
+ if (!separating || separating.direction !== spec.direction) return null;
88
+ const dockIsSecond = spec.direction === "right" ? dock.rect.x > anchor.rect.x : dock.rect.y > anchor.rect.y;
89
+ return dockIsSecond ? 1 - separating.ratio : separating.ratio;
242
90
  }
243
- function ensureYaziProfile(options) {
244
- let inputs;
245
- try {
246
- inputs = expected({ ...options, profileDir: options.profileDir ?? yaziProfileDir(clioCacheDir()) });
247
- } catch {
248
- return null;
249
- }
250
- if (profileFilesExist(inputs.dir) && sameStamp(readStamp(inputs.dir), inputs.stamp)) {
251
- return { dir: inputs.dir, stamp: inputs.stamp };
91
+ function planDockOpen(anchorRect, spec, requestedShare) {
92
+ const axis = axisCells(anchorRect, spec);
93
+ if (axis * DOCK_MAX_SHARE < spec.minCells) {
94
+ return {
95
+ refused: `the ${spec.slot} dock needs ${spec.minCells} cells and at most half of ${axis} is available`
96
+ };
252
97
  }
253
- mkdirSync(dirname(inputs.dir), { recursive: true });
254
- const staging = mkdtempSync(join(dirname(inputs.dir), ".profile-"));
255
- try {
256
- cpSync(join(inputs.assetDir, "init.lua"), join(staging, "init.lua"));
257
- cpSync(join(inputs.assetDir, "plugins"), join(staging, "plugins"), { recursive: true });
258
- writeFileSync(join(staging, "yazi.toml"), inputs.yaziToml);
259
- writeFileSync(join(staging, "keymap.toml"), inputs.keymapToml);
260
- writeFileSync(join(staging, "theme.toml"), inputs.themeToml);
261
- writeFileSync(join(staging, STAMP_FILE), `${JSON.stringify(inputs.stamp, null, 2)}
262
- `);
263
- if (!parseGenerated(staging) || !validatesWithYazi(staging, options.yaziPath)) {
264
- rmSync(inputs.dir, { recursive: true, force: true });
265
- return null;
98
+ const share = Math.max(clampDockShare(requestedShare ?? spec.defaultShare), spec.minCells / axis);
99
+ return { direction: spec.direction, ratio: ratioForDockShare(share), share };
100
+ }
101
+ function createDockController(options) {
102
+ const { client, anchorPaneId } = options;
103
+ const log = options.log ?? (() => void 0);
104
+ const bySlot = /* @__PURE__ */ new Map();
105
+ const applyShare = async (state, share) => {
106
+ const tree = await client.layoutExport({ tabId: state.tabId });
107
+ const derived = deriveSplitPath(tree.root, anchorPaneId, state.paneId);
108
+ if (!derived) {
109
+ log("debug", `mux ${state.slot} dock split path is gone from ${state.tabId}; leaving layout alone`);
110
+ return false;
266
111
  }
267
- rmSync(inputs.dir, { recursive: true, force: true });
268
- renameSync(staging, inputs.dir);
269
- return { dir: inputs.dir, stamp: inputs.stamp };
270
- } catch {
271
- rmSync(inputs.dir, { recursive: true, force: true });
272
- return null;
273
- } finally {
274
- rmSync(staging, { recursive: true, force: true });
275
- }
112
+ if (derived.direction !== DOCK_SPECS[state.slot].direction) {
113
+ log("debug", `mux ${state.slot} dock split runs ${derived.direction}; declining the wrong-axis resize`);
114
+ return false;
115
+ }
116
+ const ratio = derived.dockIsSecond ? ratioForDockShare(share) : share;
117
+ await client.layoutSetSplitRatio({ tabId: state.tabId, path: derived.path, ratio });
118
+ state.targetShare = share;
119
+ state.lastAppliedShare = share;
120
+ return true;
121
+ };
122
+ return {
123
+ states() {
124
+ return [...bySlot.values()].map((state) => ({ ...state }));
125
+ },
126
+ stateFor(slot) {
127
+ const state = bySlot.get(slot);
128
+ return state ? { ...state } : null;
129
+ },
130
+ async open(slot, openOptions = {}) {
131
+ const existing = bySlot.get(slot);
132
+ if (existing) {
133
+ return { paneId: existing.paneId, tabId: existing.tabId, workspaceId: "" };
134
+ }
135
+ const spec = DOCK_SPECS[slot];
136
+ const geometry = await client.paneLayout(anchorPaneId);
137
+ const anchorRect = geometry.panes.find((pane2) => pane2.paneId === anchorPaneId)?.rect;
138
+ if (!anchorRect) {
139
+ log("debug", `mux ${slot} dock open found no anchor rect for ${anchorPaneId}`);
140
+ return null;
141
+ }
142
+ const plan = planDockOpen(anchorRect, spec, openOptions.share);
143
+ if ("refused" in plan) {
144
+ log("info", `mux ${slot} dock refused: ${plan.refused}`);
145
+ return null;
146
+ }
147
+ const pane = await client.paneSplit({
148
+ direction: plan.direction,
149
+ targetPaneId: anchorPaneId,
150
+ ratio: plan.ratio,
151
+ focus: false,
152
+ ...openOptions.cwd !== void 0 ? { cwd: openOptions.cwd } : {},
153
+ ...openOptions.env ? { env: openOptions.env } : {}
154
+ });
155
+ const state = {
156
+ slot,
157
+ paneId: pane.paneId,
158
+ tabId: pane.tabId,
159
+ targetShare: plan.share,
160
+ lastAppliedShare: plan.share
161
+ };
162
+ bySlot.set(slot, state);
163
+ try {
164
+ const after = await client.paneLayout(anchorPaneId);
165
+ const dockRect = after.panes.find((entry) => entry.paneId === pane.paneId)?.rect;
166
+ if (dockRect && axisCells(dockRect, spec) < spec.minCells) {
167
+ const anchorAfter = after.panes.find((entry) => entry.paneId === anchorPaneId)?.rect;
168
+ const total = anchorAfter ? axisCells(anchorAfter, spec) + axisCells(dockRect, spec) : 0;
169
+ if (total > 0) await applyShare(state, Math.min(DOCK_MAX_SHARE, spec.minCells / total));
170
+ }
171
+ } catch (error) {
172
+ log("debug", `mux ${slot} dock converge skipped: ${error instanceof Error ? error.message : String(error)}`);
173
+ }
174
+ return { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
175
+ },
176
+ adopt(slot, ref) {
177
+ const spec = DOCK_SPECS[slot];
178
+ bySlot.set(slot, {
179
+ slot,
180
+ paneId: ref.paneId,
181
+ tabId: ref.tabId,
182
+ // The surviving pane's actual share is adopted lazily by the next
183
+ // layout observation; until then the default is the best guess.
184
+ targetShare: spec.defaultShare,
185
+ lastAppliedShare: spec.defaultShare
186
+ });
187
+ },
188
+ async resize(slot, share) {
189
+ const state = bySlot.get(slot);
190
+ if (!state) return false;
191
+ return await applyShare(state, Math.max(clampDockShare(share), 0.01));
192
+ },
193
+ noteLayoutUpdated(geometry) {
194
+ for (const state of bySlot.values()) {
195
+ if (state.tabId !== geometry.tabId) continue;
196
+ const observed = observedDockShare(geometry, DOCK_SPECS[state.slot], anchorPaneId, state.paneId);
197
+ if (observed === null) continue;
198
+ if (Math.abs(observed - state.targetShare) <= SHARE_EPSILON) continue;
199
+ if (Math.abs(observed - state.lastAppliedShare) <= SHARE_EPSILON) continue;
200
+ log("debug", `mux ${state.slot} dock resized by the user to ${(observed * 100).toFixed(0)}%`);
201
+ state.targetShare = observed;
202
+ state.lastAppliedShare = observed;
203
+ }
204
+ },
205
+ notePaneGone(paneId) {
206
+ for (const [slot, state] of bySlot) {
207
+ if (state.paneId === paneId) bySlot.delete(slot);
208
+ }
209
+ },
210
+ notePaneMoved(previousPaneId, paneId, tabId) {
211
+ for (const state of bySlot.values()) {
212
+ if (state.paneId !== previousPaneId) continue;
213
+ state.paneId = paneId;
214
+ state.tabId = tabId;
215
+ }
216
+ },
217
+ paneIds() {
218
+ return [...bySlot.values()].map((state) => state.paneId);
219
+ },
220
+ clear() {
221
+ bySlot.clear();
222
+ }
223
+ };
276
224
  }
277
225
 
278
- // src/domains/mux/index.ts
279
- init_esm_shims();
280
-
281
- // src/domains/mux/extension.ts
282
- init_esm_shims();
283
-
284
- // src/domains/mux/contract.ts
285
- init_esm_shims();
286
-
287
226
  // src/domains/mux/pane-registry.ts
288
227
  init_esm_shims();
289
228
  function createPaneRegistry() {
@@ -343,6 +282,10 @@ init_esm_shims();
343
282
  var MUX_METHOD_MIN_PROTOCOL = {
344
283
  "notification.show": 17,
345
284
  "pane.rename": 17,
285
+ "pane.focus": 17,
286
+ "pane.zoom": 17,
287
+ "layout.export": 17,
288
+ "layout.set_split_ratio": 17,
346
289
  "worktree.list": 10,
347
290
  "worktree.create": 10,
348
291
  "worktree.open": 10,
@@ -393,24 +336,31 @@ function muxErrorKind(wireCode) {
393
336
  }
394
337
 
395
338
  // src/domains/mux/contract.ts
396
- var METADATA_SOURCE = "clio:mux";
397
- var SELF_AGENT_SOURCE = "clio:coder";
398
- var OWNER_TOKEN_KEY = "clio_owner";
399
- var OWNER_TOKEN_VALUE = "clio:mux";
339
+ var METADATA_SOURCE = "clio-coder:mux";
340
+ var SELF_AGENT_SOURCE = "clio-coder:coder";
341
+ var OWNER_TOKEN_KEY = "clio_coder_owner";
342
+ var OWNER_TOKEN_VALUE = "clio-coder:mux";
343
+ var LEGACY_OWNER_TOKEN_KEY = "clio_owner";
344
+ var LEGACY_OWNER_TOKEN_VALUE = "clio:mux";
400
345
  var TOKEN_VALUE_MAX = 80;
401
346
  var DEGRADE_COOLDOWN_MS = 5e3;
402
- function shellQuote2(argv) {
347
+ function shellQuote(argv) {
403
348
  return argv.map((arg) => `'${arg.replaceAll("'", `'\\''`)}'`).join(" ");
404
349
  }
405
350
  function token(value) {
406
351
  if (typeof value !== "string" || value.length === 0) return null;
407
352
  return value.length > TOKEN_VALUE_MAX ? value.slice(0, TOKEN_VALUE_MAX) : value;
408
353
  }
354
+ function hasOwnedPaneToken(tokens) {
355
+ return tokens[OWNER_TOKEN_KEY] === OWNER_TOKEN_VALUE || tokens[LEGACY_OWNER_TOKEN_KEY] === LEGACY_OWNER_TOKEN_VALUE;
356
+ }
409
357
  function createMuxRuntime(options) {
410
358
  const { detection, client } = options;
411
359
  const log = options.log ?? (() => void 0);
412
360
  const now = options.now ?? Date.now;
413
361
  const registry = createPaneRegistry();
362
+ const anchorPaneId = detection.self.paneId;
363
+ const docks = client !== null && anchorPaneId !== null && muxSupportsMethod(detection.server, "layout.export") ? createDockController({ client, anchorPaneId, log }) : null;
414
364
  let healthy = client !== null;
415
365
  let probeHealthAt = 0;
416
366
  let stopped = false;
@@ -445,10 +395,27 @@ function createMuxRuntime(options) {
445
395
  paneId,
446
396
  source: METADATA_SOURCE,
447
397
  ...title === void 0 ? {} : { title },
448
- tokens: { [OWNER_TOKEN_KEY]: OWNER_TOKEN_VALUE, ...tokens }
398
+ tokens: {
399
+ [OWNER_TOKEN_KEY]: OWNER_TOKEN_VALUE,
400
+ [LEGACY_OWNER_TOKEN_KEY]: LEGACY_OWNER_TOKEN_VALUE,
401
+ ...tokens
402
+ }
449
403
  });
450
404
  };
451
405
  const onEvent = (event) => {
406
+ if (event.kind === "layout.updated") {
407
+ docks?.noteLayoutUpdated(event.geometry);
408
+ return;
409
+ }
410
+ if (event.kind === "pane.moved") {
411
+ const held = registry.forget(event.previousPaneId);
412
+ if (held) {
413
+ registry.record({ ...held, ref: { paneId: event.paneId, tabId: event.tabId, workspaceId: event.workspaceId } });
414
+ docks?.notePaneMoved(event.previousPaneId, event.paneId, event.tabId);
415
+ }
416
+ return;
417
+ }
418
+ docks?.notePaneGone(event.paneId);
452
419
  const dropped = registry.forget(event.paneId);
453
420
  if (dropped) {
454
421
  log("debug", `mux pane ${event.paneId} left on ${event.kind}; dropped from the registry`);
@@ -470,32 +437,49 @@ function createMuxRuntime(options) {
470
437
  return detection;
471
438
  },
472
439
  async openUtilityPane(request) {
440
+ const dockSlot = request.dock?.slot;
441
+ if (dockSlot && docks) {
442
+ const existing = docks.stateFor(dockSlot);
443
+ const held = existing ? registry.byPaneId(existing.paneId) : null;
444
+ if (held) return held.ref;
445
+ }
473
446
  return await attempt(
474
447
  "openUtilityPane",
475
448
  async (live) => {
476
- const anchor = detection.self.paneId ?? (await live.paneCurrent()).paneId;
477
- const pane = await live.paneSplit({
478
- direction: request.direction ?? "right",
479
- targetPaneId: anchor,
480
- cwd: request.cwd,
481
- focus: false,
482
- ...request.env ? { env: request.env } : {}
483
- });
484
- const ref = { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
449
+ let ref;
450
+ if (request.dock && docks) {
451
+ const placed = await docks.open(request.dock.slot, {
452
+ ...request.dock.share === void 0 ? {} : { share: request.dock.share },
453
+ cwd: request.cwd,
454
+ ...request.env ? { env: request.env } : {}
455
+ });
456
+ if (placed === null) return null;
457
+ ref = placed;
458
+ } else {
459
+ const anchor = anchorPaneId ?? (await live.paneCurrent()).paneId;
460
+ const pane = await live.paneSplit({
461
+ direction: request.direction ?? "right",
462
+ targetPaneId: anchor,
463
+ cwd: request.cwd,
464
+ focus: false,
465
+ ...request.env ? { env: request.env } : {}
466
+ });
467
+ ref = { paneId: pane.paneId, tabId: pane.tabId, workspaceId: pane.workspaceId };
468
+ }
485
469
  const purpose = request.purpose ?? "utility";
486
470
  registry.record(paneRecord(ref, { purpose, label: request.label, openedAt: now() }));
487
471
  const title = request.title;
488
472
  const titleSupported = title !== void 0 && muxSupportsMethod(detection.server, "pane.rename");
489
473
  if (titleSupported) {
490
474
  try {
491
- await live.paneRename(pane.paneId, title);
475
+ await live.paneRename(ref.paneId, title);
492
476
  } catch {
493
477
  }
494
478
  }
495
- await tagOwner(live, pane.paneId, { role: token(purpose) }, titleSupported ? title : void 0);
479
+ await tagOwner(live, ref.paneId, { role: token(purpose) }, titleSupported ? title : void 0);
496
480
  if (request.argv.length > 0) {
497
- const redirect = request.stdoutPath ? ` > ${shellQuote2([request.stdoutPath])}` : "";
498
- await live.paneSendText(pane.paneId, `exec ${shellQuote2(request.argv)}${redirect}
481
+ const redirect = request.stdoutPath ? ` > ${shellQuote([request.stdoutPath])}` : "";
482
+ await live.paneSendText(ref.paneId, `exec ${shellQuote(request.argv)}${redirect}
499
483
  `);
500
484
  }
501
485
  return ref;
@@ -510,6 +494,7 @@ function createMuxRuntime(options) {
510
494
  async (live) => {
511
495
  await live.paneClose(paneId);
512
496
  registry.forget(paneId);
497
+ docks?.notePaneGone(paneId);
513
498
  return true;
514
499
  },
515
500
  false
@@ -523,7 +508,7 @@ function createMuxRuntime(options) {
523
508
  async (live) => {
524
509
  const snapshot = await live.snapshot();
525
510
  for (const pane of snapshot.panes) {
526
- if (pane.tokens[OWNER_TOKEN_KEY] !== OWNER_TOKEN_VALUE) continue;
511
+ if (!hasOwnedPaneToken(pane.tokens)) continue;
527
512
  if (pane.tokens.role !== request.purpose) continue;
528
513
  if (registry.owns(pane.paneId)) continue;
529
514
  if (detection.self.workspaceId !== null && pane.workspaceId !== detection.self.workspaceId) continue;
@@ -531,6 +516,7 @@ function createMuxRuntime(options) {
531
516
  registry.record(
532
517
  paneRecord(ref, { purpose: request.purpose, label: request.label, openedAt: now(), adopted: true })
533
518
  );
519
+ if (request.dock && docks) docks.adopt(request.dock, ref);
534
520
  log("info", `mux adopted a ${request.purpose} pane left open by a previous session`);
535
521
  return ref;
536
522
  }
@@ -539,6 +525,37 @@ function createMuxRuntime(options) {
539
525
  null
540
526
  );
541
527
  },
528
+ async focusPane(paneId) {
529
+ if (!registry.owns(paneId)) return false;
530
+ if (!muxSupportsMethod(detection.server, "pane.focus")) return false;
531
+ return await attempt(
532
+ "focusPane",
533
+ async (live) => {
534
+ await live.paneFocus(paneId);
535
+ return true;
536
+ },
537
+ false
538
+ );
539
+ },
540
+ async zoomPane(paneId, mode) {
541
+ if (!registry.owns(paneId)) return false;
542
+ if (!muxSupportsMethod(detection.server, "pane.zoom")) return false;
543
+ return await attempt(
544
+ "zoomPane",
545
+ async (live) => {
546
+ const result = await live.paneZoom(paneId, mode);
547
+ return result.changed;
548
+ },
549
+ false
550
+ );
551
+ },
552
+ async resizeDock(slot, share) {
553
+ if (!docks) return false;
554
+ return await attempt("resizeDock", () => docks.resize(slot, share), false);
555
+ },
556
+ docks() {
557
+ return docks?.states() ?? [];
558
+ },
542
559
  async notify(request) {
543
560
  if (!muxSupportsMethod(detection.server, "notification.show")) {
544
561
  log("debug", `mux notify skipped, server protocol is below the notification.show floor: ${request.title}`);
@@ -621,15 +638,25 @@ function createMuxRuntime(options) {
621
638
  subscription?.close();
622
639
  subscription = null;
623
640
  paneGoneHandlers.clear();
641
+ if (client && docks) {
642
+ for (const paneId of docks.paneIds()) {
643
+ await client.paneClose(paneId).catch(() => void 0);
644
+ registry.forget(paneId);
645
+ }
646
+ docks.clear();
647
+ }
624
648
  if (client) await client.close().catch(() => void 0);
625
649
  }
626
650
  };
627
651
  const start = async () => {
628
652
  if (detection.mode === "none" || client === null) return;
629
653
  try {
630
- subscription = await client.subscribe(["pane.closed", "pane.exited"], onEvent, {
654
+ const kinds = ["pane.closed", "pane.exited"];
655
+ if (docks) kinds.push("pane.moved", "layout.updated");
656
+ subscription = await client.subscribe(kinds, onEvent, {
631
657
  onResync: (snapshot) => {
632
658
  const dropped = registry.reconcile(snapshot.panes.map((pane) => pane.paneId));
659
+ for (const record2 of dropped) docks?.notePaneGone(record2.ref.paneId);
633
660
  if (dropped.length > 0) {
634
661
  log("info", `mux reconciled ${dropped.length} pane(s) closed while the socket was down`);
635
662
  }
@@ -644,8 +671,8 @@ function createMuxRuntime(options) {
644
671
 
645
672
  // src/domains/mux/detect.ts
646
673
  init_esm_shims();
647
- import { homedir as homedir2 } from "node:os";
648
- import { join as join2 } from "node:path";
674
+ import { homedir } from "node:os";
675
+ import { join } from "node:path";
649
676
 
650
677
  // src/domains/mux/socket-client.ts
651
678
  init_esm_shims();
@@ -817,21 +844,118 @@ function readSnapshot(value) {
817
844
  tabs: readArray(source, "tabs").map(readTab)
818
845
  };
819
846
  }
820
- var EVENT_KIND_BY_WIRE = {
847
+ function requireNumber(source, key, context) {
848
+ const value = source[key];
849
+ if (typeof value !== "number") {
850
+ throw new MuxError("protocol", `mux ${context} response is missing number field ${key}`);
851
+ }
852
+ return value;
853
+ }
854
+ function readRect(value, context) {
855
+ const source = asRecord(value);
856
+ if (!source) throw new MuxError("protocol", `mux ${context} rect is not an object`);
857
+ return {
858
+ x: requireNumber(source, "x", context),
859
+ y: requireNumber(source, "y", context),
860
+ width: requireNumber(source, "width", context),
861
+ height: requireNumber(source, "height", context)
862
+ };
863
+ }
864
+ function readSplitDirection(value, context) {
865
+ if (value === "right" || value === "down") return value;
866
+ throw new MuxError("protocol", `mux ${context} split direction is not right/down`);
867
+ }
868
+ function readTabGeometry(value) {
869
+ const source = asRecord(value);
870
+ if (!source) throw new MuxError("protocol", "mux layout snapshot is not an object");
871
+ return {
872
+ workspaceId: requireString(source, "workspace_id", "layout"),
873
+ tabId: requireString(source, "tab_id", "layout"),
874
+ zoomed: source.zoomed === true,
875
+ area: readRect(source.area, "layout"),
876
+ focusedPaneId: optionalString(source, "focused_pane_id"),
877
+ panes: readArray(source, "panes").map((entry) => {
878
+ const pane = asRecord(entry);
879
+ if (!pane) throw new MuxError("protocol", "mux layout pane entry is not an object");
880
+ return {
881
+ paneId: requireString(pane, "pane_id", "layout pane"),
882
+ focused: pane.focused === true,
883
+ rect: readRect(pane.rect, "layout pane")
884
+ };
885
+ }),
886
+ splits: readArray(source, "splits").map((entry) => {
887
+ const split = asRecord(entry);
888
+ if (!split) throw new MuxError("protocol", "mux layout split entry is not an object");
889
+ return {
890
+ direction: readSplitDirection(split.direction, "layout"),
891
+ ratio: requireNumber(split, "ratio", "layout split"),
892
+ rect: readRect(split.rect, "layout split")
893
+ };
894
+ })
895
+ };
896
+ }
897
+ function readLayoutNode(value) {
898
+ const source = asRecord(value);
899
+ if (!source) throw new MuxError("protocol", "mux layout node is not an object");
900
+ if (source.type === "pane") {
901
+ return { type: "pane", paneId: optionalString(source, "pane_id"), label: optionalString(source, "label") };
902
+ }
903
+ if (source.type === "split") {
904
+ return {
905
+ type: "split",
906
+ direction: readSplitDirection(source.direction, "layout tree"),
907
+ ratio: requireNumber(source, "ratio", "layout tree split"),
908
+ first: readLayoutNode(source.first),
909
+ second: readLayoutNode(source.second)
910
+ };
911
+ }
912
+ throw new MuxError("protocol", "mux layout node has an unknown type");
913
+ }
914
+ function readLayoutTree(value) {
915
+ const source = asRecord(value);
916
+ if (!source) throw new MuxError("protocol", "mux layout tree is not an object");
917
+ return {
918
+ workspaceId: requireString(source, "workspace_id", "layout tree"),
919
+ tabId: requireString(source, "tab_id", "layout tree"),
920
+ zoomed: source.zoomed === true,
921
+ focusedPaneId: optionalString(source, "focused_pane_id"),
922
+ root: readLayoutNode(source.root)
923
+ };
924
+ }
925
+ var PANE_LEAVE_KIND_BY_WIRE = {
821
926
  pane_closed: "pane.closed",
822
927
  pane_exited: "pane.exited"
823
928
  };
824
929
  function readEvent(line) {
825
930
  const wireKind = line.event;
826
931
  if (typeof wireKind !== "string") return null;
827
- const kind = EVENT_KIND_BY_WIRE[wireKind];
828
- if (!kind) return null;
829
932
  const data = asRecord(line.data);
830
933
  if (!data) return null;
831
- const paneId = data.pane_id;
832
- const workspaceId = data.workspace_id;
833
- if (typeof paneId !== "string" || typeof workspaceId !== "string") return null;
834
- return { kind, paneId, workspaceId };
934
+ const leaveKind = PANE_LEAVE_KIND_BY_WIRE[wireKind];
935
+ if (leaveKind) {
936
+ const paneId = data.pane_id;
937
+ const workspaceId = data.workspace_id;
938
+ if (typeof paneId !== "string" || typeof workspaceId !== "string") return null;
939
+ return { kind: leaveKind, paneId, workspaceId };
940
+ }
941
+ if (wireKind === "pane_moved") {
942
+ const pane = asRecord(data.pane);
943
+ const previousPaneId = data.previous_pane_id;
944
+ if (!pane || typeof previousPaneId !== "string") return null;
945
+ const paneId = pane.pane_id;
946
+ const tabId = pane.tab_id;
947
+ const workspaceId = pane.workspace_id;
948
+ if (typeof paneId !== "string" || typeof tabId !== "string" || typeof workspaceId !== "string") return null;
949
+ return { kind: "pane.moved", paneId, previousPaneId, tabId, workspaceId };
950
+ }
951
+ if (wireKind === "layout_updated") {
952
+ try {
953
+ return { kind: "layout.updated", geometry: readTabGeometry(data.layout) };
954
+ } catch {
955
+ return null;
956
+ }
957
+ }
958
+ return null;
835
959
  }
836
960
  function params(entries) {
837
961
  const out = {};
@@ -1065,15 +1189,27 @@ function createMuxClient(options) {
1065
1189
  },
1066
1190
  async paneLayout(paneId) {
1067
1191
  const result = await callObject("pane.layout", params({ pane_id: paneId }));
1068
- const layout = asRecord(result.layout);
1069
- if (!layout) throw new MuxError("protocol", "mux pane.layout returned no layout");
1070
- const ids = [];
1071
- for (const entry of readArray(layout, "panes")) {
1072
- const pane = asRecord(entry);
1073
- const id = pane ? pane.pane_id : void 0;
1074
- if (typeof id === "string") ids.push(id);
1075
- }
1076
- return ids;
1192
+ return readTabGeometry(result.layout);
1193
+ },
1194
+ async paneFocus(paneId) {
1195
+ await call("pane.focus", { pane_id: paneId });
1196
+ },
1197
+ async paneZoom(paneId, mode) {
1198
+ const result = await callObject("pane.zoom", { pane_id: paneId, mode });
1199
+ const zoom = asRecord(result.zoom);
1200
+ if (!zoom) throw new MuxError("protocol", "mux pane.zoom returned no zoom result");
1201
+ return { changed: zoom.changed === true, focusChanged: zoom.focus_changed === true };
1202
+ },
1203
+ async layoutExport(request = {}) {
1204
+ const result = await callObject("layout.export", params({ tab_id: request.tabId, pane_id: request.paneId }));
1205
+ return readLayoutTree(result.layout);
1206
+ },
1207
+ async layoutSetSplitRatio(request) {
1208
+ const result = await callObject(
1209
+ "layout.set_split_ratio",
1210
+ params({ tab_id: request.tabId, pane_id: request.paneId, path: [...request.path], ratio: request.ratio })
1211
+ );
1212
+ return readLayoutTree(result.layout);
1077
1213
  },
1078
1214
  async worktreeList(request = {}) {
1079
1215
  const result = await callObject("worktree.list", params({ workspace_id: request.workspaceId, cwd: request.cwd }));
@@ -1186,9 +1322,9 @@ function createMuxClient(options) {
1186
1322
  var PING_TIMEOUT_MS = 1e3;
1187
1323
  function herdrConfigDir(env) {
1188
1324
  const xdg = env.XDG_CONFIG_HOME;
1189
- if (typeof xdg === "string" && xdg.length > 0) return join2(xdg, "herdr");
1190
- const home = typeof env.HOME === "string" && env.HOME.length > 0 ? env.HOME : homedir2();
1191
- return join2(home, ".config", "herdr");
1325
+ if (typeof xdg === "string" && xdg.length > 0) return join(xdg, "herdr");
1326
+ const home = typeof env.HOME === "string" && env.HOME.length > 0 ? env.HOME : homedir();
1327
+ return join(home, ".config", "herdr");
1192
1328
  }
1193
1329
  function resolveSocketCandidates(env) {
1194
1330
  const candidates = [];
@@ -1197,9 +1333,9 @@ function resolveSocketCandidates(env) {
1197
1333
  const configDir = herdrConfigDir(env);
1198
1334
  const session = env.HERDR_SESSION;
1199
1335
  if (typeof session === "string" && session.length > 0) {
1200
- candidates.push(join2(configDir, "sessions", session, "herdr.sock"));
1336
+ candidates.push(join(configDir, "sessions", session, "herdr.sock"));
1201
1337
  }
1202
- candidates.push(join2(configDir, "herdr.sock"));
1338
+ candidates.push(join(configDir, "herdr.sock"));
1203
1339
  return [...new Set(candidates)];
1204
1340
  }
1205
1341
  function readSelfLocation(env) {
@@ -1213,14 +1349,15 @@ function readSelfLocation(env) {
1213
1349
  paneId: read("HERDR_PANE_ID")
1214
1350
  };
1215
1351
  }
1216
- function none(reason, candidates = []) {
1352
+ function none(reason, candidates = [], refused = false) {
1217
1353
  return {
1218
1354
  mode: "none",
1219
1355
  socketPath: null,
1220
1356
  server: null,
1221
1357
  self: { workspaceId: null, tabId: null, paneId: null },
1222
1358
  candidates,
1223
- reason
1359
+ reason,
1360
+ refused
1224
1361
  };
1225
1362
  }
1226
1363
  async function detectMux(options = {}) {
@@ -1231,7 +1368,14 @@ async function detectMux(options = {}) {
1231
1368
  return { detection: none("panes are turned off"), client: null };
1232
1369
  }
1233
1370
  if (enabled === "embedded") {
1234
- return { detection: none("embedded mode is not implemented yet; it ships in phase 5"), client: null };
1371
+ return {
1372
+ detection: none(
1373
+ "embedded mode is not implemented yet; it ships in phase 5, so this session has no panes at all. Set panes.enabled=auto for guest mode inside a herdr session.",
1374
+ [],
1375
+ true
1376
+ ),
1377
+ client: null
1378
+ };
1235
1379
  }
1236
1380
  if (env.HERDR_ENV !== "1") {
1237
1381
  return { detection: none("HERDR_ENV is not 1, so Clio is not running inside a pane host"), client: null };
@@ -1250,7 +1394,8 @@ async function detectMux(options = {}) {
1250
1394
  server,
1251
1395
  self: readSelfLocation(env),
1252
1396
  candidates,
1253
- reason: `guest mode on ${socketPath} (herdr ${server.version}, protocol ${server.protocol})`
1397
+ reason: `guest mode on ${socketPath} (herdr ${server.version}, protocol ${server.protocol})`,
1398
+ refused: false
1254
1399
  },
1255
1400
  client
1256
1401
  };
@@ -1276,7 +1421,10 @@ async function createMuxBundle(_context, options = {}) {
1276
1421
  ...options.env ? { env: options.env } : {},
1277
1422
  log
1278
1423
  });
1279
- log(detection.mode === "none" ? "debug" : "info", `mux mode ${detection.mode}: ${detection.reason}`);
1424
+ log(
1425
+ detection.refused ? "warning" : detection.mode === "none" ? "debug" : "info",
1426
+ detection.refused ? `panes refused: ${detection.reason}` : `mux mode ${detection.mode}: ${detection.reason}`
1427
+ );
1280
1428
  const runtime = createMuxRuntime({ detection, client, log });
1281
1429
  const extension = {
1282
1430
  async start() {
@@ -1298,9 +1446,9 @@ var MuxManifest = {
1298
1446
 
1299
1447
  // src/domains/mux/viewer-command.ts
1300
1448
  init_esm_shims();
1301
- import { join as join3 } from "node:path";
1449
+ import { join as join2 } from "node:path";
1302
1450
  function clioCliEntryPath() {
1303
- return join3(resolvePackageRoot(), "dist/cli/index.js");
1451
+ return join2(resolvePackageRoot(), "dist/cli/index.js");
1304
1452
  }
1305
1453
  function watchViewerCommand(selectionPath, options = {}) {
1306
1454
  const layout = options.dirs === void 0 ? [] : [
@@ -1326,10 +1474,12 @@ function watchViewerCommand(selectionPath, options = {}) {
1326
1474
 
1327
1475
  // src/domains/mux/yazi/event-stream.ts
1328
1476
  init_esm_shims();
1329
- import { closeSync, openSync, readSync, statSync as statSync2 } from "node:fs";
1477
+ import { closeSync, openSync, readSync, statSync } from "node:fs";
1330
1478
  import { StringDecoder } from "node:string_decoder";
1331
1479
  var YAZI_STREAM_POLL_MS = 250;
1332
1480
  var YAZI_STREAM_MAX_BYTES = 1024 * 1024;
1481
+ var YAZI_PICK_EVENT = "clio-coder-pick";
1482
+ var LEGACY_YAZI_PICK_EVENT = "clio-pick";
1333
1483
  function record(value) {
1334
1484
  return typeof value === "object" && value !== null && !Array.isArray(value);
1335
1485
  }
@@ -1339,7 +1489,7 @@ function parseYaziEventLine(line) {
1339
1489
  const third = second < 0 ? -1 : line.indexOf(",", second + 1);
1340
1490
  if (first <= 0 || second <= first + 1 || third <= second + 1) return null;
1341
1491
  const kind = line.slice(0, first);
1342
- if (kind !== "cd" && kind !== "clio-pick") return null;
1492
+ if (kind !== "cd" && kind !== YAZI_PICK_EVENT && kind !== LEGACY_YAZI_PICK_EVENT) return null;
1343
1493
  const receiver = line.slice(first + 1, second);
1344
1494
  const sender = line.slice(second + 1, third);
1345
1495
  try {
@@ -1351,7 +1501,7 @@ function parseYaziEventLine(line) {
1351
1501
  return { kind, receiver, sender, tab: String(tab), cwd: body.url };
1352
1502
  }
1353
1503
  if (!Array.isArray(body) || !body.every((value) => typeof value === "string")) return null;
1354
- return { kind, receiver, sender, values: body };
1504
+ return { kind: YAZI_PICK_EVENT, receiver, sender, values: body };
1355
1505
  } catch {
1356
1506
  return null;
1357
1507
  }
@@ -1395,7 +1545,7 @@ function createYaziEventStream(options) {
1395
1545
  stop("pane-gone");
1396
1546
  return;
1397
1547
  }
1398
- const stat = statSync2(options.path, { throwIfNoEntry: false });
1548
+ const stat = statSync(options.path, { throwIfNoEntry: false });
1399
1549
  if (!stat?.isFile()) {
1400
1550
  stop("file-missing");
1401
1551
  return;
@@ -1427,7 +1577,7 @@ function createYaziEventStream(options) {
1427
1577
  const line = raw.endsWith("\r") ? raw.slice(0, -1) : raw;
1428
1578
  if (line.length === 0) continue;
1429
1579
  const kind = line.slice(0, line.indexOf(","));
1430
- if (kind !== "cd" && kind !== "clio-pick") continue;
1580
+ if (kind !== "cd" && kind !== YAZI_PICK_EVENT && kind !== LEGACY_YAZI_PICK_EVENT) continue;
1431
1581
  const event = parseYaziEventLine(line);
1432
1582
  if (!event) {
1433
1583
  state.malformedLines += 1;
@@ -1457,8 +1607,8 @@ function createYaziEventStream(options) {
1457
1607
  init_esm_shims();
1458
1608
  import { spawn } from "node:child_process";
1459
1609
  import { randomUUID } from "node:crypto";
1460
- import { mkdirSync as mkdirSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
1461
- import { join as join4 } from "node:path";
1610
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
1611
+ import { join as join3 } from "node:path";
1462
1612
  function resolveYaziBinaries() {
1463
1613
  const entry = findPinnedTool("yazi");
1464
1614
  const status = entry ? toolStatus(entry) : null;
@@ -1477,7 +1627,7 @@ function runYa(file, args, env) {
1477
1627
  }
1478
1628
  function readOptional(path) {
1479
1629
  try {
1480
- return readFileSync2(path, "utf8");
1630
+ return readFileSync(path, "utf8");
1481
1631
  } catch {
1482
1632
  return "";
1483
1633
  }
@@ -1496,8 +1646,8 @@ async function createYaziSession(options) {
1496
1646
  }
1497
1647
  const cacheDir = options.cacheDir ?? clioCacheDir();
1498
1648
  const sessionId = options.sessionId ?? randomUUID();
1499
- const sessionsDir = join4(cacheDir, "yazi", "sessions");
1500
- mkdirSync2(sessionsDir, { recursive: true });
1649
+ const sessionsDir = join3(cacheDir, "yazi", "sessions");
1650
+ mkdirSync(sessionsDir, { recursive: true });
1501
1651
  const managedProfile = options.profileMode === "managed" ? (options.ensureProfile ?? ensureYaziProfile)({
1502
1652
  yaPath: binaries.yaPath,
1503
1653
  yaziPath: binaries.yaziPath,
@@ -1506,29 +1656,39 @@ async function createYaziSession(options) {
1506
1656
  if (options.profileMode === "managed" && !managedProfile) {
1507
1657
  return { status: "profile-error", reason: "Clio could not generate a valid managed Yazi profile" };
1508
1658
  }
1509
- const streamPath = join4(sessionsDir, `${sessionId}.stream`);
1510
- const chooserPath = join4(sessionsDir, `${sessionId}.chooser`);
1511
- const cwdPath = join4(sessionsDir, `${sessionId}.cwd`);
1659
+ const streamPath = join3(sessionsDir, `${sessionId}.stream`);
1660
+ const chooserPath = join3(sessionsDir, `${sessionId}.chooser`);
1661
+ const cwdPath = join3(sessionsDir, `${sessionId}.cwd`);
1512
1662
  const token2 = options.mode === "companion" ? options.pickToken ?? randomUUID() : null;
1513
1663
  const env = {
1514
1664
  ...managedProfile ? { YAZI_CONFIG_HOME: managedProfile.dir } : {},
1515
- ...token2 ? { CLIO_YAZI_PICK_TOKEN: token2 } : {}
1665
+ ...token2 ? namingCompatibilityEnvironment("CLIO_CODER_YAZI_PICK_TOKEN", "CLIO_YAZI_PICK_TOKEN", token2) : {}
1516
1666
  };
1517
1667
  let argv;
1518
1668
  let stdoutPath;
1519
1669
  if (options.mode === "companion") {
1520
- writeFileSync2(streamPath, "");
1521
- argv = [binaries.yaziPath, "--local-events", "cd,clio-pick", "--remote-events", "clio-pick"];
1670
+ writeFileSync(streamPath, "");
1671
+ argv = [
1672
+ binaries.yaziPath,
1673
+ "--local-events",
1674
+ `cd,${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`,
1675
+ "--remote-events",
1676
+ `${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`
1677
+ ];
1522
1678
  stdoutPath = streamPath;
1523
1679
  } else {
1524
- writeFileSync2(chooserPath, "");
1525
- writeFileSync2(cwdPath, "");
1680
+ writeFileSync(chooserPath, "");
1681
+ writeFileSync(cwdPath, "");
1526
1682
  argv = [binaries.yaziPath, options.cwd, "--chooser-file", chooserPath, "--cwd-file", cwdPath];
1527
1683
  }
1528
1684
  const pane = await options.mux.openUtilityPane({
1529
1685
  argv,
1530
1686
  cwd: options.cwd,
1531
1687
  label: "yazi",
1688
+ // The files dock: split down from the anchor at the configured share.
1689
+ // Degrades to a plain split inside the contract when the layout tier is
1690
+ // absent.
1691
+ dock: { slot: "files", ...options.dockShare === void 0 ? {} : { share: options.dockShare } },
1532
1692
  ...Object.keys(env).length > 0 ? { env } : {},
1533
1693
  ...stdoutPath ? { stdoutPath } : {}
1534
1694
  });
@@ -1618,14 +1778,8 @@ export {
1618
1778
  resolveSocketCandidates,
1619
1779
  detectMux,
1620
1780
  watchViewerCommand,
1621
- yaziProfileDir,
1622
- userYaziConfigDir,
1623
- resetYaziProfile,
1624
- inspectCurrentYaziProfile,
1625
- describeYaziProfile,
1626
- ensureYaziProfile,
1627
1781
  resolveYaziBinaries,
1628
1782
  createYaziSession,
1629
1783
  createMuxDomainModule
1630
1784
  };
1631
- //# sourceMappingURL=chunk-HZHHCK24.js.map
1785
+ //# sourceMappingURL=chunk-K6BF4U2H.js.map