@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
@@ -3,13 +3,16 @@ import type { SafeEventBus } from "../core/event-bus.js";
3
3
  import type { AgentSpec } from "../domains/agents/spec.js";
4
4
  import type { DispatchContract } from "../domains/dispatch/contract.js";
5
5
  import type { AgentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
6
+ import type { PanesOperations } from "../domains/mux/operations.js";
6
7
  import type { AutonomyLevel } from "../domains/safety/autonomy.js";
7
8
  import { builtin, toolPromptHintsForNames } from "./builtin-tool-catalog.js";
9
+ import type { CompeteMuxWorktrees } from "./compete-worktrees.js";
8
10
  import { assertRegisteredBuiltinTools, type CoreToolBootstrapDeps, registerCoreTools } from "./core-bootstrap.js";
9
11
  import { createDispatchRunEventRegistry, createDispatchTool } from "./dispatch.js";
10
12
  import type { DispatchBackgroundRegistry } from "./dispatch-background.js";
11
13
  import { lazyTool } from "./lazy-tool.js";
12
14
  import { monitorToolSurface } from "./monitor-surface.js";
15
+ import { panesToolSurface } from "./panes-surface.js";
13
16
  import type { ToolRegistry } from "./registry.js";
14
17
  import { steerToolSurface } from "./steer-surface.js";
15
18
 
@@ -25,6 +28,13 @@ export interface ToolBootstrapDeps extends CoreToolBootstrapDeps {
25
28
  getCostCeilingUsd?: () => number;
26
29
  getWorkerRosters?: () => WorkerRosters;
27
30
  dispatchBackground?: DispatchBackgroundRegistry;
31
+ /** Optional herdr worktree lifecycle for compete candidates. */
32
+ competeMuxWorktrees?: CompeteMuxWorktrees;
33
+ /**
34
+ * Pane operations. Present only when a pane host answered detection, which
35
+ * is what keeps the `panes` tool out of the prompt on a machine with none.
36
+ */
37
+ panes?: PanesOperations;
28
38
  }
29
39
 
30
40
  /**
@@ -36,7 +46,11 @@ export function registerAllTools(registry: ToolRegistry, deps: ToolBootstrapDeps
36
46
  const registration = registerCoreTools(registry, deps);
37
47
  if (deps.dispatch) {
38
48
  const dispatch = deps.dispatch;
39
- const dispatchRunEvents = createDispatchRunEventRegistry();
49
+ // Display tail only. In a composed process the dispatch domain writes the
50
+ // durable journal off its own progress channel, which covers every run
51
+ // rather than only the ones the model dispatched through this tool, so a
52
+ // second sink here would transcribe a tool-path run twice.
53
+ const dispatchRunEvents = createDispatchRunEventRegistry({ journal: null });
40
54
  const dispatchToolDeps = {
41
55
  dispatch,
42
56
  runEvents: dispatchRunEvents,
@@ -48,6 +62,7 @@ export function registerAllTools(registry: ToolRegistry, deps: ToolBootstrapDeps
48
62
  ...(deps.getCostCeilingUsd ? { getCostCeilingUsd: deps.getCostCeilingUsd } : {}),
49
63
  ...(deps.getWorkerRosters ? { getWorkerRosters: deps.getWorkerRosters } : {}),
50
64
  ...(deps.dispatchBackground ? { background: deps.dispatchBackground } : {}),
65
+ ...(deps.competeMuxWorktrees ? { competeWorktrees: { mux: deps.competeMuxWorktrees } } : {}),
51
66
  };
52
67
  registry.register({
53
68
  ...builtin(createDispatchTool(dispatchToolDeps), {
@@ -76,5 +91,14 @@ export function registerAllTools(registry: ToolRegistry, deps: ToolBootstrapDeps
76
91
  ),
77
92
  });
78
93
  }
79
- assertRegisteredBuiltinTools(registry, registration, Boolean(deps.dispatch));
94
+ if (deps.panes) {
95
+ const panes = deps.panes;
96
+ registry.register({
97
+ ...builtin(
98
+ lazyTool(panesToolSurface, async () => (await import("./panes.js")).createPanesTool({ panes })),
99
+ { path: "src/tools/panes.ts", scope: "core" },
100
+ ),
101
+ });
102
+ }
103
+ assertRegisteredBuiltinTools(registry, registration, Boolean(deps.dispatch), Boolean(deps.panes));
80
104
  }
@@ -95,7 +95,7 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
95
95
  ),
96
96
  costLatency: "local_fast",
97
97
  promptHint:
98
- 'Call context with scope="skills" to list installed and marketplace skills; when one matches the task, or the operator names a skill or asks how one works, suggest the operator run /skill <name> (a marketplace skill is offered for install) and never load it uninvited. When the user message carries a skill request, first load that skill via context (scope="skills", name=<skill>) before doing anything else. When an [evicted ...] marker names content you need, recall it with context(scope="recall", ref=...); re-read the file only when the marker says it changed.',
98
+ 'Call context with scope="skills" to list installed and marketplace skills; when one matches the task, or the operator names a skill or asks how one works, suggest the operator run /skill <name> (a marketplace skill is offered for install) and never load it uninvited; a [Marketplace] reminder naming an uninstalled skill may instead be offered through ask_user with its exact options, and the harness performs any install. When the user message carries a skill request, first load that skill via context (scope="skills", name=<skill>) before doing anything else. When an [evicted ...] marker names content you need, recall it with context(scope="recall", ref=...); re-read the file only when the marker says it changed.',
99
99
  },
100
100
  [ToolNames.CredentialPresent]: {
101
101
  objective: "Check whether a credential key is present without returning its value.",
@@ -213,6 +213,21 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
213
213
  },
214
214
  costLatency: "local_fast",
215
215
  },
216
+ [ToolNames.Panes]: {
217
+ objective: "Focus, open, close, and inventory the terminal panes Clio owns beside this session.",
218
+ uiLabel: "Panes",
219
+ // show and list land on the same state twice; open starts a second pane
220
+ // and close is a no-op the second time, so the surface as a whole is not.
221
+ retrySafety: "not_retry_safe",
222
+ resultSizePolicy: {
223
+ kind: "exact",
224
+ maxBytes: 8_192,
225
+ followUpHint: 'Call panes with action="list" to re-read the pane inventory.',
226
+ },
227
+ costLatency: "local_fast",
228
+ promptHint:
229
+ 'When the operator asks to see a dispatched agent ("show me the tester"), call panes with action="show" and the agent id. Utility panes are presets only; an arbitrary command is the operator\'s own /panes open.',
230
+ },
216
231
  // RETRIEVE: network-class.
217
232
  [ToolNames.WebFetch]: {
218
233
  objective: "Fetch HTTP(S) text for explicit external research.",
@@ -2,7 +2,7 @@
2
2
  * Scratch git worktrees for the compete dispatch topology.
3
3
  *
4
4
  * Each candidate builds in its own worktree on its own branch
5
- * (`clio/compete/<group>/<n>`), created from the repository HEAD under
5
+ * (`clio-coder/compete/<group>/<n>`), created from the repository HEAD under
6
6
  * `<root>/.clio-coder/worktrees/<group>/candidate-<n>`. The path sits inside the
7
7
  * project root because remote fleet nodes share the filesystem and doctor
8
8
  * preflight verifies path parity only for the project root; `.clio-coder/` is
@@ -34,7 +34,7 @@ import {
34
34
  } from "node:fs";
35
35
  import { hostname } from "node:os";
36
36
  import { join, relative, resolve } from "node:path";
37
- import type { RunKind } from "../domains/dispatch/types.js";
37
+ import type { RunGateWorktreeProvenance, RunKind } from "../domains/dispatch/types.js";
38
38
  import {
39
39
  commitWorktreePath,
40
40
  isCanonicalWorktreePathInside,
@@ -47,6 +47,24 @@ export interface CandidateWorktree {
47
47
  index: number;
48
48
  branch: string;
49
49
  path: string;
50
+ provenance?: RunGateWorktreeProvenance;
51
+ }
52
+
53
+ /** Narrow mux surface used by compete; the native functions remain usable alone. */
54
+ export interface CompeteMuxWorktrees {
55
+ available(): boolean;
56
+ worktreeCreate(request: {
57
+ cwd: string;
58
+ branch: string;
59
+ base: string;
60
+ path: string;
61
+ label: string;
62
+ focus: boolean;
63
+ }): Promise<{
64
+ workspaceId: string;
65
+ worktree: { path: string; branch: string | null };
66
+ } | null>;
67
+ worktreeRemove(workspaceId: string, options?: { force?: boolean }): Promise<boolean>;
50
68
  }
51
69
 
52
70
  export type CompeteGroupState = "active" | "cleanup-ready" | "winner-preserved";
@@ -109,8 +127,9 @@ export interface CompeteRunAdmission {
109
127
 
110
128
  const COMPETE_PARENT_SEGMENTS = [".clio-coder", "worktrees"] as const;
111
129
  const COMPETE_MANIFEST_FILE = ".clio-coder-compete-owner.json";
112
- const COMPETE_MANIFEST_KIND = "clio-compete-group";
113
- const COMPETE_COMMIT_IDENTITY = "clio-compete";
130
+ const COMPETE_MANIFEST_KIND = "clio-coder-compete-group";
131
+ const LEGACY_COMPETE_MANIFEST_KIND = "clio-compete-group";
132
+ const COMPETE_COMMIT_IDENTITY = "clio-coder-compete";
114
133
 
115
134
  const SAFE_GROUP = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
116
135
  const PROCESS_EXIT_GRACE_MS = 750;
@@ -306,7 +325,7 @@ function isCanonicalDirectoryAt(path: string): boolean {
306
325
  * `relative()` makes the decision by path segment, so `/group-a2` can never
307
326
  * be mistaken for a child of `/group-a` as it can with textual startsWith.
308
327
  */
309
- export function isCanonicalPathInside(parent: string, candidate: string): boolean {
328
+ function isCanonicalPathInside(parent: string, candidate: string): boolean {
310
329
  return isCanonicalWorktreePathInside(parent, candidate);
311
330
  }
312
331
 
@@ -315,7 +334,7 @@ function manifestFromUnknown(value: unknown): CompeteGroupManifest | null {
315
334
  const manifest = value as Record<string, unknown>;
316
335
  if (
317
336
  manifest.version !== 2 ||
318
- manifest.kind !== COMPETE_MANIFEST_KIND ||
337
+ (manifest.kind !== COMPETE_MANIFEST_KIND && manifest.kind !== LEGACY_COMPETE_MANIFEST_KIND) ||
319
338
  typeof manifest.root !== "string" ||
320
339
  typeof manifest.group !== "string" ||
321
340
  typeof manifest.token !== "string" ||
@@ -399,10 +418,14 @@ export function isGitRepository(root: string): boolean {
399
418
  }
400
419
  }
401
420
 
402
- function competeBranch(group: string, index: number): string {
421
+ function competeBranch(group: string, index: number, legacy = false): string {
403
422
  validateGroup(group);
404
423
  if (!Number.isInteger(index) || index < 1) throw new Error(`invalid compete candidate index ${index}`);
405
- return `clio/compete/${group}/${index}`;
424
+ return `${legacy ? "clio" : "clio-coder"}/compete/${group}/${index}`;
425
+ }
426
+
427
+ function competeBranchMatches(branch: string, group: string, index: number): boolean {
428
+ return branch === competeBranch(group, index) || branch === competeBranch(group, index, true);
406
429
  }
407
430
 
408
431
  /** Claim the group before creating a branch or candidate worktree. */
@@ -531,19 +554,61 @@ export function markCompeteGroupWinnerPreserved(
531
554
  * baseline is a parameter rather than HEAD so every candidate in a compete
532
555
  * transaction starts from the same approved state.
533
556
  */
534
- export function createCandidateWorktree(
557
+ function createCandidateWorktree(ownership: CompeteGroupOwnership, index: number, baseline: string): CandidateWorktree {
558
+ assertOwnership(ownership);
559
+ const branch = competeBranch(ownership.group, index);
560
+ const path = join(ownership.directory, `candidate-${index}`);
561
+ if (!isCanonicalPathInside(ownership.directory, path)) {
562
+ throw new Error(`candidate ${index} path escapes compete group ${ownership.group}`);
563
+ }
564
+ git(ownership.root, ["worktree", "add", "-b", branch, path, baseline]);
565
+ return { index, branch, path };
566
+ }
567
+
568
+ /**
569
+ * Prefer herdr's worktree lifecycle while preserving Git as the recovery
570
+ * authority. A failed or vanished mux is deliberately indistinguishable from
571
+ * no mux to the caller except for the receipt provenance returned here.
572
+ */
573
+ export async function createCandidateWorktreeMapped(
535
574
  ownership: CompeteGroupOwnership,
536
575
  index: number,
537
576
  baseline: string,
538
- ): CandidateWorktree {
577
+ mux?: CompeteMuxWorktrees,
578
+ ): Promise<CandidateWorktree> {
539
579
  assertOwnership(ownership);
540
580
  const branch = competeBranch(ownership.group, index);
541
581
  const path = join(ownership.directory, `candidate-${index}`);
542
582
  if (!isCanonicalPathInside(ownership.directory, path)) {
543
583
  throw new Error(`candidate ${index} path escapes compete group ${ownership.group}`);
544
584
  }
545
- git(ownership.root, ["worktree", "add", "-b", branch, path, baseline]);
546
- return { index, branch, path };
585
+ let fallback: RunGateWorktreeProvenance["fallback"] = "mux-unavailable";
586
+ if (mux?.available()) {
587
+ const created = await mux
588
+ .worktreeCreate({
589
+ cwd: ownership.root,
590
+ branch,
591
+ base: baseline,
592
+ path,
593
+ label: `clio-coder compete ${ownership.group} candidate ${index}`,
594
+ focus: false,
595
+ })
596
+ .catch(() => null);
597
+ if (created !== null) {
598
+ if (resolve(created.worktree.path) !== resolve(path) || created.worktree.branch !== branch) {
599
+ throw new Error(`herdr created candidate ${index} at an unexpected path or branch`);
600
+ }
601
+ return {
602
+ index,
603
+ branch,
604
+ path,
605
+ provenance: { backend: "herdr", path, branch, workspaceId: created.workspaceId },
606
+ };
607
+ }
608
+ fallback = "mux-operation-failed";
609
+ }
610
+ const native = createCandidateWorktree(ownership, index, baseline);
611
+ return { ...native, provenance: { backend: "native", path, branch, fallback } };
547
612
  }
548
613
 
549
614
  /**
@@ -588,7 +653,7 @@ function exactGroupBranches(root: string, group: string): string[] {
588
653
  const parts = branch.split("/");
589
654
  return (
590
655
  parts.length === 4 &&
591
- parts[0] === "clio" &&
656
+ (parts[0] === "clio-coder" || parts[0] === "clio") &&
592
657
  parts[1] === "compete" &&
593
658
  parts[2] === group &&
594
659
  /^\d+$/.test(parts[3] ?? "")
@@ -596,6 +661,16 @@ function exactGroupBranches(root: string, group: string): string[] {
596
661
  });
597
662
  }
598
663
 
664
+ /** Resolve a current candidate branch while retaining indefinite read support for released refs. */
665
+ export function competeBranchForCandidate(root: string, group: string, index: number): string {
666
+ const branches = exactGroupBranches(root, group);
667
+ return (
668
+ branches.find((branch) => branch === competeBranch(group, index)) ??
669
+ branches.find((branch) => branch === competeBranch(group, index, true)) ??
670
+ competeBranch(group, index)
671
+ );
672
+ }
673
+
599
674
  function removeRegisteredWorktree(root: string, path: string): void {
600
675
  try {
601
676
  git(root, ["worktree", "remove", "--force", path]);
@@ -605,17 +680,16 @@ function removeRegisteredWorktree(root: string, path: string): void {
605
680
  }
606
681
  }
607
682
 
608
- export function removeCandidateWorktree(
683
+ function removeCandidateWorktree(
609
684
  ownership: CompeteGroupOwnership,
610
685
  worktree: CandidateWorktree,
611
686
  deleteBranch: boolean,
612
687
  ): void {
613
688
  assertOwnership(ownership);
614
689
  const expectedPath = join(ownership.directory, `candidate-${worktree.index}`);
615
- const expectedBranch = competeBranch(ownership.group, worktree.index);
616
690
  if (
617
691
  resolve(worktree.path) !== resolve(expectedPath) ||
618
- worktree.branch !== expectedBranch ||
692
+ !competeBranchMatches(worktree.branch, ownership.group, worktree.index) ||
619
693
  !isCanonicalPathInside(ownership.directory, worktree.path)
620
694
  ) {
621
695
  throw new Error(`candidate ${worktree.index} does not belong to compete group ${ownership.group}`);
@@ -633,6 +707,23 @@ export function removeCandidateWorktree(
633
707
  }
634
708
  }
635
709
 
710
+ /** Remove through herdr when it owns the workspace, then verify with Git. */
711
+ export async function removeCandidateWorktreeMapped(
712
+ ownership: CompeteGroupOwnership,
713
+ worktree: CandidateWorktree,
714
+ deleteBranch: boolean,
715
+ mux?: CompeteMuxWorktrees,
716
+ ): Promise<void> {
717
+ const workspaceId = worktree.provenance?.backend === "herdr" ? worktree.provenance.workspaceId : undefined;
718
+ if (workspaceId && mux?.available()) {
719
+ await mux.worktreeRemove(workspaceId, { force: true }).catch(() => false);
720
+ }
721
+ // This is both the native fallback after mux loss and the postcondition check
722
+ // after a successful RPC. It prunes an already-removed path harmlessly and
723
+ // removes the candidate branch, which worktree.remove does not promise to do.
724
+ removeCandidateWorktree(ownership, worktree, deleteBranch);
725
+ }
726
+
636
727
  /**
637
728
  * Merge the winning candidate branch into the current branch. Fast-forward
638
729
  * is impossible by construction (the candidate branched from HEAD and HEAD
@@ -738,8 +829,8 @@ export function settleRecoveredCompeteDecision(
738
829
  cleanupWorktreeGroup(ownership);
739
830
  return null;
740
831
  }
741
- const winnerBranch = competeBranch(group, winnerIndex);
742
832
  const branches = exactGroupBranches(ownership.root, group);
833
+ const winnerBranch = competeBranchForCandidate(ownership.root, group, winnerIndex);
743
834
  const winnerPath = join(ownership.directory, `candidate-${winnerIndex}`);
744
835
  if (
745
836
  !branches.includes(winnerBranch) ||
@@ -1,7 +1,13 @@
1
1
  import { type Dirent, readdirSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import type { ContextRecalledPayload } from "../../core/bus-events.js";
4
- import { SKILL_SUGGESTION_ANCHOR } from "../../core/skill-activation.js";
4
+ import {
5
+ SKILL_INSTALL_OFFER_OPTION_NEVER,
6
+ SKILL_INSTALL_OFFER_OPTION_NOT_NOW,
7
+ SKILL_INSTALL_OFFER_OPTION_PROJECT,
8
+ SKILL_INSTALL_OFFER_OPTION_USER,
9
+ SKILL_SUGGESTION_ANCHOR,
10
+ } from "../../core/skill-activation.js";
5
11
  import { ToolNames } from "../../core/tool-names.js";
6
12
  import { foldWorkingSet } from "../../domains/context/working-set/fold.js";
7
13
  import {
@@ -289,6 +295,14 @@ function renderSkillsList(
289
295
  "",
290
296
  `If one skill above matches the current task, begin your reply with the line \`${SKILL_SUGGESTION_ANCHOR}\` (a comma-separated sequence, in order, when several compose), then continue the task in the same turn without it; only the operator can run it. If none match, do not mention skills.`,
291
297
  );
298
+ if (marketplace.length > 0) {
299
+ // The offer protocol mirrors the marketplace-offer middleware: fixed
300
+ // option labels so the harness recognizes the answer, and the model
301
+ // never performs an install itself.
302
+ lines.push(
303
+ `When no installed skill serves the task but a marketplace skill above genuinely does, you may instead ask the operator with ask_user (mode=single_question, header "Install skill") whether to install it, offering exactly: "${SKILL_INSTALL_OFFER_OPTION_PROJECT}", "${SKILL_INSTALL_OFFER_OPTION_USER}", "${SKILL_INSTALL_OFFER_OPTION_NOT_NOW}", "${SKILL_INSTALL_OFFER_OPTION_NEVER}". The harness handles the answer and any install; never install or load a skill yourself.`,
304
+ );
305
+ }
292
306
  return lines.join("\n");
293
307
  }
294
308
 
@@ -184,6 +184,7 @@ export function assertRegisteredBuiltinTools(
184
184
  registry: ToolRegistry,
185
185
  registration: CoreToolRegistration,
186
186
  includeDispatchTools: boolean,
187
+ includePanesTools = false,
187
188
  ): void {
188
- assertBuiltinToolPolicy(registry.listAll(), { ...registration, includeDispatchTools });
189
+ assertBuiltinToolPolicy(registry.listAll(), { ...registration, includeDispatchTools, includePanesTools });
189
190
  }
@@ -4,11 +4,13 @@ import type { ExecutionPlan } from "../domains/dispatch/execution-plan.js";
4
4
  import { gateDeciderAgentId } from "../domains/dispatch/execution-role.js";
5
5
  import {
6
6
  COUNCIL_JUDGE_PROMPT,
7
+ COUNCIL_MAX_MEMBERS,
8
+ COUNCIL_MIN_MEMBERS,
7
9
  JUDGE_GATE_PROMPT,
8
10
  REVIEWER_GATE_PROMPT,
9
11
  renderCouncilVoteMemberTask,
10
12
  } from "../domains/dispatch/gate-role-prompts.js";
11
- import { normalizeDispatchIntent } from "../domains/dispatch/intent.js";
13
+ import { narrowDispatchIntentToReadOnly, normalizeDispatchIntent } from "../domains/dispatch/intent.js";
12
14
  import { renderDispatchReviewerTask } from "../domains/dispatch/intent-requirements.js";
13
15
  import { approvedRouteCandidates } from "../domains/dispatch/route-approval.js";
14
16
  import { defaultRoutingIntent } from "../domains/dispatch/routing-intent.js";
@@ -109,7 +111,9 @@ function councilSettingsFromArgs(
109
111
  members.push({ label, target, ...(model ? { model } : {}), ...(thinking ? { thinking } : {}) });
110
112
  }
111
113
  }
112
- if (members.length < 2 || members.length > 5) return { ok: false, message: "council_members_out_of_range" };
114
+ if (members.length < COUNCIL_MIN_MEMBERS || members.length > COUNCIL_MAX_MEMBERS) {
115
+ return { ok: false, message: "council_members_out_of_range" };
116
+ }
113
117
  const labels = new Set<string>();
114
118
  for (const member of members) {
115
119
  if (labels.has(member.label)) return { ok: false, message: `council_member_label_duplicate: ${member.label}` };
@@ -389,7 +393,9 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
389
393
  };
390
394
  });
391
395
  const reservation = deps.dispatch.reservations.prepare({
392
- topology: artifact.topology === "fleet" || artifact.topology === "council" ? "parallel" : artifact.topology,
396
+ // A council keeps its own name so a capacity denial can say that its
397
+ // width has a floor. A fleet's waves are already parallel by shape.
398
+ topology: artifact.topology === "fleet" ? "parallel" : artifact.topology,
393
399
  tasks,
394
400
  });
395
401
  try {
@@ -450,10 +456,12 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
450
456
  return shapeRejection(args, "dispatch: apply_winner must be an options object");
451
457
  }
452
458
  const branch = stringArg(args.apply_winner, "branch");
453
- const match = branch ? /^clio\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch) : null;
459
+ const match = branch
460
+ ? /^(?:clio-coder|clio)\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch)
461
+ : null;
454
462
  if (branch === undefined) return shapeRejection(args, "dispatch: apply_winner.branch is required");
455
463
  if (match === null) {
456
- return shapeRejection(args, "dispatch: apply_winner.branch must be a clio/compete/<group>/<n> branch");
464
+ return shapeRejection(args, "dispatch: apply_winner.branch must be a clio-coder/compete/<group>/<n> branch");
457
465
  }
458
466
  try {
459
467
  const cwd = resolve(stringArg(args.apply_winner, "cwd") ?? process.cwd());
@@ -638,6 +646,11 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
638
646
  executionRole: "researcher",
639
647
  autonomy: "read-only",
640
648
  toolProfile: "council-read-only",
649
+ // A member inherits the caller's declared scope but never its
650
+ // write authority: the same trees arrive as read roots, so the
651
+ // declaration stays enforceable against a read-only run instead of
652
+ // claiming a write scope nothing can grant.
653
+ ...(base.intent === undefined ? {} : { intent: narrowDispatchIntentToReadOnly(base.intent) }),
641
654
  // The runner reuses this composed task from the resolved plan, so
642
655
  // the approval artifact the plan hash binds shows the operator the
643
656
  // exact ballot the member is asked to cast.
@@ -1,12 +1,16 @@
1
1
  /** Pure model-argument parsing; every returned DispatchRequest has a concrete agent id. */
2
2
 
3
- import { pathBoundaryCovers } from "../core/path-boundary.js";
4
3
  import type { AgentAutomationAuthority } from "../domains/agents/spec.js";
5
4
  import { type AgentTaskType, classifyAgentTask } from "../domains/dispatch/agent-candidates.js";
6
5
  import { cloneDispatchBudgetRequest } from "../domains/dispatch/budget-envelope.js";
7
6
  import type { DispatchRequest } from "../domains/dispatch/contract.js";
8
7
  import { type AgentRoleFactsResolver, requestExecutionRole } from "../domains/dispatch/execution-role.js";
9
8
  import type { DispatchIntent } from "../domains/dispatch/intent.js";
9
+ import {
10
+ classifyDispatchIntentCompatibility,
11
+ dispatchIntentRefusals,
12
+ dispatchIntentScopeWidening,
13
+ } from "../domains/dispatch/intent-compatibility.js";
10
14
  import { parseRoutingIntent } from "../domains/dispatch/routing-intent.js";
11
15
  import { DISPATCH_BRIEFING_MAX_BYTES, type JobThinkingLevel } from "../domains/dispatch/validation.js";
12
16
  import { isToolProfileName, TOOL_PROFILE_NAMES } from "./profiles.js";
@@ -58,7 +62,7 @@ const AUTO_BASELINE_FALLBACK_AGENT_ID = "scout";
58
62
  * the mapped recipe is not present in this install, so a trimmed recipe set
59
63
  * can never produce a dispatch against an agent id that does not resolve.
60
64
  */
61
- export function autoBaselineAgentId(task: string, hasAgent?: (id: string) => boolean): string {
65
+ function autoBaselineAgentId(task: string, hasAgent?: (id: string) => boolean): string {
62
66
  const mapped = AUTO_BASELINE_BY_TASK_TYPE[classifyAgentTask(task).taskType] ?? AUTO_BASELINE_FALLBACK_AGENT_ID;
63
67
  if (hasAgent === undefined) return mapped;
64
68
  if (hasAgent(mapped)) return mapped;
@@ -197,10 +201,17 @@ function dispatchRequestFromArgs(
197
201
  ? args.writeRoots.filter((entry): entry is string => typeof entry === "string")
198
202
  : undefined;
199
203
  if (legacy !== undefined) {
200
- const left = [...new Set(legacy)].sort();
201
- if (JSON.stringify(left) !== JSON.stringify(resolved.intent.writeRoots)) {
202
- return { ok: false, message: "intent_write_roots_contradiction" };
203
- }
204
+ // Asked through the same rule the job-spec validator asks, so the two
205
+ // cannot disagree about the same pair. A raw string comparison here
206
+ // would refuse './src/tools' against 'src/tools', which name one tree.
207
+ const refusal = dispatchIntentRefusals(
208
+ classifyDispatchIntentCompatibility({
209
+ intent: resolved.intent,
210
+ writeRoots: legacy,
211
+ ...(cwd !== undefined ? { cwd } : {}),
212
+ }),
213
+ ).find((entry) => entry.code === "intent_write_roots_contradiction");
214
+ if (refusal !== undefined) return { ok: false, message: refusal.message };
204
215
  request.writeRoots = legacy;
205
216
  } else {
206
217
  request.writeRoots = resolved.intent.writeRoots;
@@ -273,21 +284,10 @@ export function dispatchRequestsFromArgs(
273
284
  }
274
285
  const ceiling = options.resolveIntent(sharedIntent, parsed.request.cwd);
275
286
  if (!ceiling.ok) return { ok: false, message: `dispatch: task ${index + 1}: ${ceiling.message}` };
276
- const pathCeilings = {
277
- readRoots: [...ceiling.intent.readRoots, ...ceiling.intent.writeRoots],
278
- writeRoots: ceiling.intent.writeRoots,
279
- relevantPaths: [...ceiling.intent.readRoots, ...ceiling.intent.writeRoots, ...ceiling.intent.relevantPaths],
280
- };
281
- for (const field of ["readRoots", "writeRoots", "relevantPaths"] as const) {
282
- const outside = parsed.request.intent?.[field].find(
283
- (candidate) => !pathBoundaryCovers(pathCeilings[field], candidate),
284
- );
285
- if (outside !== undefined) {
286
- return {
287
- ok: false,
288
- message: `dispatch: task ${index + 1}: intent_scope_widening: ${field} entry '${outside}' is outside the top-level intent ceiling`,
289
- };
290
- }
287
+ const widening =
288
+ parsed.request.intent === undefined ? null : dispatchIntentScopeWidening(ceiling.intent, parsed.request.intent);
289
+ if (widening !== null) {
290
+ return { ok: false, message: `dispatch: task ${index + 1}: ${widening.message}` };
291
291
  }
292
292
  }
293
293
  requests.push(parsed.request);
@@ -900,14 +900,3 @@ export function describeDispatchPlan(rawArgs: Record<string, unknown> | undefine
900
900
  ...(confirmation !== undefined ? { confirmation } : {}),
901
901
  };
902
902
  }
903
-
904
- /** Registry-side predicate: does this dispatch call require plan approval at supervised levels? */
905
- export function isPlanScaleDispatchArgs(rawArgs: Record<string, unknown> | undefined): boolean {
906
- try {
907
- return describeDispatchPlan(rawArgs).planScale;
908
- } catch {
909
- // A malformed call fails closed as NOT plan-scale; the dispatch tool's
910
- // own validation rejects it with a real error message.
911
- return false;
912
- }
913
- }