@iowarp/clio-coder 0.3.9 → 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 (733) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/NOTICE +33 -0
  3. package/README.md +121 -16
  4. package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
  5. package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
  8. package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
  9. package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
  10. package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
  11. package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
  12. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  13. package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
  14. package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
  15. package/dist/chunk-42FMPA75.js +101 -0
  16. package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
  17. package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
  18. package/dist/chunk-5YHDIDBP.js +97 -0
  19. package/dist/chunk-6CCS4G3W.js +1529 -0
  20. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  21. package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
  22. package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
  23. package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
  24. package/dist/chunk-6NJQITNH.js +1412 -0
  25. package/dist/chunk-6VC4OV3Z.js +365 -0
  26. package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
  27. package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
  28. package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
  29. package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
  30. package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
  31. package/dist/chunk-7RY5VZPH.js +573 -0
  32. package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
  33. package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
  34. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  35. package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
  36. package/dist/chunk-AP73CFDC.js +308 -0
  37. package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
  38. package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
  39. package/dist/chunk-BJGUKIG4.js +302 -0
  40. package/dist/chunk-BMS5RKQY.js +27 -0
  41. package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
  42. package/dist/chunk-BTK3SSSK.js +67 -0
  43. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  44. package/dist/chunk-BWW4HLO4.js +301 -0
  45. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  46. package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
  47. package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
  48. package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
  49. package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
  50. package/dist/chunk-D4CJV46V.js +462 -0
  51. package/dist/chunk-D7E7WCDF.js +27 -0
  52. package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
  53. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  54. package/dist/chunk-EIMVLWB3.js +1842 -0
  55. package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
  56. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  57. package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
  58. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  59. package/dist/chunk-GIZNH63R.js +40 -0
  60. package/dist/chunk-GPPB3JBE.js +688 -0
  61. package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
  62. package/dist/chunk-HHV2GANA.js +88 -0
  63. package/dist/chunk-HJWWJ6IL.js +184 -0
  64. package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
  65. package/dist/chunk-HRQMFLJP.js +75 -0
  66. package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
  67. package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
  68. package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
  69. package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
  70. package/dist/chunk-J4HBWF6Y.js +2635 -0
  71. package/dist/chunk-J5LZHVIT.js +284 -0
  72. package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
  73. package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
  74. package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
  75. package/dist/chunk-K6BF4U2H.js +1785 -0
  76. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  77. package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
  78. package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
  79. package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
  80. package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
  81. package/dist/chunk-NDDGJUXD.js +81 -0
  82. package/dist/chunk-NEKRRTYW.js +56 -0
  83. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
  86. package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
  87. package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
  88. package/dist/chunk-PMZCIOCJ.js +25 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
  91. package/dist/chunk-QDC3K2U3.js +262 -0
  92. package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
  93. package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
  94. package/dist/chunk-QSNYB6ZV.js +195 -0
  95. package/dist/chunk-QTFGO774.js +644 -0
  96. package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
  97. package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
  98. package/dist/chunk-R346GLFC.js +31 -0
  99. package/dist/chunk-RKSR6VSF.js +132 -0
  100. package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
  101. package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
  102. package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
  103. package/dist/chunk-T56WDKA5.js +183 -0
  104. package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
  105. package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
  106. package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
  107. package/dist/chunk-TVHHYFHE.js +255 -0
  108. package/dist/chunk-U2WB7TZS.js +271 -0
  109. package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
  110. package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
  111. package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
  112. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  113. package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
  114. package/dist/chunk-VKFQTNDV.js +66 -0
  115. package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
  116. package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
  117. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  118. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  119. package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
  120. package/dist/chunk-WR6U3OVP.js +45 -0
  121. package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
  122. package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
  123. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  124. package/dist/chunk-YAKGTXEV.js +17 -0
  125. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  126. package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
  127. package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
  128. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  129. package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
  130. package/dist/cli/index.js +48 -37
  131. package/dist/clio-IT3G3VQH.js +25 -0
  132. package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
  133. package/dist/codewiki/build-worker.js +1 -1
  134. package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
  135. package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
  136. package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
  137. package/dist/configure-FL7Y3KJF.js +54 -0
  138. package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
  139. package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
  140. package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
  141. package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
  142. package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
  143. package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
  144. package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
  145. package/dist/doctor-ZGPEGHIP.js +772 -0
  146. package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
  147. package/dist/eval-inventory-HBWSWQOK.js +315 -0
  148. package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
  149. package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
  150. package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
  151. package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
  152. package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
  153. package/dist/fleet-decisions-OTHB6KRL.js +157 -0
  154. package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
  155. package/dist/fleet-inspect-SS6YMDCK.js +445 -0
  156. package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
  157. package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
  158. package/dist/fleet-verify-QD5M7E7Q.js +178 -0
  159. package/dist/fleet-view-WAMJYNDT.js +94 -0
  160. package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
  161. package/dist/install-NKNG7KD4.js +13 -0
  162. package/dist/interop-34TVO25M.js +116 -0
  163. package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
  164. package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
  165. package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
  166. package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
  167. package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
  168. package/dist/panes-7STHOAUJ.js +103 -0
  169. package/dist/panes-SHAUIRXY.js +60 -0
  170. package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
  171. package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
  172. package/dist/resources-74GKTLSF.js +115 -0
  173. package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
  174. package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
  175. package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
  176. package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
  177. package/dist/skills-inventory-J357J34F.js +129 -0
  178. package/dist/slash-commands-JZZCQA32.js +79 -0
  179. package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
  180. package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
  181. package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
  182. package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
  183. package/dist/tools-MKNWVPBH.js +29 -0
  184. package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
  185. package/dist/tui-primitives-K5PASC3O.js +17 -0
  186. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
  187. package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
  188. package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
  189. package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
  190. package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
  191. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
  192. package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
  193. package/dist/with-panes-OBOBFIIR.js +818 -0
  194. package/dist/worker/entry.js +131 -91
  195. package/docs/README.md +3 -2
  196. package/docs/acp.md +25 -4
  197. package/docs/alcf-provider.md +1 -1
  198. package/docs/architecture.md +2 -2
  199. package/docs/artifact-versions.md +4 -1
  200. package/docs/built-in-agents.md +40 -32
  201. package/docs/capacity-and-scheduling.md +43 -5
  202. package/docs/commands-and-modes.md +39 -4
  203. package/docs/config-knobs-audit.md +3 -0
  204. package/docs/configuration-and-targets.md +138 -167
  205. package/docs/context-engine.md +1 -1
  206. package/docs/development-pipeline.md +19 -0
  207. package/docs/dispatch-typed-intent.md +385 -0
  208. package/docs/documentation-coverage.md +2 -2
  209. package/docs/documentation-guide.md +1 -1
  210. package/docs/environment-variables.md +3 -1
  211. package/docs/eval-runner.md +1 -1
  212. package/docs/evals-internal.md +1 -1
  213. package/docs/evidence-and-memory.md +2 -2
  214. package/docs/evolution.md +1 -1
  215. package/docs/exit-codes-and-output.md +3 -1
  216. package/docs/extensions-and-sharing.md +25 -1
  217. package/docs/fleet-demo-runbook.md +6 -3
  218. package/docs/fleet-dispatch.md +30 -7
  219. package/docs/installation-and-lifecycle.md +16 -3
  220. package/docs/middleware-and-components.md +1 -1
  221. package/docs/model-catalog.md +10 -1
  222. package/docs/observability.md +3 -3
  223. package/docs/proactive-memory.md +1 -1
  224. package/docs/prompt-envelope-and-tools.md +1 -1
  225. package/docs/provider-adapter-cookbook.md +1 -1
  226. package/docs/release-cut-checklist.md +164 -177
  227. package/docs/safety-model.md +2 -2
  228. package/docs/scientific-validation.md +3 -3
  229. package/docs/session-lifecycle.md +1 -1
  230. package/docs/skills-marketplace.md +1 -1
  231. package/docs/tool-usage.md +18 -8
  232. package/docs/trace-store.md +16 -11
  233. package/docs/troubleshooting.md +2 -2
  234. package/docs/tui-design.md +1 -1
  235. package/docs/worker-dispatch-mechanics.md +1 -1
  236. package/evals/README.md +5 -0
  237. package/evals/behavioral-corpus-grader.mjs +103 -0
  238. package/evals/behavioral-machinery-baseline.json +2276 -0
  239. package/evals/behavioral-machinery-driver.ts +250 -0
  240. package/evals/behavioral-machinery-support.ts +253 -0
  241. package/evals/behavioral-machinery.yaml +614 -0
  242. package/evals/behavioral-model-negative-control.yaml +68 -0
  243. package/evals/behavioral-model.yaml +216 -0
  244. package/evals/fixtures/behavioral-facts.txt +3 -0
  245. package/evals/fixtures/behavioral-main.ts +7 -0
  246. package/evals/fixtures/decoy/note.txt +2 -0
  247. package/evals/fixtures/private/credentials.txt +1 -0
  248. package/evals/tracked-metrics-baseline.yaml +229 -0
  249. package/evals/tracked-metrics-grader.mjs +129 -0
  250. package/package.json +8 -16
  251. package/skills/README.md +6 -6
  252. package/skills/coding/ast-grep/SKILL.md +8 -2
  253. package/skills/coding/coding-standards/SKILL.md +8 -2
  254. package/skills/coding/prototype/SKILL.md +8 -2
  255. package/skills/coding/tdd/SKILL.md +8 -2
  256. package/skills/context/context-handoff/SKILL.md +12 -3
  257. package/skills/context/context-handoff/evals.md +3 -3
  258. package/skills/context/context-prime/SKILL.md +8 -2
  259. package/skills/context/context-prime/evals.md +2 -2
  260. package/skills/git/file-ticket/SKILL.md +9 -4
  261. package/skills/git/file-ticket/evals.md +2 -2
  262. package/skills/git/fix-issue/SKILL.md +12 -5
  263. package/skills/git/fix-issue/evals.md +4 -4
  264. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  265. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  266. package/skills/git/ship/SKILL.md +9 -3
  267. package/skills/git/ship/evals.md +4 -4
  268. package/skills/git/worktree-create/SKILL.md +7 -2
  269. package/skills/git/worktree-create/evals.md +6 -6
  270. package/skills/git/worktree-merge/SKILL.md +7 -2
  271. package/skills/git/worktree-merge/evals.md +6 -6
  272. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  273. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  274. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  275. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  276. package/skills/meta/credentials/SKILL.md +9 -2
  277. package/skills/meta/find-skills/SKILL.md +8 -2
  278. package/skills/meta/herdr/SKILL.md +8 -2
  279. package/skills/meta/skill-craft/SKILL.md +21 -4
  280. package/skills/planning/architecture/SKILL.md +9 -3
  281. package/skills/planning/backlog/SKILL.md +8 -2
  282. package/skills/planning/prd/SKILL.md +8 -2
  283. package/skills/planning/product-intent/SKILL.md +8 -2
  284. package/skills/planning/tech-spec/SKILL.md +9 -3
  285. package/skills/registry.yaml +66 -66
  286. package/skills/research/arxiv-literature/SKILL.md +8 -2
  287. package/skills/research/experiment-protocol/SKILL.md +9 -2
  288. package/skills/research/scientific-debugging/SKILL.md +9 -2
  289. package/skills/research/scientific-debugging/evals.md +2 -2
  290. package/skills/research/scientific-modernization/SKILL.md +9 -2
  291. package/skills/skill-marketplace.json +257 -38
  292. package/skills/workflow/cut-it/SKILL.md +10 -2
  293. package/skills/workflow/design-council/SKILL.md +11 -2
  294. package/skills/workflow/grill-me/SKILL.md +8 -2
  295. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  296. package/src/cli/acp.ts +8 -4
  297. package/src/cli/argv.ts +25 -0
  298. package/src/cli/auth.ts +2 -2
  299. package/src/cli/bootstrap-generate.ts +5 -5
  300. package/src/cli/clio.ts +6 -1
  301. package/src/cli/config-inspect.ts +3 -3
  302. package/src/cli/configure-interop.ts +1 -1
  303. package/src/cli/configure.ts +50 -48
  304. package/src/cli/default-target.ts +1 -1
  305. package/src/cli/docs.ts +6 -6
  306. package/src/cli/doctor-naming.ts +323 -0
  307. package/src/cli/doctor-panes.ts +156 -0
  308. package/src/cli/doctor-toolchain.ts +78 -0
  309. package/src/cli/doctor.ts +34 -1
  310. package/src/cli/eval-inventory.ts +436 -0
  311. package/src/cli/eval.ts +13 -0
  312. package/src/cli/evidence-detail.ts +88 -0
  313. package/src/cli/evidence-inventory.ts +183 -0
  314. package/src/cli/evidence.ts +30 -5
  315. package/src/cli/fleet-decisions.ts +69 -0
  316. package/src/cli/fleet-inspect.ts +334 -0
  317. package/src/cli/fleet-preflight.ts +1 -1
  318. package/src/cli/fleet-verify.ts +133 -0
  319. package/src/cli/fleet-view.ts +827 -0
  320. package/src/cli/fleet.ts +154 -40
  321. package/src/cli/index.ts +14 -2
  322. package/src/cli/interop-inspect.ts +128 -0
  323. package/src/cli/interop.ts +34 -0
  324. package/src/cli/models.ts +3 -3
  325. package/src/cli/modes/print.ts +1 -1
  326. package/src/cli/panes.ts +35 -0
  327. package/src/cli/reset.ts +6 -3
  328. package/src/cli/run.ts +67 -13
  329. package/src/cli/share.ts +1 -1
  330. package/src/cli/skills-eval.ts +11 -11
  331. package/src/cli/skills-inventory.ts +185 -0
  332. package/src/cli/skills.ts +16 -13
  333. package/src/cli/targets.ts +23 -24
  334. package/src/cli/tools.ts +321 -0
  335. package/src/cli/trace-inspect.ts +252 -0
  336. package/src/cli/trace.ts +64 -2
  337. package/src/cli/uninstall.ts +2 -2
  338. package/src/cli/upgrade.ts +29 -34
  339. package/src/cli/usage.ts +2 -2
  340. package/src/cli/validate-model.ts +1 -1
  341. package/src/cli/verifiers-inspect.ts +347 -0
  342. package/src/cli/verifiers.ts +9 -0
  343. package/src/cli/wiki-generate.ts +5 -5
  344. package/src/core/bash-exec.ts +1 -1
  345. package/src/core/boot-trace.ts +3 -3
  346. package/src/core/bus-events.ts +4 -0
  347. package/src/core/bus-trace.ts +2 -2
  348. package/src/core/compile-cache.ts +1 -1
  349. package/src/core/config.ts +1070 -845
  350. package/src/core/defaults.ts +342 -463
  351. package/src/core/domain-loader.ts +6 -4
  352. package/src/core/event-bus.ts +1 -1
  353. package/src/core/file-references.ts +78 -88
  354. package/src/core/git-commit-attribution.ts +3 -9
  355. package/src/core/guardrails.ts +24 -4
  356. package/src/core/naming-compat.ts +45 -0
  357. package/src/core/naming-events.ts +62 -0
  358. package/src/core/recent-models.ts +1 -7
  359. package/src/core/residency-protection.ts +4 -8
  360. package/src/core/resolve-config-value.ts +1 -1
  361. package/src/core/response-model-id.ts +0 -14
  362. package/src/core/response-schema.ts +44 -4
  363. package/src/core/session-routing.ts +84 -74
  364. package/src/core/skill-activation.ts +18 -0
  365. package/src/core/termination.ts +4 -4
  366. package/src/core/theme-token-hex.ts +43 -0
  367. package/src/core/timers.ts +2 -12
  368. package/src/core/tool-names.ts +2 -1
  369. package/src/core/xdg.ts +1 -1
  370. package/src/domains/agents/catalog.ts +2 -12
  371. package/src/domains/agents/extension.ts +3 -3
  372. package/src/domains/agents/fleets/build-review.md +0 -3
  373. package/src/domains/agents/fleets/build-test.md +0 -3
  374. package/src/domains/agents/registry.ts +7 -7
  375. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  376. package/src/domains/agents/result-contract.ts +165 -36
  377. package/src/domains/agents/spec.ts +0 -11
  378. package/src/domains/config/classify.ts +37 -46
  379. package/src/domains/config/extension.ts +5 -5
  380. package/src/domains/config/keybindings.ts +48 -47
  381. package/src/domains/config/watcher.ts +1 -1
  382. package/src/domains/context/codewiki/indexer.ts +1 -1
  383. package/src/domains/context/extension.ts +3 -3
  384. package/src/domains/context/prompt-context.ts +1 -1
  385. package/src/domains/context/wiki/assemble.ts +2 -2
  386. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  387. package/src/domains/context/working-set/replay/report.ts +1 -1
  388. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  389. package/src/domains/dispatch/active-route-planner.ts +2 -2
  390. package/src/domains/dispatch/admission-error.ts +9 -0
  391. package/src/domains/dispatch/admission.ts +22 -21
  392. package/src/domains/dispatch/agent-candidates.ts +1 -1
  393. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  394. package/src/domains/dispatch/agent-ledger.ts +1 -1
  395. package/src/domains/dispatch/assignment.ts +5 -5
  396. package/src/domains/dispatch/capacity-lease.ts +23 -6
  397. package/src/domains/dispatch/code-step.ts +1 -1
  398. package/src/domains/dispatch/contract.ts +2 -2
  399. package/src/domains/dispatch/council-topology.ts +398 -0
  400. package/src/domains/dispatch/extension.ts +287 -111
  401. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  402. package/src/domains/dispatch/fleet-plan.ts +7 -2
  403. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  404. package/src/domains/dispatch/fleet-run.ts +59 -3
  405. package/src/domains/dispatch/gate-decisions.ts +36 -15
  406. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  407. package/src/domains/dispatch/gate-topology.ts +289 -0
  408. package/src/domains/dispatch/index.ts +19 -0
  409. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  410. package/src/domains/dispatch/intent.ts +85 -1
  411. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  412. package/src/domains/dispatch/path-scope.ts +0 -61
  413. package/src/domains/dispatch/placement.ts +2 -2
  414. package/src/domains/dispatch/receipt-findings.ts +1 -1
  415. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  416. package/src/domains/dispatch/reservation-store.ts +24 -27
  417. package/src/domains/dispatch/route-decision.ts +1 -1
  418. package/src/domains/dispatch/route-history.ts +1 -1
  419. package/src/domains/dispatch/route-policy.ts +1 -1
  420. package/src/domains/dispatch/route-readiness.ts +0 -28
  421. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  422. package/src/domains/dispatch/run-event-journal.ts +599 -0
  423. package/src/domains/dispatch/state.ts +45 -1
  424. package/src/domains/dispatch/tool-stats.ts +1 -1
  425. package/src/domains/dispatch/transport.ts +2 -19
  426. package/src/domains/dispatch/types.ts +16 -3
  427. package/src/domains/dispatch/validation.ts +33 -8
  428. package/src/domains/dispatch/worker-protocol.ts +2 -2
  429. package/src/domains/eval/artifacts/store.ts +5 -4
  430. package/src/domains/eval/compare/compare.ts +3 -16
  431. package/src/domains/eval/compare/thresholds.ts +0 -8
  432. package/src/domains/eval/execution-provenance.ts +1 -1
  433. package/src/domains/eval/inventory.ts +113 -0
  434. package/src/domains/eval/metrics/token-stream.ts +0 -7
  435. package/src/domains/eval/report.ts +1 -1
  436. package/src/domains/eval/runner.ts +1 -1
  437. package/src/domains/eval/runners/clio-run.ts +7 -6
  438. package/src/domains/eval/runners/external-command.ts +4 -3
  439. package/src/domains/eval/schema/artifact.ts +1 -1
  440. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  441. package/src/domains/eval/schema/behavioral.ts +7 -6
  442. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  443. package/src/domains/eval/schema/naming.ts +10 -0
  444. package/src/domains/eval/schema/serving.ts +31 -0
  445. package/src/domains/eval/schema/suite.ts +2 -2
  446. package/src/domains/eval/schema/validate.ts +9 -5
  447. package/src/domains/eval/schema/verdict.ts +4 -2
  448. package/src/domains/eval/store.ts +12 -2
  449. package/src/domains/eval/suites/run.ts +12 -6
  450. package/src/domains/eval/types.ts +1 -1
  451. package/src/domains/eval/workspaces/git.ts +1 -1
  452. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  453. package/src/domains/evidence/build.ts +13 -5
  454. package/src/domains/evidence/store.ts +6 -0
  455. package/src/domains/interop/consent.ts +7 -7
  456. package/src/domains/interop/extension.ts +1 -1
  457. package/src/domains/lifecycle/doctor.ts +27 -21
  458. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  459. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  460. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  461. package/src/domains/lifecycle/migrations/index.ts +20 -1
  462. package/src/domains/lifecycle/naming-history.ts +153 -0
  463. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  464. package/src/domains/lifecycle/naming-resources.ts +261 -0
  465. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  466. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  467. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  468. package/src/domains/memory/index.ts +0 -1
  469. package/src/domains/memory/task-memory-handoff.ts +6 -3
  470. package/src/domains/memory/task-memory-policy.ts +6 -10
  471. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  472. package/src/domains/middleware/index.ts +7 -0
  473. package/src/domains/middleware/marketplace-offer.ts +339 -0
  474. package/src/domains/middleware/memory-intervention.ts +33 -21
  475. package/src/domains/middleware/runtime.ts +2 -2
  476. package/src/domains/mux/contract.ts +566 -0
  477. package/src/domains/mux/detect.ts +182 -0
  478. package/src/domains/mux/dock-controller.ts +365 -0
  479. package/src/domains/mux/extension.ts +53 -0
  480. package/src/domains/mux/index.ts +116 -0
  481. package/src/domains/mux/manifest.ts +6 -0
  482. package/src/domains/mux/operations.ts +192 -0
  483. package/src/domains/mux/pane-registry.ts +90 -0
  484. package/src/domains/mux/protocol.ts +62 -0
  485. package/src/domains/mux/socket-client.ts +964 -0
  486. package/src/domains/mux/types.ts +265 -0
  487. package/src/domains/mux/viewer-command.ts +59 -0
  488. package/src/domains/mux/yazi/assets/init.lua +2 -0
  489. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  490. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  491. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  492. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  493. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  494. package/src/domains/mux/yazi/event-stream.ts +182 -0
  495. package/src/domains/mux/yazi/profile.ts +299 -0
  496. package/src/domains/mux/yazi/session.ts +251 -0
  497. package/src/domains/mux/yazi/theme.ts +30 -0
  498. package/src/domains/observability/cost.ts +21 -0
  499. package/src/domains/observability/extension.ts +1 -1
  500. package/src/domains/observability/index.ts +2 -0
  501. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  502. package/src/domains/observability/projection.ts +1 -1
  503. package/src/domains/observability/trace-store.ts +63 -11
  504. package/src/domains/prompts/compiler.ts +2 -2
  505. package/src/domains/prompts/extension.ts +3 -3
  506. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  507. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  508. package/src/domains/providers/endpoint-capacity.ts +154 -22
  509. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  510. package/src/domains/providers/extension.ts +25 -8
  511. package/src/domains/providers/index.ts +22 -0
  512. package/src/domains/providers/knowledge-base-path.ts +1 -1
  513. package/src/domains/providers/model-runtime-capabilities.ts +46 -2
  514. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  515. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  516. package/src/domains/providers/plugins.ts +1 -1
  517. package/src/domains/providers/resolver.ts +1 -1
  518. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  519. package/src/domains/providers/runtimes/builtins.ts +2 -0
  520. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  521. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  522. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  523. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  524. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  525. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  526. package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
  527. package/src/domains/providers/support.ts +1 -0
  528. package/src/domains/providers/target-model-cache.ts +124 -0
  529. package/src/domains/providers/types/knowledge-base.ts +13 -0
  530. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  531. package/src/domains/providers/types/target-descriptor.ts +3 -3
  532. package/src/domains/resources/extension.ts +1 -1
  533. package/src/domains/resources/index.ts +3 -0
  534. package/src/domains/resources/library.ts +6 -6
  535. package/src/domains/resources/prompts/loader.ts +1 -1
  536. package/src/domains/resources/skills/content-hash.ts +7 -6
  537. package/src/domains/resources/skills/evals.ts +1 -1
  538. package/src/domains/resources/skills/install.ts +36 -12
  539. package/src/domains/resources/skills/loader.ts +72 -13
  540. package/src/domains/resources/skills/marketplace.ts +21 -2
  541. package/src/domains/resources/skills/promotion.ts +214 -0
  542. package/src/domains/safety/action-classifier.ts +6 -0
  543. package/src/domains/safety/audit.ts +2 -2
  544. package/src/domains/safety/finish-contract.ts +2 -1
  545. package/src/domains/safety/run-effects.ts +1 -1
  546. package/src/domains/scheduling/extension.ts +4 -4
  547. package/src/domains/session/archive-readers.ts +9 -1
  548. package/src/domains/session/compaction/branch-summary.ts +4 -0
  549. package/src/domains/session/compaction/compact.ts +1 -1
  550. package/src/domains/session/compaction/tokens.ts +4 -0
  551. package/src/domains/session/context-accounting.ts +1 -1
  552. package/src/domains/session/decision-board.ts +1 -1
  553. package/src/domains/session/extension.ts +1 -1
  554. package/src/domains/session/handoff.ts +2 -2
  555. package/src/domains/session/prompt-manifest.ts +0 -5
  556. package/src/domains/session/protected-artifact-journal.ts +12 -6
  557. package/src/domains/session/retry.ts +1 -1
  558. package/src/domains/share/archive.ts +85 -36
  559. package/src/domains/toolchain/archive.ts +175 -0
  560. package/src/domains/toolchain/contract.ts +28 -0
  561. package/src/domains/toolchain/extension.ts +47 -0
  562. package/src/domains/toolchain/index.ts +39 -0
  563. package/src/domains/toolchain/install.ts +327 -0
  564. package/src/domains/toolchain/manifest.ts +8 -0
  565. package/src/domains/toolchain/paths.ts +34 -0
  566. package/src/domains/toolchain/registry.ts +265 -0
  567. package/src/domains/toolchain/remove.ts +218 -0
  568. package/src/domains/toolchain/resolve.ts +182 -0
  569. package/src/domains/toolchain/types.ts +113 -0
  570. package/src/domains/toolchain/version.ts +88 -0
  571. package/src/engine/acp/adapter.ts +3 -3
  572. package/src/engine/acp/event-mapper.ts +3 -3
  573. package/src/engine/acp/server.ts +440 -96
  574. package/src/engine/acp/tool-mediator.ts +2 -2
  575. package/src/engine/acp/types.ts +20 -2
  576. package/src/engine/alcf-oauth.ts +5 -5
  577. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  578. package/src/engine/api-registry.ts +1 -1
  579. package/src/engine/apis/llamacpp-residency.ts +1 -19
  580. package/src/engine/apis/lmstudio.ts +1 -6
  581. package/src/engine/apis/ollama-native.ts +3 -3
  582. package/src/engine/apis/openai-completions.ts +2 -2
  583. package/src/engine/apis/residency.ts +3 -9
  584. package/src/engine/claude/sdk-module.ts +87 -0
  585. package/src/engine/claude/sdk-runtime.ts +25 -17
  586. package/src/engine/claude/subprocess-runtime.ts +1 -1
  587. package/src/engine/claude/tool-safety.ts +4 -4
  588. package/src/engine/loop-guard.ts +0 -5
  589. package/src/engine/session.ts +14 -7
  590. package/src/engine/tui-primitives.ts +21 -0
  591. package/src/engine/tui.ts +1 -0
  592. package/src/engine/worker-events.ts +6 -6
  593. package/src/engine/worker-runtime.ts +16 -26
  594. package/src/entry/boot-options.ts +2 -0
  595. package/src/entry/orchestrator.ts +207 -90
  596. package/src/entry/panes-activation.ts +31 -0
  597. package/src/entry/with-panes.ts +20 -0
  598. package/src/interactive/application-controller.ts +21 -21
  599. package/src/interactive/bus-notices.ts +2 -2
  600. package/src/interactive/chat-loop.ts +8 -8
  601. package/src/interactive/chat-panel.ts +1 -1
  602. package/src/interactive/clio-editor.ts +105 -1
  603. package/src/interactive/context-activity.ts +8 -6
  604. package/src/interactive/context-meter.ts +3 -6
  605. package/src/interactive/context-overlay.ts +2 -1
  606. package/src/interactive/cost-overlay.ts +3 -1
  607. package/src/interactive/council-grid.ts +3 -5
  608. package/src/interactive/council.ts +11 -0
  609. package/src/interactive/dispatch-board.ts +56 -49
  610. package/src/interactive/editor-bash.ts +21 -0
  611. package/src/interactive/editor-steer.ts +9 -4
  612. package/src/interactive/editor-submit.ts +24 -18
  613. package/src/interactive/external-editor.ts +1 -1
  614. package/src/interactive/file-reference-completion.ts +360 -0
  615. package/src/interactive/footer/dashboard.ts +15 -17
  616. package/src/interactive/footer/notifications.ts +14 -8
  617. package/src/interactive/footer/widgets.ts +2 -44
  618. package/src/interactive/interactive-application.ts +229 -62
  619. package/src/interactive/interactive-event-projection.ts +1 -1
  620. package/src/interactive/interactive-input-runtime.ts +9 -2
  621. package/src/interactive/interactive-presentation.ts +21 -16
  622. package/src/interactive/interactive-shell.ts +2 -2
  623. package/src/interactive/interactive-slash-runtime.ts +99 -23
  624. package/src/interactive/interactive-subscriptions.ts +1 -1
  625. package/src/interactive/interactive-tickers.ts +1 -1
  626. package/src/interactive/keybinding-manager.ts +4 -4
  627. package/src/interactive/layout.ts +1 -1
  628. package/src/interactive/memory-overlay.ts +3 -2
  629. package/src/interactive/modal-marker.ts +151 -0
  630. package/src/interactive/mutation-preview.ts +1 -1
  631. package/src/interactive/mux-bridge.ts +214 -0
  632. package/src/interactive/overlay-frame.ts +62 -14
  633. package/src/interactive/overlay-general-openers.ts +7 -2
  634. package/src/interactive/overlay-key-routing.ts +21 -10
  635. package/src/interactive/overlay-lifecycle.ts +20 -4
  636. package/src/interactive/overlay-model-selectors.ts +43 -6
  637. package/src/interactive/overlay-permission-lifecycle.ts +90 -22
  638. package/src/interactive/overlay-transitions.ts +18 -4
  639. package/src/interactive/overlays/agents.ts +3 -2
  640. package/src/interactive/overlays/ask-user.ts +161 -41
  641. package/src/interactive/overlays/auth-dialog.ts +1 -0
  642. package/src/interactive/overlays/context-reset.ts +29 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +29 -4
  644. package/src/interactive/overlays/decisions.ts +15 -13
  645. package/src/interactive/overlays/extensions.ts +1 -0
  646. package/src/interactive/overlays/fleet-run-approval.ts +4 -3
  647. package/src/interactive/overlays/handoff-review.ts +3 -2
  648. package/src/interactive/overlays/help-reference.ts +2 -0
  649. package/src/interactive/overlays/interop.ts +2 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +2 -1
  651. package/src/interactive/overlays/library-tabs.ts +28 -0
  652. package/src/interactive/overlays/list-overlay.ts +10 -1
  653. package/src/interactive/overlays/message-picker.ts +2 -1
  654. package/src/interactive/overlays/model-scope.ts +86 -0
  655. package/src/interactive/overlays/model-selector.ts +40 -31
  656. package/src/interactive/overlays/prompts.ts +11 -4
  657. package/src/interactive/overlays/session-selector.ts +3 -2
  658. package/src/interactive/overlays/settings-sections.ts +30 -0
  659. package/src/interactive/overlays/settings.ts +849 -268
  660. package/src/interactive/overlays/side-question.ts +3 -2
  661. package/src/interactive/overlays/skills-hub.ts +11 -19
  662. package/src/interactive/overlays/tree-selector.ts +3 -2
  663. package/src/interactive/pane-policy.ts +46 -0
  664. package/src/interactive/panes-runtime.ts +318 -0
  665. package/src/interactive/permission-overlay.ts +2 -2
  666. package/src/interactive/renderers/compaction-summary.ts +29 -0
  667. package/src/interactive/renderers/retry-status.ts +12 -4
  668. package/src/interactive/renderers/tool-execution.ts +4 -4
  669. package/src/interactive/renderers/worker-entry.ts +122 -14
  670. package/src/interactive/session-transcript.ts +3 -3
  671. package/src/interactive/slash-autocomplete.ts +454 -165
  672. package/src/interactive/slash-commands.ts +521 -189
  673. package/src/interactive/slash-spec.ts +160 -17
  674. package/src/interactive/status/controller.ts +2 -2
  675. package/src/interactive/stream-pacing-policy.ts +1 -1
  676. package/src/interactive/tasks-overlay.ts +21 -13
  677. package/src/interactive/terminal-lease.ts +6 -7
  678. package/src/interactive/theme/tokens.ts +3 -14
  679. package/src/interactive/turn-context.ts +58 -13
  680. package/src/interactive/turn-persistence.ts +2 -2
  681. package/src/interactive/turn-prewarm.ts +2 -2
  682. package/src/interactive/turn-runtime.ts +8 -8
  683. package/src/interactive/turn-state.ts +1 -1
  684. package/src/interactive/view/artifacts.ts +120 -9
  685. package/src/interactive/view/view-overlay.ts +14 -10
  686. package/src/interactive/watch-pane.ts +180 -0
  687. package/src/interactive/welcome-dashboard.ts +15 -15
  688. package/src/interactive/worker-progress.ts +11 -5
  689. package/src/interactive/worker-receipts.ts +20 -2
  690. package/src/interactive/worker-stream.ts +6 -4
  691. package/src/interactive/yazi-bridge.ts +451 -0
  692. package/src/tools/ask-user.ts +3 -3
  693. package/src/tools/bash.ts +1 -1
  694. package/src/tools/bootstrap.ts +26 -2
  695. package/src/tools/builtin-tool-catalog.ts +16 -1
  696. package/src/tools/compete-worktrees.ts +108 -17
  697. package/src/tools/context/index.ts +15 -1
  698. package/src/tools/core-bootstrap.ts +2 -1
  699. package/src/tools/dispatch-admission.ts +18 -5
  700. package/src/tools/dispatch-arguments.ts +21 -21
  701. package/src/tools/dispatch-plan.ts +0 -11
  702. package/src/tools/dispatch-run-events.ts +145 -28
  703. package/src/tools/dispatch-runner.ts +40 -13
  704. package/src/tools/dispatch-types.ts +15 -3
  705. package/src/tools/dispatch.ts +2 -2
  706. package/src/tools/executables.ts +17 -14
  707. package/src/tools/find.ts +1 -6
  708. package/src/tools/monitor.ts +4 -4
  709. package/src/tools/observation.ts +54 -4
  710. package/src/tools/observers.ts +0 -33
  711. package/src/tools/panes-surface.ts +38 -0
  712. package/src/tools/panes.ts +112 -0
  713. package/src/tools/policy.ts +10 -1
  714. package/src/tools/presentation.ts +1 -0
  715. package/src/tools/task-worktree.ts +28 -7
  716. package/src/tools/verify/authoring.ts +3 -6
  717. package/src/tools/verify/frontend.ts +1 -1
  718. package/src/tools/web-fetch.ts +1 -1
  719. package/src/worker/entry.ts +4 -3
  720. package/src/worker/protocol.ts +16 -14
  721. package/src/worker/spec-contract.ts +2 -2
  722. package/src/worker/stdin-demux.ts +2 -2
  723. package/dist/chunk-D73KXYPF.js +0 -37
  724. package/dist/chunk-MLOK6ZOS.js +0 -2888
  725. package/dist/chunk-PNY46YEY.js +0 -1581
  726. package/dist/chunk-XDOQXGFO.js +0 -515
  727. package/dist/chunk-YKOFT37S.js +0 -279
  728. package/dist/clio-LT5V7SSZ.js +0 -26
  729. package/dist/configure-2WYWSCSD.js +0 -49
  730. package/dist/doctor-TWBWFK5V.js +0 -165
  731. package/src/engine/apis/degraded-inference.ts +0 -95
  732. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  733. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -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;
@@ -261,6 +261,8 @@ export function createWorkerProgressFold(): WorkerProgressFold {
261
261
  const toolNames: string[] = [];
262
262
  let settled = false;
263
263
  let durable = "";
264
+ /** True after one assistant message ended and before the next message emits prose. */
265
+ let betweenAssistantMessages = false;
264
266
  /** Starts still awaiting a finish, oldest first. */
265
267
  const pendingActions: WorkerAction[] = [];
266
268
  /** New streams resolve exact starts through this index. */
@@ -340,7 +342,9 @@ export function createWorkerProgressFold(): WorkerProgressFold {
340
342
 
341
343
  const delta = workerTextDelta(event);
342
344
  if (delta.length > 0) {
343
- changed = appendTail(admitDelta(delta, nowMs)) || changed;
345
+ const separator = betweenAssistantMessages && tailText.length > 0 && !tailText.endsWith("\n") ? "\n\n" : "";
346
+ betweenAssistantMessages = false;
347
+ changed = appendTail(admitDelta(`${separator}${delta}`, nowMs)) || changed;
344
348
  changed = setPhase("writing") || changed;
345
349
  } else if (isThinkingEvent(event)) {
346
350
  // The phase moves and nothing else: reasoning content is never kept.
@@ -355,10 +359,11 @@ export function createWorkerProgressFold(): WorkerProgressFold {
355
359
  if (delta.length === 0 && tailText.trim().length === 0) {
356
360
  changed = appendTail(durableText) || changed;
357
361
  }
362
+ betweenAssistantMessages = true;
358
363
  }
359
364
 
360
365
  const action = toolEventAction(event);
361
- if (action !== null && event.type === "clio_tool_start") {
366
+ if (action !== null && event.type === "clio_coder_tool_start") {
362
367
  if (action.toolCallId !== undefined) {
363
368
  const duplicate = pendingActionsById.get(action.toolCallId);
364
369
  if (duplicate !== undefined) removePendingAction(duplicate);
@@ -370,7 +375,7 @@ export function createWorkerProgressFold(): WorkerProgressFold {
370
375
  touch();
371
376
  setPhase("tool");
372
377
  changed = true;
373
- } else if (action !== null && event.type === "clio_tool_finish") {
378
+ } else if (action !== null && event.type === "clio_coder_tool_finish") {
374
379
  // An id is authoritative when both sides carry it. If either side came
375
380
  // from an older or incomplete producer, retain the historical name match.
376
381
  const finished =
@@ -412,6 +417,7 @@ export function createWorkerProgressFold(): WorkerProgressFold {
412
417
  pendingActions.length = 0;
413
418
  pendingActionsById.clear();
414
419
  durable = "";
420
+ betweenAssistantMessages = false;
415
421
  settled = false;
416
422
  phase = "starting";
417
423
  touch();
@@ -19,7 +19,7 @@ import { clioStateDir } from "../core/xdg.js";
19
19
  import type { RunEnvelope, RunReceipt } from "../domains/dispatch/types.js";
20
20
  import { inspectRunReceiptTrustStatus } from "../domains/evidence/trust-status.js";
21
21
  import { receiptFilePath } from "./view/artifacts.js";
22
- import type { WorkerReceiptFacts, WorkerResultContract } from "./worker-stream.js";
22
+ import type { WorkerPresentedResultContract, WorkerReceiptFacts, WorkerResultContract } from "./worker-stream.js";
23
23
 
24
24
  function isRecord(value: unknown): value is Record<string, unknown> {
25
25
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -55,17 +55,34 @@ function contractFrom(receipt: Record<string, unknown>): WorkerResultContract |
55
55
  return conformance === "pass" || conformance === "fail" || conformance === "not-reached" ? conformance : undefined;
56
56
  }
57
57
 
58
+ const PRESENTED_RESULT_CONTRACTS: ReadonlyArray<WorkerPresentedResultContract> = [
59
+ "debugger-report",
60
+ "verifier-report",
61
+ "research-report",
62
+ "scout-report",
63
+ ];
64
+
65
+ /** The kind is integrity-covered inside the validator source id on current receipts. */
66
+ function contractKindFrom(receipt: Record<string, unknown>): WorkerPresentedResultContract | undefined {
67
+ const quality = isRecord(receipt.quality) ? receipt.quality : null;
68
+ const fact = quality !== null && isRecord(quality.resultContract) ? quality.resultContract : null;
69
+ const sourceId = optionalString(fact?.sourceId);
70
+ if (sourceId === undefined) return undefined;
71
+ return PRESENTED_RESULT_CONTRACTS.find((kind) => sourceId.startsWith(`agent-result-contract:${kind}:`));
72
+ }
73
+
58
74
  /**
59
75
  * Project a parsed receipt onto the facts a worker block renders. The input is
60
76
  * whatever JSON the file held, not a typed {@link RunReceipt}: receipts written
61
77
  * by older versions of Clio are still valid history, so every field is read
62
78
  * structurally and a missing one degrades the footer rather than the render.
63
79
  */
64
- export function workerReceiptFacts(receipt: Record<string, unknown>): WorkerReceiptFacts | null {
80
+ function workerReceiptFacts(receipt: Record<string, unknown>): WorkerReceiptFacts | null {
65
81
  const outcome = optionalString(receipt.outcome);
66
82
  if (outcome === undefined) return null;
67
83
  const output = isRecord(receipt.output) ? receipt.output : null;
68
84
  const contract = contractFrom(receipt);
85
+ const contractKind = contractKindFrom(receipt);
69
86
  const text = optionalString(output?.text);
70
87
  const failureMessage = optionalString(receipt.failureMessage);
71
88
  const outcomeCode = optionalString(receipt.outcomeCode);
@@ -82,6 +99,7 @@ export function workerReceiptFacts(receipt: Record<string, unknown>): WorkerRece
82
99
  ...(durationMs !== undefined ? { durationMs } : {}),
83
100
  ...(toolCalls !== undefined ? { toolCalls } : {}),
84
101
  ...(contract !== undefined ? { contract } : {}),
102
+ ...(contractKind !== undefined ? { contractKind } : {}),
85
103
  ...(text !== undefined ? { text } : {}),
86
104
  };
87
105
  }
@@ -61,6 +61,9 @@ export interface WorkerAttempt {
61
61
 
62
62
  export type WorkerResultContract = "pass" | "fail" | "not-reached" | "unmeasured";
63
63
 
64
+ /** Result kinds whose parsed envelopes have a dedicated transcript presentation. */
65
+ export type WorkerPresentedResultContract = "debugger-report" | "verifier-report" | "research-report" | "scout-report";
66
+
64
67
  /**
65
68
  * Terminal facts a worker block reports. Sealed by the receipt when it can be
66
69
  * read, carried by the terminal event otherwise. Every unit is optional and
@@ -76,6 +79,8 @@ export interface WorkerReceiptSummary {
76
79
  durationMs?: number;
77
80
  toolCalls?: number;
78
81
  contract?: WorkerResultContract;
82
+ /** Parsed from the receipt's result-contract source id; absent on legacy and untyped receipts. */
83
+ contractKind?: WorkerPresentedResultContract;
79
84
  /** From an abort marker rather than a sealed terminal event; a later DispatchCompleted/DispatchFailed replaces it. */
80
85
  provisional?: boolean;
81
86
  /** The run is over, but no receipt could be read for it, and the ledger row could not explain why either. */
@@ -180,10 +185,7 @@ function finiteNumber(value: unknown): number | undefined {
180
185
  return typeof value === "number" && Number.isFinite(value) ? value : undefined;
181
186
  }
182
187
 
183
- export function workerRuntimeKind(
184
- runtimeKind: RunKind | undefined,
185
- runtimeId: string | undefined,
186
- ): WorkerRunRuntimeKind {
188
+ function workerRuntimeKind(runtimeKind: RunKind | undefined, runtimeId: string | undefined): WorkerRunRuntimeKind {
187
189
  if (runtimeKind === "acp-delegation") return "acp";
188
190
  if (runtimeId === "claude-code") return "claude-code";
189
191
  if (runtimeId === "claude-sdk") return "claude-sdk";
@@ -0,0 +1,451 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
4
+ import { isAbsolute, join, relative, resolve } from "node:path";
5
+ import { clioCacheDir } from "../core/xdg.js";
6
+ import type { MuxContract } from "../domains/mux/index.js";
7
+ import type { YaziEvent } from "../domains/mux/yazi/event-stream.js";
8
+ import { ensureYaziProfile, yaziProfileDir } from "../domains/mux/yazi/profile.js";
9
+ import {
10
+ createYaziSession,
11
+ resolveYaziBinaries,
12
+ type YaziProfileMode,
13
+ type YaziResolvedBinaries,
14
+ type YaziSession,
15
+ type YaziSessionMode,
16
+ type YaziSessionOpenResult,
17
+ type YaziSessionOptions,
18
+ } from "../domains/mux/yazi/session.js";
19
+
20
+ export const YAZI_PICK_MAX_PATHS = 32;
21
+ export const YAZI_PICK_MAX_CHARS = 4096;
22
+ export const YAZI_LIVENESS_MS = 5000;
23
+
24
+ export interface YaziBridgeSettings {
25
+ mode: YaziSessionMode;
26
+ profile: YaziProfileMode;
27
+ followCwd: boolean;
28
+ /** Files-dock share of the height; absent leaves the dock spec's default. */
29
+ ratio?: number;
30
+ }
31
+
32
+ export interface YaziMentionBatch {
33
+ text: string;
34
+ inserted: number;
35
+ mentions: number;
36
+ plainPaths: number;
37
+ duplicates: number;
38
+ truncated: number;
39
+ }
40
+
41
+ export interface YaziBridgeStatus {
42
+ mode: YaziSessionMode | "closed";
43
+ paneId: string | null;
44
+ paneCwd: string | null;
45
+ lastLineAt: number | null;
46
+ droppedLines: number;
47
+ }
48
+
49
+ export type YaziBridgeOpenResult =
50
+ | { status: "opened"; mode: YaziSessionMode; paneId: string | null; existing: boolean }
51
+ | Exclude<YaziSessionOpenResult, { status: "opened" }>;
52
+
53
+ export interface YaziBridge {
54
+ open(options?: { once?: boolean }): Promise<YaziBridgeOpenResult>;
55
+ status(): Readonly<YaziBridgeStatus>;
56
+ dispose(): void;
57
+ }
58
+
59
+ export interface YaziBridgeDeps {
60
+ mux?: MuxContract;
61
+ getDraft: () => string;
62
+ setDraft: (text: string) => void;
63
+ requestRender: () => void;
64
+ notice: (level: "info" | "warning", text: string) => void;
65
+ getCwd: () => string;
66
+ getSettings?: () => Readonly<YaziBridgeSettings>;
67
+ openSession?: (options: YaziSessionOptions) => Promise<YaziSessionOpenResult>;
68
+ /** TUI lease used only by the no-mux, in-terminal chooser. */
69
+ stopUi?: () => void;
70
+ startUi?: () => void;
71
+ runTerminalChooser?: (options: { cwd: string; profileMode: YaziProfileMode }) => Promise<YaziTerminalChooserResult>;
72
+ statPath?: (path: string) => "file" | "directory" | "other";
73
+ livenessMs?: number;
74
+ pickToken?: () => string;
75
+ }
76
+
77
+ export type YaziTerminalChooserResult =
78
+ | { status: "chosen"; choice: { paths: ReadonlyArray<string>; cwd: string } }
79
+ | { status: "cancelled" }
80
+ | { status: "missing-binary"; binary: "yazi" | "ya"; detail: string }
81
+ | { status: "profile-error"; reason: string }
82
+ | { status: "unavailable"; reason: string };
83
+
84
+ export interface YaziTerminalChooserOptions {
85
+ cwd: string;
86
+ profileMode: YaziProfileMode;
87
+ stopUi: () => void;
88
+ startUi: () => void;
89
+ requestRender: () => void;
90
+ cacheDir?: string;
91
+ sessionId?: string;
92
+ resolveBinaries?: () => YaziResolvedBinaries;
93
+ ensureProfile?: typeof ensureYaziProfile;
94
+ spawnYazi?: (
95
+ file: string,
96
+ args: ReadonlyArray<string>,
97
+ options: { cwd: string; env: Readonly<NodeJS.ProcessEnv> },
98
+ ) => { error?: Error };
99
+ }
100
+
101
+ function readOptional(path: string): string {
102
+ try {
103
+ return readFileSync(path, "utf8");
104
+ } catch {
105
+ return "";
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Run Yazi as a full-screen chooser when no pane host is usable.
111
+ *
112
+ * Resolution, profile generation, and chooser-file truncation all happen
113
+ * before the TUI lease is released. A missing or below-floor binary therefore
114
+ * leaves the screen intact and returns the shared doctor sentence verbatim.
115
+ */
116
+ async function runYaziTerminalChooser(options: YaziTerminalChooserOptions): Promise<YaziTerminalChooserResult> {
117
+ const binaries = (options.resolveBinaries ?? resolveYaziBinaries)();
118
+ if (!binaries.yaziPath) {
119
+ return { status: "missing-binary", binary: "yazi", detail: binaries.missingYaziDetail };
120
+ }
121
+ if (options.profileMode === "managed" && !binaries.yaPath) {
122
+ return {
123
+ status: "missing-binary",
124
+ binary: "ya",
125
+ detail: "the Yazi helper `ya` is not available; install the complete pinned Yazi tool",
126
+ };
127
+ }
128
+
129
+ const cacheDir = options.cacheDir ?? clioCacheDir();
130
+ const sessionsDir = join(cacheDir, "yazi", "sessions");
131
+ mkdirSync(sessionsDir, { recursive: true });
132
+ const sessionId = options.sessionId ?? randomUUID();
133
+ const chooserPath = join(sessionsDir, `${sessionId}.chooser`);
134
+ const cwdPath = join(sessionsDir, `${sessionId}.cwd`);
135
+ const profile =
136
+ options.profileMode === "managed"
137
+ ? (options.ensureProfile ?? ensureYaziProfile)({
138
+ yaPath: binaries.yaPath as string,
139
+ yaziPath: binaries.yaziPath,
140
+ profileDir: yaziProfileDir(cacheDir),
141
+ })
142
+ : null;
143
+ if (options.profileMode === "managed" && !profile) {
144
+ return { status: "profile-error", reason: "Clio could not generate a valid managed Yazi profile" };
145
+ }
146
+ writeFileSync(chooserPath, "");
147
+ writeFileSync(cwdPath, "");
148
+
149
+ const args = [options.cwd, "--chooser-file", chooserPath, "--cwd-file", cwdPath] as const;
150
+ const env = { ...process.env, ...(profile ? { YAZI_CONFIG_HOME: profile.dir } : {}) };
151
+ let processError: Error | undefined;
152
+ options.stopUi();
153
+ try {
154
+ const result = options.spawnYazi
155
+ ? options.spawnYazi(binaries.yaziPath, args, { cwd: options.cwd, env })
156
+ : spawnSync(binaries.yaziPath, args, { cwd: options.cwd, env, stdio: "inherit" });
157
+ processError = result.error;
158
+ } catch (error) {
159
+ processError = error instanceof Error ? error : new Error(String(error));
160
+ } finally {
161
+ options.startUi();
162
+ options.requestRender();
163
+ }
164
+ if (processError) return { status: "unavailable", reason: `yazi chooser failed: ${processError.message}` };
165
+
166
+ const paths = readOptional(chooserPath)
167
+ .split("\n")
168
+ .filter((path) => path.length > 0);
169
+ if (paths.length === 0) return { status: "cancelled" };
170
+ return {
171
+ status: "chosen",
172
+ choice: { paths, cwd: readOptional(cwdPath).trim() || options.cwd },
173
+ };
174
+ }
175
+
176
+ function containsAsciiWhitespace(value: string): boolean {
177
+ for (const character of value) {
178
+ const code = character.charCodeAt(0);
179
+ if (code === 32 || (code >= 9 && code <= 13)) return true;
180
+ }
181
+ return false;
182
+ }
183
+
184
+ function relativeWhenInside(path: string, cwd: string): string {
185
+ const candidate = relative(cwd, path);
186
+ if (
187
+ candidate.length > 0 &&
188
+ candidate !== ".." &&
189
+ !candidate.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) &&
190
+ !isAbsolute(candidate)
191
+ ) {
192
+ return candidate;
193
+ }
194
+ return path;
195
+ }
196
+
197
+ function draftContains(draft: string, item: string): boolean {
198
+ let from = 0;
199
+ while (from <= draft.length) {
200
+ const at = draft.indexOf(item, from);
201
+ if (at < 0) return false;
202
+ const before = at === 0 ? "" : (draft[at - 1] ?? "");
203
+ const after = draft[at + item.length] ?? "";
204
+ if ((before === "" || /\s/u.test(before)) && (after === "" || /\s/u.test(after))) return true;
205
+ from = at + item.length;
206
+ }
207
+ return false;
208
+ }
209
+
210
+ function pathKind(path: string): "file" | "directory" | "other" {
211
+ try {
212
+ const stat = statSync(path);
213
+ if (stat.isFile()) return "file";
214
+ if (stat.isDirectory()) return "directory";
215
+ return "other";
216
+ } catch {
217
+ return "other";
218
+ }
219
+ }
220
+
221
+ /** Format one DDS or chooser batch for the composer without ever submitting it. */
222
+ function formatYaziMentions(
223
+ paths: ReadonlyArray<string>,
224
+ options: {
225
+ cwd: string;
226
+ draft: string;
227
+ statPath?: (path: string) => "file" | "directory" | "other";
228
+ maxPaths?: number;
229
+ maxChars?: number;
230
+ },
231
+ ): YaziMentionBatch {
232
+ const maxPaths = options.maxPaths ?? YAZI_PICK_MAX_PATHS;
233
+ const maxChars = options.maxChars ?? YAZI_PICK_MAX_CHARS;
234
+ const inspect = options.statPath ?? pathKind;
235
+ const rendered: string[] = [];
236
+ const seen = new Set<string>();
237
+ let mentions = 0;
238
+ let plainPaths = 0;
239
+ let duplicates = 0;
240
+ let truncated = Math.max(0, paths.length - maxPaths);
241
+
242
+ const candidates = paths.slice(0, maxPaths);
243
+ for (const [index, rawPath] of candidates.entries()) {
244
+ const absolute = isAbsolute(rawPath) ? rawPath : resolve(options.cwd, rawPath);
245
+ if (seen.has(absolute)) {
246
+ duplicates += 1;
247
+ continue;
248
+ }
249
+ seen.add(absolute);
250
+ const kind = inspect(absolute);
251
+ let display = relativeWhenInside(absolute, options.cwd);
252
+ if (kind === "directory" && display !== "/" && !display.endsWith("/")) display = `${display}/`;
253
+ const mention = kind === "file" && !containsAsciiWhitespace(display);
254
+ const item = mention ? `@${display}` : `\`${display.replaceAll("`", "\\`")}\``;
255
+ if (draftContains(options.draft, item)) {
256
+ duplicates += 1;
257
+ continue;
258
+ }
259
+ const nextLength = rendered.length === 0 ? item.length : rendered.join(" ").length + 1 + item.length;
260
+ if (nextLength > maxChars) {
261
+ truncated += candidates.length - index;
262
+ break;
263
+ }
264
+ rendered.push(item);
265
+ if (mention) mentions += 1;
266
+ else plainPaths += 1;
267
+ }
268
+
269
+ return {
270
+ text: rendered.join(" "),
271
+ inserted: rendered.length,
272
+ mentions,
273
+ plainPaths,
274
+ duplicates,
275
+ truncated,
276
+ };
277
+ }
278
+
279
+ function appendDraft(draft: string, addition: string): string {
280
+ if (addition.length === 0) return draft;
281
+ if (draft.length === 0) return addition;
282
+ return `${draft.replace(/\s+$/u, "")} ${addition}`;
283
+ }
284
+
285
+ /** Own the only path from a Yazi decision into the interactive composer. */
286
+ export function createYaziBridge(deps: YaziBridgeDeps): YaziBridge {
287
+ const openSession = deps.openSession ?? createYaziSession;
288
+ let active: YaziSession | null = null;
289
+ let paneCwd: string | null = null;
290
+ let droppedLines = 0;
291
+ let disposed = false;
292
+ let generation = 0;
293
+ let livenessTimer: NodeJS.Timeout | null = null;
294
+ let sawLine = false;
295
+
296
+ const clearLiveness = (): void => {
297
+ if (livenessTimer) clearTimeout(livenessTimer);
298
+ livenessTimer = null;
299
+ };
300
+
301
+ const insert = (paths: ReadonlyArray<string>, cwd: string): void => {
302
+ const draft = deps.getDraft();
303
+ const batch = formatYaziMentions(paths, { cwd, draft, ...(deps.statPath ? { statPath: deps.statPath } : {}) });
304
+ if (batch.inserted === 0) {
305
+ if (batch.truncated > 0) {
306
+ deps.notice(
307
+ "warning",
308
+ `${batch.truncated} file-pane path${batch.truncated === 1 ? " was" : "s were"} omitted by the pick limits`,
309
+ );
310
+ }
311
+ return;
312
+ }
313
+ deps.setDraft(appendDraft(draft, batch.text));
314
+ deps.requestRender();
315
+ deps.notice(
316
+ "info",
317
+ `${batch.inserted} ${batch.inserted === 1 ? "path" : "paths"} from the file pane added to the draft`,
318
+ );
319
+ if (batch.plainPaths > 0) {
320
+ deps.notice(
321
+ "info",
322
+ `${batch.plainPaths} ${batch.plainPaths === 1 ? "path was" : "paths were"} inserted as plain text because directories and spaced paths cannot be file mentions`,
323
+ );
324
+ }
325
+ if (batch.truncated > 0) {
326
+ deps.notice(
327
+ "warning",
328
+ `${batch.truncated} file-pane path${batch.truncated === 1 ? " was" : "s were"} omitted by the pick limits`,
329
+ );
330
+ }
331
+ };
332
+
333
+ const start = async (
334
+ mode: YaziSessionMode,
335
+ profileMode: YaziProfileMode,
336
+ dockShare?: number,
337
+ ): Promise<YaziBridgeOpenResult> => {
338
+ const mux = deps.mux;
339
+ if (!mux?.available()) return { status: "unavailable", reason: "the pane layer is not available" };
340
+ generation += 1;
341
+ const ownGeneration = generation;
342
+ const token = (deps.pickToken ?? randomUUID)();
343
+ sawLine = false;
344
+ paneCwd = deps.getCwd();
345
+ const result = await openSession({
346
+ mux,
347
+ mode,
348
+ profileMode,
349
+ cwd: deps.getCwd(),
350
+ ...(dockShare === undefined ? {} : { dockShare }),
351
+ pickToken: token,
352
+ onEvent: (event: YaziEvent) => {
353
+ if (disposed || ownGeneration !== generation) return;
354
+ sawLine = true;
355
+ if (event.kind === "cd") {
356
+ paneCwd = event.cwd;
357
+ return;
358
+ }
359
+ if (event.values[0] !== token) {
360
+ droppedLines += 1;
361
+ return;
362
+ }
363
+ insert(event.values.slice(1), paneCwd ?? deps.getCwd());
364
+ },
365
+ onChooser: (choice) => {
366
+ if (disposed || ownGeneration !== generation) return;
367
+ paneCwd = choice.cwd;
368
+ if (choice.paths.length > 0) insert(choice.paths, choice.cwd);
369
+ },
370
+ onStopped: () => {
371
+ if (ownGeneration !== generation) return;
372
+ clearLiveness();
373
+ active = null;
374
+ },
375
+ });
376
+ if (result.status !== "opened") return result;
377
+ if (disposed || ownGeneration !== generation) {
378
+ await result.session.close();
379
+ return { status: "unavailable", reason: "the file pane was closed while it was opening" };
380
+ }
381
+ active = result.session;
382
+ if (mode === "companion") {
383
+ livenessTimer = setTimeout(() => {
384
+ if (disposed || ownGeneration !== generation || sawLine || active === null) return;
385
+ const stale = active;
386
+ active = null;
387
+ deps.notice("warning", "the file-pane event stream did not start; reopening yazi in chooser mode");
388
+ void stale.close().finally(() => {
389
+ if (!disposed && ownGeneration === generation) void start("chooser", profileMode, dockShare);
390
+ });
391
+ }, deps.livenessMs ?? YAZI_LIVENESS_MS);
392
+ livenessTimer.unref();
393
+ }
394
+ return { status: "opened", mode, paneId: result.session.pane.paneId, existing: false };
395
+ };
396
+
397
+ return {
398
+ async open(options = {}): Promise<YaziBridgeOpenResult> {
399
+ if (disposed) return { status: "unavailable", reason: "the file-pane bridge is closed" };
400
+ const settings = deps.getSettings?.() ?? { mode: "companion", profile: "managed", followCwd: true };
401
+ if (active) {
402
+ if (settings.followCwd) {
403
+ const cwd = deps.getCwd();
404
+ if (await active.pushCwd(cwd)) paneCwd = cwd;
405
+ }
406
+ return { status: "opened", mode: active.mode, paneId: active.pane.paneId, existing: true };
407
+ }
408
+ const mode = options.once || settings.profile === "user" ? "chooser" : settings.mode;
409
+ if (!deps.mux?.available()) {
410
+ const result = await (
411
+ deps.runTerminalChooser ??
412
+ ((choiceOptions) =>
413
+ runYaziTerminalChooser({
414
+ ...choiceOptions,
415
+ stopUi: deps.stopUi ?? (() => {}),
416
+ startUi: deps.startUi ?? (() => {}),
417
+ requestRender: deps.requestRender,
418
+ }))
419
+ )({ cwd: deps.getCwd(), profileMode: settings.profile });
420
+ if (result.status === "chosen") {
421
+ paneCwd = result.choice.cwd;
422
+ insert(result.choice.paths, result.choice.cwd);
423
+ }
424
+ if (result.status === "chosen" || result.status === "cancelled") {
425
+ return { status: "opened", mode: "chooser", paneId: null, existing: false };
426
+ }
427
+ return result;
428
+ }
429
+ return await start(mode, settings.profile, settings.ratio);
430
+ },
431
+ status(): Readonly<YaziBridgeStatus> {
432
+ const snapshot = active?.snapshot();
433
+ return {
434
+ mode: active?.mode ?? "closed",
435
+ paneId: active?.pane.paneId ?? null,
436
+ paneCwd: paneCwd ?? snapshot?.paneCwd ?? null,
437
+ lastLineAt: snapshot?.lastLineAt ?? null,
438
+ droppedLines,
439
+ };
440
+ },
441
+ dispose(): void {
442
+ if (disposed) return;
443
+ disposed = true;
444
+ generation += 1;
445
+ clearLiveness();
446
+ const closing = active;
447
+ active = null;
448
+ if (closing) void closing.close();
449
+ },
450
+ };
451
+ }
@@ -261,7 +261,7 @@ function normalizeDecisions(value: unknown): { decisions?: AskUserDecision[]; er
261
261
  return { decisions };
262
262
  }
263
263
 
264
- export function normalizeAskUserCall(args: Record<string, unknown>): { call?: AskUserCall; error?: string } {
264
+ function normalizeAskUserCall(args: Record<string, unknown>): { call?: AskUserCall; error?: string } {
265
265
  const rawAction = trimOptionalString(args.action)?.toLowerCase() ?? "ask";
266
266
  if (rawAction !== "ask" && rawAction !== "complete") {
267
267
  return { error: "action must be ask or complete" };
@@ -499,7 +499,7 @@ async function persistAskUserTranscript(
499
499
  await mkdir(dir, { recursive: true });
500
500
  if (!policy.transcriptPath) policy.transcriptPath = path.join(dir, transcriptFileName(policy));
501
501
  const transcript = {
502
- schema: "clio.ask_user.interview.v1",
502
+ schema: "clio-coder.ask_user.interview.v1",
503
503
  id: policy.id,
504
504
  status: policy.status,
505
505
  startedAt: policy.startedAt,
@@ -595,7 +595,7 @@ async function completeInterview(
595
595
  return okInterviewResult(policy, event);
596
596
  }
597
597
 
598
- export async function finalizeAskUserInterview(
598
+ async function finalizeAskUserInterview(
599
599
  policy: AskUserToolPolicy,
600
600
  reason: string,
601
601
  options?: ToolInvokeOptions,
package/src/tools/bash.ts CHANGED
@@ -48,7 +48,7 @@ export const BASH_DEFAULT_RESULT_DISPOSITION: ToolResultDisposition = {
48
48
  };
49
49
 
50
50
  /** Pure, idempotent normalization used by registry admission and direct calls. */
51
- export function normalizeBashArguments(args: Record<string, unknown>): Record<string, unknown> {
51
+ function normalizeBashArguments(args: Record<string, unknown>): Record<string, unknown> {
52
52
  return args.output_policy === undefined ? { ...args, output_policy: "bounded" } : args;
53
53
  }
54
54