@iowarp/clio-coder 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +404 -472
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-ZILU3AUO.js → acp-TMDQZDIG.js} +7 -7
  6. package/dist/{agents-HYWGBGQR.js → agents-5N5NG3XG.js} +28 -28
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-N3QT7CBO.js → auth-Z5CCBXKQ.js} +8 -9
  9. package/dist/{builtins-UJLMOVOV.js → builtins-K6TNDT24.js} +4 -4
  10. package/dist/{chunk-GVQJ5CCZ.js → chunk-2HFQNRV3.js} +7 -7
  11. package/dist/{chunk-QMXC4JB7.js → chunk-2NHR3NAY.js} +163 -1401
  12. package/dist/chunk-2X4RYJTJ.js +39 -0
  13. package/dist/{chunk-Y45G3AXC.js → chunk-2Z2IKEXI.js} +6 -10
  14. package/dist/{chunk-EIMVLWB3.js → chunk-34BHNEE3.js} +7 -3
  15. package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
  16. package/dist/chunk-3EBYEESD.js +314 -0
  17. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  18. package/dist/{chunk-AP73CFDC.js → chunk-3KIPBMUA.js} +2 -2
  19. package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
  20. package/dist/{chunk-VEGN6WIQ.js → chunk-462T4EGZ.js} +2 -2
  21. package/dist/{chunk-AFKWHWXF.js → chunk-4JDLP6ZS.js} +33 -16
  22. package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
  23. package/dist/{chunk-AKB4GYDL.js → chunk-54ODD65L.js} +5 -5
  24. package/dist/{chunk-BBTJOK6Y.js → chunk-5KW52TEP.js} +3 -3
  25. package/dist/{chunk-6CCS4G3W.js → chunk-5PFYMY2V.js} +2 -2
  26. package/dist/chunk-77QIVUZB.js +1334 -0
  27. package/dist/{chunk-7OBGU7UB.js → chunk-7BHIY2MW.js} +7 -13
  28. package/dist/{chunk-3QSOM6PA.js → chunk-AZ4WMN4W.js} +2 -2
  29. package/dist/{chunk-6NJQITNH.js → chunk-B74PXLU7.js} +6 -3
  30. package/dist/{chunk-R23Z6K6I.js → chunk-B7HM5Z7T.js} +15 -15
  31. package/dist/{chunk-R32CLGZ6.js → chunk-BO7Y52RY.js} +81 -20
  32. package/dist/{chunk-UEDMSP56.js → chunk-BYMNWQ7O.js} +123 -148
  33. package/dist/{chunk-ZJLUDYFY.js → chunk-CRFOIAX3.js} +4 -4
  34. package/dist/{chunk-2NM363SV.js → chunk-CYZW7JHJ.js} +7 -7
  35. package/dist/{chunk-6HMJX2VU.js → chunk-DYHAXKHD.js} +38 -10
  36. package/dist/{chunk-THYWACCR.js → chunk-DZAW46HP.js} +3 -3
  37. package/dist/{chunk-FYUN5KZ3.js → chunk-DZEK6CJN.js} +17 -17
  38. package/dist/{chunk-3I5NY75V.js → chunk-E7GT7O5N.js} +5 -5
  39. package/dist/{chunk-VKFQTNDV.js → chunk-F2I26BDK.js} +4 -4
  40. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  41. package/dist/{chunk-IXJT6DCX.js → chunk-FVDGR2ZL.js} +3 -3
  42. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  43. package/dist/{chunk-7EPLI7VL.js → chunk-HIICAHCJ.js} +2 -2
  44. package/dist/{chunk-E67WX76H.js → chunk-HKMD33FO.js} +29 -80
  45. package/dist/chunk-HLAFFSEK.js +360 -0
  46. package/dist/{chunk-UAPGZHYC.js → chunk-I64IFBLB.js} +9 -2
  47. package/dist/{chunk-XKA2ICR3.js → chunk-I66ZTYNP.js} +440 -175
  48. package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
  49. package/dist/{chunk-PVAMAVBB.js → chunk-IDNA72AH.js} +102 -2
  50. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  51. package/dist/{chunk-2VG7KLYV.js → chunk-IKSLQ4XV.js} +5460 -3241
  52. package/dist/{chunk-QKIFBZKT.js → chunk-IMXMHHMQ.js} +166 -25
  53. package/dist/{chunk-74YWRRU5.js → chunk-JBCS7CRR.js} +2 -2
  54. package/dist/{chunk-BDPT6GTK.js → chunk-JWJGP5DQ.js} +2 -2
  55. package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
  56. package/dist/chunk-KPXDY6QF.js +47 -0
  57. package/dist/{chunk-ABLSQ6JX.js → chunk-LJID3DYZ.js} +7 -1
  58. package/dist/{chunk-VKRH2TCS.js → chunk-M2DAX4F6.js} +2 -2
  59. package/dist/{chunk-6I5ILFOF.js → chunk-M2WXEHER.js} +2 -2
  60. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  61. package/dist/{chunk-N5UK64DP.js → chunk-MCMZMDAC.js} +2 -2
  62. package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
  63. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  64. package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
  65. package/dist/{chunk-HUAS7ITX.js → chunk-O3YUNJZ2.js} +13 -21
  66. package/dist/{chunk-MA3H6DM5.js → chunk-P75RZCJW.js} +25 -3
  67. package/dist/{chunk-IG7BCQBA.js → chunk-PGF63K6I.js} +2 -2
  68. package/dist/chunk-PJX3WQUQ.js +42 -0
  69. package/dist/{chunk-6DWBAZ5U.js → chunk-Q4XWMHX6.js} +4 -6
  70. package/dist/{chunk-OJTRZGR3.js → chunk-QQLGQY2A.js} +8 -8
  71. package/dist/{chunk-J4HBWF6Y.js → chunk-RLYRBIYQ.js} +115 -20
  72. package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
  73. package/dist/{chunk-C537JADH.js → chunk-SSEYRH53.js} +6 -7
  74. package/dist/chunk-SZAA6XDG.js +30 -0
  75. package/dist/{chunk-MOPSG2X7.js → chunk-TPEQIQIE.js} +6 -6
  76. package/dist/{chunk-JA5QWE4Z.js → chunk-UBRFI4HS.js} +1879 -1650
  77. package/dist/{chunk-BTGG6BG2.js → chunk-UH347SHR.js} +154 -15
  78. package/dist/{chunk-5YHDIDBP.js → chunk-UH632ZYL.js} +2 -2
  79. package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
  80. package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
  81. package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
  82. package/dist/{chunk-UXN6JT4W.js → chunk-W4YEMFBX.js} +2 -2
  83. package/dist/{chunk-TD3PGPQA.js → chunk-W6NIE6OW.js} +2 -2
  84. package/dist/{chunk-TVH4ONAM.js → chunk-X7IARSHT.js} +3 -3
  85. package/dist/{chunk-PJJ6MY27.js → chunk-XE3PCIXH.js} +3 -3
  86. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  87. package/dist/{chunk-SCYB3HA4.js → chunk-XOXV5GKE.js} +51 -16
  88. package/dist/{chunk-QTFGO774.js → chunk-XQRY4DTA.js} +24 -11
  89. package/dist/{chunk-BJGUKIG4.js → chunk-YJISEZKC.js} +2 -2
  90. package/dist/{chunk-GPPB3JBE.js → chunk-ZGNYYXQ6.js} +2 -2
  91. package/dist/{chunk-SINK3QR6.js → chunk-ZNT2M6TG.js} +7 -7
  92. package/dist/{chunk-7RY5VZPH.js → chunk-ZW4HH5JJ.js} +6 -6
  93. package/dist/cli/index.js +33 -32
  94. package/dist/{clio-IT3G3VQH.js → clio-7VB377CC.js} +7 -7
  95. package/dist/{code-nav-RK6S7F6E.js → code-nav-YVLCYA7V.js} +85 -17
  96. package/dist/{config-3QZRWZJF.js → config-4HVOS65E.js} +88 -43
  97. package/dist/{configure-FL7Y3KJF.js → configure-PIWO7B24.js} +10 -10
  98. package/dist/{context-5HE7ODYK.js → context-IYEHL3WQ.js} +33 -31
  99. package/dist/{context-XNHL75JV.js → context-KQYIWPWT.js} +47 -34
  100. package/dist/{context-KYQFRVDC.js → context-N6ZE3LGJ.js} +11 -11
  101. package/dist/{context-clear-N545L53A.js → context-clear-G4OGZJDS.js} +33 -31
  102. package/dist/{context-working-set-QHKXSV2F.js → context-working-set-BWLF6LJP.js} +7 -7
  103. package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-2QQAITS3.js} +38 -38
  104. package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
  105. package/dist/{doctor-ZGPEGHIP.js → doctor-LHBD36VU.js} +23 -22
  106. package/dist/{eval-GXLL44RD.js → eval-C45FYRJ6.js} +21 -20
  107. package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-6DEJPLBF.js} +2 -2
  108. package/dist/{evidence-HWLBRH3Q.js → evidence-6SHONYAF.js} +30 -28
  109. package/dist/{evolve-FTZBMNVW.js → evolve-KRKMV72X.js} +30 -28
  110. package/dist/{extensions-VHRBEID7.js → extensions-KPZ2UHBB.js} +5 -3
  111. package/dist/{fleet-CKZHJWZJ.js → fleet-IVTCKDHT.js} +62 -61
  112. package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-EDWL3IT7.js} +5 -5
  113. package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-YP3YEFGK.js} +4 -4
  114. package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-ZFWKHY2M.js} +16 -14
  115. package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-FVUNCBML.js} +31 -29
  116. package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-UN5XED4R.js} +2 -2
  117. package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-XOWC4HSX.js} +17 -15
  118. package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-UN3SODEL.js} +30 -28
  119. package/dist/{fleet-view-WAMJYNDT.js → fleet-view-TWHJKCN6.js} +31 -29
  120. package/dist/{init-5XQRBOFV.js → init-T2QORQ3Y.js} +50 -49
  121. package/dist/{interop-34TVO25M.js → interop-IN5I2A66.js} +5 -5
  122. package/dist/{library-3QY6KF57.js → library-LSCATDLZ.js} +15 -13
  123. package/dist/{memory-L4UTIIIW.js → memory-HYOKAGGJ.js} +31 -29
  124. package/dist/{models-ZVX3QOWE.js → models-2GPMFYCM.js} +22 -21
  125. package/dist/{monitor-CEKVSYTS.js → monitor-E4ASVUJH.js} +34 -32
  126. package/dist/{orchestrator-77BAP6BC.js → orchestrator-DDMPR3PY.js} +984 -583
  127. package/dist/{panes-7STHOAUJ.js → panes-E3RUXOW5.js} +4 -4
  128. package/dist/{panes-SHAUIRXY.js → panes-IXKLOKA2.js} +23 -8
  129. package/dist/{reset-EOLM7GVE.js → reset-OAQP3W4O.js} +4 -4
  130. package/dist/{resources-74GKTLSF.js → resources-OTRSN34L.js} +15 -13
  131. package/dist/{run-HBAUJNNZ.js → run-5DEYH5QK.js} +60 -59
  132. package/dist/{share-G3APVLVP.js → share-IHWTLO3M.js} +19 -15
  133. package/dist/{skills-35HHUKCR.js → skills-IYMXMKW4.js} +17 -15
  134. package/dist/{skills-eval-QN4HSHDC.js → skills-eval-DROHSJAR.js} +36 -36
  135. package/dist/{skills-inventory-J357J34F.js → skills-inventory-D7X4L4ZX.js} +15 -13
  136. package/dist/{slash-commands-JZZCQA32.js → slash-commands-QBM7UZ3B.js} +21 -18
  137. package/dist/{steer-XAVHJM22.js → steer-Z5DO23FJ.js} +2 -2
  138. package/dist/{targets-DSM6CY3M.js → targets-P2FUC4IL.js} +25 -28
  139. package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-YREJ3JX2.js} +5 -5
  140. package/dist/{tools-MKNWVPBH.js → tools-5B7RO6MV.js} +4 -4
  141. package/dist/{trace-ECQ7TIYZ.js → trace-YMGMUM6A.js} +55 -7
  142. package/dist/{upgrade-H7TOM7YL.js → upgrade-PXK3S2YM.js} +11 -9
  143. package/dist/{usage-X52N3IDJ.js → usage-ME5MPXGX.js} +36 -34
  144. package/dist/{verifiers-EJTVVSMA.js → verifiers-BVZ7IWOO.js} +5 -5
  145. package/dist/{verify-YJL6XET2.js → verify-5K7ZKQFC.js} +4 -4
  146. package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
  147. package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-F5W5QTYY.js} +48 -47
  148. package/dist/{with-panes-OBOBFIIR.js → with-panes-BYOJCLAM.js} +51 -255
  149. package/dist/worker/entry.js +45 -30
  150. package/docs/README.md +176 -81
  151. package/docs/{acp.md → architecture/acp.md} +36 -20
  152. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  153. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  154. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  155. package/docs/architecture/artifact-versions.md +90 -0
  156. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  157. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  158. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  159. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  160. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  161. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  162. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  163. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  164. package/docs/{observability.md → architecture/observability.md} +26 -13
  165. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  166. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  167. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  168. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  169. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  170. package/docs/architecture/time-conventions.md +125 -0
  171. package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
  172. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  173. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  174. package/docs/{built-in-agents.md → guide/built-in-agents.md} +50 -34
  175. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +65 -60
  176. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +227 -289
  177. package/docs/guide/configuration-reference.md +1158 -0
  178. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -28
  179. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
  180. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  181. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
  182. package/docs/{glossary.md → guide/glossary.md} +14 -11
  183. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +44 -13
  184. package/docs/guide/panes-and-files.md +290 -0
  185. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  186. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  187. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  188. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  189. package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
  190. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
  191. package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
  192. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  193. package/docs/process/documentation-coverage.md +100 -0
  194. package/docs/process/documentation-guide.md +187 -0
  195. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  196. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  197. package/docs/{evolution.md → process/evolution.md} +2 -2
  198. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
  199. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  200. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  201. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  202. package/evals/README.md +2 -2
  203. package/package.json +9 -7
  204. package/skills/README.md +46 -37
  205. package/skills/coding/ast-grep/SKILL.md +2 -2
  206. package/skills/coding/coding-standards/SKILL.md +2 -2
  207. package/skills/coding/prototype/SKILL.md +2 -2
  208. package/skills/coding/tdd/SKILL.md +2 -2
  209. package/skills/context/context-handoff/SKILL.md +2 -2
  210. package/skills/context/context-prime/SKILL.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +2 -2
  212. package/skills/git/fix-issue/SKILL.md +3 -3
  213. package/skills/git/resolve-merge-conflicts/SKILL.md +2 -2
  214. package/skills/git/ship/SKILL.md +2 -2
  215. package/skills/git/worktree-create/SKILL.md +2 -2
  216. package/skills/git/worktree-merge/SKILL.md +2 -2
  217. package/skills/meta/clio-coder-dev/SKILL.md +9 -5
  218. package/skills/meta/clio-coder-dev/evals.md +3 -2
  219. package/skills/meta/clio-coder-test/SKILL.md +102 -95
  220. package/skills/meta/clio-coder-test/evals.md +9 -4
  221. package/skills/meta/clio-coder-test/references/harness.md +100 -124
  222. package/skills/meta/clio-coder-test/references/test-map.md +77 -50
  223. package/skills/meta/credentials/SKILL.md +2 -2
  224. package/skills/meta/find-skills/SKILL.md +2 -2
  225. package/skills/meta/herdr/SKILL.md +2 -2
  226. package/skills/meta/skill-craft/SKILL.md +22 -16
  227. package/skills/planning/architecture/SKILL.md +2 -2
  228. package/skills/planning/backlog/SKILL.md +2 -2
  229. package/skills/planning/prd/SKILL.md +2 -2
  230. package/skills/planning/product-intent/SKILL.md +2 -2
  231. package/skills/planning/tech-spec/SKILL.md +2 -2
  232. package/skills/registry.yaml +62 -62
  233. package/skills/research/arxiv-literature/SKILL.md +2 -2
  234. package/skills/research/experiment-protocol/SKILL.md +2 -2
  235. package/skills/research/scientific-debugging/SKILL.md +2 -2
  236. package/skills/research/scientific-modernization/SKILL.md +2 -2
  237. package/skills/skill-marketplace.json +62 -62
  238. package/skills/workflow/cut-it/SKILL.md +2 -2
  239. package/skills/workflow/design-council/SKILL.md +2 -2
  240. package/skills/workflow/grill-me/SKILL.md +2 -2
  241. package/skills/workflow/workflow-distiller/SKILL.md +2 -2
  242. package/src/cli/args.ts +2 -2
  243. package/src/cli/bootstrap-generate.ts +1 -1
  244. package/src/cli/config-inspect.ts +65 -12
  245. package/src/cli/configure.ts +0 -4
  246. package/src/cli/docs.ts +22 -14
  247. package/src/cli/doctor-naming.ts +5 -5
  248. package/src/cli/doctor-toolchain.ts +3 -3
  249. package/src/cli/eval.ts +1 -2
  250. package/src/cli/extensions.ts +2 -1
  251. package/src/cli/fleet.ts +1 -1
  252. package/src/cli/index.ts +2 -1
  253. package/src/cli/internal-dispatch.ts +3 -4
  254. package/src/cli/panes.ts +19 -5
  255. package/src/cli/run.ts +2 -2
  256. package/src/cli/share.ts +5 -1
  257. package/src/cli/skills-eval.ts +3 -3
  258. package/src/cli/targets.ts +2 -6
  259. package/src/cli/trace.ts +55 -4
  260. package/src/cli/wiki-generate.ts +1 -1
  261. package/src/core/artifact-paths.ts +1 -1
  262. package/src/core/bash-exec.ts +131 -86
  263. package/src/core/bus-events.ts +51 -6
  264. package/src/core/config.ts +5 -1
  265. package/src/core/defaults.ts +7 -4
  266. package/src/core/dispatch-outcome.ts +16 -0
  267. package/src/core/guardrails.ts +10 -49
  268. package/src/core/prompt-hint.ts +9 -0
  269. package/src/domains/agents/builtins/architect.md +2 -3
  270. package/src/domains/agents/builtins/coder.md +3 -2
  271. package/src/domains/agents/builtins/debugger.md +2 -2
  272. package/src/domains/agents/builtins/documenter.md +2 -2
  273. package/src/domains/agents/builtins/git-master.md +1 -1
  274. package/src/domains/agents/builtins/oracle.md +1 -1
  275. package/src/domains/agents/builtins/provenance.md +1 -1
  276. package/src/domains/agents/builtins/researcher.md +1 -1
  277. package/src/domains/agents/builtins/scout.md +1 -1
  278. package/src/domains/agents/builtins/tester.md +2 -2
  279. package/src/domains/agents/builtins/verifier.md +2 -2
  280. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  281. package/src/domains/agents/catalog.ts +12 -14
  282. package/src/domains/agents/contract.ts +2 -0
  283. package/src/domains/agents/extension.ts +23 -1
  284. package/src/domains/config/keybindings.ts +8 -0
  285. package/src/domains/context/extension.ts +0 -3
  286. package/src/domains/context/working-set/path-index.ts +1 -0
  287. package/src/domains/dispatch/capability-match.ts +10 -0
  288. package/src/domains/dispatch/extension.ts +105 -22
  289. package/src/domains/dispatch/host-verification.ts +435 -39
  290. package/src/domains/dispatch/intent-requirements.ts +10 -0
  291. package/src/domains/dispatch/intent.ts +18 -1
  292. package/src/domains/dispatch/path-scope.ts +235 -24
  293. package/src/domains/dispatch/run-event-journal.ts +4 -15
  294. package/src/domains/dispatch/state.ts +2 -3
  295. package/src/domains/dispatch/transport.ts +45 -21
  296. package/src/domains/dispatch/types.ts +55 -3
  297. package/src/domains/eval/artifacts/store.ts +5 -0
  298. package/src/domains/eval/store.ts +8 -1
  299. package/src/domains/evidence/trust-status.ts +10 -1
  300. package/src/domains/extensions/contract.ts +15 -1
  301. package/src/domains/extensions/discovery.ts +238 -41
  302. package/src/domains/extensions/extension.ts +105 -6
  303. package/src/domains/extensions/index.ts +24 -0
  304. package/src/domains/extensions/integrity.ts +189 -0
  305. package/src/domains/extensions/manager.ts +17 -1
  306. package/src/domains/extensions/resource-path.ts +27 -0
  307. package/src/domains/extensions/resources.ts +18 -38
  308. package/src/domains/extensions/snapshot-store.ts +39 -0
  309. package/src/domains/extensions/snapshot.ts +180 -0
  310. package/src/domains/extensions/state.ts +385 -57
  311. package/src/domains/extensions/types.ts +118 -1
  312. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  313. package/src/domains/lifecycle/migrations/index.ts +2 -0
  314. package/src/domains/lifecycle/naming-resources.ts +19 -4
  315. package/src/domains/lifecycle/naming-yazi.ts +10 -5
  316. package/src/domains/middleware/contract.ts +26 -0
  317. package/src/domains/middleware/extension.ts +24 -24
  318. package/src/domains/middleware/hook-receipts.ts +27 -4
  319. package/src/domains/middleware/hooks-io.ts +65 -32
  320. package/src/domains/middleware/hooks.ts +64 -0
  321. package/src/domains/middleware/index.ts +28 -4
  322. package/src/domains/middleware/registrations.ts +326 -0
  323. package/src/domains/middleware/runtime.ts +28 -0
  324. package/src/domains/middleware/snapshot.ts +20 -7
  325. package/src/domains/mux/contract.ts +38 -0
  326. package/src/domains/mux/detect.ts +6 -13
  327. package/src/domains/mux/index.ts +1 -1
  328. package/src/domains/mux/operations.ts +44 -5
  329. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  330. package/src/domains/mux/yazi/session.ts +53 -4
  331. package/src/domains/mux/yazi/theme.ts +117 -17
  332. package/src/domains/observability/contract.ts +10 -11
  333. package/src/domains/observability/extension.ts +11 -3
  334. package/src/domains/observability/projection.ts +14 -90
  335. package/src/domains/observability/trace-store.ts +43 -7
  336. package/src/domains/prompts/compiler.ts +73 -53
  337. package/src/domains/prompts/contract.ts +15 -3
  338. package/src/domains/prompts/extension.ts +97 -9
  339. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
  340. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  341. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  342. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  343. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  344. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  345. package/src/domains/prompts/fragments/operating/skills.md +10 -24
  346. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  347. package/src/domains/providers/index.ts +1 -1
  348. package/src/domains/providers/model-runtime-capabilities.ts +85 -21
  349. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +669 -104
  350. package/src/domains/providers/runtime-resolution.ts +31 -0
  351. package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
  352. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  353. package/src/domains/providers/types/cost-provenance.ts +19 -0
  354. package/src/domains/providers/types/local-model-quirks.ts +85 -37
  355. package/src/domains/resources/skills/loader.ts +16 -19
  356. package/src/domains/safety/call-target.ts +1 -1
  357. package/src/domains/safety/loop-detector.ts +7 -4
  358. package/src/domains/session/task-board.ts +10 -9
  359. package/src/domains/share/archive.ts +164 -7
  360. package/src/engine/acp/server.ts +62 -9
  361. package/src/engine/apis/llamacpp-residency.ts +3 -4
  362. package/src/engine/apis/lmstudio.ts +3 -3
  363. package/src/engine/apis/ollama-native.ts +6 -6
  364. package/src/engine/apis/openai-completions.ts +28 -25
  365. package/src/engine/apis/output-budget.ts +8 -18
  366. package/src/engine/apis/residency.ts +8 -27
  367. package/src/engine/gemma-channel-filter.ts +19 -0
  368. package/src/engine/loop-guard.ts +92 -12
  369. package/src/engine/worker-runtime.ts +40 -11
  370. package/src/engine/worker-tools.ts +3 -1
  371. package/src/entry/extension-hook-sources.ts +28 -0
  372. package/src/entry/extension-reload.ts +309 -0
  373. package/src/entry/orchestrator.ts +59 -35
  374. package/src/interactive/application-controller.ts +2 -1
  375. package/src/interactive/bus-notices.ts +8 -1
  376. package/src/interactive/chat-loop-messages.ts +3 -13
  377. package/src/interactive/chat-loop.ts +10 -1
  378. package/src/interactive/chat-panel.ts +36 -13
  379. package/src/interactive/chat-renderer.ts +71 -7
  380. package/src/interactive/dispatch-board.ts +6 -11
  381. package/src/interactive/footer/widgets.ts +13 -0
  382. package/src/interactive/interactive-application.ts +39 -4
  383. package/src/interactive/interactive-input-runtime.ts +4 -0
  384. package/src/interactive/interactive-presentation.ts +2 -2
  385. package/src/interactive/interactive-slash-runtime.ts +2 -0
  386. package/src/interactive/overlays/extensions.ts +9 -1
  387. package/src/interactive/overlays/help-reference.ts +13 -0
  388. package/src/interactive/overlays/settings.ts +27 -16
  389. package/src/interactive/panes-runtime.ts +111 -35
  390. package/src/interactive/prompt-cache-identity.ts +88 -0
  391. package/src/interactive/slash-commands.ts +129 -14
  392. package/src/interactive/stream-pacing-policy.ts +0 -23
  393. package/src/interactive/turn-context.ts +30 -15
  394. package/src/interactive/yazi-bridge.ts +60 -6
  395. package/src/tools/agent-tools.ts +30 -1
  396. package/src/tools/artifact.ts +2 -2
  397. package/src/tools/ask-user.ts +3 -3
  398. package/src/tools/bash.ts +1 -1
  399. package/src/tools/bootstrap.ts +4 -0
  400. package/src/tools/builtin-tool-catalog.ts +52 -22
  401. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  402. package/src/tools/codewiki/code-nav.ts +99 -13
  403. package/src/tools/context/docs-engine.ts +20 -7
  404. package/src/tools/context/index.ts +29 -12
  405. package/src/tools/core-bootstrap.ts +28 -6
  406. package/src/tools/credential-present.ts +1 -2
  407. package/src/tools/dispatch-arguments.ts +5 -1
  408. package/src/tools/dispatch-plan.ts +48 -4
  409. package/src/tools/dispatch-run-events.ts +1 -1
  410. package/src/tools/dispatch-schema.ts +338 -0
  411. package/src/tools/dispatch-types.ts +3 -0
  412. package/src/tools/dispatch.ts +9 -254
  413. package/src/tools/ledger.ts +3 -5
  414. package/src/tools/monitor-surface.ts +5 -13
  415. package/src/tools/observation.ts +4 -5
  416. package/src/tools/panes-surface.ts +4 -11
  417. package/src/tools/panes.ts +4 -2
  418. package/src/tools/policy.ts +15 -2
  419. package/src/tools/read.ts +5 -6
  420. package/src/tools/registry.ts +30 -7
  421. package/src/tools/result-shaping.ts +18 -14
  422. package/src/tools/steer-surface.ts +1 -1
  423. package/src/tools/tasks.ts +1 -1
  424. package/src/tools/truncate.ts +6 -5
  425. package/src/tools/verify/surface.ts +6 -12
  426. package/src/tools/web-fetch-surface.ts +1 -3
  427. package/dist/chunk-5QIAJV2D.js +0 -48
  428. package/dist/chunk-JZWT5J3Y.js +0 -814
  429. package/dist/chunk-K7VKOLQQ.js +0 -15
  430. package/dist/chunk-PMZCIOCJ.js +0 -25
  431. package/dist/chunk-SUW5DORT.js +0 -819
  432. package/dist/chunk-UOV2BYIW.js +0 -107
  433. package/dist/chunk-WR6U3OVP.js +0 -45
  434. package/docs/artifact-versions.md +0 -67
  435. package/docs/documentation-coverage.md +0 -46
  436. package/docs/documentation-guide.md +0 -167
  437. package/docs/time-conventions.md +0 -101
@@ -16,7 +16,7 @@ import { basename, join } from "node:path";
16
16
  import type { ClioSettings } from "../core/config.js";
17
17
  import { resolvePackageRoot } from "../core/package-root.js";
18
18
  import { readLayeredSettings, type SettingsOrigin, settingsSourceFor } from "../core/settings-layers.js";
19
- import { clioDataDir } from "../core/xdg.js";
19
+ import { clioDataDir, clioStateDir } from "../core/xdg.js";
20
20
  import {
21
21
  loadOperatorProfile,
22
22
  loadProjectClioMd,
@@ -24,12 +24,18 @@ import {
24
24
  renderOperatorProfile,
25
25
  renderPromptContext,
26
26
  } from "../domains/context/index.js";
27
- import { listInstalledExtensions } from "../domains/extensions/index.js";
27
+ import { extensionSnapshotFor, listInstalledExtensions } from "../domains/extensions/index.js";
28
28
  import { loadMemoryRecordsSync, memoryStorePath } from "../domains/memory/index.js";
29
- import { loadUserHooks, readHookSources } from "../domains/middleware/index.js";
29
+ import {
30
+ HOOK_RECEIPT_LOG_CAPACITY,
31
+ loadUserHooks,
32
+ readHookSources,
33
+ readPersistedHookReceipts,
34
+ } from "../domains/middleware/index.js";
30
35
  import { classifyProjectPreload } from "../domains/prompts/preload.js";
31
36
  import { defaultScopedResourceRoots } from "../domains/resources/common-loader.js";
32
37
  import { ceilChars } from "../domains/session/context-accounting.js";
38
+ import { capturedHookSourcesFor } from "../entry/extension-hook-sources.js";
33
39
 
34
40
  export type CustomizationCategory =
35
41
  | "settings"
@@ -45,7 +51,8 @@ export type CustomizationCategory =
45
51
  | "safety"
46
52
  | "memory";
47
53
 
48
- export type ReloadClass = "hot" | "next-turn" | "restart" | "n/a";
54
+ /** `reload` means an explicit `/resources extensions reload` (or a restart) publishes the change. */
55
+ export type ReloadClass = "hot" | "next-turn" | "reload" | "restart" | "n/a";
49
56
 
50
57
  export interface CustomizationEntry {
51
58
  category: CustomizationCategory;
@@ -203,10 +210,13 @@ function inspectOperatorProfile(cwd: string, graph: CustomizationGraph): void {
203
210
 
204
211
  function inspectHooks(cwd: string, graph: CustomizationGraph): void {
205
212
  try {
206
- const extensions = listInstalledExtensions(cwd)
207
- .filter((ext) => ext.enabled && ext.effective)
208
- .map((ext) => ({ id: ext.id, rootPath: ext.rootPath }));
209
- const { batches, fileIssues } = readHookSources({ cwd, extensions });
213
+ // Extension declarations come from the same captured bytes a booted
214
+ // session admits; an inspecting process without a bound store builds an
215
+ // ephemeral generation-0 projection.
216
+ const { batches, fileIssues } = readHookSources({
217
+ cwd,
218
+ capturedSources: capturedHookSourcesFor(extensionSnapshotFor(cwd)),
219
+ });
210
220
  for (const issue of fileIssues) graph.issues.push(`hook ${issue.source.origin}: ${issue.message}`);
211
221
  const loaded = loadUserHooks(batches, { workspaceRoot: cwd });
212
222
  for (const issue of loaded.issues) {
@@ -221,7 +231,7 @@ function inspectHooks(cwd: string, graph: CustomizationGraph): void {
221
231
  hash: hook.hash,
222
232
  trust: hook.source.origin === "extension" ? "untrusted" : "trusted",
223
233
  precedence: "winner",
224
- reloadClass: "restart",
234
+ reloadClass: "reload",
225
235
  detail: { on: hook.on, kind: hook.spec.kind, enabled: hook.enabled, ...(hook.tools ? { tools: hook.tools } : {}) },
226
236
  });
227
237
  }
@@ -234,7 +244,7 @@ function inspectHooks(cwd: string, graph: CustomizationGraph): void {
234
244
  hash: loser.hash,
235
245
  trust: loser.source.origin === "extension" ? "untrusted" : "trusted",
236
246
  precedence: "loser",
237
- reloadClass: "restart",
247
+ reloadClass: "reload",
238
248
  detail: { on: loser.on, kind: loser.spec.kind },
239
249
  });
240
250
  }
@@ -243,6 +253,42 @@ function inspectHooks(cwd: string, graph: CustomizationGraph): void {
243
253
  }
244
254
  }
245
255
 
256
+ /**
257
+ * Rolls up the durable hook-execution receipt log (`<stateDir>/hook-receipts.json`,
258
+ * written by `createHookReceiptLog` in `src/domains/middleware/hook-receipts.ts`)
259
+ * into one entry, since this process never held the live in-memory ring a
260
+ * running session's own invocation writes through. One entry rather than one
261
+ * per receipt: this graph explains configuration provenance, and a couple
262
+ * hundred execution rows would swamp that rather than answer it.
263
+ */
264
+ function inspectHookReceipts(graph: CustomizationGraph): void {
265
+ const path = join(clioStateDir(), "hook-receipts.json");
266
+ try {
267
+ const receipts = existsSync(path) ? readPersistedHookReceipts(path) : [];
268
+ const outcomes: Record<string, number> = {};
269
+ for (const receipt of receipts) outcomes[receipt.outcome] = (outcomes[receipt.outcome] ?? 0) + 1;
270
+ const last = receipts.at(-1);
271
+ graph.entries.push({
272
+ category: "hook",
273
+ id: "hook-receipts",
274
+ scope: "user",
275
+ sourcePath: path,
276
+ reloadClass: "n/a",
277
+ trust: "n/a",
278
+ precedence: "single",
279
+ detail: {
280
+ present: existsSync(path),
281
+ count: receipts.length,
282
+ capacity: HOOK_RECEIPT_LOG_CAPACITY,
283
+ outcomes,
284
+ ...(last === undefined ? {} : { mostRecent: { at: last.at, hookId: last.hookId, outcome: last.outcome } }),
285
+ },
286
+ });
287
+ } catch (err) {
288
+ graph.issues.push(`hook-receipts: ${err instanceof Error ? err.message : String(err)}`);
289
+ }
290
+ }
291
+
246
292
  function inspectExtensions(cwd: string, graph: CustomizationGraph): void {
247
293
  try {
248
294
  for (const ext of listInstalledExtensions(cwd, { all: true })) {
@@ -254,8 +300,14 @@ function inspectExtensions(cwd: string, graph: CustomizationGraph): void {
254
300
  hash: shortHash(`${ext.id}@${ext.version}`),
255
301
  trust: "untrusted",
256
302
  precedence: ext.effective ? "winner" : "loser",
257
- reloadClass: "restart",
258
- detail: { version: ext.version, enabled: ext.enabled, effective: ext.effective },
303
+ reloadClass: "reload",
304
+ detail: {
305
+ version: ext.version,
306
+ enabled: ext.enabled,
307
+ valid: ext.valid,
308
+ effective: ext.effective,
309
+ loadable: ext.loadable,
310
+ },
259
311
  });
260
312
  }
261
313
  } catch (err) {
@@ -356,6 +408,7 @@ export function buildCustomizationGraph(cwd: string): CustomizationGraph {
356
408
  inspectRules(cwd, graph);
357
409
  inspectOperatorProfile(cwd, graph);
358
410
  inspectHooks(cwd, graph);
411
+ inspectHookReceipts(graph);
359
412
  inspectExtensions(cwd, graph);
360
413
  inspectResourceRoots(cwd, graph);
361
414
  inspectSafetyAndMemory(cwd, graph);
@@ -200,15 +200,12 @@ function parseSetupArgs(argv: ReadonlyArray<string>): ParsedArgs {
200
200
  out.backgroundModel = need();
201
201
  break;
202
202
  case "--fleet-model":
203
- case "--worker-model":
204
203
  out.workerModel = need();
205
204
  break;
206
205
  case "--agent-profile":
207
- case "--worker-profile":
208
206
  out.workerProfile = need();
209
207
  break;
210
208
  case "--agent-profile-model":
211
- case "--worker-profile-model":
212
209
  out.workerProfileModel = need();
213
210
  break;
214
211
  case "--api-key-env":
@@ -238,7 +235,6 @@ function parseSetupArgs(argv: ReadonlyArray<string>): ParsedArgs {
238
235
  out.setBackground = true;
239
236
  break;
240
237
  case "--set-fleet-default":
241
- case "--set-worker-default":
242
238
  out.setWorkerDefault = true;
243
239
  break;
244
240
  case "--context-window": {
package/src/cli/docs.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { spawn } from "node:child_process";
2
- import { createReadStream, readdirSync, statSync } from "node:fs";
2
+ import { createReadStream, readdirSync, realpathSync, statSync } from "node:fs";
3
3
  import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http";
4
4
  import type { AddressInfo } from "node:net";
5
5
  import { relative, resolve } from "node:path";
6
6
  import chalk from "chalk";
7
7
  import { resolvePackageRoot } from "../core/package-root.js";
8
- import { printError, printHeader } from "./shared.js";
8
+ import { printError, printHeader } from "./argv.js";
9
9
 
10
- // Human-facing viewer over the bundled HTML blueprints. It binds an ephemeral
10
+ // Human-facing viewer over the source-checkout HTML blueprints. It binds an ephemeral
11
11
  // static file server to 127.0.0.1 only, serves docs/html/index.html as the
12
12
  // menu plus the blueprint pages, prints the URL, and runs until SIGINT. It
13
13
  // uses only Node's built-in http and fs: zero new dependencies, no daemon, no
@@ -21,7 +21,8 @@ const HELP = `clio-coder docs [topic] [--no-open]
21
21
 
22
22
  Serve Clio Coder's interactive HTML documentation locally and open it in a
23
23
  browser. The blueprints live in docs/html of a source checkout; the npm package
24
- ships the Markdown guides in docs/ only. The server binds an ephemeral port on
24
+ ships the categorized Markdown reference tree under docs/ and excludes HTML.
25
+ The server binds an ephemeral port on
25
26
  127.0.0.1, keeps no state, runs no daemon, and reaches no external network.
26
27
  Press Ctrl+C to stop it.
27
28
 
@@ -64,7 +65,7 @@ export interface DocsMenuEntry {
64
65
  label: string;
65
66
  }
66
67
 
67
- /** Resolve docs/html from the package root; present in a source checkout, absent from the npm package. */
68
+ /** Resolve the source-checkout HTML root. The npm package deliberately excludes it. */
68
69
  function resolveDocsHtmlDir(): string {
69
70
  return resolve(resolvePackageRoot(), "docs", "html");
70
71
  }
@@ -159,8 +160,8 @@ function listHtmlFiles(htmlDir: string): string[] {
159
160
  }
160
161
 
161
162
  /** Build the static request handler for one html root. */
162
- function createDocsRequestHandler(htmlDir: string): (req: IncomingMessage, res: ServerResponse) => void {
163
- const root = resolve(htmlDir);
163
+ export function createDocsRequestHandler(htmlDir: string): (req: IncomingMessage, res: ServerResponse) => void {
164
+ const root = realpathSync(resolve(htmlDir));
164
165
  return (req, res) => {
165
166
  if (req.method !== "GET" && req.method !== "HEAD") {
166
167
  res.writeHead(405, { "content-type": "text/plain; charset=utf-8", allow: "GET, HEAD" });
@@ -174,20 +175,27 @@ function createDocsRequestHandler(htmlDir: string): (req: IncomingMessage, res:
174
175
  res.end(resolved.reason);
175
176
  return;
176
177
  }
177
- const target = resolve(root, resolved.relative);
178
- if (!isWithin(target, root)) {
178
+ const requestedTarget = resolve(root, resolved.relative);
179
+ if (!isWithin(requestedTarget, root)) {
179
180
  res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
180
181
  res.end("forbidden");
181
182
  return;
182
183
  }
183
184
  let size: number | null = null;
185
+ let target: string | null = null;
184
186
  try {
187
+ target = realpathSync(requestedTarget);
188
+ if (!isWithin(target, root)) {
189
+ res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
190
+ res.end("forbidden");
191
+ return;
192
+ }
185
193
  const stat = statSync(target);
186
194
  if (stat.isFile()) size = stat.size;
187
195
  } catch {
188
196
  size = null;
189
197
  }
190
- if (size === null) {
198
+ if (size === null || target === null) {
191
199
  res.writeHead(404, { "content-type": "text/plain; charset=utf-8" });
192
200
  res.end("not found");
193
201
  return;
@@ -263,7 +271,7 @@ function openBrowser(url: string): void {
263
271
  }
264
272
  }
265
273
 
266
- function waitForShutdown(): Promise<void> {
274
+ export function waitForShutdown(): Promise<void> {
267
275
  return new Promise((resolveShutdown) => {
268
276
  const onSignal = (): void => {
269
277
  process.removeListener("SIGINT", onSignal);
@@ -304,14 +312,14 @@ export async function runDocsCommand(args: ReadonlyArray<string> = []): Promise<
304
312
  try {
305
313
  htmlDir = resolveDocsHtmlDir();
306
314
  } catch (err) {
307
- printError(`could not resolve bundled docs: ${err instanceof Error ? err.message : String(err)}`);
315
+ printError(`could not resolve the docs HTML root: ${err instanceof Error ? err.message : String(err)}`);
308
316
  return 1;
309
317
  }
310
318
  const files = listHtmlFiles(htmlDir);
311
319
  if (files.length === 0) {
312
320
  printError(`no HTML docs at ${htmlDir}`);
313
321
  process.stdout.write(
314
- ` the npm package ships the Markdown guides only: ${resolve(resolvePackageRoot(), "docs")}\n` +
322
+ ` the npm package ships only the categorized Markdown reference tree: ${resolve(resolvePackageRoot(), "docs")}\n` +
315
323
  " the interactive blueprints are in a source checkout and at https://github.com/iowarp/clio-coder/tree/main/docs/html\n",
316
324
  );
317
325
  return 1;
@@ -333,7 +341,7 @@ export async function runDocsCommand(args: ReadonlyArray<string> = []): Promise<
333
341
  const handle = await startDocsServer({ htmlDir });
334
342
  const landingUrl = landing === "index.html" ? handle.url : `${handle.url}${landing}`;
335
343
  printHeader("Clio docs viewer");
336
- process.stdout.write(` serving ${htmlDir}\n`);
344
+ process.stdout.write(` serving HTML root ${htmlDir}\n`);
337
345
  process.stdout.write(` open ${chalk.cyan(landingUrl)}\n`);
338
346
  process.stdout.write(" bound to 127.0.0.1 only: no external network, no daemon, no state.\n");
339
347
  process.stdout.write(" press Ctrl+C to stop.\n");
@@ -88,7 +88,7 @@ function namingResourceFindings(options: NamingDoctorOptions): DoctorFinding[] {
88
88
  `${renamed} proven skills renamed`,
89
89
  `${renamable} proven skills await doctor --fix`,
90
90
  `${conflicts} modified/conflicting skills left untouched`,
91
- `${skillMetadata.length} legacy skill metadata keys`,
91
+ `${skillMetadata.length} legacy skill metadata keys${skillMetadata.length > 0 ? ` (rename \`clio:\` to \`clio-coder:\` in ${skillMetadata.map((entry) => entry.path).join(", ")})` : ""}`,
92
92
  `${overlays.length} legacy model overlay files/metadata (manual migration required)`,
93
93
  ].join("; "),
94
94
  },
@@ -145,7 +145,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
145
145
  if (!enabled) {
146
146
  return {
147
147
  ok: true,
148
- name: "naming yazi profile",
148
+ name: "naming files profile",
149
149
  detail: "disabled by settings",
150
150
  };
151
151
  }
@@ -154,7 +154,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
154
154
  if (legacy === 0) {
155
155
  return {
156
156
  ok: true,
157
- name: "naming yazi profile",
157
+ name: "naming files profile",
158
158
  detail: inspection.present
159
159
  ? `${inspection.profileDir} uses canonical event and environment identifiers`
160
160
  : `${inspection.profileDir} is absent; the next managed open will generate canonical identifiers`,
@@ -164,7 +164,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
164
164
  return {
165
165
  ok: true,
166
166
  level: "warn",
167
- name: "naming yazi profile",
167
+ name: "naming files profile",
168
168
  detail: `${inspection.profileDir}: ${inspection.legacyEvents} legacy events and ${inspection.legacyEnvironmentNames} legacy environment names (run \`clio-coder doctor --fix\`)`,
169
169
  };
170
170
  }
@@ -172,7 +172,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
172
172
  return {
173
173
  ok: report.status !== "regeneration-failed",
174
174
  ...(report.status === "regeneration-failed" ? {} : { level: "ok" as const }),
175
- name: "naming yazi profile",
175
+ name: "naming files profile",
176
176
  detail: report.detail,
177
177
  };
178
178
  }
@@ -16,7 +16,7 @@ function yaziProfileFinding(enabled: boolean): DoctorFinding {
16
16
  if (!enabled) {
17
17
  return {
18
18
  ok: true,
19
- name: "yazi managed profile",
19
+ name: "files pane profile",
20
20
  detail: "disabled by settings",
21
21
  };
22
22
  }
@@ -24,14 +24,14 @@ function yaziProfileFinding(enabled: boolean): DoctorFinding {
24
24
  const profile = inspectCurrentYaziProfile();
25
25
  return {
26
26
  ok: true,
27
- name: "yazi managed profile",
27
+ name: "files pane profile",
28
28
  detail: describeYaziProfile(profile),
29
29
  level: profile.state === "current" ? "ok" : "warn",
30
30
  };
31
31
  } catch (error) {
32
32
  return {
33
33
  ok: true,
34
- name: "yazi managed profile",
34
+ name: "files pane profile",
35
35
  level: "warn",
36
36
  detail: `${yaziProfileDir()} could not be inspected (${error instanceof Error ? error.message : String(error)}); user config ${userYaziConfigDir()} is separate and untouched`,
37
37
  };
package/src/cli/eval.ts CHANGED
@@ -115,8 +115,7 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
115
115
  index += 1;
116
116
  continue;
117
117
  }
118
- // `--clio-entry` is the pre-0.3.1 spelling and still parses.
119
- if (arg === "--clio-coder-entry" || arg === "--clio-entry") {
118
+ if (arg === "--clio-coder-entry") {
120
119
  parsed.clioEntry = requiredValue(args, index, arg);
121
120
  index += 1;
122
121
  continue;
@@ -91,10 +91,11 @@ function resourceSummary(extension: InstalledExtension): string {
91
91
  }
92
92
 
93
93
  function stateLabel(extension: InstalledExtension): string {
94
+ if (!extension.valid) return "invalid";
94
95
  if (!extension.compatible) return "incompatible";
95
96
  if (!extension.enabled) return "disabled";
96
97
  if (!extension.effective) return `shadowed:${extension.overriddenBy ?? "higher"}`;
97
- return "active";
98
+ return extension.loadable ? "active" : "inactive";
98
99
  }
99
100
 
100
101
  function printList(items: ReadonlyArray<InstalledExtension>): void {
package/src/cli/fleet.ts CHANGED
@@ -373,7 +373,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
373
373
  return fail("required domains unavailable (dispatch/agents/safety)");
374
374
  }
375
375
  const fleetSettings = config?.get() ?? readSettings();
376
- // Install `panes.journal` the same way the interactive composition root
376
+ // Install `fleet.history.journal` the same way the interactive composition root
377
377
  // does, so a fleet run honours the setting without the journal ever reading
378
378
  // settings.yaml from the dispatch event path.
379
379
  configureRunEventJournal(fleetSettings.fleet.history.journal);
package/src/cli/index.ts CHANGED
@@ -48,6 +48,7 @@ Usage:
48
48
  clio-coder auth list|status|login|logout [target-or-runtime]
49
49
  clio-coder doctor [--fix] diagnose state; --fix creates or repairs it
50
50
  clio-coder paths [--json] print resolved config/data/cache directories
51
+ clio-coder config inspect [--json] inspect effective customization and provenance
51
52
  clio-coder reset recover or wipe Clio Coder state
52
53
  clio-coder context show project context status (CLIO-CODER.md, preload, codewiki)
53
54
  clio-coder context init [--yes] [--preview|--heuristic] explore the repo and bootstrap CLIO-CODER.md and codewiki
@@ -72,7 +73,7 @@ Usage:
72
73
  clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
73
74
  clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
74
75
  clio-coder interop inspect --json detected external coding agents and how far each one is wired
75
- clio-coder panes install install the pane multiplexer (alias for 'tools install herdr')
76
+ clio-coder panes install|theme install the pane multiplexer (alias for 'tools install herdr'), or print Clio's theme as a herdr block
76
77
  clio-coder docs [topic] serve the HTML docs of a source checkout on 127.0.0.1 (--no-open to skip browser)
77
78
  clio-coder dev <command> harness instruments; run 'clio-coder dev' for the list
78
79
  clio-coder --help, -h this message
@@ -9,7 +9,7 @@
9
9
  * operator cancel.
10
10
  */
11
11
 
12
- import { GUARDRAIL_ENV_VARS, resolveGuardrail } from "../core/guardrails.js";
12
+ import { resolveGuardrail } from "../core/guardrails.js";
13
13
  import type { DispatchContract } from "../domains/dispatch/contract.js";
14
14
 
15
15
  export interface InternalDispatchDeadline {
@@ -25,10 +25,9 @@ export function armInternalDispatchDeadline(
25
25
  dispatch: DispatchContract,
26
26
  runId: string,
27
27
  label: string,
28
- env: NodeJS.ProcessEnv = process.env,
29
28
  maxTimeoutMs?: number,
30
29
  ): InternalDispatchDeadline {
31
- const configuredTimeoutMs = resolveGuardrail("internalDispatchTimeoutMs", env);
30
+ const configuredTimeoutMs = resolveGuardrail("internalDispatchTimeoutMs");
32
31
  const timeoutMs =
33
32
  maxTimeoutMs === undefined ? configuredTimeoutMs : Math.min(configuredTimeoutMs, Math.max(1, maxTimeoutMs));
34
33
  const productCapped = timeoutMs < configuredTimeoutMs;
@@ -50,6 +49,6 @@ export function armInternalDispatchDeadline(
50
49
  productCapped
51
50
  ? `${label} exceeded its ${Math.round(timeoutMs / 1000)}s latency ceiling and was aborted.`
52
51
  : `${label} timed out after ${Math.round(timeoutMs / 1000)}s and was aborted. ` +
53
- `Raise guardrails.internalDispatchTimeoutMs (env ${GUARDRAIL_ENV_VARS.internalDispatchTimeoutMs}) for slower targets.`,
52
+ "Raise fleet.limits.internalRunTimeoutMs for slower targets.",
54
53
  };
55
54
  }
package/src/cli/panes.ts CHANGED
@@ -1,16 +1,22 @@
1
+ import { renderHerdrThemeBlock } from "../domains/mux/yazi/theme.js";
1
2
  import { printError } from "./shared.js";
2
3
  import { runToolsCommand } from "./tools.js";
3
4
 
4
5
  const HELP = `clio-coder panes install [--force] [--json]
6
+ clio-coder panes theme
5
7
 
6
- Install the pane multiplexer Clio drives. This is an alias for
7
- \`clio-coder tools install herdr\`; the toolchain command is where every pinned
8
- external program is managed, and \`clio-coder tools status herdr\` explains
9
- which copy Clio would run.
8
+ install Install the pane multiplexer Clio drives. This is an alias for
9
+ \`clio-coder tools install herdr\`; the toolchain command is where every
10
+ pinned external program is managed, and \`clio-coder tools status herdr\`
11
+ explains which copy Clio would run.
12
+ theme Print Clio's theme tokens as a herdr [theme.custom] block. herdr styles
13
+ its own chrome from its config.toml and offers no per-pane styling, so
14
+ Clio prints the block for you to paste rather than editing another
15
+ program's configuration. The files pane itself is themed by Clio at open.
10
16
  `;
11
17
 
12
18
  /**
13
- * The user-facing verb for the pane layer's one setup step.
19
+ * The user-facing verbs for the pane layer's setup.
14
20
  *
15
21
  * Panes are the feature; herdr is the program behind it. Naming the program in
16
22
  * a command an operator types is a leak, so the alias exists and routes to the
@@ -26,6 +32,14 @@ export async function runPanesCommand(argv: ReadonlyArray<string> = []): Promise
26
32
  process.stdout.write(HELP);
27
33
  return 2;
28
34
  }
35
+ if (subcommand === "theme") {
36
+ if (rest.length > 0) {
37
+ printError(`panes theme takes no arguments, got: ${rest.join(" ")}`);
38
+ return 2;
39
+ }
40
+ process.stdout.write(renderHerdrThemeBlock());
41
+ return 0;
42
+ }
29
43
  if (subcommand !== "install") {
30
44
  printError(`unknown panes command: ${subcommand}`);
31
45
  process.stderr.write(HELP);
package/src/cli/run.ts CHANGED
@@ -261,7 +261,7 @@ export async function runClioRun(
261
261
  // A mistyped slash command is a usage error, not a task. Refusing it
262
262
  // here keeps it from booting a session and spending a model turn on a
263
263
  // command that was never run, which is what the TUI has always done
264
- // and what docs/extensions-and-sharing.md documents for both surfaces.
264
+ // and what docs/guide/extensions-and-sharing.md documents for both surfaces.
265
265
  const slashRefusal = await unknownSlashCommandRefusal(assembled.prompt);
266
266
  if (slashRefusal !== null) {
267
267
  process.stderr.write(`clio-coder run: ${slashRefusal}\n`);
@@ -372,7 +372,7 @@ async function runDispatch(
372
372
  ]);
373
373
  const config = loaded.getContract<ConfigContract>("config");
374
374
  const baseSettings = config?.get() ?? readSettings();
375
- // Install `panes.journal` the same way the interactive composition root
375
+ // Install `fleet.history.journal` the same way the interactive composition root
376
376
  // does. The journal never reads settings.yaml itself: it sits on the
377
377
  // dispatch event path, where a settings read would be both a cost and a
378
378
  // throw site.
package/src/cli/share.ts CHANGED
@@ -142,7 +142,11 @@ function printDiagnostics(diagnostics: ReadonlyArray<ShareDiagnostic>): void {
142
142
 
143
143
  function printRecovery(plan: ShareImportPlan): void {
144
144
  if (!plan.recovery) return;
145
- process.stderr.write("recovery: import stopped after a write failure\n");
145
+ process.stderr.write(
146
+ plan.recovery.failed
147
+ ? "recovery: import stopped after a write failure\n"
148
+ : "recovery: import completed with preserved backups\n",
149
+ );
146
150
  process.stderr.write("written files:\n");
147
151
  if (plan.recovery.written.length === 0) process.stderr.write(" none\n");
148
152
  else {
@@ -51,9 +51,9 @@ const DEFAULT_RUN_TIMEOUT_MS = 600_000;
51
51
  *
52
52
  * A headless `clio-coder run` has no operator to answer a permission ask, so below
53
53
  * full-auto every exec-class call in an arm dies with the harness's own denial
54
- * and the judge scores a skill that was never allowed to act. Operator decision
55
- * of 2026-08-13 (docs/findings/HARNESS-NOTES.md item 4): eval arms run
56
- * full-auto, because their workspaces are per-run copies created under a
54
+ * and the judge scores a skill that was never allowed to act. The 2026-08-13
55
+ * harness decision is that eval arms run full-auto because their workspaces
56
+ * are per-run copies created under a
57
57
  * private temp root and removed when the scenario ends. The judge arm is
58
58
  * excluded: it scores text and is instructed to call no tools, so granting it
59
59
  * unattended write and exec buys nothing.
@@ -51,10 +51,6 @@ Usage:
51
51
  clio-coder targets convert <id> --runtime <runtimeId>
52
52
  clio-coder targets remove <id>
53
53
  clio-coder targets rename <old> <new>
54
-
55
- Aliases:
56
- --worker-target and --worker-model are accepted for --fleet-target and
57
- --fleet-model, carried over from before the worker/fleet rename.
58
54
  `;
59
55
 
60
56
  const USE_USAGE =
@@ -249,11 +245,11 @@ function parseUseArgs(args: ReadonlyArray<string>): UseArgs | null {
249
245
  parsed.backgroundModel = need();
250
246
  continue;
251
247
  }
252
- if (arg === "--fleet-model" || arg === "--worker-model") {
248
+ if (arg === "--fleet-model") {
253
249
  parsed.workerModel = need();
254
250
  continue;
255
251
  }
256
- if (arg === "--fleet-target" || arg === "--worker-target") {
252
+ if (arg === "--fleet-target") {
257
253
  parsed.workerTarget = need();
258
254
  continue;
259
255
  }