@iowarp/clio-coder 0.4.0 → 0.4.2

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 (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -1,12 +1,8 @@
1
1
  import { spawn } from "node:child_process";
2
- import { loadDomains } from "../core/domain-loader.js";
3
2
  import { initializeClioHome } from "../core/init.js";
4
3
  import { clioStateDir } from "../core/xdg.js";
5
- import { ConfigDomainModule } from "../domains/config/index.js";
6
- import type { LifecycleContract } from "../domains/lifecycle/contract.js";
7
- import { LifecycleDomainModule } from "../domains/lifecycle/index.js";
8
4
  import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
9
- import { listMigrations } from "../domains/lifecycle/migrations/index.js";
5
+ import { listMigrations, runPending } from "../domains/lifecycle/migrations/index.js";
10
6
  import { readStateInfo } from "../domains/lifecycle/state.js";
11
7
  import { getVersionInfo } from "../domains/lifecycle/version.js";
12
8
  import { printError, printHeader, printOk } from "./shared.js";
@@ -229,36 +225,35 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
229
225
  if (opts.skipMigrations) {
230
226
  process.stdout.write("[upgrade] skipping migrations (--skip-migrations)\n");
231
227
  } else {
232
- const loaded = await loadDomains([ConfigDomainModule, LifecycleDomainModule]);
228
+ // Migrations run on the state tree directly rather than through the
229
+ // lifecycle domain. Loading that domain pulls in `config`, whose start
230
+ // runs the strict settings reader, and a settings-repairing migration is
231
+ // precisely the one that cannot get past it: `clio-coder upgrade` on a
232
+ // home whose settings.yaml names a retired key failed the domain load and
233
+ // never reached the migration that removes the key. A runner that needs
234
+ // valid config in order to repair invalid config can never run. The
235
+ // domain's `runMigrations` is a passthrough to this same function, so
236
+ // nothing is lost by calling it where the circularity does not exist.
237
+ let result: Awaited<ReturnType<typeof runPending>>;
233
238
  try {
234
- const lifecycle = loaded.getContract<LifecycleContract>("lifecycle");
235
- if (!lifecycle) {
236
- printError("lifecycle domain unavailable");
237
- return 1;
238
- }
239
- let result: Awaited<ReturnType<LifecycleContract["runMigrations"]>>;
240
- try {
241
- result = await lifecycle.runMigrations(stateDir);
242
- } catch (err) {
243
- // A migration reports why it could not run, but on its own that reads
244
- // as the whole upgrade being impossible. It is not: the rest of the
245
- // upgrade is independent of it, and naming the flag that runs the rest
246
- // is the difference between a stuck operator and a moved one.
247
- printError(
248
- `migration failed: ${err instanceof Error ? err.message : String(err)}`,
249
- "the rest of the upgrade does not depend on it; run `clio-coder upgrade --skip-migrations` to continue, then fix the cause and re-run `clio-coder upgrade`.",
250
- );
251
- return 1;
252
- }
253
- appliedIds = [...result.applied];
254
- appliedCount = appliedIds.length;
255
- if (appliedCount === 0) {
256
- process.stdout.write("[upgrade] no pending migrations\n");
257
- } else {
258
- for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
259
- }
260
- } finally {
261
- await loaded.stop();
239
+ result = await runPending(stateDir);
240
+ } catch (err) {
241
+ // A migration reports why it could not run, but on its own that reads
242
+ // as the whole upgrade being impossible. It is not: the rest of the
243
+ // upgrade is independent of it, and naming the flag that runs the rest
244
+ // is the difference between a stuck operator and a moved one.
245
+ printError(
246
+ `migration failed: ${err instanceof Error ? err.message : String(err)}`,
247
+ "the rest of the upgrade does not depend on it; run `clio-coder upgrade --skip-migrations` to continue, then fix the cause and re-run `clio-coder upgrade`.",
248
+ );
249
+ return 1;
250
+ }
251
+ appliedIds = [...result.applied];
252
+ appliedCount = appliedIds.length;
253
+ if (appliedCount === 0) {
254
+ process.stdout.write("[upgrade] no pending migrations\n");
255
+ } else {
256
+ for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
262
257
  }
263
258
  }
264
259
 
package/src/cli/usage.ts CHANGED
@@ -788,7 +788,7 @@ function indent(text: string): string {
788
788
  .join("\n");
789
789
  }
790
790
 
791
- export function inWindow(iso: string, start: number, end: number): boolean {
791
+ function inWindow(iso: string, start: number, end: number): boolean {
792
792
  const value = Date.parse(iso);
793
793
  return Number.isFinite(value) && value >= start && value <= end + USAGE_WINDOW_FUTURE_SKEW_MS;
794
794
  }
@@ -968,7 +968,7 @@ function bashCommandFromToolCallPayload(payload: unknown): string | null {
968
968
  * assignments dropped, verb plus subcommand kept, flags kept with values
969
969
  * stripped, remaining arguments dropped.
970
970
  */
971
- export function bashShape(command: string): string {
971
+ function bashShape(command: string): string {
972
972
  const firstLine = command.split("\n").find((line) => {
973
973
  const trimmed = line.trim();
974
974
  return trimmed.length > 0 && !trimmed.startsWith("#");
@@ -39,7 +39,7 @@ function describeLiveTarget(live: LiveModelInventory): string {
39
39
  }
40
40
 
41
41
  /** The refusal `configure` prints for a model the live target does not advertise. */
42
- export function formatUnadvertisedModelReason(modelId: string, live: LiveModelInventory): string {
42
+ function formatUnadvertisedModelReason(modelId: string, live: LiveModelInventory): string {
43
43
  const resident = live.resident.length > 0 ? live.resident.join(", ") : "none";
44
44
  return (
45
45
  `${describeLiveTarget(live)} does not advertise model '${modelId}'. ` +
@@ -283,7 +283,7 @@ function projectCheck(check: AuthoringCheck): VerifiersInspectCheck | null {
283
283
 
284
284
  const ORIGIN_RANK: Record<VerifierOrigin, number> = { "package-script": 0, catalog: 1, proposed: 2 };
285
285
 
286
- export function verifiersInspectSnapshot(
286
+ function verifiersInspectSnapshot(
287
287
  now: () => number = Date.now,
288
288
  workspaceRoot: string = process.cwd(),
289
289
  ): VerifiersInspectSnapshot {
@@ -149,7 +149,7 @@ async function drainDispatchEvents(
149
149
  let firstBlockReason: string | null = null;
150
150
  // Every event is consumed so finalization cannot block on an unread iterator.
151
151
  for await (const event of events) {
152
- if (!isRecord(event) || event.type !== "clio_tool_finish") continue;
152
+ if (!isRecord(event) || event.type !== "clio_coder_tool_finish") continue;
153
153
  const tool = eventPayloadString(event, "tool");
154
154
  if (!tool) continue;
155
155
  const outcome = eventPayloadString(event, "outcome") ?? "done";
@@ -190,7 +190,7 @@ interface WikiDispatchOutcome {
190
190
  * throws: a failed page must not take down the pages around it, and whatever
191
191
  * the run wrote before it stopped is already on disk.
192
192
  */
193
- export async function runWikiDispatch(input: {
193
+ async function runWikiDispatch(input: {
194
194
  dispatch: DispatchContract;
195
195
  cwd: string;
196
196
  outputDir: string;
@@ -236,7 +236,7 @@ export async function runWikiDispatch(input: {
236
236
  } catch (err) {
237
237
  return { ok: false, detail: err instanceof Error ? err.message : String(err) };
238
238
  }
239
- const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label, process.env, input.deadlineMs);
239
+ const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label, input.deadlineMs);
240
240
  let lastHeartbeatAt = startedAtClock;
241
241
  try {
242
242
  const summary = await drainDispatchEvents(handle.events, (tools) => {
@@ -371,7 +371,7 @@ async function runPagePhase(
371
371
  return next;
372
372
  }
373
373
 
374
- export async function generateWikiWithDocumenter(
374
+ async function generateWikiWithDocumenter(
375
375
  dispatch: DispatchContract,
376
376
  input: WikiGenerateInput,
377
377
  route: WikiModelRoute = {},
@@ -472,11 +472,11 @@ export async function resolveDocumenterModelId(route: WikiModelRoute = {}): Prom
472
472
  const providers = loaded.getContract<ProvidersContract>("providers");
473
473
  if (!config || !providers) return UNRESOLVED_DOCUMENTER_MODEL;
474
474
  const settings = config.get();
475
- const workers = settings.workers;
475
+ const workers = settings.fleet;
476
476
  // Keyed on the dispatched agent id and nothing else, because that is what
477
477
  // `placement.ts` reads. Falling back to another agent's binding here would
478
478
  // record a model in wiki metadata that no dispatch ever ran.
479
- const bindingProfileName = workers?.agentBindings?.[WIKI_AGENT_ID];
479
+ const bindingProfileName = workers?.agentProfiles?.[WIKI_AGENT_ID];
480
480
  const profile = bindingProfileName ? workers?.profiles?.[bindingProfileName] : undefined;
481
481
  const targetId = route.target ?? profile?.target ?? workers?.default?.target ?? settings.targets?.[0]?.id ?? null;
482
482
  if (!targetId) return UNRESOLVED_DOCUMENTER_MODEL;
@@ -15,7 +15,7 @@
15
15
  * be checking a path the tool never writes. One artifact per kind is therefore
16
16
  * the contract; keep several by passing explicit paths.
17
17
  *
18
- * See docs/artifact-placement.md for the full taxonomy.
18
+ * See docs/architecture/artifact-placement.md for the full taxonomy.
19
19
  */
20
20
 
21
21
  /** Project-local directory holding everything Clio generates for one repo. */
@@ -18,7 +18,7 @@ export { clampTimerDelayMs as clampTimeoutMs } from "./timers.js";
18
18
  // (failing assertion, compiler error, exit summary) must survive.
19
19
  export const BASH_HARD_CAP_BYTES = 16 * 1024 * 1024;
20
20
 
21
- const CLIO_CONTROL_ENV_KEYS = ["CLIO_CODER_INTERACTIVE", "CLIO_CODER_RESUME_SESSION_ID"] as const;
21
+ const CLIO_CONTROL_ENV_KEYS = ["CLIO_CODER_INTERACTIVE"] as const;
22
22
 
23
23
  export interface BashCommandResult {
24
24
  error: NodeJS.ErrnoException | null;
@@ -52,6 +52,129 @@ export interface RunBashCommandOptions {
52
52
 
53
53
  const BASH_UPDATE_THROTTLE_MS = 100;
54
54
 
55
+ export interface BashProgressScheduler {
56
+ now(): number;
57
+ setTimeout(callback: () => void, delayMs: number): unknown;
58
+ clearTimeout(timer: unknown): void;
59
+ }
60
+
61
+ export interface BashOutputProgressController {
62
+ /** Emit the initial empty cumulative snapshot, when a callback is configured. */
63
+ start(): void;
64
+ /** Accept one stream chunk. Returns true only when this chunk reaches the hard cap. */
65
+ append(target: "stdout" | "stderr", chunk: Buffer): boolean;
66
+ /** Seal output, cancel progress work, emit the final snapshot, and return the result fields. */
67
+ settle(): Pick<BashCommandResult, "stdout" | "stderr" | "outputBytes" | "outputCapped">;
68
+ }
69
+
70
+ const SYSTEM_PROGRESS_SCHEDULER: BashProgressScheduler = {
71
+ now: Date.now,
72
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
73
+ clearTimeout: (timer) => clearTimeout(timer as ReturnType<typeof setTimeout>),
74
+ };
75
+
76
+ /**
77
+ * Cumulative stdout/stderr fold shared by the child stream handlers and a
78
+ * deterministic contract-test seam. Settlement is a phase, not just a final
79
+ * boolean: once it starts, re-entrant or queued stream work is rejected while
80
+ * the one final advisory snapshot is still allowed to publish.
81
+ */
82
+ export function createBashOutputProgressController(
83
+ onUpdate?: (progress: BashCommandProgress) => void,
84
+ scheduler: BashProgressScheduler = SYSTEM_PROGRESS_SCHEDULER,
85
+ ): BashOutputProgressController {
86
+ let phase: "active" | "settling" | "settled" = "active";
87
+ let stdout = "";
88
+ let stderr = "";
89
+ const stdoutDecoder = new StringDecoder("utf8");
90
+ const stderrDecoder = new StringDecoder("utf8");
91
+ let decodersFinished = false;
92
+ let outputBytes = 0;
93
+ let outputCapped = false;
94
+ let updateTimer: unknown = null;
95
+ let updateDirty = false;
96
+ let lastUpdateAt = 0;
97
+
98
+ const snapshot = (): BashCommandProgress => ({ stdout, stderr, outputBytes });
99
+
100
+ const finishDecoders = (): void => {
101
+ if (decodersFinished) return;
102
+ decodersFinished = true;
103
+ // A hard byte cap may bisect a multibyte code point. Discard the
104
+ // decoder's incomplete suffix instead of manufacturing U+FFFD.
105
+ if (outputCapped) return;
106
+ stdout += stdoutDecoder.end();
107
+ stderr += stderrDecoder.end();
108
+ };
109
+
110
+ const emitUpdate = (final = false): void => {
111
+ if (onUpdate === undefined || !updateDirty) return;
112
+ if (phase !== "active" && !(final && phase === "settling")) return;
113
+ updateDirty = false;
114
+ lastUpdateAt = scheduler.now();
115
+ try {
116
+ onUpdate(snapshot());
117
+ } catch {
118
+ // Rendering progress is advisory and must never change command execution.
119
+ }
120
+ };
121
+
122
+ const clearUpdateTimer = (): void => {
123
+ if (updateTimer === null) return;
124
+ scheduler.clearTimeout(updateTimer);
125
+ updateTimer = null;
126
+ };
127
+
128
+ const scheduleUpdate = (): void => {
129
+ if (onUpdate === undefined || phase !== "active") return;
130
+ updateDirty = true;
131
+ const delay = BASH_UPDATE_THROTTLE_MS - (scheduler.now() - lastUpdateAt);
132
+ if (delay <= 0) {
133
+ clearUpdateTimer();
134
+ emitUpdate();
135
+ return;
136
+ }
137
+ updateTimer ??= scheduler.setTimeout(() => {
138
+ updateTimer = null;
139
+ // A timer already queued by the event loop may still invoke its callback
140
+ // after clearTimeout. The phase check makes that callback inert.
141
+ emitUpdate();
142
+ }, delay);
143
+ };
144
+
145
+ return {
146
+ start(): void {
147
+ if (phase !== "active" || onUpdate === undefined) return;
148
+ updateDirty = true;
149
+ emitUpdate();
150
+ },
151
+ append(target, chunk): boolean {
152
+ if (phase !== "active" || outputCapped) return false;
153
+ const remaining = BASH_HARD_CAP_BYTES - outputBytes;
154
+ const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, Math.max(0, remaining));
155
+ outputBytes += accepted.byteLength;
156
+ if (accepted.byteLength > 0) {
157
+ const decoded = target === "stdout" ? stdoutDecoder.write(accepted) : stderrDecoder.write(accepted);
158
+ if (target === "stdout") stdout += decoded;
159
+ else stderr += decoded;
160
+ }
161
+ if (accepted.byteLength < chunk.byteLength) outputCapped = true;
162
+ scheduleUpdate();
163
+ return outputCapped;
164
+ },
165
+ settle() {
166
+ if (phase === "settled") return { ...snapshot(), outputCapped };
167
+ if (phase === "settling") return { ...snapshot(), outputCapped };
168
+ phase = "settling";
169
+ clearUpdateTimer();
170
+ finishDecoders();
171
+ emitUpdate(true);
172
+ phase = "settled";
173
+ return { ...snapshot(), outputCapped };
174
+ },
175
+ };
176
+ }
177
+
55
178
  function buildToolEnv(): NodeJS.ProcessEnv {
56
179
  const env = { ...process.env };
57
180
  env.AI_AGENT = AI_AGENT_NAME;
@@ -75,7 +198,7 @@ const LOGIN_ENV_CAPTURE_TIMEOUT_MS = 10_000;
75
198
  let loginEnvCapture: Promise<NodeJS.ProcessEnv | null> | null = null;
76
199
 
77
200
  /** NUL-delimited `env -0` output to an env map; null when unusable (no PATH). */
78
- export function parseNullDelimitedEnv(raw: string): NodeJS.ProcessEnv | null {
201
+ function parseNullDelimitedEnv(raw: string): NodeJS.ProcessEnv | null {
79
202
  const env: NodeJS.ProcessEnv = {};
80
203
  for (const entry of raw.split("\0")) {
81
204
  if (entry.length === 0) continue;
@@ -152,16 +275,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
152
275
  let timeoutId: ReturnType<typeof setTimeout> | null = null;
153
276
  let killGraceTimer: ReturnType<typeof setTimeout> | null = null;
154
277
  let killSent = false;
155
- let stdout = "";
156
- let stderr = "";
157
- const stdoutDecoder = new StringDecoder("utf8");
158
- const stderrDecoder = new StringDecoder("utf8");
159
- let decodersFinished = false;
160
- let outputBytes = 0;
161
- let outputCapped = false;
162
- let updateTimer: ReturnType<typeof setTimeout> | null = null;
163
- let updateDirty = false;
164
- let lastUpdateAt = 0;
278
+ const output = createBashOutputProgressController(options.onUpdate);
165
279
 
166
280
  const child = spawn("/bin/bash", [plan.mode, command], {
167
281
  ...(options.cwd === undefined ? {} : { cwd: options.cwd }),
@@ -170,53 +284,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
170
284
  stdio: ["ignore", "pipe", "pipe"],
171
285
  });
172
286
 
173
- const finishDecoders = (): void => {
174
- if (decodersFinished) return;
175
- decodersFinished = true;
176
- // A hard byte cap may bisect a multibyte code point. Discard the
177
- // decoder's incomplete suffix instead of manufacturing U+FFFD.
178
- if (outputCapped) return;
179
- stdout += stdoutDecoder.end();
180
- stderr += stderrDecoder.end();
181
- };
182
-
183
- const emitUpdate = (): void => {
184
- if (options.onUpdate === undefined || !updateDirty) return;
185
- updateDirty = false;
186
- lastUpdateAt = Date.now();
187
- try {
188
- options.onUpdate({ stdout, stderr, outputBytes: Math.min(outputBytes, BASH_HARD_CAP_BYTES) });
189
- } catch {
190
- // Rendering progress is advisory and must never change command execution.
191
- }
192
- };
193
- const clearUpdateTimer = (): void => {
194
- if (updateTimer === null) return;
195
- clearTimeout(updateTimer);
196
- updateTimer = null;
197
- };
198
- const scheduleUpdate = (): void => {
199
- if (options.onUpdate === undefined) return;
200
- updateDirty = true;
201
- const delay = BASH_UPDATE_THROTTLE_MS - (Date.now() - lastUpdateAt);
202
- if (delay <= 0) {
203
- clearUpdateTimer();
204
- emitUpdate();
205
- return;
206
- }
207
- updateTimer ??= setTimeout(() => {
208
- updateTimer = null;
209
- emitUpdate();
210
- }, delay);
211
- };
212
- const finishUpdates = (): void => {
213
- clearUpdateTimer();
214
- emitUpdate();
215
- };
216
- if (options.onUpdate !== undefined) {
217
- updateDirty = true;
218
- emitUpdate();
219
- }
287
+ output.start();
220
288
 
221
289
  const clearKillGraceTimer = (): void => {
222
290
  if (!killGraceTimer) return;
@@ -265,22 +333,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
265
333
  }
266
334
 
267
335
  const appendChunk = (target: "stdout" | "stderr", chunk: Buffer): void => {
268
- if (outputCapped) return;
269
- const remaining = BASH_HARD_CAP_BYTES - outputBytes;
270
- const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, Math.max(0, remaining));
271
- outputBytes += accepted.byteLength;
272
- if (accepted.byteLength > 0) {
273
- const decoded = target === "stdout" ? stdoutDecoder.write(accepted) : stderrDecoder.write(accepted);
274
- if (target === "stdout") stdout += decoded;
275
- else stderr += decoded;
276
- }
277
- if (accepted.byteLength < chunk.byteLength) {
278
- outputCapped = true;
279
- scheduleUpdate();
280
- killChild();
281
- return;
282
- }
283
- scheduleUpdate();
336
+ if (output.append(target, chunk)) killChild();
284
337
  };
285
338
 
286
339
  child.stdout?.on("data", (chunk: Buffer) => appendChunk("stdout", chunk));
@@ -290,19 +343,15 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
290
343
  settled = true;
291
344
  if (timeoutId) clearTimeout(timeoutId);
292
345
  clearKillGraceTimer();
293
- finishDecoders();
294
- finishUpdates();
346
+ const finalOutput = output.settle();
295
347
  options.signal?.removeEventListener("abort", onAbort);
296
348
  resolve({
297
349
  error: error as NodeJS.ErrnoException,
298
- stdout,
299
- stderr,
350
+ ...finalOutput,
300
351
  exitCode: null,
301
352
  signal: null,
302
353
  aborted,
303
354
  timedOut,
304
- outputCapped,
305
- outputBytes,
306
355
  });
307
356
  });
308
357
  child.on("close", (code, signalName) => {
@@ -310,8 +359,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
310
359
  settled = true;
311
360
  if (timeoutId) clearTimeout(timeoutId);
312
361
  clearKillGraceTimer();
313
- finishDecoders();
314
- finishUpdates();
362
+ const finalOutput = output.settle();
315
363
  options.signal?.removeEventListener("abort", onAbort);
316
364
  const error =
317
365
  code === 0 && signalName === null
@@ -324,14 +372,11 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
324
372
  } as NodeJS.ErrnoException);
325
373
  resolve({
326
374
  error,
327
- stdout,
328
- stderr,
375
+ ...finalOutput,
329
376
  exitCode: code,
330
377
  signal: signalName,
331
378
  aborted,
332
379
  timedOut,
333
- outputCapped,
334
- outputBytes,
335
380
  });
336
381
  });
337
382
  });
@@ -16,7 +16,7 @@
16
16
  const BOOT_TRACE_ENV = "CLIO_CODER_TRACE_BOOT";
17
17
 
18
18
  /** True when boot tracing is enabled for this process. */
19
- export function isBootTraceEnabled(): boolean {
19
+ function isBootTraceEnabled(): boolean {
20
20
  return process.env[BOOT_TRACE_ENV] === "1";
21
21
  }
22
22
 
@@ -24,11 +24,11 @@ export function isBootTraceEnabled(): boolean {
24
24
  export function formatBootTrace(phase: string, detail?: string): string | null {
25
25
  if (!isBootTraceEnabled()) return null;
26
26
  const suffix = detail !== undefined && detail.length > 0 ? ` (${detail})` : "";
27
- return `[clio:boot] +${performance.now().toFixed(1)}ms ${phase}${suffix}\n`;
27
+ return `[clio-coder:boot] +${performance.now().toFixed(1)}ms ${phase}${suffix}\n`;
28
28
  }
29
29
 
30
30
  /**
31
- * Stamp a boot phase marker to stderr, e.g. `[clio:boot] +742.1ms cli entry`.
31
+ * Stamp a boot phase marker to stderr, e.g. `[clio-coder:boot] +742.1ms cli entry`.
32
32
  * `detail` appends a parenthetical (module counts, ids). No-op unless
33
33
  * `CLIO_CODER_TRACE_BOOT=1`. Never throws: a diagnostic must not affect boot.
34
34
  */
@@ -24,6 +24,7 @@ import type {
24
24
  ToolActivitySummary,
25
25
  } from "../domains/dispatch/types.js";
26
26
  import type { MiddlewareHook } from "../domains/middleware/types.js";
27
+ import type { ObservabilityRunEvidence } from "../domains/observability/contract.js";
27
28
  import type { TargetStatus } from "../domains/providers/contract.js";
28
29
  import type { CostProvenance } from "../domains/providers/index.js";
29
30
  import type { ClioSettings } from "./config.js";
@@ -58,9 +59,11 @@ export const BusChannels = {
58
59
  DispatchProgress: "dispatch.progress",
59
60
  DispatchCompleted: "dispatch.completed",
60
61
  DispatchFailed: "dispatch.failed",
62
+ AccountabilityEvidenceReady: "accountability.evidenceReady",
61
63
  CompactionBegin: "compaction.begin",
62
64
  CompactionEnd: "compaction.end",
63
65
  MiddlewareHookFailed: "middleware.hookFailed",
66
+ ExtensionsReloaded: "extensions.reloaded",
64
67
  ContextActivity: "context.activity",
65
68
  ContextWarning: "context.warning",
66
69
  ContextPruned: "context.pruned",
@@ -628,8 +631,8 @@ export interface DispatchTerminalStats {
628
631
  exitCode: number;
629
632
  /** Honest activity record aggregated from the run's tool telemetry; null when the receipt predates it. */
630
633
  toolActivity: ToolActivitySummary | null;
631
- /** Host-run declared verification status when the request included checks. */
632
- hostVerification?: "verified" | "rejected" | "skipped";
634
+ /** Host-run declared verification status when the request included checks; `not_implicated` is a batch member the failure was charged away from. */
635
+ hostVerification?: "verified" | "rejected" | "skipped" | "not_implicated";
633
636
  }
634
637
 
635
638
  /** Published on {@link BusChannels.DispatchCompleted} when a run finalizes as succeeded. */
@@ -667,6 +670,24 @@ export interface DispatchFailedPayload extends DispatchRunIdentity, Partial<Disp
667
670
  skillActivations?: ReadonlyArray<SkillActivation>;
668
671
  }
669
672
 
673
+ // ---------------------------------------------------------------------------
674
+ // Accountability
675
+ // ---------------------------------------------------------------------------
676
+
677
+ /**
678
+ * Published on {@link BusChannels.AccountabilityEvidenceReady} by the
679
+ * observability extension once a finalized run's evidence bundle and its
680
+ * sidecar index row have landed. The evidence fields are exactly
681
+ * {@link ObservabilityRunEvidence}, the shape the projection already attaches
682
+ * to the run summary, so the bus and the snapshot cannot describe the same
683
+ * moment two ways. A failed build publishes nothing here: the projection's
684
+ * notice is the failure surface, and a client that never receives this event
685
+ * has learned only that no bundle is ready, which is the truth.
686
+ */
687
+ export interface AccountabilityEvidenceReadyPayload extends ObservabilityRunEvidence {
688
+ runId: string;
689
+ }
690
+
670
691
  // ---------------------------------------------------------------------------
671
692
  // Compaction
672
693
  // ---------------------------------------------------------------------------
@@ -677,6 +698,26 @@ export interface CompactionPayload {
677
698
  at: number;
678
699
  }
679
700
 
701
+ // ---------------------------------------------------------------------------
702
+ // Extensions
703
+ // ---------------------------------------------------------------------------
704
+
705
+ /**
706
+ * Published on {@link BusChannels.ExtensionsReloaded} by the composition
707
+ * root after a new extension generation and its user-hook registrations
708
+ * have both been committed. Consumers that cache extension-sourced data
709
+ * (prompt fragments, agent recipes, the session prompt) refresh on
710
+ * `changed`; an unchanged generation carries the previous digest and needs
711
+ * no work. Never published between the two commits.
712
+ */
713
+ export interface ExtensionsReloadedPayload {
714
+ generation: number;
715
+ previousGeneration: number;
716
+ changed: boolean;
717
+ /** Content identity of the committed snapshot. */
718
+ digest: string;
719
+ }
720
+
680
721
  // ---------------------------------------------------------------------------
681
722
  // Middleware
682
723
  // ---------------------------------------------------------------------------
@@ -685,15 +726,17 @@ export interface CompactionPayload {
685
726
  * Published on {@link BusChannels.MiddlewareHookFailed} when a middleware hook
686
727
  * registration misbehaves: `hook_failed` for a thrown evaluate (its effects
687
728
  * are discarded and the turn proceeds), `budget_exceeded` for a soft
688
- * wall-time overrun (effects still apply). Diagnostics only; nothing
689
- * subscribing here may decide anything.
729
+ * wall-time overrun (effects still apply), `registration_conflict` when an
730
+ * owned registration set (user hooks) offered an id a builtin or host
731
+ * registration holds, or a host registration evicted an owned one.
732
+ * Diagnostics only; nothing subscribing here may decide anything.
690
733
  */
691
734
  export interface MiddlewareHookFailedPayload {
692
- kind: "hook_failed" | "budget_exceeded";
735
+ kind: "hook_failed" | "budget_exceeded" | "registration_conflict";
693
736
  registrationId: string;
694
737
  hook: MiddlewareHook;
695
738
  at: number;
696
- /** Error text; hook_failed only. */
739
+ /** Error text for hook_failed; one formatted line for registration_conflict. */
697
740
  message?: string | undefined;
698
741
  /** Measured and allowed wall time in ms; budget_exceeded only. */
699
742
  elapsedMs?: number | undefined;
@@ -798,9 +841,11 @@ export type BusPayloadMap = {
798
841
  [BusChannels.DispatchProgress]: DispatchProgressPayload;
799
842
  [BusChannels.DispatchCompleted]: DispatchCompletedPayload;
800
843
  [BusChannels.DispatchFailed]: DispatchFailedPayload;
844
+ [BusChannels.AccountabilityEvidenceReady]: AccountabilityEvidenceReadyPayload;
801
845
  [BusChannels.CompactionBegin]: CompactionPayload;
802
846
  [BusChannels.CompactionEnd]: CompactionPayload;
803
847
  [BusChannels.MiddlewareHookFailed]: MiddlewareHookFailedPayload;
848
+ [BusChannels.ExtensionsReloaded]: ExtensionsReloadedPayload;
804
849
  [BusChannels.ContextActivity]: ContextActivityPayload;
805
850
  [BusChannels.ContextWarning]: ContextWarningPayload;
806
851
  [BusChannels.ContextPruned]: ContextPrunedPayload;
@@ -11,7 +11,7 @@
11
11
  * orchestrator-wide observability, not a domain concern. Add channels to the
12
12
  * `TRACED_CHANNELS` list if a future front needs to observe them.
13
13
  *
14
- * Ordering invariant: the first `[clio:bus] shutdown.requested` line must
14
+ * Ordering invariant: the first `[clio-coder:bus] shutdown.requested` line must
15
15
  * never reach stderr before the `Clio Coder: received <SIGNAL>, shutting down...`
16
16
  * notice written by termination.installSignalHandlers in
17
17
  * src/core/termination.ts. Future edits to termination.ts must preserve that
@@ -47,7 +47,7 @@ export function installBusTracer(): void {
47
47
  const bus = getSharedBus();
48
48
  for (const channel of TRACED_CHANNELS) {
49
49
  bus.on(channel, (payload) => {
50
- process.stderr.write(`[clio:bus] ${channel}${traceSuffix(payload)}\n`);
50
+ process.stderr.write(`[clio-coder:bus] ${channel}${traceSuffix(payload)}\n`);
51
51
  });
52
52
  }
53
53
  }
@@ -65,7 +65,7 @@ export interface CompileCacheHandle {
65
65
  * exercise the settle semantics without flipping the real process-global
66
66
  * cache.
67
67
  */
68
- export function createCompileCache(
68
+ function createCompileCache(
69
69
  enableFn: typeof enableCompileCache = enableCompileCache,
70
70
  rootExists: (dir: string) => boolean = existsSync,
71
71
  ): CompileCacheHandle {