@iowarp/clio-coder 0.3.9 → 0.4.0

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 (416) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/NOTICE +33 -0
  3. package/README.md +7 -2
  4. package/dist/{acp-7LOELQFP.js → acp-G5WJBNCT.js} +13 -12
  5. package/dist/{agents-FIBG2SHA.js → agents-FMV2Q5G4.js} +39 -36
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-OI4LIH2I.js → auth-3IDSJEIK.js} +16 -15
  8. package/dist/{builtins-AD25UL3C.js → builtins-XCZWXSC7.js} +3 -3
  9. package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
  10. package/dist/{chunk-56KB5IJP.js → chunk-2OQE55CK.js} +3 -3
  11. package/dist/{chunk-N3PBVRTZ.js → chunk-32KWKNSF.js} +9 -7
  12. package/dist/{chunk-VKBMFOYV.js → chunk-36EJLSQQ.js} +23 -27
  13. package/dist/{chunk-465CC7FK.js → chunk-3BT2XMV4.js} +16 -13
  14. package/dist/{chunk-NQ6UCCOD.js → chunk-3URVFKWK.js} +7 -7
  15. package/dist/{chunk-WIE7ZOSW.js → chunk-3XML7CDN.js} +2 -2
  16. package/dist/chunk-42FMPA75.js +101 -0
  17. package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
  18. package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
  19. package/dist/{chunk-JEQQR47K.js → chunk-6DB53AJS.js} +168 -9
  20. package/dist/{chunk-KV2AOLDF.js → chunk-76ONBSIA.js} +5 -25
  21. package/dist/{chunk-FALJGAWU.js → chunk-7MCTRUCE.js} +2 -2
  22. package/dist/{chunk-5T7RBWN2.js → chunk-AB44T6BB.js} +5 -5
  23. package/dist/chunk-B7OBL7PK.js +1405 -0
  24. package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
  25. package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
  26. package/dist/{chunk-O6I4CIEU.js → chunk-BKFJHQCA.js} +6 -6
  27. package/dist/chunk-BKFM6EJV.js +462 -0
  28. package/dist/chunk-BMS5RKQY.js +27 -0
  29. package/dist/{chunk-MV2VUEJC.js → chunk-BPKCPIL7.js} +2 -2
  30. package/dist/{chunk-TEO2TLVN.js → chunk-BUMFYQFY.js} +964 -1120
  31. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  32. package/dist/chunk-C2LTL2W6.js +2447 -0
  33. package/dist/{chunk-EBOC7MT3.js → chunk-CODPRO7Q.js} +8 -8
  34. package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
  35. package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
  36. package/dist/{chunk-MIX5N5AC.js → chunk-DQITNCXG.js} +394 -154
  37. package/dist/{chunk-S4COXYBG.js → chunk-DYJP44XW.js} +129 -106
  38. package/dist/{chunk-N5XKWMDW.js → chunk-F4CKPOEQ.js} +6 -6
  39. package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
  40. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  41. package/dist/{chunk-7C6RYZGQ.js → chunk-GKF55TAZ.js} +3 -3
  42. package/dist/{chunk-B5XRQOLB.js → chunk-GR5G2PVF.js} +9 -8
  43. package/dist/{chunk-XDOQXGFO.js → chunk-GXNLGKAB.js} +64 -8
  44. package/dist/chunk-HHV2GANA.js +88 -0
  45. package/dist/{chunk-774ILSRL.js → chunk-HI63TFOG.js} +4 -3
  46. package/dist/{chunk-R7LNVMCS.js → chunk-HJJTYUHX.js} +64 -72
  47. package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
  48. package/dist/{chunk-CA42X6KT.js → chunk-HWHKMHUA.js} +6 -6
  49. package/dist/chunk-HZHHCK24.js +1631 -0
  50. package/dist/{chunk-HJB5IUKP.js → chunk-I5VEOC6I.js} +12 -12
  51. package/dist/chunk-IBEBSCYA.js +564 -0
  52. package/dist/chunk-IQ7KR472.js +362 -0
  53. package/dist/{chunk-4H6ULJ3H.js → chunk-J4W7KFM7.js} +921 -990
  54. package/dist/{chunk-4LJX2PUC.js → chunk-JDG2WCRO.js} +5 -5
  55. package/dist/{chunk-NZU6YDNV.js → chunk-K5C3NCBD.js} +4 -4
  56. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  57. package/dist/{chunk-NNNWO6F2.js → chunk-KFZI4NIL.js} +93 -3
  58. package/dist/chunk-KMVISBZR.js +132 -0
  59. package/dist/{chunk-BVDVID7E.js → chunk-LDQ2ZF2M.js} +2 -2
  60. package/dist/{chunk-OEDBCISO.js → chunk-LQ3DZAMX.js} +2 -2
  61. package/dist/{chunk-PZ4I4JE2.js → chunk-LY4S7GJC.js} +124 -116
  62. package/dist/{chunk-3DUR4WUA.js → chunk-MLKNTWH2.js} +19 -19
  63. package/dist/chunk-NEKRRTYW.js +56 -0
  64. package/dist/{chunk-5DQRIYDZ.js → chunk-NHCZP4K7.js} +2 -2
  65. package/dist/chunk-NHLBIGRH.js +1506 -0
  66. package/dist/chunk-NQQH3YT7.js +302 -0
  67. package/dist/chunk-NYS75XW5.js +15 -0
  68. package/dist/{chunk-TD7UE2L5.js → chunk-O4XIVISU.js} +7 -7
  69. package/dist/{chunk-WXCJ7VME.js → chunk-O6TL7WWY.js} +6 -6
  70. package/dist/chunk-OQBA45DZ.js +97 -0
  71. package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
  72. package/dist/chunk-PMZCIOCJ.js +25 -0
  73. package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
  74. package/dist/{chunk-HKO36JWF.js → chunk-QBJA7R7N.js} +31 -3
  75. package/dist/chunk-QDC3K2U3.js +262 -0
  76. package/dist/{chunk-5HFBWUMU.js → chunk-QLFS5GO2.js} +4 -4
  77. package/dist/{chunk-GAYUJ7LE.js → chunk-QLL7ILRG.js} +41 -32
  78. package/dist/{chunk-LXPJXFM5.js → chunk-QREDIESB.js} +7 -7
  79. package/dist/chunk-QSNYB6ZV.js +195 -0
  80. package/dist/chunk-R346GLFC.js +31 -0
  81. package/dist/{chunk-VPTUJU4P.js → chunk-SJ5ZKQ4S.js} +2 -2
  82. package/dist/{chunk-QQ7EKM72.js → chunk-SP2RXXYO.js} +6 -54
  83. package/dist/chunk-SUCTJL45.js +45 -0
  84. package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
  85. package/dist/chunk-T56WDKA5.js +183 -0
  86. package/dist/chunk-TVHHYFHE.js +255 -0
  87. package/dist/{chunk-IHKBWSXF.js → chunk-TZ3SGWZZ.js} +2 -2
  88. package/dist/{chunk-ECUO3KDP.js → chunk-U77AMWDL.js} +47 -7
  89. package/dist/{chunk-3UUY7R3Z.js → chunk-ULC6OTWO.js} +7 -7
  90. package/dist/{chunk-AEYBF3TB.js → chunk-UM7N4G5A.js} +2 -2
  91. package/dist/{chunk-3V5AYSEQ.js → chunk-UXMFQ54G.js} +43 -36
  92. package/dist/{chunk-YW7UVM5V.js → chunk-V5DHCITQ.js} +34 -1
  93. package/dist/{chunk-47CMYGET.js → chunk-VAZSBTKF.js} +2 -2
  94. package/dist/{chunk-3MRC2YSQ.js → chunk-VEO4AP2K.js} +2 -2
  95. package/dist/{chunk-PNY46YEY.js → chunk-VFA6GDY5.js} +47 -3
  96. package/dist/chunk-VO67MWHC.js +75 -0
  97. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  98. package/dist/{chunk-AD7Y7STJ.js → chunk-VYMXRQI6.js} +36 -22
  99. package/dist/{chunk-T3Z6VAAF.js → chunk-W5VSYASO.js} +19 -17
  100. package/dist/{chunk-5PVQ4SRS.js → chunk-WZR7K7ZX.js} +7 -123
  101. package/dist/{chunk-DG4M6ZUE.js → chunk-X3YGUTOB.js} +4 -4
  102. package/dist/chunk-X75E3D2N.js +686 -0
  103. package/dist/{chunk-P3JGPQFL.js → chunk-YDFRH54B.js} +4 -4
  104. package/dist/chunk-YJX4SHTD.js +40 -0
  105. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  106. package/dist/{chunk-YSEHGPCT.js → chunk-Z2RR6MAK.js} +3 -3
  107. package/dist/{chunk-HCBCAYZU.js → chunk-Z4TXYIEG.js} +5 -5
  108. package/dist/cli/index.js +47 -36
  109. package/dist/{clio-LT5V7SSZ.js → clio-2JXHBBY5.js} +7 -7
  110. package/dist/{code-nav-LMW275PA.js → code-nav-3YYRMYNF.js} +6 -6
  111. package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
  112. package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
  113. package/dist/{config-RXS5T3JT.js → config-QZPCMYSO.js} +58 -50
  114. package/dist/{configure-2WYWSCSD.js → configure-TEGEBYCA.js} +21 -19
  115. package/dist/{context-I3BTOTCS.js → context-AV7OEZ4D.js} +11 -11
  116. package/dist/{context-MVOORGMF.js → context-E6H5RNMC.js} +49 -41
  117. package/dist/{context-PALKKQYL.js → context-GSXUE4CT.js} +25 -23
  118. package/dist/{context-clear-N2WOYZ2K.js → context-clear-SHIBYK6T.js} +48 -40
  119. package/dist/{context-working-set-MIEVECVZ.js → context-working-set-5ZGKPGZQ.js} +11 -10
  120. package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-EFMJT4LD.js} +88 -60
  121. package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
  122. package/dist/doctor-QOA5FNY5.js +313 -0
  123. package/dist/{eval-IJ5VEZDJ.js → eval-TFBYQH4H.js} +66 -64
  124. package/dist/eval-inventory-SXH7PDKX.js +316 -0
  125. package/dist/{evidence-L5APPXNV.js → evidence-ERGESKGN.js} +198 -44
  126. package/dist/{evolve-RGNKFJ52.js → evolve-VDXTSYCJ.js} +46 -38
  127. package/dist/{extensions-7WYWUX5A.js → extensions-7BGBHN57.js} +6 -6
  128. package/dist/{fleet-6CNVBZZP.js → fleet-2RRVDF2V.js} +189 -101
  129. package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-VJ726XIA.js} +10 -10
  130. package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
  131. package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-JF5QOATM.js} +16 -15
  132. package/dist/fleet-inspect-VLY4S7QM.js +442 -0
  133. package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-AIZUEJOY.js} +6 -5
  134. package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-AJRPDMDV.js} +20 -18
  135. package/dist/fleet-verify-JFEL2L3H.js +175 -0
  136. package/dist/fleet-view-ZCON35AG.js +102 -0
  137. package/dist/{init-VBN2ACVA.js → init-DN2WWLFE.js} +64 -56
  138. package/dist/install-XGLBQY5E.js +13 -0
  139. package/dist/interop-OZBKXAYL.js +114 -0
  140. package/dist/{library-JHGUMLY2.js → library-YWZG7IMW.js} +19 -18
  141. package/dist/{memory-K4OQIYWG.js → memory-I4C4HMLW.js} +48 -40
  142. package/dist/{models-2NCZUWDD.js → models-CEYXJBO6.js} +30 -28
  143. package/dist/{monitor-MMVTJABD.js → monitor-NZ6GCI3P.js} +53 -47
  144. package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-GCGQ4N5I.js} +6311 -7145
  145. package/dist/panes-HMABYVO4.js +58 -0
  146. package/dist/panes-KY6W3V2E.js +103 -0
  147. package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
  148. package/dist/{reset-DD5JGOY3.js → reset-DQ6FGCSH.js} +13 -11
  149. package/dist/resources-BB3MVJMD.js +111 -0
  150. package/dist/{run-QEGNX7FL.js → run-H2GQDUER.js} +113 -82
  151. package/dist/{share-JKD3BQMW.js → share-GTJN6A5O.js} +18 -17
  152. package/dist/{skills-LMQIKDOZ.js → skills-L55TEW6R.js} +31 -24
  153. package/dist/{skills-eval-I7X2774U.js → skills-eval-XVXPH2JI.js} +61 -52
  154. package/dist/skills-inventory-S4MXPJFV.js +126 -0
  155. package/dist/slash-commands-ZSGASKJC.js +77 -0
  156. package/dist/{steer-CF5TDANS.js → steer-RZGSCY4R.js} +3 -3
  157. package/dist/{support-I7LOJLIF.js → support-PKEUNNQL.js} +4 -4
  158. package/dist/{targets-RUSR6B5Z.js → targets-NCPZ644J.js} +31 -29
  159. package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-44SV3YCN.js} +4 -4
  160. package/dist/tools-DAF3DI3C.js +27 -0
  161. package/dist/{trace-ODOQIVIW.js → trace-FYVW2MQA.js} +149 -7
  162. package/dist/tui-primitives-2AKXQNZK.js +13 -0
  163. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
  164. package/dist/{upgrade-XANW3FXB.js → upgrade-3XPP6OQL.js} +26 -24
  165. package/dist/{usage-4H7ZRXQT.js → usage-3NLHGTU2.js} +57 -49
  166. package/dist/{verifiers-UZXNBZEB.js → verifiers-SSQONKRT.js} +171 -12
  167. package/dist/{verify-BVKWTNDL.js → verify-3U6J7FZI.js} +9 -9
  168. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
  169. package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-CEHYGPGQ.js} +67 -59
  170. package/dist/with-panes-MKB46MPQ.js +782 -0
  171. package/dist/worker/entry.js +101 -66
  172. package/docs/README.md +3 -2
  173. package/docs/acp.md +24 -3
  174. package/docs/alcf-provider.md +1 -1
  175. package/docs/architecture.md +2 -2
  176. package/docs/artifact-versions.md +4 -1
  177. package/docs/built-in-agents.md +1 -1
  178. package/docs/capacity-and-scheduling.md +43 -5
  179. package/docs/commands-and-modes.md +31 -2
  180. package/docs/configuration-and-targets.md +40 -10
  181. package/docs/context-engine.md +1 -1
  182. package/docs/development-pipeline.md +19 -0
  183. package/docs/dispatch-typed-intent.md +385 -0
  184. package/docs/documentation-coverage.md +2 -2
  185. package/docs/documentation-guide.md +1 -1
  186. package/docs/environment-variables.md +1 -0
  187. package/docs/eval-runner.md +1 -1
  188. package/docs/evals-internal.md +1 -1
  189. package/docs/evidence-and-memory.md +2 -2
  190. package/docs/evolution.md +1 -1
  191. package/docs/exit-codes-and-output.md +1 -1
  192. package/docs/extensions-and-sharing.md +25 -1
  193. package/docs/fleet-dispatch.md +22 -1
  194. package/docs/installation-and-lifecycle.md +15 -2
  195. package/docs/middleware-and-components.md +1 -1
  196. package/docs/model-catalog.md +10 -1
  197. package/docs/observability.md +3 -3
  198. package/docs/proactive-memory.md +1 -1
  199. package/docs/prompt-envelope-and-tools.md +1 -1
  200. package/docs/provider-adapter-cookbook.md +1 -1
  201. package/docs/safety-model.md +2 -2
  202. package/docs/scientific-validation.md +3 -3
  203. package/docs/session-lifecycle.md +1 -1
  204. package/docs/skills-marketplace.md +1 -1
  205. package/docs/tool-usage.md +18 -8
  206. package/docs/trace-store.md +1 -1
  207. package/docs/troubleshooting.md +1 -1
  208. package/docs/tui-design.md +1 -1
  209. package/docs/worker-dispatch-mechanics.md +1 -1
  210. package/package.json +4 -2
  211. package/src/cli/acp.ts +6 -2
  212. package/src/cli/argv.ts +25 -0
  213. package/src/cli/configure.ts +23 -21
  214. package/src/cli/doctor-panes.ts +124 -0
  215. package/src/cli/doctor-toolchain.ts +57 -0
  216. package/src/cli/doctor.ts +20 -1
  217. package/src/cli/eval-inventory.ts +436 -0
  218. package/src/cli/eval.ts +13 -0
  219. package/src/cli/evidence-detail.ts +88 -0
  220. package/src/cli/evidence-inventory.ts +183 -0
  221. package/src/cli/evidence.ts +30 -5
  222. package/src/cli/fleet-decisions.ts +69 -0
  223. package/src/cli/fleet-inspect.ts +334 -0
  224. package/src/cli/fleet-verify.ts +133 -0
  225. package/src/cli/fleet-view.ts +810 -0
  226. package/src/cli/fleet.ts +148 -37
  227. package/src/cli/index.ts +14 -2
  228. package/src/cli/interop-inspect.ts +128 -0
  229. package/src/cli/interop.ts +34 -0
  230. package/src/cli/panes.ts +35 -0
  231. package/src/cli/reset.ts +5 -2
  232. package/src/cli/run.ts +58 -0
  233. package/src/cli/skills-inventory.ts +185 -0
  234. package/src/cli/skills.ts +16 -13
  235. package/src/cli/tools.ts +321 -0
  236. package/src/cli/trace-inspect.ts +252 -0
  237. package/src/cli/trace.ts +23 -2
  238. package/src/cli/verifiers-inspect.ts +347 -0
  239. package/src/cli/verifiers.ts +9 -0
  240. package/src/core/bus-events.ts +4 -0
  241. package/src/core/config.ts +49 -0
  242. package/src/core/defaults.ts +93 -7
  243. package/src/core/response-schema.ts +44 -4
  244. package/src/core/theme-token-hex.ts +43 -0
  245. package/src/core/tool-names.ts +2 -1
  246. package/src/core/xdg.ts +1 -1
  247. package/src/domains/agents/fleets/build-review.md +0 -3
  248. package/src/domains/agents/fleets/build-test.md +0 -3
  249. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  250. package/src/domains/agents/result-contract.ts +164 -35
  251. package/src/domains/config/classify.ts +3 -0
  252. package/src/domains/dispatch/admission-error.ts +9 -0
  253. package/src/domains/dispatch/admission.ts +22 -21
  254. package/src/domains/dispatch/capacity-lease.ts +21 -1
  255. package/src/domains/dispatch/council-topology.ts +398 -0
  256. package/src/domains/dispatch/extension.ts +222 -50
  257. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  258. package/src/domains/dispatch/fleet-plan.ts +7 -2
  259. package/src/domains/dispatch/fleet-run.ts +64 -1
  260. package/src/domains/dispatch/gate-decisions.ts +11 -1
  261. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  262. package/src/domains/dispatch/gate-topology.ts +289 -0
  263. package/src/domains/dispatch/index.ts +19 -0
  264. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  265. package/src/domains/dispatch/intent.ts +85 -1
  266. package/src/domains/dispatch/reservation-store.ts +24 -4
  267. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  268. package/src/domains/dispatch/run-event-journal.ts +598 -0
  269. package/src/domains/dispatch/state.ts +45 -1
  270. package/src/domains/dispatch/types.ts +13 -0
  271. package/src/domains/dispatch/validation.ts +33 -8
  272. package/src/domains/eval/compare/compare.ts +3 -16
  273. package/src/domains/eval/inventory.ts +113 -0
  274. package/src/domains/eval/schema/serving.ts +31 -0
  275. package/src/domains/evidence/store.ts +6 -0
  276. package/src/domains/memory/index.ts +0 -1
  277. package/src/domains/memory/task-memory-policy.ts +6 -10
  278. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  279. package/src/domains/middleware/memory-intervention.ts +33 -21
  280. package/src/domains/mux/contract.ts +434 -0
  281. package/src/domains/mux/detect.ts +158 -0
  282. package/src/domains/mux/extension.ts +47 -0
  283. package/src/domains/mux/index.ts +96 -0
  284. package/src/domains/mux/manifest.ts +6 -0
  285. package/src/domains/mux/operations.ts +164 -0
  286. package/src/domains/mux/pane-registry.ts +90 -0
  287. package/src/domains/mux/protocol.ts +49 -0
  288. package/src/domains/mux/socket-client.ts +816 -0
  289. package/src/domains/mux/types.ts +222 -0
  290. package/src/domains/mux/viewer-command.ts +59 -0
  291. package/src/domains/mux/yazi/assets/init.lua +2 -0
  292. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  293. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  294. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  295. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  296. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  297. package/src/domains/mux/yazi/event-stream.ts +180 -0
  298. package/src/domains/mux/yazi/profile.ts +299 -0
  299. package/src/domains/mux/yazi/session.ts +228 -0
  300. package/src/domains/mux/yazi/theme.ts +30 -0
  301. package/src/domains/observability/cost.ts +21 -0
  302. package/src/domains/observability/index.ts +2 -0
  303. package/src/domains/observability/trace-store.ts +42 -0
  304. package/src/domains/providers/endpoint-capacity.ts +154 -22
  305. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  306. package/src/domains/providers/extension.ts +20 -3
  307. package/src/domains/providers/index.ts +22 -0
  308. package/src/domains/providers/model-runtime-capabilities.ts +32 -0
  309. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  310. package/src/domains/providers/runtimes/builtins.ts +2 -0
  311. package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
  312. package/src/domains/providers/support.ts +1 -0
  313. package/src/domains/providers/target-model-cache.ts +124 -0
  314. package/src/domains/resources/index.ts +3 -0
  315. package/src/domains/resources/skills/loader.ts +33 -0
  316. package/src/domains/safety/action-classifier.ts +6 -0
  317. package/src/domains/toolchain/archive.ts +175 -0
  318. package/src/domains/toolchain/contract.ts +28 -0
  319. package/src/domains/toolchain/extension.ts +47 -0
  320. package/src/domains/toolchain/index.ts +39 -0
  321. package/src/domains/toolchain/install.ts +327 -0
  322. package/src/domains/toolchain/manifest.ts +8 -0
  323. package/src/domains/toolchain/paths.ts +34 -0
  324. package/src/domains/toolchain/registry.ts +265 -0
  325. package/src/domains/toolchain/remove.ts +218 -0
  326. package/src/domains/toolchain/resolve.ts +182 -0
  327. package/src/domains/toolchain/types.ts +113 -0
  328. package/src/domains/toolchain/version.ts +88 -0
  329. package/src/engine/acp/server.ts +413 -70
  330. package/src/engine/acp/types.ts +19 -1
  331. package/src/engine/claude/sdk-module.ts +98 -0
  332. package/src/engine/claude/sdk-runtime.ts +19 -11
  333. package/src/engine/tui-primitives.ts +21 -0
  334. package/src/engine/tui.ts +1 -0
  335. package/src/engine/worker-runtime.ts +2 -13
  336. package/src/entry/boot-options.ts +2 -0
  337. package/src/entry/orchestrator.ts +103 -5
  338. package/src/entry/panes-activation.ts +31 -0
  339. package/src/entry/with-panes.ts +20 -0
  340. package/src/interactive/context-overlay.ts +1 -0
  341. package/src/interactive/cost-overlay.ts +2 -0
  342. package/src/interactive/council-grid.ts +1 -3
  343. package/src/interactive/council.ts +11 -0
  344. package/src/interactive/dispatch-board.ts +26 -16
  345. package/src/interactive/interactive-application.ts +153 -6
  346. package/src/interactive/interactive-input-runtime.ts +7 -0
  347. package/src/interactive/interactive-slash-runtime.ts +36 -6
  348. package/src/interactive/memory-overlay.ts +1 -0
  349. package/src/interactive/modal-marker.ts +170 -0
  350. package/src/interactive/mux-bridge.ts +214 -0
  351. package/src/interactive/overlay-frame.ts +58 -2
  352. package/src/interactive/overlay-general-openers.ts +1 -0
  353. package/src/interactive/overlay-key-routing.ts +14 -3
  354. package/src/interactive/overlay-lifecycle.ts +19 -3
  355. package/src/interactive/overlay-model-selectors.ts +40 -3
  356. package/src/interactive/overlay-permission-lifecycle.ts +90 -22
  357. package/src/interactive/overlay-transitions.ts +18 -4
  358. package/src/interactive/overlays/agents.ts +1 -0
  359. package/src/interactive/overlays/ask-user.ts +136 -30
  360. package/src/interactive/overlays/auth-dialog.ts +1 -0
  361. package/src/interactive/overlays/context-reset.ts +1 -0
  362. package/src/interactive/overlays/cwd-fallback.ts +1 -0
  363. package/src/interactive/overlays/decisions.ts +11 -11
  364. package/src/interactive/overlays/extensions.ts +1 -0
  365. package/src/interactive/overlays/fleet-run-approval.ts +1 -0
  366. package/src/interactive/overlays/handoff-review.ts +1 -0
  367. package/src/interactive/overlays/help-reference.ts +2 -0
  368. package/src/interactive/overlays/interop.ts +1 -0
  369. package/src/interactive/overlays/library-install-confirm.ts +1 -0
  370. package/src/interactive/overlays/library-tabs.ts +28 -0
  371. package/src/interactive/overlays/list-overlay.ts +10 -1
  372. package/src/interactive/overlays/message-picker.ts +1 -0
  373. package/src/interactive/overlays/model-scope.ts +86 -0
  374. package/src/interactive/overlays/model-selector.ts +1 -0
  375. package/src/interactive/overlays/prompts.ts +1 -0
  376. package/src/interactive/overlays/session-selector.ts +1 -0
  377. package/src/interactive/overlays/settings-sections.ts +30 -0
  378. package/src/interactive/overlays/settings.ts +579 -44
  379. package/src/interactive/overlays/side-question.ts +1 -0
  380. package/src/interactive/overlays/skills-hub.ts +3 -11
  381. package/src/interactive/overlays/tree-selector.ts +1 -0
  382. package/src/interactive/pane-policy.ts +46 -0
  383. package/src/interactive/panes-runtime.ts +292 -0
  384. package/src/interactive/renderers/compaction-summary.ts +29 -0
  385. package/src/interactive/renderers/worker-entry.ts +122 -14
  386. package/src/interactive/slash-commands.ts +251 -15
  387. package/src/interactive/tasks-overlay.ts +1 -0
  388. package/src/interactive/theme/tokens.ts +3 -14
  389. package/src/interactive/turn-context.ts +47 -2
  390. package/src/interactive/view/artifacts.ts +109 -1
  391. package/src/interactive/view/view-overlay.ts +1 -0
  392. package/src/interactive/watch-pane.ts +152 -0
  393. package/src/interactive/worker-progress.ts +7 -1
  394. package/src/interactive/worker-receipts.ts +19 -1
  395. package/src/interactive/worker-stream.ts +5 -0
  396. package/src/interactive/yazi-bridge.ts +444 -0
  397. package/src/tools/bootstrap.ts +26 -2
  398. package/src/tools/builtin-tool-catalog.ts +15 -0
  399. package/src/tools/compete-worktrees.ts +83 -2
  400. package/src/tools/core-bootstrap.ts +2 -1
  401. package/src/tools/dispatch-admission.ts +14 -3
  402. package/src/tools/dispatch-arguments.ts +20 -20
  403. package/src/tools/dispatch-run-events.ts +134 -19
  404. package/src/tools/dispatch-runner.ts +29 -7
  405. package/src/tools/dispatch-types.ts +15 -3
  406. package/src/tools/dispatch.ts +1 -1
  407. package/src/tools/executables.ts +17 -14
  408. package/src/tools/observation.ts +54 -4
  409. package/src/tools/panes-surface.ts +38 -0
  410. package/src/tools/panes.ts +112 -0
  411. package/src/tools/policy.ts +10 -1
  412. package/src/tools/presentation.ts +1 -0
  413. package/dist/chunk-D73KXYPF.js +0 -37
  414. package/dist/chunk-MLOK6ZOS.js +0 -2888
  415. package/dist/chunk-YKOFT37S.js +0 -279
  416. package/dist/doctor-TWBWFK5V.js +0 -165
@@ -16,28 +16,32 @@ import {
16
16
  resolveDeliveryTools,
17
17
  sanitizeLockedSynthesisMessage,
18
18
  workerLoopBlockBudget
19
- } from "../chunk-R7LNVMCS.js";
19
+ } from "../chunk-HJJTYUHX.js";
20
20
  import "../chunk-K7VKOLQQ.js";
21
21
  import {
22
22
  createMiddlewareContractFromSnapshot,
23
23
  createMiddlewareToolChoiceControl,
24
24
  shouldRequestStalledTurnContinuation
25
- } from "../chunk-GAYUJ7LE.js";
25
+ } from "../chunk-QLL7ILRG.js";
26
26
  import {
27
27
  CONFIRMED_SCOPE,
28
28
  READONLY_SCOPE,
29
29
  WORKSPACE_SCOPE,
30
30
  isSubset
31
- } from "../chunk-HAY4ZE2P.js";
31
+ } from "../chunk-5PSMVOLM.js";
32
32
  import {
33
33
  createLoopState,
34
34
  observe
35
35
  } from "../chunk-UOV2BYIW.js";
36
- import "../chunk-CA42X6KT.js";
37
- import "../chunk-OEDBCISO.js";
38
- import "../chunk-5DQRIYDZ.js";
39
- import "../chunk-VKBMFOYV.js";
40
- import "../chunk-O6I4CIEU.js";
36
+ import "../chunk-BMS5RKQY.js";
37
+ import "../chunk-QSNYB6ZV.js";
38
+ import "../chunk-QDC3K2U3.js";
39
+ import "../chunk-YPI3QQCF.js";
40
+ import "../chunk-HWHKMHUA.js";
41
+ import "../chunk-LQ3DZAMX.js";
42
+ import "../chunk-NHCZP4K7.js";
43
+ import "../chunk-36EJLSQQ.js";
44
+ import "../chunk-BKFJHQCA.js";
41
45
  import "../chunk-VG7TBQIY.js";
42
46
  import {
43
47
  DEFAULT_ESCALATION_FALLBACK,
@@ -46,43 +50,36 @@ import {
46
50
  claudeToolsOutsideProfile,
47
51
  coerceToolInput,
48
52
  createRunEffectsRecorder,
49
- describeCallTarget,
50
53
  emitClaudeToolPermissionDecision,
51
54
  isClaudeCodeSessionId,
55
+ nodeResultContractFilesystem,
52
56
  parseWorkerSpec,
53
57
  runtimeSpeaksResponseSchemaDialect,
54
58
  startAntigravityWorkerRun,
55
59
  startClaudeCodeWorkerRun,
56
60
  validateRehydratedWorkerRuntime
57
- } from "../chunk-4H6ULJ3H.js";
58
- import "../chunk-VPTUJU4P.js";
61
+ } from "../chunk-J4W7KFM7.js";
62
+ import "../chunk-SJ5ZKQ4S.js";
59
63
  import "../chunk-2JDWVJND.js";
60
- import "../chunk-H7IXIC72.js";
61
- import "../chunk-7C6RYZGQ.js";
64
+ import "../chunk-GKF55TAZ.js";
62
65
  import {
63
66
  createSafetyPolicyEngine
64
- } from "../chunk-N3PBVRTZ.js";
65
- import "../chunk-A2NJGIB3.js";
66
- import "../chunk-OQE5J4C6.js";
67
- import {
68
- RESULT_CONTRACT_REPAIR_LIMIT,
69
- classify,
70
- parseWorkerResultContract,
71
- resultContractRepairMessages,
72
- validateResultContract
73
- } from "../chunk-S4COXYBG.js";
67
+ } from "../chunk-32KWKNSF.js";
74
68
  import {
75
- protectedArtifactMutationBlockReason
76
- } from "../chunk-MV3K5QF2.js";
69
+ describeCallTarget
70
+ } from "../chunk-TVHHYFHE.js";
71
+ import "../chunk-42FMPA75.js";
72
+ import "../chunk-H7IXIC72.js";
73
+ import "../chunk-5LXZXPKX.js";
74
+ import "../chunk-OQE5J4C6.js";
77
75
  import {
78
76
  DEFAULT_AUTONOMY_LEVEL,
79
77
  agentSkillToolPolicy
80
78
  } from "../chunk-RAPCMZL4.js";
81
- import "../chunk-UL3WSD3F.js";
82
- import "../chunk-ODFEOB4F.js";
79
+ import "../chunk-CY6FY24N.js";
83
80
  import "../chunk-OZNBF4L3.js";
84
81
  import "../chunk-4BJ5BYCE.js";
85
- import "../chunk-ECH6PKUQ.js";
82
+ import "../chunk-6XLNIQDB.js";
86
83
  import {
87
84
  UNKNOWN_RESOURCE,
88
85
  WORKER_PROTOCOL_VERSION,
@@ -100,13 +97,24 @@ import {
100
97
  } from "../chunk-CMZWFGD2.js";
101
98
  import {
102
99
  deleteInjectedCompileCacheFrom
103
- } from "../chunk-I4HZDVNP.js";
104
- import "../chunk-ZI647VB5.js";
105
- import "../chunk-6XLNIQDB.js";
100
+ } from "../chunk-PQEFIJ36.js";
101
+ import "../chunk-HHV2GANA.js";
102
+ import {
103
+ RESULT_CONTRACT_REPAIR_LIMIT,
104
+ classify,
105
+ parseWorkerResultContract,
106
+ resultContractRepairMessages,
107
+ validateResultContract
108
+ } from "../chunk-DYJP44XW.js";
109
+ import {
110
+ protectedArtifactMutationBlockReason
111
+ } from "../chunk-GCSMB2KY.js";
112
+ import "../chunk-UL3WSD3F.js";
113
+ import "../chunk-ECH6PKUQ.js";
106
114
  import "../chunk-5B2AEOW5.js";
107
115
  import {
108
116
  ToolNames
109
- } from "../chunk-CGKSTWHD.js";
117
+ } from "../chunk-K6BSR66V.js";
110
118
  import "../chunk-65DEGPJ6.js";
111
119
  import {
112
120
  FileKnowledgeBase,
@@ -118,23 +126,24 @@ import {
118
126
  setGlobalDefaultMaxOutputTokens,
119
127
  setProtectedModelsProvider,
120
128
  setResidencyNoticeSink
121
- } from "../chunk-MIX5N5AC.js";
129
+ } from "../chunk-DQITNCXG.js";
122
130
  import "../chunk-CFGTUFWB.js";
123
- import "../chunk-LU7P4LHA.js";
124
- import "../chunk-AEYBF3TB.js";
131
+ import "../chunk-P3FOHJT4.js";
132
+ import "../chunk-UM7N4G5A.js";
133
+ import "../chunk-ZGVHUX3M.js";
134
+ import "../chunk-HLW2MRKE.js";
135
+ import "../chunk-76ONBSIA.js";
136
+ import "../chunk-R346GLFC.js";
125
137
  import "../chunk-IHXBNWMM.js";
126
- import {
127
- setGitCommitAttributionEnabled,
128
- withManagedGitCommitAttributionEnvironment
129
- } from "../chunk-B5CSFE7B.js";
130
138
  import {
131
139
  readSettings,
132
140
  validateSettingsFile
133
- } from "../chunk-PNY46YEY.js";
141
+ } from "../chunk-VFA6GDY5.js";
142
+ import {
143
+ setGitCommitAttributionEnabled,
144
+ withManagedGitCommitAttributionEnvironment
145
+ } from "../chunk-BBVJUZHB.js";
134
146
  import "../chunk-FQ4SKYE4.js";
135
- import "../chunk-ZGVHUX3M.js";
136
- import "../chunk-RKRLDWD3.js";
137
- import "../chunk-KV2AOLDF.js";
138
147
  import {
139
148
  AI_AGENT_NAME
140
149
  } from "../chunk-6EJMN2Y3.js";
@@ -143,21 +152,21 @@ import {
143
152
  } from "../chunk-IWHMRKLL.js";
144
153
  import {
145
154
  registerBuiltinRuntimes
146
- } from "../chunk-JEQQR47K.js";
147
- import "../chunk-XDOQXGFO.js";
155
+ } from "../chunk-6DB53AJS.js";
156
+ import "../chunk-GXNLGKAB.js";
148
157
  import "../chunk-LL4KHSZI.js";
149
158
  import {
150
159
  configureGuardrails,
151
160
  isWorkerToolCallCapExceededReason,
152
161
  isWorkerToolCallCapSynthesisReason
153
162
  } from "../chunk-4ZG3XFUR.js";
154
- import "../chunk-774ILSRL.js";
155
- import "../chunk-EQ63NRB7.js";
163
+ import "../chunk-HI63TFOG.js";
164
+ import "../chunk-BBVYXMFO.js";
156
165
  import "../chunk-SST6Z5JA.js";
157
166
  import "../chunk-IKCO5N3L.js";
158
167
  import "../chunk-3I7MS7N2.js";
159
168
  import "../chunk-APJ265NV.js";
160
- import "../chunk-BNAZZHFG.js";
169
+ import "../chunk-BYP5D4HI.js";
161
170
  import "../chunk-WEPFGWHJ.js";
162
171
  import {
163
172
  getRuntimeRegistry
@@ -176,14 +185,10 @@ init_esm_shims();
176
185
 
177
186
  // src/engine/worker-runtime.ts
178
187
  init_esm_shims();
179
- import { existsSync, readFileSync } from "node:fs";
180
188
  import path from "node:path";
181
189
 
182
190
  // src/engine/claude/sdk-runtime.ts
183
191
  init_esm_shims();
184
- import {
185
- query
186
- } from "@anthropic-ai/claude-agent-sdk";
187
192
 
188
193
  // src/engine/worker-tools.ts
189
194
  init_esm_shims();
@@ -305,6 +310,46 @@ function attestedToolSignature(input) {
305
310
  );
306
311
  }
307
312
 
313
+ // src/engine/claude/sdk-module.ts
314
+ init_esm_shims();
315
+ var CLAUDE_AGENT_SDK_PACKAGE = "@anthropic-ai/claude-agent-sdk";
316
+ var CLAUDE_AGENT_SDK_VERSION = "0.3.186";
317
+ var CLAUDE_AGENT_SDK_INSTALL_COMMAND = `npm install ${CLAUDE_AGENT_SDK_PACKAGE}@${CLAUDE_AGENT_SDK_VERSION}`;
318
+ var ClaudeAgentSdkUnavailableError = class extends Error {
319
+ code = "CLAUDE_AGENT_SDK_UNAVAILABLE";
320
+ packageName = CLAUDE_AGENT_SDK_PACKAGE;
321
+ installCommand = CLAUDE_AGENT_SDK_INSTALL_COMMAND;
322
+ constructor(cause) {
323
+ super(
324
+ `The claude-sdk runtime needs the optional package ${CLAUDE_AGENT_SDK_PACKAGE}, which is not installed. Install it with \`${CLAUDE_AGENT_SDK_INSTALL_COMMAND}\` (or reinstall clio-coder without \`--omit=optional\`), then select the target again. Every other runtime works without it.`,
325
+ cause === void 0 ? void 0 : { cause }
326
+ );
327
+ this.name = "ClaudeAgentSdkUnavailableError";
328
+ }
329
+ };
330
+ var MISSING_MODULE_CODES = /* @__PURE__ */ new Set([
331
+ "ERR_MODULE_NOT_FOUND",
332
+ "MODULE_NOT_FOUND",
333
+ "ERR_PACKAGE_PATH_NOT_EXPORTED"
334
+ ]);
335
+ function isMissingModuleError(error) {
336
+ const code = error?.code;
337
+ return typeof code === "string" && MISSING_MODULE_CODES.has(code);
338
+ }
339
+ var realLoader = async () => await import("@anthropic-ai/claude-agent-sdk");
340
+ var loader = realLoader;
341
+ var cached = null;
342
+ async function loadClaudeAgentSdk() {
343
+ if (cached) return cached;
344
+ try {
345
+ cached = await loader();
346
+ return cached;
347
+ } catch (error) {
348
+ if (isMissingModuleError(error)) throw new ClaudeAgentSdkUnavailableError(error);
349
+ throw error;
350
+ }
351
+ }
352
+
308
353
  // src/engine/claude/sdk-runtime.ts
309
354
  var DEFAULT_CLAUDE_TOOLS = { type: "preset", preset: "claude_code" };
310
355
  function sdkUserTextMessage(text, shouldQuery) {
@@ -597,8 +642,8 @@ function decideToolUse(input, toolCallId, toolName, toolInput) {
597
642
  });
598
643
  }
599
644
  function decideClaudeSdkToolUseOnce(handled, toolUseID, decide) {
600
- const cached = toolUseID ? handled.get(toolUseID) : void 0;
601
- if (cached) return cached;
645
+ const cached2 = toolUseID ? handled.get(toolUseID) : void 0;
646
+ if (cached2) return cached2;
602
647
  const decision = decide();
603
648
  if (toolUseID) handled.set(toolUseID, decision);
604
649
  return decision;
@@ -740,6 +785,7 @@ function startClaudeSdkWorkerRun(input, emit) {
740
785
  let responseId;
741
786
  emit({ type: "agent_start" });
742
787
  try {
788
+ const { query } = await loadClaudeAgentSdk();
743
789
  queryHandle = query({ prompt: buildClaudeSdkPrompt(input), options });
744
790
  for await (const sdkMessage of queryHandle) {
745
791
  if (sdkMessage.type === "system" && sdkMessage.subtype === "init") {
@@ -869,18 +915,7 @@ function terminalContractViolation(contract, message, cwd, observedReadRanges, o
869
915
  // Repair rounds judge shape and grounding only. Network posture belongs to
870
916
  // the orchestrator's sealed validation, which runs again on the receipt.
871
917
  networkAllowed: true,
872
- filesystem: {
873
- readFile(filePath) {
874
- try {
875
- return readFileSync(filePath, "utf8");
876
- } catch {
877
- return null;
878
- }
879
- },
880
- pathExists(filePath) {
881
- return existsSync(filePath);
882
- }
883
- }
918
+ filesystem: nodeResultContractFilesystem()
884
919
  });
885
920
  return validation.conformance === "pass" ? null : validation.reason ?? "invalid result";
886
921
  }
package/docs/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Clio Coder Documentation
6
6
 
7
- These pages document `v0.3.7` of Clio Coder, an open-source coding orchestrator within the [IOWarp](https://iowarp.ai) scientific computing platform, created by the [Gnosis Research Center](https://grc.iit.edu) at the [Illinois Institute of Technology](https://www.iit.edu).
7
+ These pages document `v0.4.0` of Clio Coder, an open-source coding orchestrator within the [IOWarp](https://iowarp.ai) scientific computing platform, created by the [Gnosis Research Center](https://grc.iit.edu) at the [Illinois Institute of Technology](https://www.iit.edu).
8
8
 
9
9
  They are source-aligned guides: when prose and source disagree, prefer the
10
10
  current source, tests, and `CHANGELOG.md`.
@@ -23,6 +23,7 @@ current source, tests, and `CHANGELOG.md`.
23
23
  | Safety posture, default-deny Bash, project policy, damage-control rules, and typed validation | [safety-model.md](safety-model.md) ([Interactive Blueprint](html/safety_blueprint.html)) |
24
24
  | Source layout, compile-time boundaries, domain loading, and runtime data flow | [architecture.md](architecture.md) ([Interactive Blueprint](html/architecture_blueprint.html)) |
25
25
  | Why the dispatch domain is not split, which invariants cross the obvious seams, and why direct subpath imports are permitted | [dispatch-architecture-rationale.md](dispatch-architecture-rationale.md) ([Interactive Blueprint](html/dispatch_rationale_blueprint.html)) |
26
+ | Typed dispatch intent: the producer and persisted-contract compatibility tables, refusal reason codes, and the legacy-inference retirement criterion | [dispatch-typed-intent.md](dispatch-typed-intent.md) |
26
27
  | Prompt envelope reuse, provider tool delivery, and bounded tool results | [prompt-envelope-and-tools.md](prompt-envelope-and-tools.md) ([Interactive Blueprints: prompt_envelope](html/prompt_envelope_blueprint.html), [tools](html/tools_blueprint.html)) |
27
28
  | In-depth reference for all 20 worker tools: parameters, typical payloads, and error examples | [tool-usage.md](tool-usage.md) ([Interactive Blueprint](html/tool_usage_blueprint.html)) |
28
29
  | Developer guide to implementing custom model runtimes and inference server integrations | [provider-adapter-cookbook.md](provider-adapter-cookbook.md) ([Interactive Blueprint](html/provider_adapter_blueprint.html)) |
@@ -84,7 +85,7 @@ under `src/`, run `npm run build` again or keep `npm run dev` running.
84
85
  ## Release Notes
85
86
 
86
87
  The release entry point is [../README.md](../README.md); detailed release
87
- history lives in [../CHANGELOG.md](../CHANGELOG.md). For v0.3.7 the supported
88
+ history lives in [../CHANGELOG.md](../CHANGELOG.md). For v0.4.0 the supported
88
89
  install paths are `npm install -g @iowarp/clio-coder` and a source checkout
89
90
  through `npm run install:local`, the deterministic release gate is
90
91
  `npm run ci:release`, and live model smoke validation is local/manual and
package/docs/acp.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Agent Client Protocol (ACP) Server
2
2
 
3
- This document defines the architecture, transport protocols, tool mediation layers, permission handling, and error taxonomy for Clio Coder's Agent Client Protocol (ACP) server implementation in `v0.3.7`.
3
+ This document defines the architecture, transport protocols, tool mediation layers, permission handling, and error taxonomy for Clio Coder's Agent Client Protocol (ACP) server implementation in `v0.4.0`.
4
4
 
5
5
  Source implementations: `src/engine/acp/` and `src/cli/acp.ts`.
6
6
 
@@ -11,7 +11,11 @@ Source implementations: `src/engine/acp/` and `src/cli/acp.ts`.
11
11
  Clio Coder provides a native ACP server via the `clio-coder acp` command. The server implements the open Agent Client Protocol specification (ACP v1 / schema 0.4.5) over standard I/O JSON-RPC 2.0 transport (`src/engine/acp/transport.ts`).
12
12
 
13
13
  The ACP server allows external IDEs, editors (such as Zed), and automated orchestration engines to drive Clio Coder sessions over a structured protocol.
14
- An example localhost client lives in `apps/workbench` and is unreleased.
14
+ The source tree includes the `apps/workbench` localhost desktop client. Its ACP
15
+ adapter supports session browsing and deletion, safe settings, target probes,
16
+ usage, recovery, evaluation inventory, routing and dispatch inspection, toolchain
17
+ status, agent attribution, and the live fleet event strip. The workbench is a
18
+ source application and is not included in the published CLI package.
15
19
 
16
20
  ```mermaid
17
21
  graph LR
@@ -31,6 +35,10 @@ The server is invoked via:
31
35
  clio-coder acp [--cwd PATH] [--permission-timeout MS]
32
36
  ```
33
37
 
38
+ `clio-coder --acp [--cwd PATH] [--permission-timeout MS]` is an exact alias;
39
+ both spellings reach the same command dispatcher, option parser, stdout guard,
40
+ and server boot path.
41
+
34
42
  - `--cwd PATH`: Workspace root the server boots in. The path is resolved and then canonicalized with `fs.realpath`, so a symlinked launch root, a trailing slash, and a `/.` suffix all name the same workspace. Clio changes into that canonical path before it reads settings, builds project context, or opens a session ledger, so a session opens at that root. A path that does not exist or that the process cannot enter exits 2 without starting the server. The canonical path is the server's workspace identity for its whole life: `session/new` must carry a `cwd` that canonicalizes to the same path, and nothing after boot ever changes the process directory.
35
43
  - `--permission-timeout MS`: The server-side fail-safe ceiling for one mediated permission request, as a whole number from 1 through Node's maximum schedulable timer delay (`2147483647`) milliseconds. Values outside that range are refused before the protocol server starts. If the timer wins, the approval expires, the active turn is aborted, every parked call for that turn is settled only so execution can unwind, and `session/prompt` fails with `permission_expired`. Expiry is audited as `expired`, never as a human denial, and no denial result is fed into a continuing model loop. The flag overrides `delegation.defaults.permissionTimeoutMs` for this server only, which itself defaults to `DEFAULT_DELEGATION_PERMISSION_TIMEOUT_MS = 120000` (`src/core/defaults.ts:149`). A client may enforce a shorter operator-facing policy by sending ordinary `session/cancel`.
36
44
 
@@ -59,7 +67,7 @@ These are every method the server answers (`src/engine/acp/server.ts`). Anything
59
67
  | `clio-coder/targets/list` | Client → Server | Lists bounded, credential-free target/model summaries from configuration and the in-memory cache without network traffic. |
60
68
  | `clio-coder/targets/probe` | Client → Server | Explicitly probes one configured target through the provider domain and returns only a closed health result. |
61
69
  | `session/request_permission` | Server → Client | Requests permission from the client for a gated tool operation. |
62
- | `clio-coder/event` | Server → Client | Sends a versioned extension event only to a client that opted into a recognized kind. The only v1 kind is `safety.loopBlocked`. |
70
+ | `clio-coder/event` | Server → Client | Sends a versioned extension event only to a client that opted into a recognized kind. The v1 allowlist is `safety.loopBlocked` plus `dispatch.enqueued`, `dispatch.started`, `dispatch.progress`, `dispatch.completed`, and `dispatch.failed`. |
63
71
 
64
72
  `agentCapabilities.loadSession` is `true`. All non-standard methods are advertised only under `agentCapabilities._meta`; a strict generic ACP v1 client sees the standard new/load/prompt/cancel/permission surface, ignores namespaced result metadata, and receives no non-standard notification unless it explicitly opts into a recognized event kind.
65
73
 
@@ -263,6 +271,19 @@ name only the protocol it was reached through, so its header reads `◇ codex
263
271
  token usage, the count of mediated tool calls in place of a token count; a peer
264
272
  that does report usage gets the same `tok` unit a local worker does.
265
273
 
274
+ ### Typed intent on a delegated dispatch
275
+
276
+ A dispatch to a delegation agent accepts typed intent and renders the declared
277
+ scope into the plan approval artifact, so an operator sees what the peer was
278
+ told to work on before it starts. The declaration grants nothing on this
279
+ transport: the peer runs its own tool surface and Clio mediates no per-tool
280
+ call, so a resolved write boundary would be a claim nothing enforces and is
281
+ refused outright rather than accepted and left unenforced. Declare `read_roots`
282
+ and `relevant_paths` to bound what the peer is asked to look at; run the writing
283
+ half of the work on a native or `claude-sdk` worker. The compatibility rules and
284
+ reason codes are the same as for any other producer; see
285
+ [dispatch-typed-intent.md](dispatch-typed-intent.md).
286
+
266
287
  ---
267
288
 
268
289
  ## 8. Error Taxonomy
@@ -1,7 +1,7 @@
1
1
  # ALCF Inference Provider
2
2
 
3
3
  > [!TIP]
4
- > **Interactive Spec Available:** An interactive target configurator and Globus OAuth flow diagram is located at [docs/html/alcf_blueprint.html](html/alcf_blueprint.html) (Version: 0.3.9).
4
+ > **Interactive Spec Available:** An interactive target configurator and Globus OAuth flow diagram is located at [docs/html/alcf_blueprint.html](html/alcf_blueprint.html) (Version: 0.4.0).
5
5
 
6
6
  Clio can use Argonne's ALCF inference gateway as an OpenAI-compatible target
7
7
  backed by Globus OAuth. The runtime id is `alcf`; each configured target points
@@ -1,11 +1,11 @@
1
1
  # Clio Coder Architecture and Boundaries
2
2
 
3
3
  > [!TIP]
4
- > **Interactive Spec Available:** An interactive dashboard is located at [docs/html/architecture_blueprint.html](html/architecture_blueprint.html) (Version: 0.3.9).
4
+ > **Interactive Spec Available:** An interactive dashboard is located at [docs/html/architecture_blueprint.html](html/architecture_blueprint.html) (Version: 0.4.0).
5
5
 
6
6
  Clio Coder is an experimental, terminal-first coding harness for the CLIO ecosystem. CLIO stands for Context Layer for Input/Output; the project is named for the Greek muse of history and developed by the Gnosis Research Center at Illinois Tech. Its architecture favors small, auditable subsystems over a single monolithic agent loop: CLI entry points, the interactive TUI, provider/runtime code, worker subprocesses, tools, and feature domains are kept separate so local-model support and scientific-software workflows can evolve without collapsing safety boundaries.
7
7
 
8
- This page is source-code aligned for the current `v0.3.7` development line.
8
+ This page is source-code aligned for the current `v0.4.0` development line.
9
9
 
10
10
  ---
11
11
 
@@ -1,6 +1,6 @@
1
1
  # Artifact Versions & Serialization Contracts
2
2
 
3
- This document is the canonical registry of all versioned file formats, serialized data structures, integrity digests, and migration rules across Clio Coder in `v0.3.9`.
3
+ This document is the canonical registry of all versioned file formats, serialized data structures, integrity digests, and migration rules across Clio Coder in `v0.4.0`.
4
4
 
5
5
  ---
6
6
 
@@ -11,6 +11,9 @@ Clio Coder strictly versions every persistent or network-transported data struct
11
11
  | Artifact / Subsystem | Current Version | Symbol / Type & Source Location | Persisted Path / Wire Location | Schema Semantics & Version Differences | Mismatch Handling |
12
12
  | :--- | :--- | :--- | :--- | :--- | :--- |
13
13
  | **Run Receipt** | `20` | `RUN_RECEIPT_INTEGRITY_VERSION = 20`<br>`src/domains/dispatch/receipt-integrity.ts:13` | `<stateDir>/receipts/<runId>.json` | Cryptographically sealed run record. Version 20 adds `pathProvenance` on dispatch intent and the resolved `pathScope`, over the v19 base of provenance fields, routing intent, quality labels, `validationGrounding`, `capabilityMismatch`, council provenance, and fleet gate provenance. | Fail-closed. A receipt below v20 is reported as retired rather than invalid, is never read as evidence, and is never migrated; a malformed or tampered v20 receipt fails verification. |
14
+ | **Dispatch Intent** | `2` | `DISPATCH_INTENT_VERSION = 2`, `DISPATCH_INTENT_SUPPORTED_VERSIONS = [2]`<br>`src/domains/dispatch/intent-compatibility.ts` | Inside the resolved dispatch plan artifact, the `JobSpec`/`DispatchRequest`, and the sealed run receipt | Typed model- and producer-declared scope: `read_roots`, `write_roots`, `relevant_paths`, `expected_outputs`, and declared-id `verification`, plus the `pathProvenance` binding every policy-bearing path to the field that declared it. Version 2 adds `pathProvenance` over the v1 path-and-output shape. | Fail-closed, never migrated. The supported set is a membership list, not a range: any other version is refused with `intent_version_unsupported` and the caller restates the fields on a fresh dispatch call. Omitted intent is accepted through the separately tracked legacy inference path; contradictory intent is a terminal refusal. See [dispatch-typed-intent.md](dispatch-typed-intent.md). |
15
+ | **Dispatch Path Scope Provenance** | `1` | `version: 1` in `interface DispatchPathScopeProvenance`<br>`src/domains/dispatch/path-scope.ts` | `pathScope` on the sealed run receipt | Resolved policy-bearing paths with per-field provenance (`declared`/`derived`/`inferred`), source, and confidence. Never carries the task or briefing prose an inferred path came from. | Sealed inside the receipt integrity digest; shares the receipt's fail-closed policy. |
16
+ | **Resolved Dispatch Plan Artifact** | `3` | `version: 3` in `interface ResolvedDispatchPlanArtifact`<br>`src/tools/dispatch-plan.ts:122` | Trusted admission-time tool argument, rendered and hashed into the plan approval | Pinned agent/target/model/node per task plus the sealed `intent` and admission-resolved `resolvedVerification`. The rendered artifact carries `intent_sha256` for a declared task and the full inferred scope table for a legacy one. | Fail-closed. Any version but 3 parses as `null`, as does any task whose `intent` is not a normalized v2 intent; the call falls back to unresolved admission rather than executing a half-understood plan. |
14
17
  | **Session Ledger** | `3` | `CURRENT_SESSION_FORMAT_VERSION = 3`<br>`src/engine/session.ts:66` | `<stateDir>/sessions/<cwdHash>/<sessionId>/` (`meta.json`, `current.jsonl`, `tree.json`) | Append-only ledger format with UUIDv7 turn IDs, session header line, and tree graph linkage. | Automated migration via `src/domains/session/migrations/` on `/resume`. Earlier unmigratable versions rejected. |
15
18
  | **Worker Spec** | `3` | `WORKER_SPEC_VERSION = 3`<br>`src/worker/spec-contract.ts:22` | Subprocess `stdin` control plane JSON payload | Worker invocation parameters, tool surface profile, and execution bounds. | Fail-closed preflight rejection before worker activation. |
16
19
  | **Worker Runtime Descriptor** | `2` | `WORKER_RUNTIME_DESCRIPTOR_VERSION = 2`<br>`src/worker/spec-contract.ts:23` | Worker attestation descriptor payload | Attestation descriptor for worker runtime environment and hardware facts. | Attestation mismatch causes immediate process termination. |
@@ -3,7 +3,7 @@
3
3
  Clio Coder dispatches focused fleet agents from Markdown recipes. Recipes are data files, not hidden code plugins: YAML frontmatter declares identity, mode, tools, optional target/model hints, and thinking level; the Markdown body is the agent instruction text.
4
4
 
5
5
  > [!TIP]
6
- > **Interactive Spec Available:** An interactive dashboard for the agent registry and dispatch admission check gates is located at [docs/html/agents_blueprint.html](html/agents_blueprint.html) (Version: 0.3.9).
6
+ > **Interactive Spec Available:** An interactive dashboard for the agent registry and dispatch admission check gates is located at [docs/html/agents_blueprint.html](html/agents_blueprint.html) (Version: 0.4.0).
7
7
 
8
8
  The source of truth is `src/domains/agents/**`. Clio's agent dispatch engine and execution boundaries are built upon the [@earendil-works/pi-agent-core](https://www.npmjs.com/package/@earendil-works/pi-agent-core) library.
9
9
 
@@ -1,6 +1,6 @@
1
1
  # Capacity Leases & Fleet Scheduling
2
2
 
3
- This document specifies the multi-process capacity leasing protocols, node scheduling models, cross-process transaction locks, and failure recovery mechanics implemented in Clio Coder `v0.3.7`.
3
+ This document specifies the multi-process capacity leasing protocols, node scheduling models, cross-process transaction locks, and failure recovery mechanics implemented in Clio Coder `v0.4.0`.
4
4
 
5
5
  Source implementations: `src/domains/scheduling/` and `src/domains/dispatch/capacity-lease.ts`.
6
6
 
@@ -25,12 +25,34 @@ graph TD
25
25
  | :--- | :--- | :--- |
26
26
  | Global | All dispatches using the state directory. | `budget.concurrency: auto` remains four. |
27
27
  | Node | The local node or one configured fleet node. | The configured node limit applies. An unset local node cap remains unbounded. |
28
- | Inference endpoint | A normalized scheme, host, port, and base path. | A target's `maxConcurrentRequests` override wins, followed by cached probe discovery. Other local-native targets default to one slot. vLLM and SGLang remain unbounded. |
28
+ | Inference endpoint | A normalized scheme, host, port, and base path. | A target's `maxConcurrentRequests` override wins, then a probe in this process, then a persisted probe from an earlier process, then one slot for other local-native targets. vLLM and SGLang remain unbounded. |
29
29
 
30
30
  The conventional final `/v1` mount and a trailing slash normalize to the same endpoint. Host aliases are not collapsed because Clio cannot prove they address the same server. For example, `http://localhost:8080/` and `http://127.0.0.1:8080/v1` remain distinct, while two target descriptors that use the same normalized URL share one endpoint limit.
31
31
 
32
32
  llama.cpp discovery reads `total_slots` from cached probe results. A router can expose the selected worker's value from `/props?model=<id>` even when router `/props` has no slot count. The selected model's `/v1/models` argv supplies a `--parallel` fallback. LM Studio defaults to one slot when its REST response supplies no concurrency fact. Ollama defaults to one unless `OLLAMA_NUM_PARALLEL` is visible to the local process.
33
33
 
34
+ The endpoint set is resolved from the configured targets as well as the probed statuses, so it is the same set a second after boot as it is a minute later. An endpoint that resolves to no limit is not checked at all, and "not checked" is not a conservative answer.
35
+
36
+ ### Persisted Slot Discovery
37
+
38
+ A probe learns a fact about a server, not about the process that asked, so a discovered slot count is written to disk and read back as a prior by the next process.
39
+
40
+ - **Path**: `<stateDir>/endpoint-slots.json` (`src/domains/providers/endpoint-slots-store.ts:endpointSlotsPath()`)
41
+ - **Version**: `version: 1`, one record per canonical endpoint key
42
+ - **Transaction lock**: `<stateDir>/endpoint-slots.json.lock` (`withStateFileLock`)
43
+ - **Staleness bound**: 24 hours, overridable per process with `CLIO_CODER_ENDPOINT_SLOTS_TTL_MS`
44
+
45
+ ```typescript
46
+ export interface DiscoveredEndpointSlots {
47
+ endpointKey: string; // Canonical inference endpoint identifier
48
+ runtimeId: string; // Runtime that observed the count
49
+ slots: number; // Discovered parallel slot count
50
+ observedAt: string; // ISO-8601 observation timestamp
51
+ }
52
+ ```
53
+
54
+ Three things bound what a record may claim. A record older than the staleness bound is ignored and pruned by the next write, so a server restarted with a smaller `--parallel` cannot keep over-admitting against yesterday's number. A record written by a different runtime for the same host and port is ignored, because a different inference server is a different scheduler. A probe in this process always wins over the record, and `maxConcurrentRequests` wins over both. A well-formed record that fails any of these checks falls back to the conservative default rather than to a guess.
55
+
34
56
  ### State Storage & Format
35
57
 
36
58
  All capacity state is stored in a single durable JSON file:
@@ -72,13 +94,29 @@ export interface CapacityLease {
72
94
 
73
95
  The orchestrator's active model stream is registered in memory against the same endpoint key, so its own turn consumes one endpoint slot before a worker is admitted. This foreground count is not written to `dispatch-admission.json`; process exit releases it. Durable leases and held reservation members carry `endpointKey`, and held members count their peak per wave for the endpoint just as they do for a node.
74
96
 
75
- Execution-plan waves also honor the endpoint bound. A plan with four available worker positions targeting one two-slot server packs at most two of them into a wave, or one when the orchestrator already holds the other slot. Endpoint saturation is refused rather than queued, because an endpoint-specific request queue would hold a dispatch open behind a stream whose length nobody knows. The refusal names the endpoint, both slot counts, why one slot is already gone, and the two moves that actually free capacity:
97
+ Execution-plan waves also honor the endpoint bound. A plan with four available worker positions targeting one two-slot server packs at most two of them into a wave, or one when the orchestrator already holds the other slot. Endpoint saturation is refused rather than queued, because an endpoint-specific request queue would hold a dispatch open behind a stream whose length nobody knows. The refusal names the endpoint, both slot counts, why one slot is already gone, and the moves that actually free capacity:
76
98
 
77
99
  ```text
78
- dispatch: admission denied: endpoint '192.168.86.141:8080' capacity reached (1/1 slots): the orchestrator's own turn holds one; collect in-flight runs or point workers at a second server
100
+ dispatch: admission denied: endpoint '192.168.86.141:8080' capacity reached (1/1 slots): 1 foreground stream holds the slot; reduce the same-wave worker count, set this target's maxConcurrentRequests to the slot count the server was started with, collect in-flight runs, or point workers at a second server
79
101
  ```
80
102
 
81
- That is the exact text on all three paths that can refuse for this reason: lease acquisition (`src/domains/dispatch/capacity-lease.ts`), the admission gate (`src/domains/dispatch/admission.ts`), and reservation preflight (`src/domains/dispatch/reservation-store.ts`). The `1/1` above is the common local case rather than an example: a llama.cpp router started with `--parallel 1` discovers one slot, so any dispatch raised while the orchestrator is streaming is refused before a worker process starts.
103
+ That remedy is shared by all three paths that can refuse for this reason: lease acquisition (`src/domains/dispatch/capacity-lease.ts`), the admission gate (`src/domains/dispatch/admission.ts`), and reservation preflight (`src/domains/dispatch/reservation-store.ts`). The `1/1` above is the common local case rather than an example: a llama.cpp router started with `--parallel 1` discovers one slot, so any dispatch raised while the orchestrator is streaming is refused before a worker process starts.
104
+
105
+ ### What `/council` Needs on a Single-GPU Setup
106
+
107
+ A council seats two to five members and runs the whole roster in one wave, so it needs at least two endpoint slots at once, plus a third if the orchestrator's own turn is streaming to the same server. It cannot answer a capacity denial by dispatching fewer members, which is why its denial says so instead of offering that move:
108
+
109
+ ```text
110
+ dispatch: admission denied: endpoint 'mini:8080' capacity exceeded (2/1 slots): no active lease, held reservation, or foreground stream currently holds a slot; a council runs its whole roster in one wave and cannot go below 2 members, so set this target's maxConcurrentRequests to the slot count the server was started with, collect in-flight runs, or point workers at a second server
111
+ ```
112
+
113
+ On a single-GPU box there are three ways to make `/council` work, in order of preference:
114
+
115
+ 1. Start the server with enough slots and let discovery find them. `llama-server --parallel 4` is discovered as four slots and persisted, so every later process sees four without re-probing.
116
+ 2. Set `maxConcurrentRequests` on the target when the server's real concurrency is higher than what it advertises. It overrides every discovered value.
117
+ 3. Point some roster members at a second server. Members on different endpoints do not compete for the same slots.
118
+
119
+ A server genuinely started with one slot cannot run a council, and admitting one anyway would put two workers plus the orchestrator through a scheduler with room for one. The denial is the correct outcome; the fix is on the server or in the roster.
82
120
 
83
121
  ### Constants & Operational Bounds
84
122
 
@@ -1,7 +1,7 @@
1
1
  # Commands and Modes
2
2
 
3
3
  > [!TIP]
4
- > **Interactive Spec Available:** An interactive dashboard is located at [docs/html/commands_blueprint.html](html/commands_blueprint.html) (Version: 0.3.9).
4
+ > **Interactive Spec Available:** An interactive dashboard is located at [docs/html/commands_blueprint.html](html/commands_blueprint.html) (Version: 0.4.0).
5
5
 
6
6
 
7
7
  Clio Coder is a terminal-first alpha harness. This page keeps the command
@@ -46,11 +46,18 @@ For process exit codes, stdout deliverable guarantees, and machine-readable JSON
46
46
  | `clio-coder auth login [target-or-runtime] [--api-key <value>]` | Add credentials through the supported flow. |
47
47
  | `clio-coder auth logout [target-or-runtime]` | Remove stored credentials. |
48
48
  | `clio-coder doctor [--fix] [--json]` | Diagnose state; with `--fix`, create missing structure and templates, repair credential permissions, and refresh install metadata. Settings remain strict and are not migrated. |
49
+ | `clio-coder tools list [--json]` | List the pinned external tool registry and whether each program resolves from `PATH`, Clio's vendored data directory, or nowhere. |
50
+ | `clio-coder tools status <id> [--json] [--reset-profile]` | Inspect one registered tool. `--reset-profile` applies only to yazi's generated profile. |
51
+ | `clio-coder tools install <id> [--force] [--json]` | Download the platform asset, verify every declared checksum, and atomically vendor it. |
52
+ | `clio-coder tools remove <id>\|--all [--json]` | Remove Clio-vendored copies without touching a program found on `PATH`. |
53
+ | `clio-coder panes install` | Alias for `clio-coder tools install herdr`. |
49
54
  | `clio-coder reset [--state\|--data\|--cache\|--auth\|--config\|--all] [--dry-run] [--force]` | Reset selected Clio Coder state. `--state` is the default level. |
50
55
  | `clio-coder uninstall [--dry-run] [--remove-binary] [--force]` | Remove Clio Coder state and print uninstall guidance. |
51
56
  | `clio-coder upgrade [--dry-run] [--channel=<latest\|beta\|dev>] [--skip-migrations]` | Refresh state metadata, apply migrations, and update npm installs when applicable. |
52
57
  | `clio-coder agents [--json] [--all]` | List discovered agent specs. |
53
- | `clio-coder fleet list\|run\|status\|drain\|resume` | List `.clio-coder/fleets/*.md` contracts, run one, show dispatch state, or control admission. `drain` denies new execution starts for up to one hour and preserves running work; `resume` reopens admission immediately. `run <name>` takes `[--var k=v ...]` and `[--json]`; `status`, `drain`, and `resume` each take `[--json]`. |
58
+ | `clio-coder fleet list\|run\|status\|drain\|resume` | List fleet contracts, run one, show dispatch state, or control admission. `drain` denies new execution starts for up to one hour and preserves running work; `resume` reopens admission immediately. `run <name>` takes `[--var k=v ...]` and `[--json]`; `status`, `drain`, and `resume` each take `[--json]`. |
59
+ | `clio-coder fleet view <runId\|fleetRootId> [--follow]` | Read the append-only run journal after verifying receipt trust. A fleet root prints its durable step index. `--follow` requires an interactive terminal and one run id. |
60
+ | `clio-coder fleet view --watch <selection-file>` | Follow the run id currently named by the selection file and retarget when it changes. This is the operator-pulled watch surface used by the pane integration. |
54
61
  | `clio-coder dev components [list] [--json]` | List behavior-affecting harness components. |
55
62
  | `clio-coder dev components snapshot --out <path>` | Write a component snapshot JSON file. |
56
63
  | `clio-coder dev components diff --from <a> --to <b> [--json]` | Compare component snapshots. |
@@ -105,6 +112,15 @@ For process exit codes, stdout deliverable guarantees, and machine-readable JSON
105
112
  | `--tool-profile <name>` | Restrict dispatched-agent tools: `minimal-local`, `science-local`, or `full-agent`. |
106
113
  | `--require <capability>` | Require a target capability for dispatch. Repeatable. |
107
114
  | `--steer-channel <path>` | Read live steering lines from a FIFO or an appended regular file to steer the active run. |
115
+ | `--with-panes` | Activate guest pane integration for this invocation when Clio is already inside a reachable herdr session. It overrides `panes.enabled`. |
116
+ | `--no-panes` | Disable pane integration for this invocation. It overrides `panes.enabled`. |
117
+
118
+ `--with-panes` is an explicit first-class launch mode, not permission to start a
119
+ pane server. Clio confirms `HERDR_ENV=1`, connects to an existing socket, and
120
+ pings it before registering pane tools. The fleet watch pane runs
121
+ `fleet view --watch` against a selection file. Clio writes only the selected run
122
+ id, while the viewer reads journals itself, so dispatch remains independent of
123
+ the pane host and a second terminal can use the same journal surface directly.
108
124
 
109
125
  ### Headless Session Continuity
110
126
 
@@ -164,6 +180,7 @@ The registry table below lists the available interactive slash commands. On a ba
164
180
  | `/tasks` | `/tasks add <text> \| /tasks hand <id> \| /tasks done <id> \| /tasks drop <id>` | Show the session board or manage project operator tasks |
165
181
  | `/memory` | `/memory seed` | Inspect, promote, or seed task memory |
166
182
  | `/view` | `/view [filter] \| /view verify <runId>` | Browse session artifacts and verify receipts |
183
+ | `/panes` | `/panes show <run-or-agent> \| /panes open <preset-or-argv> \| /panes close [target]` | Inspect the pane layer, watch a live run in a pane, or open a utility pane |
167
184
  | `/thinking` | `/thinking [level]` | Set the chat thinking level, or open Settings → Orchestrator |
168
185
  | `/output` | `/output [verbosity]` | Set transcript detail (minimal, default, verbose), or open Settings → Terminal |
169
186
  | `/model` | `/model [pattern]` | Open model selector or set a model |
@@ -195,6 +212,14 @@ There are no slash-command aliases. `/context compact`, `/quit`, `/model`,
195
212
  spellings stay errors that name `/help` instead of guessing which operation the
196
213
  operator intended.
197
214
 
215
+ `/model` never changes routing on its own. Both spellings, the picker and
216
+ `/model <pattern>`, resolve the swap and then ask where it lands: `Apply this
217
+ session`, `Apply and save globally`, or `Cancel`. Session is the default and
218
+ touches no file, so a mid-conversation experiment dies with the session that
219
+ made it; global is the same write the settings center performs, and it is the
220
+ only one a later launch inherits. Cancel leaves the model where it was. A
221
+ thinking level named in the pattern follows the same choice.
222
+
198
223
  `/btw <question>` runs one model round beside the session and renders the answer
199
224
  in an overlay. It sends the same compiled message history the next turn would
200
225
  send, as read-only input, under a short system instruction saying this is a side
@@ -277,6 +302,10 @@ it is never sent to the model. That covers spellings removed outright, such as
277
302
  behavior where an unrecognized spelling reached the model as prose and was answered
278
303
  conversationally, which left the operator believing a command had run when nothing had.
279
304
 
305
+ A headless `clio-coder run "/typo"` refuses the same way. The verdict is reached
306
+ before boot, so no session is opened and no turn is spent; the diagnostic names
307
+ the token on stderr and the run exits `2`, the usage-error code.
308
+
280
309
  Command-shaped means one word of letters, digits, hyphens, or colons after the slash, so
281
310
  paths such as `/home/user/notes.md` still reach the model unchanged. One word
282
311
  followed by prose is treated as a command, because `/status please` and `/tmp is