@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
@@ -1,11 +1,14 @@
1
1
  /**
2
2
  * Durable receipt log for user-defined middleware hooks. Every hook execution
3
- * emits a {@link HookReceipt}; this log keeps a bounded in-memory ring (the live
4
- * surface `clio-coder config inspect` reads) and persists it atomically through
5
- * safeResourceWrite. Writes are throttled so a per-tool-call cadence never turns
6
- * into per-call disk I/O; `flush()` forces a final write at shutdown.
3
+ * emits a {@link HookReceipt}; this log keeps a bounded in-memory ring and
4
+ * persists it atomically through safeResourceWrite. Writes are throttled so a
5
+ * per-tool-call cadence never turns into per-call disk I/O; `flush()` forces a
6
+ * final write at shutdown. `clio-coder config inspect` reads the persisted
7
+ * snapshot back with {@link readPersistedHookReceipts}, since it runs as its
8
+ * own process and has no access to a running session's in-memory ring.
7
9
  */
8
10
 
11
+ import { readFileSync } from "node:fs";
9
12
  import { safeResourceWrite } from "../../core/safe-resource-write.js";
10
13
  import type { HookReceipt } from "./hooks.js";
11
14
 
@@ -68,3 +71,23 @@ export function createHookReceiptLog(options: HookReceiptLogOptions = {}): HookR
68
71
  },
69
72
  };
70
73
  }
74
+
75
+ /**
76
+ * Read a log's persisted snapshot back, for a process that never held the
77
+ * live log (`config inspect` runs as its own invocation). A log that has
78
+ * never persisted yet reads as empty, not an error.
79
+ */
80
+ export function readPersistedHookReceipts(persistPath: string): HookReceipt[] {
81
+ let raw: string;
82
+ try {
83
+ raw = readFileSync(persistPath, "utf8");
84
+ } catch (error) {
85
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return [];
86
+ throw error;
87
+ }
88
+ const parsed = JSON.parse(raw) as Partial<PersistedReceipts>;
89
+ if (parsed.version !== 1 || !Array.isArray(parsed.receipts)) {
90
+ throw new Error(`${persistPath}: unrecognized hook receipt log shape`);
91
+ }
92
+ return parsed.receipts;
93
+ }
@@ -1,12 +1,19 @@
1
1
  /**
2
- * Filesystem loading for user-defined middleware hooks and the production
3
- * command runner. Hooks live in dedicated, secrets-free files so they stay out
4
- * of the strict settings schema:
2
+ * Loading for user-defined middleware hooks and the production command
3
+ * runner. Hooks live in dedicated, secrets-free files so they stay out of the
4
+ * strict settings schema:
5
5
  *
6
6
  * - `.clio-coder/hooks.yaml` committed project hooks (origin "project"),
7
7
  * - `.clio-coder/hooks.local.yaml` gitignored local hooks (origin "project.local"),
8
8
  * - `<extensionRoot>/hooks.yaml` hooks shipped by an installed extension.
9
9
  *
10
+ * Project files are read from disk here. Extension declarations are never
11
+ * read here: they arrive already parsed as a captured source set that the
12
+ * composition root adapts from the extension snapshot, which captured the
13
+ * bytes during install-digest verification, so a hooks.yaml rewritten after
14
+ * verification cannot be admitted until the next generation re-verifies the
15
+ * tree. Middleware never sees extension-domain types.
16
+ *
10
17
  * Reads are best-effort: a missing file is skipped silently, and a malformed
11
18
  * file is reported as an issue without aborting anything.
12
19
  */
@@ -26,6 +33,7 @@ import {
26
33
  type UserHookCommandRunner,
27
34
  type UserHookDeclarationBatch,
28
35
  type UserHookLoadResult,
36
+ type UserHookPackageProvenance,
29
37
  type UserHookSource,
30
38
  userHookToRegistration,
31
39
  } from "./hooks.js";
@@ -43,15 +51,27 @@ export interface ReadHookSourcesResult {
43
51
  fileIssues: HookFileIssue[];
44
52
  }
45
53
 
46
- export interface ExtensionHookRoot {
47
- id: string;
48
- rootPath: string;
54
+ /** One package's hook declarations, captured by the supplier from verified bytes. */
55
+ export interface CapturedHookDeclarations {
56
+ provenance: UserHookPackageProvenance;
57
+ /** SHA-256 of the captured hooks.yaml bytes. */
58
+ declarationsDigest: string;
59
+ /** Parsed declarations, or an empty list when parsing failed. */
60
+ declarations: unknown;
61
+ parseError?: string;
62
+ }
63
+
64
+ /** The captured declarations of one supplier generation. */
65
+ export interface CapturedHookSourceSet {
66
+ /** 0 for an ephemeral (uncommitted) build. */
67
+ generation: number;
68
+ sources: ReadonlyArray<CapturedHookDeclarations>;
49
69
  }
50
70
 
51
71
  export interface ReadHookSourcesOptions {
52
72
  cwd: string;
53
- /** Installed extension roots, in dependency order. */
54
- extensions?: ReadonlyArray<ExtensionHookRoot>;
73
+ /** Captured extension declarations; absent means no extension hooks. */
74
+ capturedSources?: CapturedHookSourceSet;
55
75
  }
56
76
 
57
77
  function readBatch(
@@ -86,14 +106,23 @@ export function readHookSources(options: ReadHookSourcesOptions): ReadHookSource
86
106
  const fileIssues: HookFileIssue[] = [];
87
107
  const batches: UserHookDeclarationBatch[] = [];
88
108
 
89
- for (const extension of options.extensions ?? []) {
109
+ const captured = options.capturedSources;
110
+ for (const entry of captured?.sources ?? []) {
90
111
  const source: UserHookSource = {
91
112
  origin: "extension",
92
- sourcePath: `${extension.id}:hooks.yaml`,
93
- sourceId: extension.id,
113
+ sourcePath: `${entry.provenance.id}:hooks.yaml`,
114
+ sourceId: entry.provenance.id,
115
+ extension: {
116
+ provenance: entry.provenance,
117
+ generation: captured?.generation ?? 0,
118
+ declarationsDigest: entry.declarationsDigest,
119
+ },
94
120
  };
95
- const batch = readBatch(source, join(extension.rootPath, "hooks.yaml"), fileIssues);
96
- if (batch) batches.push(batch);
121
+ if (entry.parseError !== undefined) {
122
+ fileIssues.push({ source, message: `failed to parse ${source.sourcePath}: ${entry.parseError}` });
123
+ continue;
124
+ }
125
+ batches.push({ source, declarations: entry.declarations });
97
126
  }
98
127
 
99
128
  const projectBatch = readBatch(
@@ -113,44 +142,48 @@ export function readHookSources(options: ReadHookSourcesOptions): ReadHookSource
113
142
  return { batches, fileIssues };
114
143
  }
115
144
 
116
- export interface InstallUserHooksOptions {
145
+ export interface BuildUserHookRegistrationsOptions {
117
146
  cwd: string;
118
147
  /** Absolute workspace root a command `cwd` must resolve under; defaults to `cwd`. */
119
148
  workspaceRoot?: string;
120
- extensions?: ReadonlyArray<ExtensionHookRoot>;
121
- registerHook: (registration: MiddlewareHookRegistration) => void;
149
+ capturedSources?: CapturedHookSourceSet;
122
150
  recordReceipt: HookReceiptSink;
123
151
  /** Injected for tests; defaults to the spawnSync runner. */
124
152
  runCommand?: UserHookCommandRunner;
125
153
  now?: () => number;
126
154
  }
127
155
 
128
- export interface InstallUserHooksResult extends UserHookLoadResult {
156
+ export interface BuildUserHookRegistrationsResult extends UserHookLoadResult {
129
157
  fileIssues: HookFileIssue[];
158
+ /** One registration per admitted hook, in merged precedence order. Nothing is registered here. */
159
+ registrations: MiddlewareHookRegistration[];
130
160
  }
131
161
 
132
162
  /**
133
- * Read, normalize, and register every user hook on the middleware contract. The
134
- * returned hooks and issues feed `clio-coder config inspect`. Best-effort throughout:
135
- * a malformed file or hook is reported, never thrown.
163
+ * Read project files, merge them with the captured extension declarations,
164
+ * normalize, and build one registration per admitted hook. Pure with respect
165
+ * to the middleware contract: the caller decides when the set is published,
166
+ * which is what lets extension and hook state publish on one stack. The
167
+ * returned hooks and issues feed `clio-coder config inspect`. Best-effort
168
+ * throughout: a malformed file or hook is reported, never thrown.
136
169
  */
137
- export function installUserHooks(options: InstallUserHooksOptions): InstallUserHooksResult {
170
+ export function buildUserHookRegistrations(
171
+ options: BuildUserHookRegistrationsOptions,
172
+ ): BuildUserHookRegistrationsResult {
138
173
  const workspaceRoot = options.workspaceRoot ?? options.cwd;
139
174
  const readOptions: ReadHookSourcesOptions = { cwd: options.cwd };
140
- if (options.extensions !== undefined) readOptions.extensions = options.extensions;
175
+ if (options.capturedSources !== undefined) readOptions.capturedSources = options.capturedSources;
141
176
  const { batches, fileIssues } = readHookSources(readOptions);
142
177
  const loaded = loadUserHooks(batches, { workspaceRoot });
143
178
  const runCommand = options.runCommand ?? spawnSyncCommandRunner();
144
- for (const hook of loaded.hooks) {
145
- options.registerHook(
146
- userHookToRegistration(hook, {
147
- recordReceipt: options.recordReceipt,
148
- runCommand,
149
- ...(options.now !== undefined ? { now: options.now } : {}),
150
- }),
151
- );
152
- }
153
- return { ...loaded, fileIssues };
179
+ const registrations = loaded.hooks.map((hook) =>
180
+ userHookToRegistration(hook, {
181
+ recordReceipt: options.recordReceipt,
182
+ runCommand,
183
+ ...(options.now !== undefined ? { now: options.now } : {}),
184
+ }),
185
+ );
186
+ return { ...loaded, fileIssues, registrations };
154
187
  }
155
188
 
156
189
  /**
@@ -51,12 +51,47 @@ export const USER_HOOK_COMMAND_OUTPUT_MAX_CHARS = 4_000;
51
51
  /** Cap on a prompt hook's injected message, in characters. */
52
52
  export const USER_HOOK_PROMPT_MAX_CHARS = 2_000;
53
53
 
54
+ /**
55
+ * Provenance of an installed package that supplied hook declarations, as the
56
+ * composition root attributes it. Middleware treats it as opaque identity
57
+ * data; it neither reads packages nor knows how the digests were produced.
58
+ */
59
+ export interface UserHookPackageProvenance {
60
+ id: string;
61
+ /** Install scope label of the package (for example "user" or "project"). */
62
+ scope: string;
63
+ /** Path recorded at install, when known. */
64
+ sourcePath?: string;
65
+ /** Canonical filesystem identity of the installed package root. */
66
+ canonicalRoot: string;
67
+ /** SHA-256 of the manifest bytes covered by the installed-tree digest. */
68
+ manifestDigest: string;
69
+ /** Installed-tree digest recorded at install and reverified by the supplier. */
70
+ contentDigest: string;
71
+ }
72
+
73
+ /**
74
+ * Attribution for a hook declared by an installed package. The declaration
75
+ * bytes behind `declarationsDigest` are the ones the supplier hashed during
76
+ * content verification and captured; nothing here was re-read from a mutable
77
+ * path after verification.
78
+ */
79
+ export interface UserHookExtensionSource {
80
+ provenance: UserHookPackageProvenance;
81
+ /** Generation the declarations were admitted under; 0 for an ephemeral build. */
82
+ generation: number;
83
+ /** SHA-256 of the captured hooks.yaml bytes. */
84
+ declarationsDigest: string;
85
+ }
86
+
54
87
  export interface UserHookSource {
55
88
  origin: UserHookOrigin;
56
89
  /** File path or `extensionId:path` the declaration was read from. */
57
90
  sourcePath: string;
58
91
  /** Extension id when origin is "extension". */
59
92
  sourceId?: string;
93
+ /** Present exactly when origin is "extension". */
94
+ extension?: UserHookExtensionSource;
60
95
  }
61
96
 
62
97
  export interface NormalizedCommandHook {
@@ -314,6 +349,17 @@ export function loadUserHooks(
314
349
 
315
350
  export type UserHookOutcome = "emitted" | "command-ok" | "command-failed" | "command-timeout" | "skipped";
316
351
 
352
+ /** Bounded extension attribution carried on every receipt of an extension hook. */
353
+ export interface HookReceiptExtension {
354
+ id: string;
355
+ scope: string;
356
+ canonicalRoot: string;
357
+ manifestDigest: string;
358
+ contentDigest: string;
359
+ declarationsDigest: string;
360
+ generation: number;
361
+ }
362
+
317
363
  export interface HookReceipt {
318
364
  at: number;
319
365
  hookId: string;
@@ -327,6 +373,7 @@ export interface HookReceipt {
327
373
  exitCode?: number;
328
374
  outputChars?: number;
329
375
  toolName?: string;
376
+ extension?: HookReceiptExtension;
330
377
  }
331
378
 
332
379
  export type HookReceiptSink = (receipt: HookReceipt) => void;
@@ -372,6 +419,10 @@ export function userHookToRegistration(
372
419
  deps: UserHookRegistrationDeps,
373
420
  ): MiddlewareHookRegistration {
374
421
  const now = deps.now ?? Date.now;
422
+ // Attribution is fixed when the registration is built, so a receipt written
423
+ // by a registration from an older generation names that generation even
424
+ // after a newer one is active.
425
+ const extension = hook.source.extension === undefined ? undefined : receiptExtension(hook.source.extension);
375
426
  const baseReceipt = (input: { toolName?: string }): Omit<HookReceipt, "outcome"> => ({
376
427
  at: now(),
377
428
  hookId: hook.id,
@@ -380,6 +431,7 @@ export function userHookToRegistration(
380
431
  hash: hook.hash,
381
432
  hook: hook.on,
382
433
  kind: hook.spec.kind,
434
+ ...(extension !== undefined ? { extension: { ...extension } } : {}),
383
435
  ...(input.toolName !== undefined ? { toolName: input.toolName } : {}),
384
436
  });
385
437
  const registration: MiddlewareHookRegistration = {
@@ -401,6 +453,18 @@ export function userHookToRegistration(
401
453
  return registration;
402
454
  }
403
455
 
456
+ function receiptExtension(source: UserHookExtensionSource): HookReceiptExtension {
457
+ return {
458
+ id: source.provenance.id,
459
+ scope: source.provenance.scope,
460
+ canonicalRoot: source.provenance.canonicalRoot,
461
+ manifestDigest: source.provenance.manifestDigest,
462
+ contentDigest: source.provenance.contentDigest,
463
+ declarationsDigest: source.declarationsDigest,
464
+ generation: source.generation,
465
+ };
466
+ }
467
+
404
468
  function evaluateHook(
405
469
  hook: NormalizedUserHook,
406
470
  deps: UserHookRegistrationDeps,
@@ -41,19 +41,27 @@ export {
41
41
  } from "./dispatch-nudge.js";
42
42
  export type { MiddlewareBundleOptions } from "./extension.js";
43
43
  export { createEnvHookBudgetTracker, createMiddlewareBundle } from "./extension.js";
44
- export { createHookReceiptLog, HOOK_RECEIPT_LOG_CAPACITY, type HookReceiptLog } from "./hook-receipts.js";
44
+ export {
45
+ createHookReceiptLog,
46
+ HOOK_RECEIPT_LOG_CAPACITY,
47
+ type HookReceiptLog,
48
+ readPersistedHookReceipts,
49
+ } from "./hook-receipts.js";
45
50
  export type {
46
51
  HookReceipt,
52
+ HookReceiptExtension,
47
53
  HookReceiptSink,
48
54
  NormalizedUserHook,
49
55
  UserHookCommandResult,
50
56
  UserHookCommandRunner,
51
57
  UserHookDeclarationBatch,
58
+ UserHookExtensionSource,
52
59
  UserHookKind,
53
60
  UserHookLoadIssue,
54
61
  UserHookLoadResult,
55
62
  UserHookOrigin,
56
63
  UserHookOutcome,
64
+ UserHookPackageProvenance,
57
65
  UserHookSource,
58
66
  } from "./hooks.js";
59
67
  export {
@@ -66,10 +74,12 @@ export {
66
74
  userHookToRegistration,
67
75
  } from "./hooks.js";
68
76
  export {
69
- type ExtensionHookRoot,
77
+ type BuildUserHookRegistrationsOptions,
78
+ type BuildUserHookRegistrationsResult,
79
+ buildUserHookRegistrations,
80
+ type CapturedHookDeclarations,
81
+ type CapturedHookSourceSet,
70
82
  type HookFileIssue,
71
- type InstallUserHooksResult,
72
- installUserHooks,
73
83
  readHookSources,
74
84
  spawnSyncCommandRunner,
75
85
  } from "./hooks-io.js";
@@ -78,7 +88,6 @@ export {
78
88
  createMarketplaceOfferRegistration,
79
89
  MARKETPLACE_OFFER_REGISTRATION_ID,
80
90
  type MarketplaceOfferDeps,
81
- marketplaceAutoInstallReminder,
82
91
  marketplaceOfferReminder,
83
92
  } from "./marketplace-offer.js";
84
93
  export {
@@ -89,6 +98,19 @@ export {
89
98
  type MemoryInterventionDeps,
90
99
  } from "./memory-intervention.js";
91
100
  export { announceMemoryStepEndpoint, type MemoryStepEndpointAnnouncerDeps } from "./memory-step-endpoint.js";
101
+ export {
102
+ createMiddlewareRegistrationTable,
103
+ MIDDLEWARE_REGISTRATION_OWNERS,
104
+ type MiddlewareRegistrationConflict,
105
+ type MiddlewareRegistrationConflictTier,
106
+ type MiddlewareRegistrationOwner,
107
+ type MiddlewareRegistrationReplacement,
108
+ type MiddlewareRegistrationTable,
109
+ type MiddlewareRegistrationTableOptions,
110
+ type PrepareRegistrationReplacementResult,
111
+ type ReplaceRegistrationsRejection,
112
+ type ReplaceRegistrationsReport,
113
+ } from "./registrations.js";
92
114
  export { BUILTIN_MIDDLEWARE_RULE_IDS, listMiddlewareRuleDefinitions, listMiddlewareRules } from "./rules.js";
93
115
  export type {
94
116
  MiddlewareDiagnostic,
@@ -99,6 +121,7 @@ export type {
99
121
  RunMiddlewareRegistrationsOptions,
100
122
  } from "./runtime.js";
101
123
  export {
124
+ formatRegistrationConflict,
102
125
  registrationFromRuleDefinition,
103
126
  runMiddlewareHook,
104
127
  runMiddlewareRegistrations,
@@ -15,7 +15,6 @@ import {
15
15
  readPromotionDeclines,
16
16
  recordPromotionNeverDecline,
17
17
  } from "../resources/skills/promotion.js";
18
- import type { AutonomyLevel } from "../safety/autonomy.js";
19
18
  import type { MiddlewareHookRegistration } from "./runtime.js";
20
19
  import { isSubstantiveUserTurn } from "./skills-reminder.js";
21
20
  import { type MiddlewareEffect, type MiddlewareHookInput, metadataNumber } from "./types.js";
@@ -34,9 +33,8 @@ import { type MiddlewareEffect, type MiddlewareHookInput, metadataNumber } from
34
33
  * becomes a nag. Detection is the local lexical matcher in
35
34
  * resources/skills/promotion.ts — no request text leaves the machine.
36
35
  *
37
- * At full-auto the offer collapses into an autonomous install, but ONLY from
38
- * Clio's own marketplace: every promotion-flow install (consented or
39
- * autonomous) passes `assertPromotionInstallSource`, the hard runtime gate
36
+ * Every autonomy level requires an explicit operator answer. Each consented
37
+ * promotion-flow install passes `assertPromotionInstallSource`, the hard runtime gate
40
38
  * that rejects public registries in code rather than prompt text.
41
39
  *
42
40
  * Coordinator-only by wiring: this registration is created in the
@@ -48,7 +46,7 @@ export const MARKETPLACE_OFFER_REGISTRATION_ID = "observer.marketplace-offer";
48
46
 
49
47
  export interface MarketplaceOfferInstallResult {
50
48
  path: string;
51
- /** The source the skill was fetched from; surfaced so an autonomous install stays auditable. */
49
+ /** The source the skill was fetched from; retained with the installation result for provenance. */
52
50
  sourceUrl: string;
53
51
  /** Normalized content hash of what was written; the integrity record the consent overlay would have shown. */
54
52
  installedHash: string;
@@ -59,8 +57,6 @@ export interface MarketplaceOfferDeps {
59
57
  listInstalledSkillNames(): ReadonlyArray<string>;
60
58
  /** The local marketplace lookup (catalog + index); already local-only. */
61
59
  listMarketplaceEntries(): ReadonlyArray<MarketplaceSkill>;
62
- /** The session's effective autonomy at evaluation time. */
63
- getAutonomy(): AutonomyLevel;
64
60
  /** Perform the install; the registration gates the source before calling. */
65
61
  installEntry(entry: MarketplaceSkill, scope: "user" | "project"): MarketplaceOfferInstallResult;
66
62
  /** Decline persistence; defaults to the promotion module's config-dir store. Keyed by name+version. */
@@ -100,19 +96,6 @@ export function marketplaceOfferReminder(entry: MarketplaceSkill, offerTag: stri
100
96
  );
101
97
  }
102
98
 
103
- export function marketplaceAutoInstallReminder(entry: MarketplaceSkill, result: MarketplaceOfferInstallResult): string {
104
- // Full-auto skips the operator's yes/no, never the integrity record. The
105
- // consent overlay states the source and the SHA-256 of what it writes; the
106
- // autonomous path computes the same hash and must surface it here, so an
107
- // install nobody was asked about is still traceable to its source and bytes.
108
- return (
109
- `[Marketplace] Installed skill "${entry.name}" from Clio's own local marketplace (full-auto) to ${result.path}. ` +
110
- `Source ${result.sourceUrl}, sha256 ${result.installedHash}. ${entry.description} ` +
111
- `It is installed but not active — activation stays operator-gated. If it fits this task, ` +
112
- `suggest /skill ${entry.name} to the operator; never load it yourself.`
113
- );
114
- }
115
-
116
99
  interface AnswerLike {
117
100
  question: string;
118
101
  answer: string;
@@ -316,21 +299,6 @@ export function createMarketplaceOfferRegistration(deps: MarketplaceOfferDeps):
316
299
  const match = bestMatch(input.text ?? "");
317
300
  if (!match) return NO_EFFECTS;
318
301
  offeredNames.add(match.entry.name);
319
- if (deps.getAutonomy() === "full-auto") {
320
- try {
321
- const result = installGated(match.entry, "project");
322
- return [
323
- {
324
- kind: "inject_reminder",
325
- severity: "info",
326
- message: marketplaceAutoInstallReminder(match.entry, result),
327
- },
328
- ];
329
- } catch {
330
- // Gate refusal or install failure: fall back to the consent offer
331
- // so the operator still hears about the match.
332
- }
333
- }
334
302
  const tag = newOfferTag();
335
303
  pendingOffer = { entry: match.entry, tag };
336
304
  return [{ kind: "inject_reminder", severity: "info", message: marketplaceOfferReminder(match.entry, tag) }];