@iowarp/clio-coder 0.4.1 → 0.4.3

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 (604) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/CONTRIBUTING.md +142 -52
  3. package/README.md +434 -473
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
  6. package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
  9. package/dist/builtins-IA7V7FUC.js +22 -0
  10. package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
  11. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  12. package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
  13. package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
  14. package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
  15. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  16. package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
  17. package/dist/chunk-3EBYEESD.js +314 -0
  18. package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
  19. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  20. package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
  21. package/dist/chunk-4UVU7BJ5.js +39 -0
  22. package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
  23. package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
  24. package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
  25. package/dist/chunk-5MEZN6CB.js +1334 -0
  26. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  27. package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
  28. package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
  29. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  30. package/dist/chunk-7DRAWPTZ.js +360 -0
  31. package/dist/chunk-7E7I3WLS.js +3762 -0
  32. package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
  33. package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
  34. package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
  35. package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
  36. package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
  37. package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
  38. package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
  39. package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
  40. package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
  41. package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
  42. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  43. package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
  44. package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
  45. package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
  46. package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
  47. package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
  48. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  49. package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
  50. package/dist/chunk-GYV6VZOC.js +26 -0
  51. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  52. package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
  53. package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
  54. package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
  55. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  56. package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
  57. package/dist/chunk-IJNZMHLA.js +101 -0
  58. package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
  59. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  60. package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
  61. package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
  62. package/dist/chunk-JEQ3XTHC.js +42 -0
  63. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  64. package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
  65. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  66. package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
  67. package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
  68. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  69. package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
  70. package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
  71. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  72. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  73. package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
  74. package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
  75. package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
  76. package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
  77. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  78. package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
  79. package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
  80. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  81. package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
  82. package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
  83. package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
  84. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  85. package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
  86. package/dist/chunk-R6Q67RJH.js +134 -0
  87. package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
  88. package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
  89. package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
  90. package/dist/chunk-SKHCAU7K.js +385 -0
  91. package/dist/chunk-SZAA6XDG.js +30 -0
  92. package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
  93. package/dist/chunk-UOIZ7DA4.js +41 -0
  94. package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
  95. package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
  96. package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
  97. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  98. package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
  99. package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
  100. package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
  101. package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
  102. package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
  103. package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
  104. package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
  105. package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
  106. package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
  107. package/dist/chunk-XRZT5WY5.js +47 -0
  108. package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
  109. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  110. package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
  111. package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
  112. package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
  113. package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
  114. package/dist/cli/index.js +41 -39
  115. package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
  116. package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
  117. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  118. package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
  119. package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
  120. package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
  121. package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
  122. package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
  123. package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
  126. package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
  127. package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
  128. package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
  129. package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
  130. package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
  131. package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
  132. package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
  133. package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
  134. package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
  135. package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
  136. package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
  137. package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
  138. package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
  139. package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
  140. package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
  141. package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
  142. package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
  143. package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
  144. package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
  145. package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
  146. package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
  147. package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
  148. package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
  149. package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
  150. package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
  151. package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
  152. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  153. package/dist/reset-EAJFFJVB.js +344 -0
  154. package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
  155. package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
  156. package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
  157. package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
  158. package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
  159. package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
  160. package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
  161. package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
  162. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  163. package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
  164. package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
  165. package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
  166. package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
  167. package/dist/uninstall-5PEVOE5B.js +408 -0
  168. package/dist/upgrade-M4WXY6KN.js +303 -0
  169. package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
  170. package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
  171. package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
  172. package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
  173. package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
  174. package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
  175. package/dist/worker/entry.js +90 -74
  176. package/docs/README.md +176 -81
  177. package/docs/{acp.md → architecture/acp.md} +36 -20
  178. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  179. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  180. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
  181. package/docs/architecture/artifact-versions.md +90 -0
  182. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  183. package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
  184. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  185. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  186. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  187. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  188. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  189. package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
  190. package/docs/{observability.md → architecture/observability.md} +38 -14
  191. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  192. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
  193. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
  194. package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
  195. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  196. package/docs/architecture/time-conventions.md +125 -0
  197. package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
  198. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  199. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  200. package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
  201. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
  202. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
  203. package/docs/guide/configuration-reference.md +1163 -0
  204. package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
  205. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
  206. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  207. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
  208. package/docs/{glossary.md → guide/glossary.md} +14 -11
  209. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
  210. package/docs/guide/panes-and-files.md +290 -0
  211. package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
  212. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  213. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
  214. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  215. package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
  216. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
  217. package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
  218. package/docs/process/development-pipeline.md +152 -0
  219. package/docs/process/documentation-coverage.md +100 -0
  220. package/docs/process/documentation-guide.md +187 -0
  221. package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
  222. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  223. package/docs/{evolution.md → process/evolution.md} +2 -2
  224. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
  225. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  226. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  227. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  228. package/evals/README.md +2 -2
  229. package/evals/behavioral-model.yaml +3 -2
  230. package/package.json +10 -8
  231. package/skills/README.md +52 -41
  232. package/skills/coding/ast-grep/SKILL.md +102 -31
  233. package/skills/coding/ast-grep/evals.md +26 -0
  234. package/skills/coding/coding-standards/SKILL.md +41 -6
  235. package/skills/coding/coding-standards/evals.md +23 -0
  236. package/skills/coding/prototype/SKILL.md +88 -29
  237. package/skills/coding/prototype/evals.md +19 -0
  238. package/skills/coding/tdd/SKILL.md +81 -54
  239. package/skills/coding/tdd/evals.md +20 -0
  240. package/skills/context/context-handoff/SKILL.md +44 -3
  241. package/skills/context/context-handoff/evals.md +44 -0
  242. package/skills/context/context-prime/SKILL.md +46 -16
  243. package/skills/context/context-prime/evals.md +45 -0
  244. package/skills/git/branch-closeout/SKILL.md +132 -0
  245. package/skills/git/branch-closeout/evals.md +133 -0
  246. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  247. package/skills/git/file-ticket/SKILL.md +78 -64
  248. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  249. package/skills/git/file-ticket/evals.md +31 -26
  250. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  251. package/skills/git/fix-issue/SKILL.md +88 -65
  252. package/skills/git/fix-issue/evals.md +35 -31
  253. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  254. package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
  255. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  256. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  257. package/skills/git/ship/SKILL.md +103 -67
  258. package/skills/git/ship/assets/pr-template.md +21 -0
  259. package/skills/git/ship/evals.md +44 -28
  260. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  261. package/skills/git/worktree-create/SKILL.md +80 -50
  262. package/skills/git/worktree-create/evals.md +40 -33
  263. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  264. package/skills/git/worktree-merge/SKILL.md +112 -65
  265. package/skills/git/worktree-merge/evals.md +42 -34
  266. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  267. package/skills/meta/clio-coder-dev/SKILL.md +9 -5
  268. package/skills/meta/clio-coder-dev/evals.md +3 -2
  269. package/skills/meta/clio-coder-test/SKILL.md +102 -95
  270. package/skills/meta/clio-coder-test/evals.md +9 -4
  271. package/skills/meta/clio-coder-test/references/harness.md +100 -124
  272. package/skills/meta/clio-coder-test/references/test-map.md +77 -50
  273. package/skills/meta/credentials/SKILL.md +2 -2
  274. package/skills/meta/find-skills/SKILL.md +2 -2
  275. package/skills/meta/herdr/SKILL.md +2 -2
  276. package/skills/meta/skill-craft/SKILL.md +22 -16
  277. package/skills/planning/archify/SKILL.md +196 -0
  278. package/skills/planning/archify/evals.md +65 -0
  279. package/skills/planning/architecture/SKILL.md +62 -13
  280. package/skills/planning/architecture/evals.md +65 -0
  281. package/skills/planning/backlog/SKILL.md +131 -15
  282. package/skills/planning/backlog/evals.md +142 -0
  283. package/skills/planning/prd/SKILL.md +47 -7
  284. package/skills/planning/prd/evals.md +54 -0
  285. package/skills/planning/product-intent/SKILL.md +58 -3
  286. package/skills/planning/product-intent/evals.md +70 -0
  287. package/skills/planning/tech-spec/SKILL.md +54 -3
  288. package/skills/planning/tech-spec/evals.md +73 -0
  289. package/skills/registry.yaml +70 -62
  290. package/skills/remote.yaml +13 -0
  291. package/skills/research/arxiv-literature/SKILL.md +77 -19
  292. package/skills/research/arxiv-literature/evals.md +50 -0
  293. package/skills/research/experiment-protocol/SKILL.md +21 -2
  294. package/skills/research/experiment-protocol/evals.md +23 -0
  295. package/skills/research/scientific-debugging/SKILL.md +24 -2
  296. package/skills/research/scientific-debugging/evals.md +18 -0
  297. package/skills/research/scientific-modernization/SKILL.md +27 -2
  298. package/skills/research/scientific-modernization/evals.md +27 -0
  299. package/skills/skill-marketplace.json +97 -62
  300. package/skills/workflow/cut-it/SKILL.md +66 -6
  301. package/skills/workflow/cut-it/evals.md +101 -0
  302. package/skills/workflow/design-council/SKILL.md +118 -28
  303. package/skills/workflow/design-council/evals.md +161 -0
  304. package/skills/workflow/grill-me/SKILL.md +87 -11
  305. package/skills/workflow/grill-me/evals.md +153 -0
  306. package/skills/workflow/workflow-distiller/SKILL.md +77 -18
  307. package/skills/workflow/workflow-distiller/evals.md +118 -0
  308. package/src/cli/args.ts +2 -2
  309. package/src/cli/bootstrap-generate.ts +1 -1
  310. package/src/cli/config-inspect.ts +65 -12
  311. package/src/cli/configure-interop.ts +105 -13
  312. package/src/cli/configure-oauth.ts +57 -0
  313. package/src/cli/configure-onboarding.ts +980 -0
  314. package/src/cli/configure-target.ts +594 -0
  315. package/src/cli/configure.ts +1082 -532
  316. package/src/cli/context-map.ts +114 -0
  317. package/src/cli/context.ts +4 -0
  318. package/src/cli/docs.ts +22 -14
  319. package/src/cli/doctor-naming.ts +5 -5
  320. package/src/cli/doctor-toolchain.ts +3 -3
  321. package/src/cli/eval.ts +1 -2
  322. package/src/cli/extensions.ts +2 -1
  323. package/src/cli/fleet.ts +1 -1
  324. package/src/cli/index.ts +3 -1
  325. package/src/cli/internal-dispatch.ts +3 -4
  326. package/src/cli/lifecycle-presenter.ts +436 -0
  327. package/src/cli/models.ts +10 -2
  328. package/src/cli/modes/print.ts +5 -1
  329. package/src/cli/panes.ts +19 -5
  330. package/src/cli/reset.ts +228 -106
  331. package/src/cli/run.ts +9 -4
  332. package/src/cli/select.ts +664 -0
  333. package/src/cli/share.ts +5 -1
  334. package/src/cli/skills-eval.ts +3 -3
  335. package/src/cli/skills.ts +9 -2
  336. package/src/cli/targets.ts +5 -6
  337. package/src/cli/trace.ts +55 -4
  338. package/src/cli/uninstall.ts +233 -165
  339. package/src/cli/upgrade.ts +204 -149
  340. package/src/cli/usage.ts +86 -27
  341. package/src/cli/validate-model.ts +3 -3
  342. package/src/cli/wiki-generate.ts +1 -1
  343. package/src/core/artifact-paths.ts +1 -1
  344. package/src/core/bash-exec.ts +131 -86
  345. package/src/core/bus-events.ts +51 -6
  346. package/src/core/config.ts +61 -1
  347. package/src/core/defaults.ts +7 -4
  348. package/src/core/dispatch-outcome.ts +16 -0
  349. package/src/core/external-diagnostic.ts +44 -0
  350. package/src/core/gateway-routing.ts +157 -0
  351. package/src/core/guardrails.ts +10 -49
  352. package/src/core/prompt-hint.ts +9 -0
  353. package/src/core/safe-exec.ts +17 -2
  354. package/src/core/skill-activation.ts +89 -2
  355. package/src/domains/agents/builtins/architect.md +2 -3
  356. package/src/domains/agents/builtins/coder.md +3 -2
  357. package/src/domains/agents/builtins/debugger.md +2 -2
  358. package/src/domains/agents/builtins/documenter.md +2 -2
  359. package/src/domains/agents/builtins/git-master.md +1 -1
  360. package/src/domains/agents/builtins/oracle.md +1 -1
  361. package/src/domains/agents/builtins/provenance.md +1 -1
  362. package/src/domains/agents/builtins/researcher.md +1 -1
  363. package/src/domains/agents/builtins/scout.md +1 -1
  364. package/src/domains/agents/builtins/tester.md +2 -2
  365. package/src/domains/agents/builtins/verifier.md +2 -2
  366. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  367. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  368. package/src/domains/agents/catalog.ts +13 -15
  369. package/src/domains/agents/contract.ts +2 -0
  370. package/src/domains/agents/extension.ts +23 -1
  371. package/src/domains/agents/result-contract.ts +70 -0
  372. package/src/domains/config/keybindings.ts +8 -0
  373. package/src/domains/context/extension.ts +0 -3
  374. package/src/domains/context/wiki/map-seed.ts +589 -0
  375. package/src/domains/context/wiki/plan.ts +2 -2
  376. package/src/domains/context/working-set/path-index.ts +1 -0
  377. package/src/domains/dispatch/admission.ts +29 -0
  378. package/src/domains/dispatch/agent-candidates.ts +10 -0
  379. package/src/domains/dispatch/budget-envelope.ts +86 -1
  380. package/src/domains/dispatch/capability-match.ts +11 -0
  381. package/src/domains/dispatch/capacity-lease.ts +17 -0
  382. package/src/domains/dispatch/contract.ts +11 -1
  383. package/src/domains/dispatch/extension.ts +237 -49
  384. package/src/domains/dispatch/host-verification.ts +435 -39
  385. package/src/domains/dispatch/intent-requirements.ts +10 -0
  386. package/src/domains/dispatch/intent.ts +18 -1
  387. package/src/domains/dispatch/path-scope.ts +235 -24
  388. package/src/domains/dispatch/run-event-journal.ts +4 -15
  389. package/src/domains/dispatch/state.ts +2 -3
  390. package/src/domains/dispatch/transport.ts +45 -21
  391. package/src/domains/dispatch/types.ts +58 -3
  392. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  393. package/src/domains/eval/artifacts/store.ts +5 -0
  394. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  395. package/src/domains/eval/metrics/token-stream.ts +201 -31
  396. package/src/domains/eval/metrics/tracked.ts +40 -4
  397. package/src/domains/eval/runners/clio-run.ts +5 -2
  398. package/src/domains/eval/schema/suite.ts +28 -0
  399. package/src/domains/eval/schema/verdict.ts +2 -2
  400. package/src/domains/eval/store.ts +8 -1
  401. package/src/domains/eval/suites/resolve.ts +13 -1
  402. package/src/domains/eval/suites/run.ts +24 -3
  403. package/src/domains/evidence/trust-status.ts +10 -1
  404. package/src/domains/extensions/contract.ts +15 -1
  405. package/src/domains/extensions/discovery.ts +238 -41
  406. package/src/domains/extensions/extension.ts +105 -6
  407. package/src/domains/extensions/index.ts +24 -0
  408. package/src/domains/extensions/integrity.ts +189 -0
  409. package/src/domains/extensions/manager.ts +17 -1
  410. package/src/domains/extensions/resource-path.ts +27 -0
  411. package/src/domains/extensions/resources.ts +18 -38
  412. package/src/domains/extensions/snapshot-store.ts +39 -0
  413. package/src/domains/extensions/snapshot.ts +180 -0
  414. package/src/domains/extensions/state.ts +385 -57
  415. package/src/domains/extensions/types.ts +118 -1
  416. package/src/domains/interop/registry.ts +6 -2
  417. package/src/domains/interop/types.ts +4 -0
  418. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  419. package/src/domains/lifecycle/migrations/index.ts +6 -0
  420. package/src/domains/lifecycle/naming-resources.ts +19 -4
  421. package/src/domains/lifecycle/naming-yazi.ts +10 -5
  422. package/src/domains/memory/task-memory-policy.ts +70 -26
  423. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  424. package/src/domains/middleware/contract.ts +26 -0
  425. package/src/domains/middleware/extension.ts +24 -24
  426. package/src/domains/middleware/hook-receipts.ts +27 -4
  427. package/src/domains/middleware/hooks-io.ts +65 -32
  428. package/src/domains/middleware/hooks.ts +64 -0
  429. package/src/domains/middleware/index.ts +28 -5
  430. package/src/domains/middleware/marketplace-offer.ts +3 -35
  431. package/src/domains/middleware/memory-intervention.ts +127 -32
  432. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  433. package/src/domains/middleware/registrations.ts +326 -0
  434. package/src/domains/middleware/runtime.ts +28 -0
  435. package/src/domains/middleware/skills-reminder.ts +31 -2
  436. package/src/domains/middleware/snapshot.ts +20 -7
  437. package/src/domains/mux/contract.ts +38 -0
  438. package/src/domains/mux/detect.ts +6 -13
  439. package/src/domains/mux/index.ts +1 -1
  440. package/src/domains/mux/operations.ts +44 -5
  441. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  442. package/src/domains/mux/yazi/session.ts +53 -4
  443. package/src/domains/mux/yazi/theme.ts +117 -17
  444. package/src/domains/observability/compaction-usage.ts +118 -0
  445. package/src/domains/observability/contract.ts +10 -11
  446. package/src/domains/observability/cost.ts +1 -1
  447. package/src/domains/observability/extension.ts +17 -4
  448. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  449. package/src/domains/observability/projection.ts +14 -90
  450. package/src/domains/observability/trace-store.ts +43 -7
  451. package/src/domains/prompts/compiler.ts +73 -53
  452. package/src/domains/prompts/contract.ts +15 -3
  453. package/src/domains/prompts/extension.ts +97 -9
  454. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
  455. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  456. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  457. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  458. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  459. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  460. package/src/domains/prompts/fragments/operating/skills.md +10 -24
  461. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  462. package/src/domains/providers/contract.ts +4 -1
  463. package/src/domains/providers/extension.ts +40 -9
  464. package/src/domains/providers/index.ts +1 -1
  465. package/src/domains/providers/model-capabilities.ts +9 -0
  466. package/src/domains/providers/model-discovery.ts +2 -0
  467. package/src/domains/providers/model-runtime-capabilities.ts +99 -25
  468. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
  469. package/src/domains/providers/runtime-resolution.ts +31 -0
  470. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  471. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  472. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  473. package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
  474. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  475. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  476. package/src/domains/providers/support.ts +11 -5
  477. package/src/domains/providers/target-model-cache.ts +25 -2
  478. package/src/domains/providers/types/capability-flags.ts +2 -0
  479. package/src/domains/providers/types/cost-provenance.ts +19 -0
  480. package/src/domains/providers/types/local-model-quirks.ts +85 -37
  481. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  482. package/src/domains/providers/types/target-descriptor.ts +19 -0
  483. package/src/domains/resources/index.ts +3 -0
  484. package/src/domains/resources/skills/install.ts +72 -7
  485. package/src/domains/resources/skills/loader.ts +23 -19
  486. package/src/domains/resources/skills/marketplace.ts +63 -11
  487. package/src/domains/safety/autonomy.ts +15 -0
  488. package/src/domains/safety/call-target.ts +1 -1
  489. package/src/domains/safety/index.ts +1 -0
  490. package/src/domains/safety/loop-detector.ts +7 -4
  491. package/src/domains/safety/path-policy.ts +1 -1
  492. package/src/domains/safety/policy-engine.ts +34 -11
  493. package/src/domains/safety/protected-artifacts.ts +191 -88
  494. package/src/domains/safety/run-effects.ts +2 -22
  495. package/src/domains/safety/skill-authority.ts +55 -0
  496. package/src/domains/session/compaction/compact.ts +72 -22
  497. package/src/domains/session/entries.ts +6 -0
  498. package/src/domains/session/task-board.ts +10 -9
  499. package/src/domains/session/usage.ts +3 -3
  500. package/src/domains/share/archive.ts +164 -7
  501. package/src/engine/acp/server.ts +62 -9
  502. package/src/engine/agent.ts +13 -3
  503. package/src/engine/ai.ts +26 -8
  504. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  505. package/src/engine/api-registry.ts +3 -0
  506. package/src/engine/apis/llamacpp-residency.ts +3 -4
  507. package/src/engine/apis/lmstudio.ts +3 -3
  508. package/src/engine/apis/ollama-native.ts +6 -6
  509. package/src/engine/apis/openai-completions.ts +145 -39
  510. package/src/engine/apis/output-budget.ts +8 -18
  511. package/src/engine/apis/residency.ts +8 -27
  512. package/src/engine/external-subprocess.ts +114 -6
  513. package/src/engine/gemma-channel-filter.ts +19 -0
  514. package/src/engine/loop-guard.ts +92 -12
  515. package/src/engine/worker-runtime.ts +40 -11
  516. package/src/engine/worker-tools.ts +3 -1
  517. package/src/entry/background-model-metadata.ts +18 -0
  518. package/src/entry/compaction-prompt.ts +57 -0
  519. package/src/entry/extension-hook-sources.ts +28 -0
  520. package/src/entry/extension-reload.ts +309 -0
  521. package/src/entry/orchestrator.ts +464 -251
  522. package/src/entry/task-memory-lifecycle.ts +35 -0
  523. package/src/interactive/application-controller.ts +2 -1
  524. package/src/interactive/bus-notices.ts +8 -1
  525. package/src/interactive/chat-loop-messages.ts +16 -17
  526. package/src/interactive/chat-loop.ts +75 -3
  527. package/src/interactive/chat-panel.ts +36 -13
  528. package/src/interactive/chat-renderer.ts +72 -7
  529. package/src/interactive/cost-overlay.ts +26 -2
  530. package/src/interactive/dispatch-board.ts +6 -11
  531. package/src/interactive/footer/widgets.ts +13 -0
  532. package/src/interactive/interactive-application.ts +39 -4
  533. package/src/interactive/interactive-input-runtime.ts +4 -0
  534. package/src/interactive/interactive-presentation.ts +2 -2
  535. package/src/interactive/interactive-slash-runtime.ts +4 -1
  536. package/src/interactive/overlays/extensions.ts +9 -1
  537. package/src/interactive/overlays/help-reference.ts +13 -0
  538. package/src/interactive/overlays/settings.ts +27 -16
  539. package/src/interactive/panes-runtime.ts +111 -35
  540. package/src/interactive/prompt-cache-identity.ts +88 -0
  541. package/src/interactive/renderers/worker-entry.ts +32 -0
  542. package/src/interactive/slash-commands.ts +153 -20
  543. package/src/interactive/stream-pacing-policy.ts +0 -23
  544. package/src/interactive/theme/labels.ts +19 -13
  545. package/src/interactive/turn-context.ts +39 -20
  546. package/src/interactive/turn-recovery.ts +8 -0
  547. package/src/interactive/turn-runtime.ts +27 -11
  548. package/src/interactive/turn-state.ts +7 -0
  549. package/src/interactive/worker-receipts.ts +1 -0
  550. package/src/interactive/worker-stream.ts +6 -1
  551. package/src/interactive/yazi-bridge.ts +60 -6
  552. package/src/tools/agent-tools.ts +30 -1
  553. package/src/tools/artifact.ts +2 -2
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/bootstrap.ts +4 -0
  557. package/src/tools/builtin-tool-catalog.ts +52 -22
  558. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  559. package/src/tools/codewiki/code-nav.ts +99 -13
  560. package/src/tools/context/docs-engine.ts +20 -7
  561. package/src/tools/context/index.ts +59 -21
  562. package/src/tools/core-bootstrap.ts +28 -6
  563. package/src/tools/credential-present.ts +1 -2
  564. package/src/tools/dispatch-arguments.ts +6 -1
  565. package/src/tools/dispatch-event-text.ts +10 -0
  566. package/src/tools/dispatch-plan.ts +49 -4
  567. package/src/tools/dispatch-run-events.ts +1 -1
  568. package/src/tools/dispatch-runner.ts +12 -0
  569. package/src/tools/dispatch-schema.ts +338 -0
  570. package/src/tools/dispatch-types.ts +3 -0
  571. package/src/tools/dispatch.ts +9 -254
  572. package/src/tools/ledger.ts +3 -5
  573. package/src/tools/monitor-surface.ts +5 -13
  574. package/src/tools/observation.ts +4 -5
  575. package/src/tools/panes-surface.ts +4 -11
  576. package/src/tools/panes.ts +4 -2
  577. package/src/tools/policy.ts +15 -2
  578. package/src/tools/read.ts +5 -6
  579. package/src/tools/registry.ts +41 -12
  580. package/src/tools/result-shaping.ts +18 -14
  581. package/src/tools/steer-surface.ts +1 -1
  582. package/src/tools/tasks.ts +1 -1
  583. package/src/tools/truncate.ts +6 -5
  584. package/src/tools/verify/surface.ts +6 -12
  585. package/src/tools/web-fetch-surface.ts +1 -3
  586. package/src/tools/worker-evidence.ts +3 -1
  587. package/src/worker/spec-contract.ts +4 -0
  588. package/dist/builtins-UJLMOVOV.js +0 -17
  589. package/dist/chunk-5QIAJV2D.js +0 -48
  590. package/dist/chunk-JZWT5J3Y.js +0 -814
  591. package/dist/chunk-K7VKOLQQ.js +0 -15
  592. package/dist/chunk-PMZCIOCJ.js +0 -25
  593. package/dist/chunk-SUW5DORT.js +0 -819
  594. package/dist/chunk-UOV2BYIW.js +0 -107
  595. package/dist/chunk-WR6U3OVP.js +0 -45
  596. package/dist/chunk-Y45G3AXC.js +0 -1558
  597. package/dist/reset-EOLM7GVE.js +0 -230
  598. package/dist/uninstall-N34PCTGJ.js +0 -331
  599. package/dist/upgrade-H7TOM7YL.js +0 -323
  600. package/docs/artifact-versions.md +0 -67
  601. package/docs/development-pipeline.md +0 -121
  602. package/docs/documentation-coverage.md +0 -46
  603. package/docs/documentation-guide.md +0 -167
  604. package/docs/time-conventions.md +0 -101
package/src/cli/usage.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  } from "../core/response-model-id.js";
9
9
  import { clioDataDir, clioStateDir } from "../core/xdg.js";
10
10
  import { loadMemoryRecordsSync, type MemoryRecord } from "../domains/memory/index.js";
11
+ import { summarizeFailedCompactionUsage } from "../domains/observability/compaction-usage.js";
11
12
  import { readEvidenceIndex } from "../domains/observability/evidence-index.js";
12
13
  import { type OutOfTurnUsageRow, readOutOfTurnUsageRows } from "../domains/observability/out-of-turn-usage.js";
13
14
  import { loadSkills } from "../domains/resources/index.js";
@@ -119,18 +120,32 @@ interface CallOrigins {
119
120
  handoffs: number;
120
121
  prewarms: number;
121
122
  backgroundMemory: number;
123
+ failedCompaction: number;
122
124
  }
123
125
 
124
126
  function emptyCallOrigins(): CallOrigins {
125
- return { rows: 0, sideQuestions: 0, handoffs: 0, prewarms: 0, backgroundMemory: 0 };
127
+ return { rows: 0, sideQuestions: 0, handoffs: 0, prewarms: 0, backgroundMemory: 0, failedCompaction: 0 };
126
128
  }
127
129
 
128
130
  function turnsOf(origins: CallOrigins): number {
129
- return origins.rows - origins.sideQuestions - origins.handoffs - origins.prewarms - origins.backgroundMemory;
131
+ return (
132
+ origins.rows -
133
+ origins.sideQuestions -
134
+ origins.handoffs -
135
+ origins.prewarms -
136
+ origins.backgroundMemory -
137
+ origins.failedCompaction
138
+ );
130
139
  }
131
140
 
132
141
  function hasLabelledCall(origins: CallOrigins): boolean {
133
- return origins.sideQuestions > 0 || origins.handoffs > 0 || origins.prewarms > 0 || origins.backgroundMemory > 0;
142
+ return (
143
+ origins.sideQuestions > 0 ||
144
+ origins.handoffs > 0 ||
145
+ origins.prewarms > 0 ||
146
+ origins.backgroundMemory > 0 ||
147
+ origins.failedCompaction > 0
148
+ );
134
149
  }
135
150
 
136
151
  function addOutOfTurnRow(origins: CallOrigins, row: OutOfTurnUsageRow): void {
@@ -138,6 +153,7 @@ function addOutOfTurnRow(origins: CallOrigins, row: OutOfTurnUsageRow): void {
138
153
  if (row.label === "side-question") origins.sideQuestions += 1;
139
154
  else if (row.label === "prewarm") origins.prewarms += 1;
140
155
  else if (row.label === "background-memory") origins.backgroundMemory += 1;
156
+ else if (row.label === "failed-compaction") origins.failedCompaction += 1;
141
157
  else origins.handoffs += 1;
142
158
  }
143
159
 
@@ -148,16 +164,32 @@ function outOfTurnUsageCall(row: OutOfTurnUsageRow): LedgerUsageCall {
148
164
  attributedModelId: row.attributedModelId,
149
165
  requestedModelId: row.attributedModelId,
150
166
  responseModelIdObservation: { state: "not-observed" },
151
- input: row.usage.input,
152
- output: row.usage.output,
153
- cacheRead: row.usage.cacheRead,
154
- cacheWrite: row.usage.cacheWrite,
155
- reasoningTokens: row.usage.reasoning,
156
- totalTokens: row.usage.totalTokens,
157
- costUsd: row.usage.costUsd,
167
+ input: row.usage.input ?? 0,
168
+ output: row.usage.output ?? 0,
169
+ cacheRead: row.usage.cacheRead ?? 0,
170
+ cacheWrite: row.usage.cacheWrite ?? 0,
171
+ reasoningTokens: row.usage.reasoning ?? 0,
172
+ totalTokens: row.usage.totalTokens ?? 0,
173
+ costUsd: row.usage.costUsd ?? 0,
158
174
  };
159
175
  }
160
176
 
177
+ /** Existing numeric accumulators sum known contributions; the report retains missing coverage. */
178
+ function reportedUsageTotals(totals: UsageTotals, rows: ReadonlyArray<OutOfTurnUsageRow>) {
179
+ const failedCompaction = summarizeFailedCompactionUsage(rows);
180
+ if (failedCompaction.calls === 0) return totals;
181
+ const reported: Record<string, unknown> = { ...totals, knownSubtotals: true, failedCompaction };
182
+ for (const [field, missing] of Object.entries(failedCompaction.unobservedUsageCalls)) {
183
+ const key = field === "reasoning" ? "reasoningTokens" : field;
184
+ if (missing > 0 && reported[key] === 0) reported[key] = null;
185
+ }
186
+ return reported;
187
+ }
188
+
189
+ function usageAmount(value: unknown): string {
190
+ return typeof value === "number" ? String(value) : "unknown";
191
+ }
192
+
161
193
  function addUsageCall(totals: UsageTotals, call: LedgerUsageCall): void {
162
194
  totals.apiCalls += call.apiCalls ?? 1;
163
195
  totals.input += call.input;
@@ -442,6 +474,8 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
442
474
  // session store is gone can still have recorded out-of-turn spend, and
443
475
  // dropping those rows would report money that was spent as nothing at all.
444
476
  const usageMeasurable = presence.sessionsPresent || outOfTurnRows.length > 0;
477
+ const reportedTotals = reportedUsageTotals(usageTotals, outOfTurnRows);
478
+ const failedCompaction = summarizeFailedCompactionUsage(outOfTurnRows);
445
479
  const usageRows = [...usageByModel.values()].sort(
446
480
  (a, b) => b.totals.totalTokens - a.totals.totalTokens || a.providerId.localeCompare(b.providerId),
447
481
  );
@@ -533,7 +567,7 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
533
567
  emit({
534
568
  kind: "fact",
535
569
  fact: "tokens",
536
- ...usageTotals,
570
+ ...reportedTotals,
537
571
  ...(hasLabelledCall(callOrigins)
538
572
  ? {
539
573
  turns: turnsOf(callOrigins),
@@ -541,6 +575,7 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
541
575
  handoffs: callOrigins.handoffs,
542
576
  prewarms: callOrigins.prewarms,
543
577
  backgroundMemorySteps: callOrigins.backgroundMemory,
578
+ ...(callOrigins.failedCompaction > 0 ? { failedCompactionCalls: callOrigins.failedCompaction } : {}),
544
579
  }
545
580
  : {}),
546
581
  });
@@ -552,7 +587,12 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
552
587
  attributedModelId: row.attributedModelId,
553
588
  requestedModelIds: [...row.requestedModelIds].sort(),
554
589
  responseModelIdObservationCounts: row.responseModelIdObservationCounts,
555
- ...row.totals,
590
+ ...reportedUsageTotals(
591
+ row.totals,
592
+ outOfTurnRows.filter(
593
+ (call) => call.target === row.providerId && call.attributedModelId === row.attributedModelId,
594
+ ),
595
+ ),
556
596
  });
557
597
  }
558
598
  for (const session of cacheSessions) {
@@ -615,7 +655,7 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
615
655
  out(` audited tool calls in window: ${auditToolCalls.length} (${auditBlocked.length} blocked/denied)`);
616
656
  if (usageMeasurable) {
617
657
  out(
618
- ` tokens in window: ${usageTotals.totalTokens} over ${usageTotals.apiCalls} model calls (input ${usageTotals.input}, output ${usageTotals.output}, cache read ${usageTotals.cacheRead}, cache write ${usageTotals.cacheWrite}, reasoning ${usageTotals.reasoningTokens})`,
658
+ ` tokens in window: ${usageAmount(reportedTotals.totalTokens)} over ${usageTotals.apiCalls} model calls (input ${usageAmount(reportedTotals.input)}, output ${usageAmount(reportedTotals.output)}, cache read ${usageAmount(reportedTotals.cacheRead)}, cache write ${usageAmount(reportedTotals.cacheWrite)}, reasoning ${usageAmount(reportedTotals.reasoningTokens)})`,
619
659
  );
620
660
  if (hasLabelledCall(callOrigins)) {
621
661
  // Only printed when a labelled call is in the window. Over an archive
@@ -629,7 +669,18 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
629
669
  out(` background memory steps in window: ${callOrigins.backgroundMemory}`);
630
670
  }
631
671
  }
632
- out(` provider-reported cost in window: $${usageTotals.costUsd.toFixed(4)}`);
672
+ if (failedCompaction.calls > 0) {
673
+ out(
674
+ ` failed-compaction streams: ${failedCompaction.calls} (${failedCompaction.erroredCalls} errored, ${failedCompaction.abortedCalls} aborted, ${failedCompaction.successfulCalls} completed before the attempt failed)`,
675
+ );
676
+ out(" usage figures are known subtotals; missing compaction usage is not zero or a complete spending bound");
677
+ out(
678
+ ` errored compaction known cost: ${failedCompaction.erroredKnownUsage.costUsd === null ? "unknown" : `$${failedCompaction.erroredKnownUsage.costUsd.toFixed(4)}`}`,
679
+ );
680
+ }
681
+ out(
682
+ ` ${failedCompaction.calls > 0 ? "known reported/estimated" : "provider-reported"} cost in window: ${typeof reportedTotals.costUsd === "number" ? `$${reportedTotals.costUsd.toFixed(4)}` : "unknown"}`,
683
+ );
633
684
  }
634
685
  if (usageRows.length > 0) {
635
686
  out("");
@@ -650,19 +701,27 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
650
701
  "tokens",
651
702
  "cost",
652
703
  ],
653
- ...usageRows.map((row) => [
654
- row.providerId,
655
- row.attributedModelId,
656
- [...row.requestedModelIds].sort().join(","),
657
- responseModelIdObservationCountsLabel(row.responseModelIdObservationCounts),
658
- String(row.totals.apiCalls),
659
- String(row.totals.input),
660
- String(row.totals.output),
661
- String(row.totals.cacheRead),
662
- String(row.totals.reasoningTokens),
663
- String(row.totals.totalTokens),
664
- `$${row.totals.costUsd.toFixed(4)}`,
665
- ]),
704
+ ...usageRows.map((row) => {
705
+ const reported = reportedUsageTotals(
706
+ row.totals,
707
+ outOfTurnRows.filter(
708
+ (call) => call.target === row.providerId && call.attributedModelId === row.attributedModelId,
709
+ ),
710
+ );
711
+ return [
712
+ row.providerId,
713
+ row.attributedModelId,
714
+ [...row.requestedModelIds].sort().join(","),
715
+ responseModelIdObservationCountsLabel(row.responseModelIdObservationCounts),
716
+ String(row.totals.apiCalls),
717
+ usageAmount(reported.input),
718
+ usageAmount(reported.output),
719
+ usageAmount(reported.cacheRead),
720
+ usageAmount(reported.reasoningTokens),
721
+ usageAmount(reported.totalTokens),
722
+ typeof reported.costUsd === "number" ? `$${reported.costUsd.toFixed(4)}` : "unknown",
723
+ ];
724
+ }),
666
725
  ]),
667
726
  ),
668
727
  );
@@ -15,9 +15,8 @@ export interface ValidateModelInput {
15
15
  modelId: string;
16
16
  knownModels: ReadonlyArray<string>;
17
17
  /**
18
- * The live list, when one was fetched. It is consulted only when the static
19
- * catalog is empty, so the catalog stays the authority for cloud runtimes
20
- * and the probe becomes the authority where there is nothing else.
18
+ * The live list, when one was fetched. Callers provide it only when that
19
+ * runtime declares live discovery authoritative for the concrete target.
21
20
  */
22
21
  live?: LiveModelInventory | undefined;
23
22
  force: boolean;
@@ -50,6 +49,7 @@ function formatUnadvertisedModelReason(modelId: string, live: LiveModelInventory
50
49
 
51
50
  export function validateModelChoice(input: ValidateModelInput): ValidateModelResult {
52
51
  const { runtimeId, modelId, knownModels, live, force } = input;
52
+ if (live !== undefined) return validateAgainstLive(modelId, live, force);
53
53
  if (knownModels.length === 0) return validateAgainstLive(modelId, live, force);
54
54
  if (knownModels.includes(modelId)) return { ok: true };
55
55
  if (force) {
@@ -236,7 +236,7 @@ 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) => {
@@ -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;
@@ -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
  });
@@ -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;