@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
@@ -52,7 +52,7 @@ import type { TurnMiddleware } from "./turn-middleware.js";
52
52
  import type { TurnPersistence } from "./turn-persistence.js";
53
53
  import type { AgentRuntime, ChatLoopTarget, ChatTurnState } from "./turn-state.js";
54
54
 
55
- const LOCAL_API_KEY_FALLBACK = "clio-local-target";
55
+ const LOCAL_API_KEY_FALLBACK = "clio-coder-local-target";
56
56
 
57
57
  /**
58
58
  * A turn that never started, with a machine-readable reason attached. The
@@ -85,7 +85,7 @@ export class TurnAdmissionError extends Error {
85
85
  * same discovery view the planner budgets against, so a model Clio is planning
86
86
  * a loaded window for is never announced as absent.
87
87
  */
88
- export function coldModelNotice(
88
+ function coldModelNotice(
89
89
  status: TargetStatus | null | undefined,
90
90
  targetId: string,
91
91
  wireModelId: string,
@@ -183,13 +183,13 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
183
183
 
184
184
  const readTarget = (): ChatLoopTarget | null => {
185
185
  const settings = deps.getSettings();
186
- const targetId = settings.orchestrator.target?.trim();
187
- const wireModelId = settings.orchestrator.model?.trim();
186
+ const targetId = settings.chat.target?.trim();
187
+ const wireModelId = settings.chat.model?.trim();
188
188
  if (!targetId || !wireModelId) return null;
189
189
  const resolved = resolveRuntimeTarget(deps.providers, {
190
190
  targetId,
191
191
  wireModelId,
192
- requestedThinkingLevel: settings.orchestrator.thinkingLevel ?? "off",
192
+ requestedThinkingLevel: settings.chat.thinkingLevel ?? "off",
193
193
  use: "orchestrator",
194
194
  requireTools: false,
195
195
  requireOutputBudget: true,
@@ -243,8 +243,8 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
243
243
  const targetProbesInFlight = new Map<string, Promise<void>>();
244
244
  const ensureLiveCapabilitiesForSelectedModel = async (): Promise<void> => {
245
245
  const settings = deps.getSettings();
246
- const targetId = settings.orchestrator.target?.trim();
247
- const wireModelId = settings.orchestrator.model?.trim();
246
+ const targetId = settings.chat.target?.trim();
247
+ const wireModelId = settings.chat.model?.trim();
248
248
  if (!targetId || !wireModelId) return;
249
249
  const target = deps.providers.getTarget(targetId);
250
250
  if (!target) return;
@@ -316,7 +316,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
316
316
  const refreshed = resolveRuntimeTarget(deps.providers, {
317
317
  targetId: target.target.id,
318
318
  wireModelId: target.wireModelId,
319
- requestedThinkingLevel: deps.getSettings().orchestrator.thinkingLevel ?? "off",
319
+ requestedThinkingLevel: deps.getSettings().chat.thinkingLevel ?? "off",
320
320
  use: "orchestrator",
321
321
  requireTools: false,
322
322
  requireOutputBudget: true,
@@ -43,7 +43,7 @@ export interface ChatLoopRunSnapshot {
43
43
  runtimeId: string;
44
44
  runtimeKind: RuntimeDescriptor["kind"];
45
45
  wireModelId: string;
46
- autonomy: ClioSettings["autonomy"];
46
+ autonomy: ClioSettings["safety"]["autonomy"];
47
47
  compiledPromptHash: string | null;
48
48
  staticCompositionHash: string | null;
49
49
  promptSignature: string | null;
@@ -5,12 +5,14 @@ import type { DispatchContract } from "../../domains/dispatch/contract.js";
5
5
  import { isReceiptIntegrity, verifyReceiptIntegrity } from "../../domains/dispatch/receipt-integrity.js";
6
6
  import type { RunEnvelope, RunReceipt } from "../../domains/dispatch/types.js";
7
7
  import { evidenceDirectory, inspectEvidence, listEvidenceOverviews } from "../../domains/evidence/store.js";
8
- import { formatTrustSummaryLine } from "../../domains/evidence/trust-projection.js";
8
+ import { formatTrustSummaryLine, trustStateWord } from "../../domains/evidence/trust-projection.js";
9
9
  import {
10
10
  inspectRunReceiptTrustStatus,
11
11
  type ReceiptIntegrityOutcome,
12
12
  retiredReceiptIntegrity,
13
13
  retiredReceiptIntegrityReason,
14
+ TRUST_STATUS_AXES,
15
+ type TrustStatusAxis,
14
16
  } from "../../domains/evidence/trust-status.js";
15
17
  import type { EvidenceFinding, EvidenceOverview, EvidenceSource } from "../../domains/evidence/types.js";
16
18
  import { type AccountabilitySummary, readAccountabilitySummary } from "../../domains/observability/index.js";
@@ -113,6 +115,20 @@ const JSON_PRETTY_MAX_BYTES = 10 * 1024 * 1024;
113
115
 
114
116
  export type ReceiptVerifyResult = ReceiptIntegrityOutcome;
115
117
 
118
+ export interface ReceiptVerificationCheck {
119
+ name: string;
120
+ ok: boolean;
121
+ evidence: string;
122
+ }
123
+
124
+ export type ReceiptVerificationReport = ReceiptIntegrityOutcome & {
125
+ receiptPath: string;
126
+ sealedDigest: string | null;
127
+ trustSummary: string | null;
128
+ compromised: boolean;
129
+ checks: ReceiptVerificationCheck[];
130
+ };
131
+
116
132
  /**
117
133
  * What a verify action reports. `retired` marks a seal this build does not
118
134
  * verify because its integrity version was retired: not a pass, and not the
@@ -135,7 +151,6 @@ const RECEIPT_REQUIRED_KEYS = [
135
151
  "costUsd",
136
152
  "compiledPromptHash",
137
153
  "staticCompositionHash",
138
- "clioVersion",
139
154
  "piMonoVersion",
140
155
  "platform",
141
156
  "nodeVersion",
@@ -239,7 +254,7 @@ export function receiptFilePath(stateDir: string, runId: string): string {
239
254
  return join(stateDir, "receipts", `${runId}.json`);
240
255
  }
241
256
 
242
- export function runLedgerPath(stateDir: string): string {
257
+ function runLedgerPath(stateDir: string): string {
243
258
  return join(stateDir, "runs.json");
244
259
  }
245
260
 
@@ -301,7 +316,7 @@ type ReadLedgerResult = { ok: true; envelope: RunEnvelope } | { ok: false; reaso
301
316
  * the same file and ledger row, projected through the shared boundary so the
302
317
  * receipt view spells its verdict exactly as the board and the CLI do.
303
318
  */
304
- export function receiptTrustDetail(stateDir: string, runId: string): string {
319
+ function receiptTrustDetail(stateDir: string, runId: string): string {
305
320
  try {
306
321
  const receipt = JSON.parse(readFileSync(receiptFilePath(stateDir, runId), "utf8")) as RunReceipt;
307
322
  const ledger = readRunEnvelope(stateDir, runId);
@@ -319,7 +334,7 @@ function readRunEnvelope(stateDir: string, runId: string): ReadLedgerResult {
319
334
  return { ok: false, reason: runs.length === 0 ? "run ledger not found" : "run not found in ledger" };
320
335
  }
321
336
 
322
- export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerifyResult {
337
+ function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerifyResult {
323
338
  const target = receiptFilePath(stateDir, runId);
324
339
  let raw: string;
325
340
  try {
@@ -342,6 +357,9 @@ export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerif
342
357
  for (const key of RECEIPT_REQUIRED_KEYS) {
343
358
  if (!(key in r)) return { ok: false, reason: `missing field: ${key}` };
344
359
  }
360
+ if (!("clioCoderVersion" in r) && !("clioVersion" in r)) {
361
+ return { ok: false, reason: "missing field: clioCoderVersion" };
362
+ }
345
363
  if (!isNonEmptyString(r.runId)) {
346
364
  return { ok: false, reason: `runId invalid: ${String(r.runId)}` };
347
365
  }
@@ -397,8 +415,9 @@ export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerif
397
415
  if (!isIso8601(r.endedAt)) {
398
416
  return { ok: false, reason: `endedAt not ISO-8601: ${String(r.endedAt)}` };
399
417
  }
400
- if (typeof r.clioVersion !== "string" || r.clioVersion.length === 0) {
401
- return { ok: false, reason: "clioVersion empty" };
418
+ const clioCoderVersion = r.clioCoderVersion ?? r.clioVersion;
419
+ if (typeof clioCoderVersion !== "string" || clioCoderVersion.length === 0) {
420
+ return { ok: false, reason: "clioCoderVersion empty" };
402
421
  }
403
422
  if (!isNonEmptyString(r.piMonoVersion)) {
404
423
  return { ok: false, reason: `piMonoVersion invalid: ${String(r.piMonoVersion)}` };
@@ -435,6 +454,98 @@ export function verifyReceiptFile(stateDir: string, runId: string): ReceiptVerif
435
454
  return verifyReceiptIntegrity(r as unknown as RunReceipt, ledger.envelope);
436
455
  }
437
456
 
457
+ const RECEIPT_FILE_FAILURE = /^(?:receipt file not found|read error:)/u;
458
+ const RECEIPT_CONTRACT_FAILURE =
459
+ /^(?:invalid json:|receipt is not an object|missing field:|runId invalid:|runId mismatch:|agentId invalid:|task invalid:|targetId invalid:|wireModelId invalid:|runtimeId invalid:|runtimeKind invalid:|exitCode out of range:|tokenCount out of range:|inputTokenCount out of range:|outputTokenCount out of range:|cacheReadTokenCount out of range:|cacheWriteTokenCount out of range:|costUsd out of range:|reasoningTokenCount out of range:|startedAt not ISO-8601:|endedAt not ISO-8601:|clioCoderVersion empty|piMonoVersion invalid:|platform invalid:|nodeVersion invalid:|toolCalls out of range:|toolStats\[|compiledPromptHash invalid:|staticCompositionHash invalid:|sessionId invalid:|integrity invalid|execution role invalid|routing intent invalid|route decision invalid)/u;
460
+ const LEDGER_FAILURE = /^(?:run ledger not found|run not found in ledger|ledger mismatch:)/u;
461
+
462
+ function receiptIntegrityDigest(value: unknown): string | null {
463
+ if (!isRecord(value) || value.algorithm !== "sha256" || !isNonEmptyString(value.digest)) return null;
464
+ return `sha256:${value.digest}`;
465
+ }
466
+
467
+ function trustCheckEvidence(status: ReturnType<typeof inspectRunReceiptTrustStatus>["status"], axis: string): string {
468
+ const entry = status[axis as keyof typeof status];
469
+ if (typeof entry !== "object" || entry === null || !("state" in entry)) return "canonical trust projection";
470
+ if (entry.state === "absent") return `reason=${entry.reason}`;
471
+ const refs = entry.artifacts.map((artifact) => `${artifact.kind}:${artifact.id}`);
472
+ return refs.length > 0 ? refs.join(", ") : `${entry.authority.kind}:${entry.authority.id}`;
473
+ }
474
+
475
+ function compromisedTrustAxes(status: ReturnType<typeof inspectRunReceiptTrustStatus>["status"]): TrustStatusAxis[] {
476
+ return TRUST_STATUS_AXES.filter((axis) => {
477
+ const state = status[axis].state;
478
+ if (axis === "artifactIntegrity") return state === "failed";
479
+ if (axis === "validationGrounding") return state === "failed" || state === "ungrounded";
480
+ if (axis === "independentReview") return state === "failed" || state === "not_independent";
481
+ if (axis === "contextProvenance") return state === "invalid";
482
+ if (axis === "autonomyEnforcement") return state === "bypassed";
483
+ return false;
484
+ });
485
+ }
486
+
487
+ /** Actionable `/view verify` report without changing the low-level verifier contract. */
488
+ export function verifyReceiptFileReport(stateDir: string, runId: string): ReceiptVerificationReport {
489
+ const receiptPath = receiptFilePath(stateDir, runId);
490
+ const result = verifyReceiptFile(stateDir, runId);
491
+ let receipt: RunReceipt | null = null;
492
+ try {
493
+ receipt = JSON.parse(readFileSync(receiptPath, "utf8")) as RunReceipt;
494
+ } catch {
495
+ // The verifier's named file or JSON check below retains the actionable error.
496
+ }
497
+ const sealedDigest = receiptIntegrityDigest(receipt?.integrity);
498
+ const ledger = readRunEnvelope(stateDir, runId);
499
+ const inspection = receipt === null ? null : inspectRunReceiptTrustStatus(receipt, ledger.ok ? ledger.envelope : null);
500
+ const trustSummary = inspection === null ? null : formatTrustSummaryLine(inspection.status);
501
+ const compromiseAxes = inspection === null ? [] : compromisedTrustAxes(inspection.status);
502
+ const checks: ReceiptVerificationCheck[] = [];
503
+
504
+ if (!result.ok && RECEIPT_FILE_FAILURE.test(result.reason)) {
505
+ checks.push({ name: "receipt file", ok: false, evidence: `${receiptPath}: ${result.reason}` });
506
+ } else {
507
+ checks.push({ name: "receipt file", ok: true, evidence: receiptPath });
508
+ if (!result.ok && (RECEIPT_CONTRACT_FAILURE.test(result.reason) || result.retired !== undefined)) {
509
+ checks.push({ name: "receipt contract", ok: false, evidence: result.reason });
510
+ } else {
511
+ checks.push({
512
+ name: "receipt contract",
513
+ ok: true,
514
+ evidence: `current integrity v${receipt?.integrity.version ?? "unknown"}`,
515
+ });
516
+ if (!result.ok && LEDGER_FAILURE.test(result.reason)) {
517
+ checks.push({ name: "run ledger", ok: false, evidence: result.reason });
518
+ } else {
519
+ checks.push({ name: "run ledger", ok: true, evidence: `run ${runId} fields match` });
520
+ checks.push({
521
+ name: "sealed digest",
522
+ ok: result.ok,
523
+ evidence: result.ok ? `${sealedDigest ?? "digest unavailable"} matches receipt and ledger` : result.reason,
524
+ });
525
+ }
526
+ }
527
+ }
528
+
529
+ if (inspection !== null) {
530
+ for (const axis of compromiseAxes) {
531
+ checks.push({
532
+ name: `trust ${axis}`,
533
+ ok: false,
534
+ evidence: `${trustStateWord(axis, inspection.status[axis].state)}; ${trustCheckEvidence(inspection.status, axis)}`,
535
+ });
536
+ }
537
+ }
538
+
539
+ return {
540
+ ...result,
541
+ receiptPath,
542
+ sealedDigest,
543
+ trustSummary,
544
+ compromised: compromiseAxes.length > 0,
545
+ checks,
546
+ };
547
+ }
548
+
438
549
  function pushCapped(lines: string[], line: string, maxLines: number): boolean {
439
550
  if (lines.length >= maxLines) return false;
440
551
  lines.push(line);
@@ -478,7 +589,7 @@ function splitLinesCapped(text: string, path?: string, maxLines = VIEW_ARTIFACT_
478
589
  return [...lines.slice(0, maxLines), `[truncated, open file directly${path ? `: ${path}` : ""}]`];
479
590
  }
480
591
 
481
- export async function loadJsonFileLines(path: string): Promise<ViewArtifactLoadResult> {
592
+ async function loadJsonFileLines(path: string): Promise<ViewArtifactLoadResult> {
482
593
  let canPrettyPrint = false;
483
594
  try {
484
595
  const info = await stat(path);
@@ -1461,7 +1572,7 @@ export function createDefaultArtifactProviders(deps: ArtifactProviderDeps): Arti
1461
1572
  ];
1462
1573
  }
1463
1574
 
1464
- export function sortViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
1575
+ function sortViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
1465
1576
  return [...artifacts].sort((a, b) => {
1466
1577
  const time = b.timestamp - a.timestamp;
1467
1578
  if (time !== 0) return time;
@@ -141,7 +141,7 @@ function isViewArtifactCategory(value: string): value is ViewArtifactCategory {
141
141
  return VIEW_ARTIFACT_CATEGORY_SET.has(value as ViewArtifactCategory);
142
142
  }
143
143
 
144
- export function parseViewFilterQuery(query: string): ViewFilterQuery {
144
+ function parseViewFilterQuery(query: string): ViewFilterQuery {
145
145
  const text = query.trim();
146
146
  if (text.length === 0) return { kind: "text", text };
147
147
  const colon = text.indexOf(":");
@@ -215,7 +215,7 @@ function formatLocalTime(timestamp: number): string {
215
215
  return !Number.isFinite(timestamp) || timestamp <= 0 ? "unknown time" : clockLocal(timestamp);
216
216
  }
217
217
 
218
- export function filterViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>, query: string): ViewArtifact[] {
218
+ function filterViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>, query: string): ViewArtifact[] {
219
219
  const parsed = parseViewFilterQuery(query);
220
220
  if (parsed.kind === "category") {
221
221
  const categoryArtifacts = artifacts.filter((artifact) => artifact.category === parsed.category);
@@ -226,11 +226,11 @@ export function filterViewArtifacts(artifacts: ReadonlyArray<ViewArtifact>, quer
226
226
  return fuzzyFilter([...artifacts], parsed.text, broadFilterText);
227
227
  }
228
228
 
229
- export function artifactsInCategoryOrder(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
229
+ function artifactsInCategoryOrder(artifacts: ReadonlyArray<ViewArtifact>): ViewArtifact[] {
230
230
  return VIEW_ARTIFACT_CATEGORIES.flatMap((category) => artifacts.filter((artifact) => artifact.category === category));
231
231
  }
232
232
 
233
- export function initialViewSelection(artifacts: ReadonlyArray<ViewArtifact>, initialFilter = ""): number {
233
+ function initialViewSelection(artifacts: ReadonlyArray<ViewArtifact>, initialFilter = ""): number {
234
234
  const filtered = filterViewArtifacts(artifacts, initialFilter);
235
235
  const first = filtered[0];
236
236
  if (!first) return 0;
@@ -252,7 +252,7 @@ export function initialViewSelection(artifacts: ReadonlyArray<ViewArtifact>, ini
252
252
  return Math.max(0, artifactsInCategoryOrder(filtered).indexOf(selected));
253
253
  }
254
254
 
255
- export function nextCategorySelection(
255
+ function nextCategorySelection(
256
256
  artifacts: ReadonlyArray<ViewArtifact>,
257
257
  currentIndex: number,
258
258
  direction: -1 | 1,
@@ -271,7 +271,7 @@ export function nextCategorySelection(
271
271
  return safeCurrent;
272
272
  }
273
273
 
274
- export function groupedViewRows(artifacts: ReadonlyArray<ViewArtifact>): RenderedViewRow[] {
274
+ function groupedViewRows(artifacts: ReadonlyArray<ViewArtifact>): RenderedViewRow[] {
275
275
  const rows: RenderedViewRow[] = [];
276
276
  for (const category of VIEW_ARTIFACT_CATEGORIES) {
277
277
  const items = artifacts.filter((artifact) => artifact.category === category);
@@ -334,7 +334,7 @@ function verificationText(state: ViewVerificationState | undefined): string {
334
334
  return `${GLYPH.error} verify fail ${state.detail}`;
335
335
  }
336
336
 
337
- export function buildArtifactHeader(
337
+ function buildArtifactHeader(
338
338
  artifact: ViewArtifact | undefined,
339
339
  verification: ViewVerificationState | undefined,
340
340
  width: number,
@@ -361,7 +361,7 @@ export function buildArtifactHeader(
361
361
  }
362
362
 
363
363
  /** Put verification on wrapped rows so a canonical receipt verdict is never reduced to a prefix. */
364
- export function buildArtifactHeaderLines(
364
+ function buildArtifactHeaderLines(
365
365
  artifact: ViewArtifact | undefined,
366
366
  verification: ViewVerificationState | undefined,
367
367
  width: number,
@@ -384,7 +384,7 @@ export function buildArtifactHeaderLines(
384
384
  ];
385
385
  }
386
386
 
387
- export function viewFooterHint(focus: ViewPaneFocus, canVerify: boolean, innerWidth?: number): string {
387
+ function viewFooterHint(focus: ViewPaneFocus, canVerify: boolean, innerWidth?: number): string {
388
388
  // One pane at a time means Tab is how the other one is reached, so the
389
389
  // narrow footer states it. The generic elider drops middle entries, and Tab
390
390
  // sits in the middle.
@@ -527,6 +527,7 @@ export class ViewOverlayView implements Component {
527
527
  private renderedContentLines(width: number): string[] {
528
528
  const content = this.content;
529
529
  if (!content) return [];
530
+ if (content.status === "error") return content.lines.flatMap((line) => wrapTextWithAnsi(line, Math.max(1, width)));
530
531
  if (content.format !== "markdown") return content.lines;
531
532
  if (content.renderedLines && content.renderWidth === width) return content.renderedLines;
532
533
  const md = new Markdown(content.lines.join("\n"), 0, 0, markdownTheme(clioTheme()));
@@ -548,7 +549,9 @@ export class ViewOverlayView implements Component {
548
549
  return this.fixedLines(lines, width, height);
549
550
  }
550
551
  if (this.artifactError) {
551
- lines.push(padAnsi(theme.fg("error", this.artifactError), width, ELLIPSIS));
552
+ lines.push(
553
+ ...wrapTextWithAnsi(theme.fg("error", this.artifactError), Math.max(1, width)).map((line) => padAnsi(line, width)),
554
+ );
552
555
  return this.fixedLines(lines, width, height);
553
556
  }
554
557
 
@@ -764,6 +767,7 @@ export function openViewOverlay(
764
767
  width: VIEW_OVERLAY_WIDTH,
765
768
  maxHeight: VIEW_OVERLAY_MAX_HEIGHT,
766
769
  margin: VIEW_OVERLAY_MARGIN,
770
+ markerId: "view",
767
771
  title: "View",
768
772
  footerHint: (innerWidth) => view.getHint(innerWidth),
769
773
  });
@@ -0,0 +1,180 @@
1
+ /**
2
+ * The workers-view watch pane: one pane, beside Clio's own, rendering whatever
3
+ * run the operator points at.
4
+ *
5
+ * The pane hosts `clio-coder fleet view --watch <selection-file>` (see
6
+ * src/cli/fleet-view.ts), a durable-state viewer that re-reads the selection
7
+ * file on every poll. Retargeting is therefore one small atomic file write:
8
+ * arrow keys in the Alt+W board follow the cursor with zero socket traffic and
9
+ * zero pane churn, which is what makes the navigation feel like part of the
10
+ * board rather than like driving a terminal multiplexer.
11
+ *
12
+ * Pane creation is deliberately lazy, but reclamation is eager. A surviving
13
+ * pane is adopted as soon as the controller starts so the relaunched session's
14
+ * inventory owns it before the next watch command. A new pane still opens only
15
+ * on the first watch (operator Enter, `/panes show`, or the panes tool), and is
16
+ * never closed by navigation: leaving the workers view parks it on the last
17
+ * selection, and it goes away when the operator quits the viewer (`q`), closes
18
+ * the pane, or runs `/panes close watch`.
19
+ */
20
+
21
+ import { mkdirSync, renameSync, writeFileSync } from "node:fs";
22
+ import { dirname, join } from "node:path";
23
+ import { type ClioDirs, clioCacheDir, clioConfigDir, clioDataDir, clioStateDir } from "../core/xdg.js";
24
+ import type { MuxContract, MuxPaneRef } from "../domains/mux/index.js";
25
+ import type { PanesWatchController, PanesWatchResult } from "../domains/mux/operations.js";
26
+ import { watchViewerCommand } from "../domains/mux/viewer-command.js";
27
+
28
+ /**
29
+ * One selection file per state root, deliberately not per session: every
30
+ * session over a state root shares one run ledger, so a surviving watch pane
31
+ * from a crashed session keeps working the moment a new session writes the
32
+ * same file.
33
+ */
34
+ function watchSelectionPath(stateDir: string = clioStateDir()): string {
35
+ return join(stateDir, "watch-selection");
36
+ }
37
+
38
+ export interface WatchPaneDeps {
39
+ mux: MuxContract;
40
+ getCwd: () => string;
41
+ /**
42
+ * Live workers-dock share, read at each open so a `/settings` edit applies
43
+ * to the next pane. Absent (tests, minimal wiring) the dock spec's default
44
+ * governs.
45
+ */
46
+ getWorkersRatio?: () => number;
47
+ /** Selection-file override for tests. */
48
+ selectionPath?: string;
49
+ /** Resolved-layout override for tests. Production pins this process's four cached roots. */
50
+ dirs?: Readonly<ClioDirs>;
51
+ /** Command override for tests; production runs this install's own CLI. */
52
+ command?: (selectionPath: string, dirs: Readonly<ClioDirs>) => ReadonlyArray<string>;
53
+ writeFile?: (path: string, content: string) => void;
54
+ }
55
+
56
+ /** Replace-by-rename so the viewer's poll never reads a torn line. */
57
+ function atomicWrite(path: string, content: string): void {
58
+ mkdirSync(dirname(path), { recursive: true });
59
+ const tmp = `${path}.tmp`;
60
+ writeFileSync(tmp, content, "utf8");
61
+ renameSync(tmp, path);
62
+ }
63
+
64
+ export function createWatchPaneController(deps: WatchPaneDeps): PanesWatchController {
65
+ const selectionPath = deps.selectionPath ?? watchSelectionPath();
66
+ const dirs =
67
+ deps.dirs ??
68
+ Object.freeze({
69
+ config: clioConfigDir(),
70
+ data: clioDataDir(),
71
+ state: clioStateDir(),
72
+ cache: clioCacheDir(),
73
+ });
74
+ const command = deps.command ?? ((path, layout) => watchViewerCommand(path, { dirs: layout }));
75
+ const write = deps.writeFile ?? atomicWrite;
76
+
77
+ let paneId: string | null = null;
78
+ let disposed = false;
79
+ let adoptionInFlight: Promise<boolean> | null = null;
80
+ const unsubscribe = deps.mux.onPaneGone((record) => {
81
+ if (record.ref.paneId === paneId) paneId = null;
82
+ });
83
+ const adoptExistingPane = (): Promise<boolean> => {
84
+ if (disposed || paneId !== null) return Promise.resolve(true);
85
+ if (adoptionInFlight !== null) return adoptionInFlight;
86
+ const attempt = Promise.resolve()
87
+ .then(() => deps.mux.adoptPane({ purpose: "watch", label: "watch", dock: "workers" }))
88
+ .then((adopted) => {
89
+ if (!disposed && paneId === null && adopted !== null) paneId = adopted.paneId;
90
+ return true;
91
+ })
92
+ .catch(() => {
93
+ // Startup reclamation is best effort. An explicit watch retries the
94
+ // scan before it opens a replacement pane.
95
+ return false;
96
+ })
97
+ .finally(() => {
98
+ if (adoptionInFlight === attempt) adoptionInFlight = null;
99
+ });
100
+ adoptionInFlight = attempt;
101
+ return attempt;
102
+ };
103
+
104
+ const writeSelection = (runId: string): boolean => {
105
+ try {
106
+ write(selectionPath, `${runId}\n`);
107
+ return true;
108
+ } catch {
109
+ return false;
110
+ }
111
+ };
112
+
113
+ /**
114
+ * The one place a watch pane is created: the workers dock slot, split right
115
+ * of Clio's pane at the configured share. On a host without the layout tier
116
+ * the dock request degrades inside the contract to a plain right split.
117
+ */
118
+ const openPane = (): Promise<MuxPaneRef | null> =>
119
+ deps.mux.openUtilityPane({
120
+ argv: command(selectionPath, dirs),
121
+ cwd: deps.getCwd(),
122
+ label: "watch",
123
+ title: "clio-coder watch",
124
+ purpose: "watch",
125
+ dock: { slot: "workers", ...(deps.getWorkersRatio ? { share: deps.getWorkersRatio() } : {}) },
126
+ });
127
+
128
+ // Reclaim durable ownership for inventory and navigation immediately. The
129
+ // scan remains best effort and never opens a replacement pane on its own.
130
+ void adoptExistingPane();
131
+
132
+ return {
133
+ async ensureOpen(): Promise<boolean> {
134
+ // Boot composition: the pane exists and parks on the last selection
135
+ // (the viewer renders "no selection" until one is written). Adoption
136
+ // first, so a surviving dock is reused rather than doubled.
137
+ if (disposed) return false;
138
+ if (paneId !== null) return true;
139
+ await adoptExistingPane();
140
+ if (paneId !== null) return true;
141
+ const opened = await openPane();
142
+ if (opened === null) return false;
143
+ paneId = opened.paneId;
144
+ return true;
145
+ },
146
+
147
+ async watch(runId: string): Promise<PanesWatchResult> {
148
+ if (!writeSelection(runId)) {
149
+ return { status: "unavailable", reason: `cannot write the watch selection at ${selectionPath}` };
150
+ }
151
+ if (paneId !== null) return { status: "watching", runId, paneId, opened: false };
152
+ const scanned = await adoptExistingPane();
153
+ if (!scanned) await adoptExistingPane();
154
+ if (paneId !== null) return { status: "watching", runId, paneId, opened: false };
155
+ const opened = await openPane();
156
+ if (opened === null) {
157
+ return { status: "unavailable", reason: "the pane host refused to open the watch pane" };
158
+ }
159
+ paneId = opened.paneId;
160
+ return { status: "watching", runId, paneId, opened: true };
161
+ },
162
+
163
+ follow(runId: string): boolean {
164
+ // Navigation never opens anything; a closed watch pane stays closed
165
+ // until the operator asks again with Enter.
166
+ if (paneId === null) return false;
167
+ return writeSelection(runId);
168
+ },
169
+
170
+ isOpen(): boolean {
171
+ return paneId !== null;
172
+ },
173
+
174
+ dispose(): void {
175
+ // The pane parks; only the subscription goes.
176
+ disposed = true;
177
+ unsubscribe();
178
+ },
179
+ };
180
+ }
@@ -103,7 +103,7 @@ function findCurrentStatus(
103
103
  statuses: ReadonlyArray<TargetStatus>,
104
104
  settings: Readonly<ClioSettings> | undefined,
105
105
  ): TargetStatus | null {
106
- const targetId = settings?.orchestrator?.target ?? null;
106
+ const targetId = settings?.chat?.target ?? null;
107
107
  if (!targetId) return null;
108
108
  return statuses.find((status) => status.target.id === targetId) ?? null;
109
109
  }
@@ -127,7 +127,7 @@ function selectedModelCapabilities(
127
127
  providers: ProvidersContract,
128
128
  ): CapabilityFlags | null {
129
129
  if (!status) return null;
130
- const wireModelId = settings?.orchestrator?.model ?? status.target.defaultModel ?? null;
130
+ const wireModelId = settings?.chat?.model ?? status.target.defaultModel ?? null;
131
131
  const detectedReasoning =
132
132
  wireModelId && typeof providers.getDetectedReasoning === "function"
133
133
  ? providers.getDetectedReasoning(status.target.id, wireModelId)
@@ -216,7 +216,7 @@ function handoffFacts(cwd: string): { handoffCount: number; handoffFreshness: st
216
216
  }
217
217
  }
218
218
 
219
- export function readWelcomeRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
219
+ function readWelcomeRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
220
220
  const codewiki = readCodewiki(cwd);
221
221
  const wiki = codewiki ? wikiFactsFrom(cwd, wikiStaleness(cwd)) : { wikiPageCount: 0, wikiStatus: NO_WIKI_STATUS };
222
222
  return {
@@ -255,7 +255,7 @@ async function readWelcomeRepositoryFactsAsync(cwd: string): Promise<WelcomeRepo
255
255
  * guessed, because it decides whether the Wiki row exists at all and the whole
256
256
  * point of a placeholder is that the banner never changes height.
257
257
  */
258
- export function placeholderRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
258
+ function placeholderRepositoryFacts(cwd: string): WelcomeRepositoryFacts {
259
259
  return {
260
260
  clioMdStatus: clioMdStatusFor(cwd),
261
261
  hasCodewiki: existsSync(join(cwd, ".clio-coder", "codewiki.json")),
@@ -269,13 +269,13 @@ export function placeholderRepositoryFacts(cwd: string): WelcomeRepositoryFacts
269
269
  };
270
270
  }
271
271
 
272
- export function deriveWelcomeDashboardStats(deps: WelcomeDashboardDeps): WelcomeDashboardStats {
272
+ function deriveWelcomeDashboardStats(deps: WelcomeDashboardDeps): WelcomeDashboardStats {
273
273
  const settings = deps.getSettings?.();
274
274
  const statuses = deps.providers.list();
275
275
  const current = findCurrentStatus(statuses, settings);
276
276
  // Left null when unset; formatTargetLabel owns the one spelling for that.
277
- const targetLabel = current?.target.id ?? settings?.orchestrator?.target ?? null;
278
- const modelLabel = settings?.orchestrator?.model ?? current?.target.defaultModel ?? null;
277
+ const targetLabel = current?.target.id ?? settings?.chat?.target ?? null;
278
+ const modelLabel = settings?.chat?.model ?? current?.target.defaultModel ?? null;
279
279
  const workspace = deps.getWorkspaceSnapshot?.() ?? null;
280
280
  const cwd = workspace?.cwd ?? process.cwd();
281
281
  const currentAvailable = current ? activeStatus(current) : false;
@@ -283,16 +283,16 @@ export function deriveWelcomeDashboardStats(deps: WelcomeDashboardDeps): Welcome
283
283
  const thinkingLevel =
284
284
  resolveModelRuntimeCapabilitiesForProviders(
285
285
  deps.providers,
286
- settings?.orchestrator?.target,
287
- settings?.orchestrator?.model,
288
- settings?.orchestrator?.thinkingLevel ?? "off",
286
+ settings?.chat?.target,
287
+ settings?.chat?.model,
288
+ settings?.chat?.thinkingLevel ?? "off",
289
289
  )?.thinking.display ??
290
- settings?.orchestrator?.thinkingLevel ??
290
+ settings?.chat?.thinkingLevel ??
291
291
  "off";
292
292
 
293
- const autonomy = settings?.autonomy ?? "auto-edit";
294
- const toolProfile = settings?.delegation?.defaults?.toolGovernance ?? "clio-policy";
295
- const threshold = settings?.compaction?.threshold;
293
+ const autonomy = settings?.safety.autonomy ?? "auto-edit";
294
+ const toolProfile = settings?.integrations.externalAgents?.defaults?.toolGovernance ?? "clio-coder-policy";
295
+ const threshold = settings?.context.compaction?.threshold;
296
296
  const compactionThreshold =
297
297
  typeof threshold === "number" && Number.isFinite(threshold) ? `${Math.round(threshold * 100)}%` : "80%";
298
298
 
@@ -376,7 +376,7 @@ function nextValue(stats: WelcomeDashboardStats): string {
376
376
  * route answers, and what the context is ready for. Maturity caveats belong
377
377
  * in the README, not in a line the operator reads on every turn.
378
378
  */
379
- export function buildWelcomeDashboardLines(
379
+ function buildWelcomeDashboardLines(
380
380
  stats: WelcomeDashboardStats,
381
381
  width: number,
382
382
  mode: WelcomeDashboardMode = "launchpad",