@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
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import { createHash, randomBytes } from "node:crypto";
13
- import { type Dirent, existsSync, readdirSync, readFileSync } from "node:fs";
13
+ import { type Dirent, readdirSync, readFileSync } from "node:fs";
14
14
  import { isAbsolute, relative, resolve as resolvePath, sep } from "node:path";
15
15
  import { performance } from "node:perf_hooks";
16
16
  import { BusChannels, type DispatchCompletedPayload, type DispatchRunIdentity } from "../../core/bus-events.js";
@@ -58,6 +58,7 @@ import {
58
58
  import type { AgentsContract } from "../agents/contract.js";
59
59
  import type { AgentRecipe } from "../agents/recipe.js";
60
60
  import { validateRecipeResult } from "../agents/result-contract.js";
61
+ import { nodeResultContractFilesystem } from "../agents/result-contract-filesystem.js";
61
62
  import {
62
63
  type AgentAudience,
63
64
  type AgentCapabilityClass,
@@ -78,7 +79,7 @@ import {
78
79
  type CapabilityFlags,
79
80
  canonicalizeWireModelId,
80
81
  type EndpointCapacity,
81
- endpointCapacitiesForStatuses,
82
+ endpointCapacityFor,
82
83
  endpointCapacityForStatus,
83
84
  firstRuntimeResolutionError,
84
85
  isDispatchEligibleRuntime,
@@ -86,6 +87,7 @@ import {
86
87
  type ResolvedRuntimeTarget,
87
88
  type RuntimeApiFamily,
88
89
  type RuntimeDescriptor,
90
+ resolveEndpointCapacities,
89
91
  resolveModelCapabilities,
90
92
  resolveRuntimeTarget,
91
93
  runtimeResolutionWarnings,
@@ -112,6 +114,7 @@ import {
112
114
  routeValidationProjection,
113
115
  } from "./active-route-planner.js";
114
116
  import { admit, createCapacityAdmissionController, createLeaseSlotGuard } from "./admission.js";
117
+ import { AdmissionCanceledError } from "./admission-error.js";
115
118
  import { agentRouteCandidates } from "./agent-candidates.js";
116
119
  import { AGENT_LEDGER_PROMPT_MAX_CHARS, renderAgentLedger } from "./agent-ledger.js";
117
120
  import { publishAgentLedgerEntry, subscribeAgentLedger } from "./agent-ledger-hub.js";
@@ -236,6 +239,7 @@ import {
236
239
  import { createRouteObserver, type RouteObservationHandle, type RouteObserver } from "./route-observer.js";
237
240
  import { reduceRouteQuality } from "./route-quality.js";
238
241
  import { defaultRoutingIntent } from "./routing-intent.js";
242
+ import { attachRunEventJournalBridge, type RunEventJournalBridge } from "./run-event-journal-bridge.js";
239
243
  import { detectRunIdentity } from "./run-identity.js";
240
244
  import { type Ledger, newRunId, openLedger } from "./state.js";
241
245
  import {
@@ -358,6 +362,12 @@ interface ActiveRun {
358
362
  finalPromise: Promise<RunReceipt>;
359
363
  }
360
364
 
365
+ interface PendingCapacityAdmission {
366
+ identity: DispatchRunIdentity & { requestOrigin: DispatchRequestOrigin };
367
+ timing: RunPhaseMarks;
368
+ node: RunNodeIdentity | null;
369
+ }
370
+
361
371
  interface DispatchFinishContractSnapshot {
362
372
  assessment: FinishContractAssessment;
363
373
  rigor: Rigor;
@@ -398,6 +408,15 @@ export interface DispatchBundleOptions {
398
408
  collectReproducibility?: typeof collectReproducibilityMetadata;
399
409
  /** Observer injection seam. Production constructs the durable observer. */
400
410
  routeObserver?: RouteObserver;
411
+ /**
412
+ * Write the durable run event journal for every run this bundle dispatches.
413
+ * Off by default and turned on by the three composition roots
414
+ * (src/entry/orchestrator.ts, src/cli/run.ts, src/cli/fleet.ts), because the
415
+ * process that owns a bundle also decides who owns the journal file: a
416
+ * composed process routes `registerAllTools`' event registry to
417
+ * `journal: null` so a tool-path run is transcribed once, not twice.
418
+ */
419
+ journalRunEvents?: boolean;
401
420
  }
402
421
 
403
422
  const DEFAULT_HEARTBEAT_INTERVAL_MS = 1000;
@@ -437,8 +456,8 @@ function calculateUsageCostUsd(meter: RunTokenMeter, pricing: EffectivePricing["
437
456
  * admit a route before settings are resolved, and it defers to the one place
438
457
  * that owns the default rather than restating the number here.
439
458
  */
440
- export function admissionMaxOutputTokens(settings: EffectiveSettings): number {
441
- return settings?.defaults.maxTokens ?? DEFAULT_SETTINGS.defaults.maxTokens;
459
+ function admissionMaxOutputTokens(settings: EffectiveSettings): number {
460
+ return settings?.chat.maxOutputTokens ?? DEFAULT_SETTINGS.chat.maxOutputTokens;
442
461
  }
443
462
 
444
463
  function conservativeRouteAdmissionEstimateUsd(pricing: EffectivePricing, maxOutputTokens: number): number {
@@ -490,7 +509,7 @@ function eventContainsFirstModelToken(event: Record<string, unknown>): boolean {
490
509
  }
491
510
 
492
511
  function eventStartsTool(event: Record<string, unknown>): boolean {
493
- return event.type === "tool_execution_start" || event.type === "clio_tool_start";
512
+ return event.type === "tool_execution_start" || event.type === "clio_coder_tool_start";
494
513
  }
495
514
 
496
515
  function finitePositive(value: unknown): number | undefined {
@@ -667,7 +686,7 @@ async function awaitEventDrain(drained: Promise<void>, graceMs = DISPATCH_DRAIN_
667
686
  function reportDispatchDiagnostic(scope: string, error: unknown): void {
668
687
  const message = error instanceof Error ? error.message : String(error);
669
688
  try {
670
- process.stderr.write(`[clio:dispatch] ${scope}: ${message}\n`);
689
+ process.stderr.write(`[clio-coder:dispatch] ${scope}: ${message}\n`);
671
690
  } catch {
672
691
  // stderr itself is best-effort
673
692
  }
@@ -873,7 +892,7 @@ export interface WorkspaceRootFacts {
873
892
  * claimed `npm test` then "validated" in 4ms. None of that is a model failure.
874
893
  * The harness knows the cwd exactly and was sending it nowhere.
875
894
  */
876
- export function readWorkspaceRootFacts(
895
+ function readWorkspaceRootFacts(
877
896
  cwd: string,
878
897
  readEntries: (dir: string) => Dirent[] = readDirentsSafely,
879
898
  ): WorkspaceRootFacts {
@@ -903,7 +922,7 @@ function readDirentsSafely(dir: string): Dirent[] {
903
922
  * projection of CLIO-CODER.md: a read-only scout that cannot afford the handbook read
904
923
  * still needs its first shell call to land in the right place.
905
924
  */
906
- export function renderWorkerWorkspaceContext(workspace: WorkspaceRootFacts): string {
925
+ function renderWorkerWorkspaceContext(workspace: WorkspaceRootFacts): string {
907
926
  const lines = ["# Workspace", `Root: ${workspace.root}`, "Your process starts here; relative paths resolve from it."];
908
927
  if (workspace.entries.length > 0) {
909
928
  lines.push(`Top level: ${workspace.entries.join(", ")}${workspace.truncated ? ", …" : ""}`);
@@ -956,7 +975,7 @@ function renderPipelineInput(input: PipelineInput): PipelineInputRender {
956
975
  * the command actually printed rather than a summary of it. Like pipeline
957
976
  * input, this is data and is never presented as instructions.
958
977
  */
959
- export function renderPredecessorHandoffs(handoffs: ReadonlyArray<ExecutionHandoff>): WorkerPromptMessage | null {
978
+ function renderPredecessorHandoffs(handoffs: ReadonlyArray<ExecutionHandoff>): WorkerPromptMessage | null {
960
979
  if (handoffs.length === 0) return null;
961
980
  const body = [
962
981
  "Outputs from this step's declared predecessors, in dependency order.",
@@ -1086,7 +1105,7 @@ export interface WorkerDynamicContext {
1086
1105
  * the projected "Verification expectations" body (verification-class runs
1087
1106
  * only); when off, output is byte-identical to the historical renderer.
1088
1107
  */
1089
- export function renderWorkerProjectContext(
1108
+ function renderWorkerProjectContext(
1090
1109
  project: ProjectStructuredContext,
1091
1110
  options: { includeVerification?: boolean } = {},
1092
1111
  ): string {
@@ -1128,7 +1147,7 @@ function workerProjectContextIncludesVerification(body: string): boolean {
1128
1147
  return body.includes("\nVerification expectations:\n");
1129
1148
  }
1130
1149
 
1131
- export function buildDynamicPromptMessages(
1150
+ function buildDynamicPromptMessages(
1132
1151
  req: DispatchRequest,
1133
1152
  dynamicContext: WorkerDynamicContext = {},
1134
1153
  ): WorkerPromptMessage[] {
@@ -1336,7 +1355,7 @@ interface DispatchLifecycleStage {
1336
1355
  interface AcpDelegationLifecycleStage {
1337
1356
  admission: DispatchAdmissionStage;
1338
1357
  pathScope: DispatchPathScope;
1339
- agentConfig: ReturnType<ConfigContract["get"]>["delegation"]["agents"][number];
1358
+ agentConfig: ReturnType<ConfigContract["get"]>["integrations"]["externalAgents"]["entries"][number];
1340
1359
  cwd: string;
1341
1360
  systemPrompt: string;
1342
1361
  dynamicPromptMessages: ReadonlyArray<WorkerPromptMessage>;
@@ -1588,7 +1607,7 @@ function workerToolCallHardCap(settings: EffectiveSettings): number {
1588
1607
  const parsedEnvCap = rawEnvCap && /^[1-9]\d*$/.test(rawEnvCap) ? Number(rawEnvCap) : Number.NaN;
1589
1608
  return Number.isSafeInteger(parsedEnvCap)
1590
1609
  ? parsedEnvCap
1591
- : (settings?.guardrails.workerToolCallCap ?? GUARDRAIL_DEFAULTS.workerToolCallCap);
1610
+ : (settings?.fleet.limits.toolCallsPerRun ?? GUARDRAIL_DEFAULTS.workerToolCallCap);
1592
1611
  }
1593
1612
 
1594
1613
  function resolveEffectiveWorkerBudget(input: {
@@ -1716,15 +1735,15 @@ function acpRuntimeLimitations(): string[] {
1716
1735
  }
1717
1736
 
1718
1737
  function readWorkerTargets(settings: ReturnType<ConfigContract["get"]> | undefined): WorkerTargets {
1719
- const workerDefault = settings?.workers?.default
1738
+ const workerDefault = settings?.fleet?.default
1720
1739
  ? {
1721
- target: settings.workers.default.target ?? null,
1722
- model: settings.workers.default.model ?? null,
1723
- thinkingLevel: (settings.workers.default.thinkingLevel ?? "off") as ThinkingLevel,
1740
+ target: settings.fleet.default.target ?? null,
1741
+ model: settings.fleet.default.model ?? null,
1742
+ thinkingLevel: (settings.fleet.default.thinkingLevel ?? "off") as ThinkingLevel,
1724
1743
  }
1725
1744
  : null;
1726
1745
  const workerProfiles: WorkerProfileMap = {};
1727
- for (const [name, profile] of Object.entries(settings?.workers?.profiles ?? {})) {
1746
+ for (const [name, profile] of Object.entries(settings?.fleet?.profiles ?? {})) {
1728
1747
  workerProfiles[name] = {
1729
1748
  target: profile.target ?? null,
1730
1749
  model: profile.model ?? null,
@@ -1732,7 +1751,7 @@ function readWorkerTargets(settings: ReturnType<ConfigContract["get"]> | undefin
1732
1751
  };
1733
1752
  }
1734
1753
  const agentBindings: WorkerAgentBindingMap = {};
1735
- for (const [agentId, profileName] of Object.entries(settings?.workers?.agentBindings ?? {})) {
1754
+ for (const [agentId, profileName] of Object.entries(settings?.fleet?.agentProfiles ?? {})) {
1736
1755
  const id = agentId.trim();
1737
1756
  const profile = profileName.trim();
1738
1757
  if (id.length > 0 && profile.length > 0) agentBindings[id] = profile;
@@ -1909,17 +1928,17 @@ function buildDispatchWorkerSpec(input: DispatchWorkerSpecInput, config?: Config
1909
1928
  if (input.req.trustProjectCompatRoots !== undefined) {
1910
1929
  spec.trustProjectCompatRoots = input.req.trustProjectCompatRoots;
1911
1930
  } else if (settings) {
1912
- spec.trustProjectCompatRoots = settings.skills.trustProjectCompatRoots === true;
1931
+ spec.trustProjectCompatRoots = settings.integrations.projectResources.trustProjectImports === true;
1913
1932
  }
1914
- spec.gitCommitAttribution = settings?.attribution.gitCommits ?? true;
1933
+ spec.gitCommitAttribution = settings?.integrations.git.commitAttribution ?? true;
1915
1934
  // Non-stall posture (Symphony §10.5): a dispatched worker has no operator
1916
1935
  // to answer a permission prompt by default, so the resolution policy ships
1917
1936
  // with the spec and the worker enforces it within bounded time. Under the
1918
1937
  // escalate posture the configured timeout/fallback bounds ride along so the
1919
1938
  // worker still cannot hang when no operator resolves the ask.
1920
- spec.onPermission = settings?.workers.onPermission ?? "deny";
1939
+ spec.onPermission = settings?.fleet.permissions.mode ?? "deny";
1921
1940
  if (spec.onPermission === "escalate") {
1922
- const escalation = settings?.workers.escalation;
1941
+ const escalation = settings?.fleet.permissions.escalation;
1923
1942
  if (escalation) spec.escalation = { timeoutMs: escalation.timeoutMs, fallback: escalation.fallback };
1924
1943
  }
1925
1944
  assertRuntimeCanHonorWorkerPermissionMode(input.target.runtime, spec.onPermission);
@@ -2013,7 +2032,7 @@ function autonomyEnforcementForAcpDelegation(
2013
2032
  dangerousBypass: true,
2014
2033
  };
2015
2034
  }
2016
- // clio-policy applies the exact autonomy mapping to every permission
2035
+ // clio-coder-policy applies the exact autonomy mapping to every permission
2017
2036
  // request. deny-all is stricter than every autonomy level, but is still a
2018
2037
  // Clio-mediated upper bound rather than an external approximation.
2019
2038
  return { grade: "mediated", autonomy, ...authorityEvidence, externalMode: toolGovernance };
@@ -2407,7 +2426,7 @@ export function createDispatchBundle(
2407
2426
  const heartbeatIntervalMs = options?.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;
2408
2427
  const getResilienceCooldownMs = (): number => {
2409
2428
  if (options?.resilienceCooldownMs !== undefined) return options.resilienceCooldownMs;
2410
- const settingsVal = getEffectiveSettings()?.workers?.resilienceCooldownMs;
2429
+ const settingsVal = getEffectiveSettings()?.fleet?.retry.routeCooldownMs;
2411
2430
  if (settingsVal !== undefined && settingsVal >= 0) return settingsVal;
2412
2431
  return DEFAULT_RESILIENCE_COOLDOWN_MS;
2413
2432
  };
@@ -2419,6 +2438,7 @@ export function createDispatchBundle(
2419
2438
  let ledger: Ledger | null = null;
2420
2439
  let heartbeatTimer: ReturnType<typeof setInterval> | null = null;
2421
2440
  const active = new Map<string, ActiveRun>();
2441
+ const pendingCapacity = new Map<string, PendingCapacityAdmission>();
2422
2442
  const targetCooldowns = new Map<string, { until: number; reason: string }>();
2423
2443
  const ownedReservations = new Set<string>();
2424
2444
  /**
@@ -2459,19 +2479,37 @@ export function createDispatchBundle(
2459
2479
  }),
2460
2480
  );
2461
2481
 
2482
+ /**
2483
+ * Every endpoint the configured fleet can reach.
2484
+ *
2485
+ * Deliberately resolved from the configured targets as well as the probed
2486
+ * statuses. A target whose status has not been built yet contributed no key,
2487
+ * an absent key carries no limit, and reservation planning skips a dimension
2488
+ * it has no limit for, so admission against a single-slot server used to fail
2489
+ * open for whoever asked first after boot.
2490
+ */
2491
+ function configuredEndpointCapacities(): Readonly<Record<string, EndpointCapacity>> {
2492
+ return resolveEndpointCapacities({
2493
+ statuses: providers.list(),
2494
+ targets: getEffectiveSettings()?.targets ?? [],
2495
+ runtimeFor: (runtimeId) => providers.getRuntime(runtimeId),
2496
+ });
2497
+ }
2498
+
2462
2499
  function configuredEndpointLimits(): Readonly<Record<string, number>> {
2463
- return Object.fromEntries(
2464
- Object.entries(endpointCapacitiesForStatuses(providers.list())).map(([key, value]) => [key, value.limit]),
2465
- );
2500
+ return Object.fromEntries(Object.entries(configuredEndpointCapacities()).map(([key, value]) => [key, value.limit]));
2466
2501
  }
2467
2502
 
2468
2503
  function endpointCapacityForTarget(targetId: string): EndpointCapacity | null {
2469
2504
  const status = providers.list().find((entry) => entry.target.id === targetId);
2470
- if (status === undefined) return null;
2471
- const endpoint = endpointCapacityForStatus(status);
2505
+ const target = status?.target ?? providers.getTarget(targetId);
2506
+ if (target === null || target === undefined) return null;
2507
+ const endpoint =
2508
+ status === undefined
2509
+ ? endpointCapacityFor({ target, runtime: providers.getRuntime(target.runtime) })
2510
+ : endpointCapacityForStatus(status);
2472
2511
  if (endpoint === null) return null;
2473
- const configured = endpointCapacitiesForStatuses(providers.list())[endpoint.key];
2474
- return configured ?? endpoint;
2512
+ return configuredEndpointCapacities()[endpoint.key] ?? endpoint;
2475
2513
  }
2476
2514
 
2477
2515
  function reservationCapacitySnapshot(settings: EffectiveSettings): ReservationCapacitySnapshot {
@@ -2560,10 +2598,38 @@ export function createDispatchBundle(
2560
2598
  }
2561
2599
 
2562
2600
  function configuredGlobalCapacity(settings: EffectiveSettings): number {
2563
- const configured = settings?.budget.concurrency;
2601
+ const configured = settings?.fleet.concurrency;
2564
2602
  return scheduling.maxWorkers?.() ?? (configured === "auto" || configured === undefined ? 4 : Math.max(1, configured));
2565
2603
  }
2566
2604
 
2605
+ function publishCapacityQueued(
2606
+ identity: DispatchRunIdentity & { requestOrigin: DispatchRequestOrigin },
2607
+ timing: RunPhaseMarks,
2608
+ node: RunNodeIdentity | null,
2609
+ ): void {
2610
+ pendingCapacity.set(identity.runId, { identity, timing, node });
2611
+ context.bus.emit(BusChannels.DispatchEnqueued, identity);
2612
+ }
2613
+
2614
+ function publishCapacityAdmissionFailure(
2615
+ identity: DispatchRunIdentity & { requestOrigin: DispatchRequestOrigin },
2616
+ error: unknown,
2617
+ ): void {
2618
+ const detail = error instanceof Error ? error.message : String(error);
2619
+ const outcome: RunOutcome =
2620
+ error instanceof AdmissionCanceledError
2621
+ ? "canceled"
2622
+ : /admission timed out/u.test(detail)
2623
+ ? "timed_out"
2624
+ : "denied_by_policy";
2625
+ context.bus.emit(BusChannels.DispatchFailed, {
2626
+ ...identity,
2627
+ outcome,
2628
+ outcomeDetail: detail,
2629
+ reason: outcome,
2630
+ });
2631
+ }
2632
+
2567
2633
  async function admitAssignmentCapacity(
2568
2634
  req: DispatchRequest,
2569
2635
  nodeId: string,
@@ -2572,7 +2638,8 @@ export function createDispatchBundle(
2572
2638
  ) {
2573
2639
  const queuedAt = now();
2574
2640
  timing.queuedAt = new Date(queuedAt).toISOString();
2575
- const assignmentId = req.lineage?.rootRunId ?? `pending-${queuedAt.toString(36)}-${randomBytes(6).toString("hex")}`;
2641
+ const assignmentId =
2642
+ req.lineage?.rootRunId ?? req.runIdHint ?? `pending-${queuedAt.toString(36)}-${randomBytes(6).toString("hex")}`;
2576
2643
  const requestedAt = Date.parse(timing.requestedAt ?? timing.queuedAt);
2577
2644
  const deadlineAt = req.assignmentDeadlineAt ?? requestedAt + (req.routingIntent?.deadlineMs ?? 60_000);
2578
2645
  if (req.lineage === undefined) await registerAssignment(assignmentId);
@@ -2657,7 +2724,7 @@ export function createDispatchBundle(
2657
2724
  const finalizedCosts: Array<{ usd: number; provenance: import("../providers/index.js").CostProvenance }> = [];
2658
2725
 
2659
2726
  function workersMaxRetries(settings: EffectiveSettings = getEffectiveSettings()): number {
2660
- const value = settings?.workers?.maxRetries;
2727
+ const value = settings?.fleet?.retry.maxRetries;
2661
2728
  return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : 2;
2662
2729
  }
2663
2730
 
@@ -2919,6 +2986,10 @@ export function createDispatchBundle(
2919
2986
  depth: run.lineage.depth,
2920
2987
  },
2921
2988
  };
2989
+ // A run-id hint names only the first attempt (and, for task worktrees,
2990
+ // the worktree it created). A retry shares the assignment lineage but
2991
+ // must receive its own ledger/run identity.
2992
+ delete retryReq.runIdHint;
2922
2993
  const reasonKey = retryReasonKey(run.lineage.rootRunId, attempt);
2923
2994
  retryReasons.set(reasonKey, reason);
2924
2995
  try {
@@ -3347,11 +3418,11 @@ export function createDispatchBundle(
3347
3418
  providers,
3348
3419
  );
3349
3420
  enforceCapabilityGate(target.target.id, target.modelCapabilities, req.requiredCapabilities);
3350
- assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.workers.onPermission ?? "deny");
3421
+ assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
3351
3422
  assertWorkerBudgetEnforceable(target.runtime, spec.budget !== null || req.budget !== undefined);
3352
3423
 
3353
3424
  const cwd = req.cwd ?? process.cwd();
3354
- const sessionAutonomy = settings?.autonomy ?? "auto-edit";
3425
+ const sessionAutonomy = settings?.safety.autonomy ?? "auto-edit";
3355
3426
  const effectiveAutonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
3356
3427
  const effectiveTools = withLedgerToolNarrowing(
3357
3428
  effectiveToolNames(admission.allowedTools, target, pathScope.writeBoundaries.length > 0, deniedToolNames(req)),
@@ -3374,7 +3445,7 @@ export function createDispatchBundle(
3374
3445
  recipe.skills !== undefined &&
3375
3446
  recipe.skills.length > 0 &&
3376
3447
  req.noSkills !== true,
3377
- onPermission: settings?.workers.onPermission ?? "deny",
3448
+ onPermission: settings?.fleet.permissions.mode ?? "deny",
3378
3449
  persona: {
3379
3450
  id: `persona.${recipe.id}`,
3380
3451
  relPath: recipe.filepath,
@@ -3402,7 +3473,7 @@ export function createDispatchBundle(
3402
3473
  capabilityClass: spec.capabilityClass,
3403
3474
  projectContextTier: tier,
3404
3475
  autonomy: effectiveAutonomy,
3405
- onPermission: settings?.workers.onPermission ?? "deny",
3476
+ onPermission: settings?.fleet.permissions.mode ?? "deny",
3406
3477
  project,
3407
3478
  workspace: readWorkspaceRootFacts(cwd),
3408
3479
  });
@@ -3422,7 +3493,7 @@ export function createDispatchBundle(
3422
3493
  // Match chat-loop's LOCAL_API_KEY_FALLBACK so dispatch-spawned workers can
3423
3494
  // reach openai-compat local endpoints (LM Studio, llama.cpp) without
3424
3495
  // requiring the user to invent a credential.
3425
- const apiKey = auth?.apiKey ?? (auth === null ? "clio-local-target" : undefined);
3496
+ const apiKey = auth?.apiKey ?? (auth === null ? "clio-coder-local-target" : undefined);
3426
3497
  const runtimeKind: RunKind = target.runtime.kind;
3427
3498
  const limitations = runtimeLimitations(runtimeKind, target.runtime.id);
3428
3499
  return {
@@ -3477,16 +3548,16 @@ export function createDispatchBundle(
3477
3548
  }
3478
3549
  }
3479
3550
  if (!settings) throw new Error("dispatch: effective settings required for ACP delegation");
3480
- const configured = settings.delegation.agents.find((entry) => entry.id === agentId);
3551
+ const configured = settings.integrations.externalAgents.entries.find((entry) => entry.id === agentId);
3481
3552
  if (!configured) throw new Error(`dispatch: ACP delegation agent '${agentId}' not configured`);
3482
- const toolGovernance = configured.toolGovernance ?? "clio-policy";
3553
+ const toolGovernance = configured.toolGovernance ?? "clio-coder-policy";
3483
3554
  if (options?.autonomyOverride === true && toolGovernance === "agent-managed") {
3484
3555
  throw new Error(
3485
- `dispatch: ACP delegation agent '${agentId}' uses toolGovernance='agent-managed', which cannot enforce an explicit one-run autonomy override; choose clio-policy or deny-all governance, or omit --autonomy`,
3556
+ `dispatch: ACP delegation agent '${agentId}' uses toolGovernance='agent-managed', which cannot enforce an explicit one-run autonomy override; choose clio-coder-policy or deny-all governance, or omit --autonomy`,
3486
3557
  );
3487
3558
  }
3488
3559
  const admission = resolveDelegationAdmissionStage(req, safety);
3489
- const sessionAutonomy = settings.autonomy ?? "auto-edit";
3560
+ const sessionAutonomy = settings.safety.autonomy ?? "auto-edit";
3490
3561
  const autonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
3491
3562
  if (toolGovernance === "agent-managed" && autonomy !== sessionAutonomy) {
3492
3563
  throw new Error(
@@ -3566,7 +3637,29 @@ export function createDispatchBundle(
3566
3637
 
3567
3638
  assertBudgetAdmitsRoute(req, { rates: null, provenance: "unknown" }, settings);
3568
3639
 
3569
- const capacityLease = await admitAssignmentCapacity(req, "local", timing, null);
3640
+ const queuedIdentity =
3641
+ req.lineage === undefined && req.runIdHint !== undefined
3642
+ ? {
3643
+ runId: req.runIdHint,
3644
+ agentId: req.agentId,
3645
+ task: req.task,
3646
+ requestOrigin: lifecycle.requestOrigin,
3647
+ targetId,
3648
+ wireModelId,
3649
+ runtimeId,
3650
+ runtimeKind: "acp-delegation" as const,
3651
+ }
3652
+ : null;
3653
+ if (queuedIdentity !== null) publishCapacityQueued(queuedIdentity, timing, null);
3654
+ let capacityLease: Awaited<ReturnType<typeof admitAssignmentCapacity>>;
3655
+ try {
3656
+ capacityLease = await admitAssignmentCapacity(req, "local", timing, null);
3657
+ } catch (error) {
3658
+ if (queuedIdentity !== null) publishCapacityAdmissionFailure(queuedIdentity, error);
3659
+ throw error;
3660
+ } finally {
3661
+ if (queuedIdentity !== null) pendingCapacity.delete(queuedIdentity.runId);
3662
+ }
3570
3663
  const leaseSlot = createLeaseSlotGuard(capacityAdmission, capacityLease.leaseId, req.lineage !== undefined);
3571
3664
 
3572
3665
  // Resolve the ledger before starting the ACP process: an external agent
@@ -3662,15 +3755,15 @@ export function createDispatchBundle(
3662
3755
  if (eventContainsFirstModelToken(event)) markObservedPhase("firstModelTokenAt");
3663
3756
  if (eventStartsTool(event)) markObservedPhase("firstToolAt");
3664
3757
  }
3665
- if (event.type === "clio_tool_start" && event.payload && typeof event.payload.tool === "string") {
3758
+ if (event.type === "clio_coder_tool_start" && event.payload && typeof event.payload.tool === "string") {
3666
3759
  recordToolStart(inFlightTools, event.payload);
3667
3760
  }
3668
3761
  // ACP is an external protocol peer, never an authority for Clio's
3669
3762
  // deterministic terminal taxonomy. Ignore even syntactically valid
3670
3763
  // assertions; only a future coordinator-side classifier may set one.
3671
- if (event.type === "clio_run_outcome" && !reportedSpoofedOutcome) {
3764
+ if (event.type === "clio_coder_run_outcome" && !reportedSpoofedOutcome) {
3672
3765
  reportedSpoofedOutcome = true;
3673
- reportDispatchDiagnostic("ACP outcome event", new Error("ignored untrusted clio_run_outcome assertion"));
3766
+ reportDispatchDiagnostic("ACP outcome event", new Error("ignored untrusted clio_coder_run_outcome assertion"));
3674
3767
  }
3675
3768
  if (isRecord(event)) {
3676
3769
  const finishEntry = appendDispatchFinishContractEntry(finishContractEntries, event);
@@ -3701,7 +3794,7 @@ export function createDispatchBundle(
3701
3794
  if (message !== null) failureMessage = message;
3702
3795
  }
3703
3796
  }
3704
- if (event.type === "clio_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
3797
+ if (event.type === "clio_coder_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
3705
3798
  const requestId =
3706
3799
  typeof event.payload.requestId === "string" ? event.payload.requestId : `delegation-permission-${Date.now()}`;
3707
3800
  const origin = runIdForPermissionAudit !== null ? `delegation:${runIdForPermissionAudit}` : "delegation:unknown";
@@ -3727,7 +3820,7 @@ export function createDispatchBundle(
3727
3820
  ...(runIdForPermissionAudit !== null ? { requestedBy: runIdForPermissionAudit } : {}),
3728
3821
  });
3729
3822
  }
3730
- if (event.type === "clio_tool_finish" && event.payload && typeof event.payload.tool === "string") {
3823
+ if (event.type === "clio_coder_tool_finish" && event.payload && typeof event.payload.tool === "string") {
3731
3824
  recordToolCompletion(inFlightTools, event.payload);
3732
3825
  recordToolFinish(toolStats, event.payload);
3733
3826
  if (event.payload.decision === "allowed") safetyDecisionCounts.allowed += 1;
@@ -3774,8 +3867,10 @@ export function createDispatchBundle(
3774
3867
  runIdForPermissionAudit = envelope.id;
3775
3868
  lineage = lineageFor(req, envelope.id);
3776
3869
  if (req.lineage === undefined) {
3777
- capacityAdmission.rename(capacityLease.leaseId, lineage.rootRunId);
3778
- await renameStoredAssignment(capacityLease.assignmentId, lineage.rootRunId);
3870
+ if (capacityLease.assignmentId !== lineage.rootRunId) {
3871
+ capacityAdmission.rename(capacityLease.leaseId, lineage.rootRunId);
3872
+ await renameStoredAssignment(capacityLease.assignmentId, lineage.rootRunId);
3873
+ }
3779
3874
  leaseSlot.transferToAssignment();
3780
3875
  }
3781
3876
  identity = detectRunIdentity();
@@ -3801,16 +3896,18 @@ export function createDispatchBundle(
3801
3896
  // One durable write at start so sibling processes (clio-coder fleet status)
3802
3897
  // can observe the running row; finalization persists the terminal state.
3803
3898
  await ledgerRef.persist();
3804
- context.bus.emit(BusChannels.DispatchEnqueued, {
3805
- runId: envelope.id,
3806
- agentId: req.agentId,
3807
- task: req.task,
3808
- requestOrigin: lifecycle.requestOrigin,
3809
- targetId,
3810
- wireModelId,
3811
- runtimeId,
3812
- runtimeKind: "acp-delegation",
3813
- });
3899
+ if (req.lineage !== undefined) {
3900
+ context.bus.emit(BusChannels.DispatchEnqueued, {
3901
+ runId: envelope.id,
3902
+ agentId: req.agentId,
3903
+ task: req.task,
3904
+ requestOrigin: lifecycle.requestOrigin,
3905
+ targetId,
3906
+ wireModelId,
3907
+ runtimeId,
3908
+ runtimeKind: "acp-delegation",
3909
+ });
3910
+ }
3814
3911
  context.bus.emit(BusChannels.DispatchStarted, {
3815
3912
  runId: envelope.id,
3816
3913
  agentId: req.agentId,
@@ -3925,7 +4022,7 @@ export function createDispatchBundle(
3925
4022
  const finalFailureMessage = result.failureMessage ?? failureMessage;
3926
4023
  const finalToolStats = snapshotToolStats(toolStats);
3927
4024
  const unfinished = snapshotUnfinishedTools(inFlightTools);
3928
- const toolGovernance = lifecycle.agentConfig.toolGovernance ?? "clio-policy";
4025
+ const toolGovernance = lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy";
3929
4026
  return {
3930
4027
  runId: envelope.id,
3931
4028
  agentId: req.agentId,
@@ -3978,7 +4075,7 @@ export function createDispatchBundle(
3978
4075
  dynamicHash: lifecycle.dynamicHash,
3979
4076
  promptSignature: lifecycle.promptSignature,
3980
4077
  toolSignature: lifecycle.toolSignature,
3981
- clioVersion: readClioVersion(),
4078
+ clioCoderVersion: readClioVersion(),
3982
4079
  piMonoVersion: readPiMonoVersion(),
3983
4080
  platform: process.platform,
3984
4081
  nodeVersion: process.version,
@@ -3992,7 +4089,7 @@ export function createDispatchBundle(
3992
4089
  quality: createRunReceiptQuality({ runtimeEnforceable: false, enforcementPassed: null, resultContract: null }),
3993
4090
  autonomyEnforcement: autonomyEnforcementForAcpDelegation(
3994
4091
  lifecycle.autonomy,
3995
- lifecycle.agentConfig.toolGovernance ?? "clio-policy",
4092
+ lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy",
3996
4093
  lifecycle.sessionAutonomy,
3997
4094
  req.autonomy,
3998
4095
  ),
@@ -4022,7 +4119,7 @@ export function createDispatchBundle(
4022
4119
  toolCallsRequested: result.delegation.toolCallsRequested,
4023
4120
  toolCallsApproved: result.delegation.toolCallsApproved,
4024
4121
  toolCallsDenied: result.delegation.toolCallsDenied,
4025
- toolGovernance: lifecycle.agentConfig.toolGovernance ?? "clio-policy",
4122
+ toolGovernance: lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy",
4026
4123
  toolCallLog: acp.toolCallLog(),
4027
4124
  },
4028
4125
  sessionId: result.delegation.acpSessionId,
@@ -4257,7 +4354,7 @@ export function createDispatchBundle(
4257
4354
  const requestedAt = new Date(now()).toISOString();
4258
4355
  const timing: RunPhaseMarks = { requestedAt, decisionStartedAt: requestedAt };
4259
4356
  const settings = getEffectiveSettings();
4260
- const isAcpAgent = settings?.delegation?.agents?.some((entry) => entry.id === req.agentId) ?? false;
4357
+ const isAcpAgent = settings?.integrations.externalAgents?.entries?.some((entry) => entry.id === req.agentId) ?? false;
4261
4358
  if (isAcpAgent && !req.delegationAgentId) {
4262
4359
  req.delegationAgentId = req.agentId;
4263
4360
  }
@@ -4268,12 +4365,16 @@ export function createDispatchBundle(
4268
4365
  throw new Error(`dispatch: invalid spec: ${validated.errors.join("; ")}`);
4269
4366
  }
4270
4367
  req = validation.restore(validated.spec);
4368
+ // A top-level run needs its stable identity before it can wait for
4369
+ // capacity. The board can then render the assignment as queued and the
4370
+ // same id becomes the ledger row once its slot opens.
4371
+ if (req.lineage === undefined && req.runIdHint === undefined) req = { ...req, runIdHint: newRunId() };
4271
4372
  let activeRouteObservation: RouteObservationHandle | null = null;
4272
4373
  if (req.delegationAgentId === undefined) {
4273
4374
  const recipe = agents.get(req.agentId);
4274
4375
  const activation = consumeActiveRouteApproval({
4275
4376
  request: req,
4276
- settings: settings?.routing,
4377
+ settings: settings?.fleet.adaptiveRouting,
4277
4378
  capabilityClass: recipe === null ? null : normalizeAgentSpec(recipe).capabilityClass,
4278
4379
  failover: failoverModeFor(req),
4279
4380
  requestedAt,
@@ -4395,7 +4496,41 @@ export function createDispatchBundle(
4395
4496
  shadow: () => observeShadowRoute(req, placed, settings),
4396
4497
  });
4397
4498
 
4398
- const capacityLease = await admitAssignmentCapacity(req, placement?.node.id ?? "local", timing, endpoint);
4499
+ const queuedIdentity =
4500
+ req.lineage === undefined && req.runIdHint !== undefined
4501
+ ? {
4502
+ runId: req.runIdHint,
4503
+ agentId: req.agentId,
4504
+ task: req.task,
4505
+ agentAudience: lifecycle.agentAudience,
4506
+ requestOrigin: lifecycle.requestOrigin,
4507
+ targetId: lifecycle.target.target.id,
4508
+ wireModelId: lifecycle.target.wireModelId,
4509
+ runtimeId: lifecycle.target.runtime.id,
4510
+ runtimeKind: lifecycle.runtimeKind,
4511
+ budget: lifecycle.budgetEnvelope,
4512
+ ...(endpoint !== null ? { endpoint: { key: endpoint.key, label: endpoint.label, limit: endpoint.limit } } : {}),
4513
+ ...(placement !== null ? { node: placement.node.id } : {}),
4514
+ ...(req.gate !== undefined ? { gate: { role: req.gate.role, cycle: req.gate.cycle } } : {}),
4515
+ ...(req.council !== undefined ? { council: req.council } : {}),
4516
+ ...(req.reroutes !== undefined && req.reroutes.length > 0 ? { rerouteCount: req.reroutes.length } : {}),
4517
+ ...(lifecycle.target.modelCapabilities !== undefined &&
4518
+ lifecycle.target.modelCapabilities !== null &&
4519
+ lifecycle.target.modelCapabilities.contextWindow > 0
4520
+ ? { contextWindow: lifecycle.target.modelCapabilities.contextWindow }
4521
+ : {}),
4522
+ }
4523
+ : null;
4524
+ if (queuedIdentity !== null) publishCapacityQueued(queuedIdentity, timing, placement?.node ?? null);
4525
+ let capacityLease: Awaited<ReturnType<typeof admitAssignmentCapacity>>;
4526
+ try {
4527
+ capacityLease = await admitAssignmentCapacity(req, placement?.node.id ?? "local", timing, endpoint);
4528
+ } catch (error) {
4529
+ if (queuedIdentity !== null) publishCapacityAdmissionFailure(queuedIdentity, error);
4530
+ throw error;
4531
+ } finally {
4532
+ if (queuedIdentity !== null) pendingCapacity.delete(queuedIdentity.runId);
4533
+ }
4399
4534
  const leaseSlot = createLeaseSlotGuard(capacityAdmission, capacityLease.leaseId, req.lineage !== undefined);
4400
4535
 
4401
4536
  const ledgerRef = (() => {
@@ -4533,7 +4668,7 @@ export function createDispatchBundle(
4533
4668
  context.bus.emit(BusChannels.DispatchProgress, {
4534
4669
  runId,
4535
4670
  agentId: req.agentId,
4536
- event: { type: "clio_write_record_downgraded", payload: downgrade },
4671
+ event: { type: "clio_coder_write_record_downgraded", payload: downgrade },
4537
4672
  });
4538
4673
  },
4539
4674
  });
@@ -4587,8 +4722,8 @@ export function createDispatchBundle(
4587
4722
  policySource?: string;
4588
4723
  reason?: string;
4589
4724
  skillActivation?: unknown;
4590
- // Worker permission-escalation fields (clio_permission_escalated /
4591
- // clio_permission_resolved escalate path).
4725
+ // Worker permission-escalation fields (clio_coder_permission_escalated /
4726
+ // clio_coder_permission_resolved escalate path).
4592
4727
  requestId?: string;
4593
4728
  summary?: string;
4594
4729
  target?: string;
@@ -4601,12 +4736,12 @@ export function createDispatchBundle(
4601
4736
  if (eventContainsFirstModelToken(event)) markObservedPhase("firstModelTokenAt");
4602
4737
  if (eventStartsTool(event)) markObservedPhase("firstToolAt");
4603
4738
  }
4604
- if (event.type === "clio_tool_start" && event.payload && typeof event.payload.tool === "string") {
4739
+ if (event.type === "clio_coder_tool_start" && event.payload && typeof event.payload.tool === "string") {
4605
4740
  recordToolStart(inFlightTools, event.payload);
4606
4741
  }
4607
- if (event.type === "clio_steer_received") acknowledgeSteer(event.payload?.sequence);
4742
+ if (event.type === "clio_coder_steer_received") acknowledgeSteer(event.payload?.sequence);
4608
4743
  if (
4609
- event.type === "clio_run_outcome" &&
4744
+ event.type === "clio_coder_run_outcome" &&
4610
4745
  isRunOutcomeCode(event.payload?.outcomeCode) &&
4611
4746
  event.payload.outcomeCode !== "worker_final_output_missing" &&
4612
4747
  event.payload.outcomeCode !== "host_verification_rejected"
@@ -4629,7 +4764,11 @@ export function createDispatchBundle(
4629
4764
  }
4630
4765
  recordWorkerRunEffect(runEffects, event);
4631
4766
  }
4632
- if (event.type === "clio_permission_escalated" && event.payload && typeof event.payload.requestId === "string") {
4767
+ if (
4768
+ event.type === "clio_coder_permission_escalated" &&
4769
+ event.payload &&
4770
+ typeof event.payload.requestId === "string"
4771
+ ) {
4633
4772
  escalationCounts.requested += 1;
4634
4773
  const ctx = isRecord(event.payload.decision) ? event.payload.decision : null;
4635
4774
  const classification = ctx !== null && isRecord(ctx.classification) ? ctx.classification : null;
@@ -4664,6 +4803,7 @@ export function createDispatchBundle(
4664
4803
  ...(ruleId !== null ? { ruleId } : {}),
4665
4804
  ...(policySource !== null ? { policySource } : {}),
4666
4805
  ...(typeof event.payload.timeoutMs === "number" ? { timeoutMs: event.payload.timeoutMs } : {}),
4806
+ fallback: spec.escalation?.fallback ?? "deny",
4667
4807
  escalation: true,
4668
4808
  });
4669
4809
  }
@@ -4689,7 +4829,7 @@ export function createDispatchBundle(
4689
4829
  if (message !== null) failureMessage = message;
4690
4830
  }
4691
4831
  }
4692
- if (event.type === "clio_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
4832
+ if (event.type === "clio_coder_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
4693
4833
  // Escalation resolutions already have a request event. Policy
4694
4834
  // deny/fail is non-stalling, so dispatch mints the adjacent pair.
4695
4835
  const source = event.payload.source;
@@ -4738,10 +4878,11 @@ export function createDispatchBundle(
4738
4878
  decidedBy,
4739
4879
  actionClass,
4740
4880
  reason,
4881
+ ...(source === "timeout" ? { fallback: spec.escalation?.fallback ?? "deny" } : {}),
4741
4882
  ...(runIdForPermissionAudit !== null ? { requestedBy: runIdForPermissionAudit } : {}),
4742
4883
  });
4743
4884
  }
4744
- if (event.type === "clio_tool_finish" && event.payload && typeof event.payload.tool === "string") {
4885
+ if (event.type === "clio_coder_tool_finish" && event.payload && typeof event.payload.tool === "string") {
4745
4886
  recordToolCompletion(inFlightTools, event.payload);
4746
4887
  recordToolFinish(toolStats, event.payload);
4747
4888
  if (isSkillActivation(event.payload.skillActivation)) {
@@ -4793,8 +4934,10 @@ export function createDispatchBundle(
4793
4934
  runIdForPermissionAudit = envelope.id;
4794
4935
  lineage = lineageFor(req, envelope.id);
4795
4936
  if (req.lineage === undefined) {
4796
- capacityAdmission.rename(capacityLease.leaseId, lineage.rootRunId);
4797
- await renameStoredAssignment(capacityLease.assignmentId, lineage.rootRunId);
4937
+ if (capacityLease.assignmentId !== lineage.rootRunId) {
4938
+ capacityAdmission.rename(capacityLease.leaseId, lineage.rootRunId);
4939
+ await renameStoredAssignment(capacityLease.assignmentId, lineage.rootRunId);
4940
+ }
4798
4941
  leaseSlot.transferToAssignment();
4799
4942
  }
4800
4943
  if (agentLedgerId !== null) {
@@ -4855,18 +4998,20 @@ export function createDispatchBundle(
4855
4998
  ? { contextWindow: lifecycle.target.modelCapabilities.contextWindow }
4856
4999
  : {}),
4857
5000
  };
4858
- context.bus.emit(BusChannels.DispatchEnqueued, {
4859
- runId: envelope.id,
4860
- agentId: req.agentId,
4861
- task: req.task,
4862
- agentAudience: lifecycle.agentAudience,
4863
- requestOrigin: lifecycle.requestOrigin,
4864
- targetId: lifecycle.target.target.id,
4865
- wireModelId: lifecycle.target.wireModelId,
4866
- runtimeId: lifecycle.target.runtime.id,
4867
- runtimeKind: lifecycle.runtimeKind,
4868
- ...fleetIdentity,
4869
- });
5001
+ if (req.lineage !== undefined) {
5002
+ context.bus.emit(BusChannels.DispatchEnqueued, {
5003
+ runId: envelope.id,
5004
+ agentId: req.agentId,
5005
+ task: req.task,
5006
+ agentAudience: lifecycle.agentAudience,
5007
+ requestOrigin: lifecycle.requestOrigin,
5008
+ targetId: lifecycle.target.target.id,
5009
+ wireModelId: lifecycle.target.wireModelId,
5010
+ runtimeId: lifecycle.target.runtime.id,
5011
+ runtimeKind: lifecycle.runtimeKind,
5012
+ ...fleetIdentity,
5013
+ });
5014
+ }
4870
5015
  context.bus.emit(BusChannels.DispatchStarted, {
4871
5016
  runId: envelope.id,
4872
5017
  agentId: req.agentId,
@@ -5096,7 +5241,7 @@ export function createDispatchBundle(
5096
5241
  dynamicHash: lifecycle.dynamicHash,
5097
5242
  promptSignature: lifecycle.promptSignature,
5098
5243
  toolSignature: lifecycle.toolSignature,
5099
- clioVersion: readClioVersion(),
5244
+ clioCoderVersion: readClioVersion(),
5100
5245
  piMonoVersion: readPiMonoVersion(),
5101
5246
  platform: process.platform,
5102
5247
  nodeVersion: process.version,
@@ -5121,7 +5266,7 @@ export function createDispatchBundle(
5121
5266
  ...(skillActivations.length > 0 ? { skillActivations: [...skillActivations] } : {}),
5122
5267
  autonomyEnforcement: autonomyEnforcementForWorkerSpec(
5123
5268
  spec,
5124
- lifecycle.settings?.autonomy ?? "auto-edit",
5269
+ lifecycle.settings?.safety.autonomy ?? "auto-edit",
5125
5270
  req.autonomy,
5126
5271
  ),
5127
5272
  safety: {
@@ -5295,18 +5440,7 @@ export function createDispatchBundle(
5295
5440
  cwd: lifecycle.cwd,
5296
5441
  networkAllowed: lifecycle.admission.allowedTools.includes(ToolNames.WebFetch),
5297
5442
  observedRunEffects,
5298
- filesystem: {
5299
- readFile(filePath) {
5300
- try {
5301
- return readFileSync(filePath, "utf8");
5302
- } catch {
5303
- return null;
5304
- }
5305
- },
5306
- pathExists(filePath) {
5307
- return existsSync(filePath);
5308
- },
5309
- },
5443
+ filesystem: nodeResultContractFilesystem(),
5310
5444
  });
5311
5445
  const resultValidation = resultContract?.applicable === true ? resultContract.validation : null;
5312
5446
  if (finalOutcome === "succeeded" && resultValidation?.conformance === "fail") {
@@ -5645,7 +5779,7 @@ export function createDispatchBundle(
5645
5779
  req: DispatchRequest,
5646
5780
  settings: EffectiveSettings = getEffectiveSettings(),
5647
5781
  ): DispatchPlanTaskResolution {
5648
- const isAcpAgent = settings?.delegation?.agents?.some((entry) => entry.id === req.agentId) ?? false;
5782
+ const isAcpAgent = settings?.integrations.externalAgents?.entries?.some((entry) => entry.id === req.agentId) ?? false;
5649
5783
  if (isAcpAgent && !req.delegationAgentId) req = { ...req, delegationAgentId: req.agentId };
5650
5784
  const validation = routeValidationProjection(req, true);
5651
5785
  const validated = validateJobSpec(validation.jobSpec);
@@ -5721,7 +5855,7 @@ export function createDispatchBundle(
5721
5855
  req,
5722
5856
  );
5723
5857
  assertPostRuntimeToolCompatibility(req.agentId, agentSpec, effectiveTools, target);
5724
- assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.workers.onPermission ?? "deny");
5858
+ assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
5725
5859
  assertWorkerBudgetEnforceable(target.runtime, agentSpec.budget !== null || req.budget !== undefined);
5726
5860
  assertResponseSchemaEnforceable(target.runtime, target.modelCapabilities, req.responseSchema, effectiveTools.length);
5727
5861
  assertWriteRootsEnforceable(target.runtime, pathScope.writeBoundaries);
@@ -5783,7 +5917,7 @@ export function createDispatchBundle(
5783
5917
  specs,
5784
5918
  request: req,
5785
5919
  mode,
5786
- activeAgentRoles: settings?.routing.agentAutomation.activeAgentRoles ?? [],
5920
+ activeAgentRoles: settings?.fleet.adaptiveRouting.agentRoles ?? [],
5787
5921
  ...(agentIntent === undefined ? {} : { intentOverride: agentIntent }),
5788
5922
  });
5789
5923
  const settingsFingerprint = computeSettingsFingerprint(settings ?? null);
@@ -5878,7 +6012,7 @@ export function createDispatchBundle(
5878
6012
  const recipe = agents.get(req.agentId);
5879
6013
  return planActiveRoute({
5880
6014
  request: req,
5881
- settings: settings?.routing,
6015
+ settings: settings?.fleet.adaptiveRouting,
5882
6016
  capabilityClass: recipe === null ? null : normalizeAgentSpec(recipe).capabilityClass,
5883
6017
  failover: failoverModeFor(req),
5884
6018
  fixed,
@@ -6089,7 +6223,7 @@ export function createDispatchBundle(
6089
6223
  costProvenance: "unknown",
6090
6224
  compiledPromptHash: null,
6091
6225
  staticCompositionHash: null,
6092
- clioVersion: readClioVersion(),
6226
+ clioCoderVersion: readClioVersion(),
6093
6227
  piMonoVersion: readPiMonoVersion(),
6094
6228
  platform: process.platform,
6095
6229
  nodeVersion: process.version,
@@ -6154,8 +6288,15 @@ export function createDispatchBundle(
6154
6288
  return receipt;
6155
6289
  }
6156
6290
 
6291
+ let journalBridge: RunEventJournalBridge | null = null;
6292
+
6157
6293
  const extension: DomainExtension = {
6158
6294
  async start() {
6295
+ // The journal subscribes before anything can dispatch. It rides the
6296
+ // domain's own progress and terminal channels, so it covers a run
6297
+ // whose caller iterates the handle itself (every operator path) as
6298
+ // well as one drained by the dispatch tool's event registry.
6299
+ if (options?.journalRunEvents === true) journalBridge = attachRunEventJournalBridge(context.bus);
6159
6300
  // No in-memory executor survives a process restart, so every active
6160
6301
  // side-store lease from an earlier bundle is orphaned and must expire.
6161
6302
  cleanupDispatchReservations({ startup: true, nowMs: now() });
@@ -6221,6 +6362,10 @@ export function createDispatchBundle(
6221
6362
  for (const ownerId of ownedReservations) rollbackDispatchReservation(ownerId, now());
6222
6363
  ownedReservations.clear();
6223
6364
  await Promise.allSettled([...assignmentWrites]);
6365
+ // After drain(), so the last run's terminal line is written before the
6366
+ // bridge stops listening.
6367
+ journalBridge?.stop();
6368
+ journalBridge = null;
6224
6369
  },
6225
6370
  };
6226
6371
 
@@ -6248,6 +6393,26 @@ export function createDispatchBundle(
6248
6393
  const running: DispatchSnapshot["running"] = [];
6249
6394
  const totals = { ...finalizedTotals };
6250
6395
  const costAmounts = [...finalizedCosts];
6396
+ for (const pending of pendingCapacity.values()) {
6397
+ const startedAt = pending.timing.queuedAt ?? pending.timing.requestedAt ?? new Date(tickNow).toISOString();
6398
+ running.push({
6399
+ runId: pending.identity.runId,
6400
+ agentId: pending.identity.agentId,
6401
+ ...(pending.identity.task !== undefined ? { task: pending.identity.task } : {}),
6402
+ ...(pending.identity.budget !== undefined ? { budget: pending.identity.budget } : {}),
6403
+ runtimeKind: pending.identity.runtimeKind,
6404
+ outcomePhase: "queued",
6405
+ heartbeat: "n/a",
6406
+ lineage: { parentRunId: null, rootRunId: pending.identity.runId, attempt: 0, depth: 0 },
6407
+ startedAt,
6408
+ elapsedMs: 0,
6409
+ timing: deriveRunPhaseDurations(pending.timing, startedAt, new Date(tickNow).toISOString()),
6410
+ tokens: { input: 0, output: 0, total: 0 },
6411
+ costUsd: 0,
6412
+ costProvenance: "unknown",
6413
+ node: pending.node === null ? null : { ...pending.node },
6414
+ });
6415
+ }
6251
6416
  for (const run of active.values()) {
6252
6417
  let heartbeat: "alive" | "stale" | "dead" | "n/a" = "n/a";
6253
6418
  if (run.heartbeatAt && Number.isFinite(heartbeatMonotonicAt(run.heartbeatAt))) {
@@ -6426,6 +6591,17 @@ export function createDispatchBundle(
6426
6591
  },
6427
6592
  abort(runId, reason) {
6428
6593
  const rootRunId = assignmentRootFor(runId);
6594
+ const queued = pendingCapacity.get(rootRunId);
6595
+ if (queued !== undefined && capacityAdmission.cancel(rootRunId)) {
6596
+ persistAssignment(cancelStoredAssignment(rootRunId), `${rootRunId}:cancel-queued`);
6597
+ context.bus.emit(BusChannels.RunAborted, {
6598
+ source: "dispatch_abort",
6599
+ runId: rootRunId,
6600
+ startedAt: null,
6601
+ elapsedMs: null,
6602
+ reason: reason?.detail ?? "operator abort while waiting for an endpoint slot",
6603
+ });
6604
+ }
6429
6605
  const assignment = assignments.get(rootRunId);
6430
6606
  if (assignment?.status === "running") {
6431
6607
  assignments.cancel(assignment.id);