@iowarp/clio-coder 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
package/src/cli/run.ts CHANGED
@@ -148,7 +148,7 @@ async function assemblePrompt(parsed: RunCliArgs): Promise<{
148
148
  * path, not a skill package, or validation failure such as a missing
149
149
  * description). Exported for contracts tests.
150
150
  */
151
- export function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): string[] {
151
+ function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): string[] {
152
152
  const errors: string[] = [];
153
153
  for (const skillPath of skillPaths) {
154
154
  const list = loadSkills({ disableDiscovery: true, explicitSkillPaths: [skillPath] });
@@ -187,7 +187,7 @@ export function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): stri
187
187
  * closure sits on. Boundaries rule6 in `tests/boundaries/check-boundaries.ts`
188
188
  * holds both halves of that.
189
189
  */
190
- export async function unknownSlashCommandRefusal(task: string): Promise<string | null> {
190
+ async function unknownSlashCommandRefusal(task: string): Promise<string | null> {
191
191
  if (!task.trim().startsWith("/")) return null;
192
192
  const { parseSlashCommand } = await import("../interactive/slash-commands.js");
193
193
  const command = parseSlashCommand(task);
@@ -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,13 +372,13 @@ 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.
379
- configureRunEventJournal(baseSettings.panes.journal);
380
- effectiveSettings =
381
- parsed.autonomy === undefined ? baseSettings : { ...structuredClone(baseSettings), autonomy: parsed.autonomy };
379
+ configureRunEventJournal(baseSettings.fleet.history.journal);
380
+ effectiveSettings = structuredClone(baseSettings);
381
+ if (parsed.autonomy !== undefined) effectiveSettings.safety.autonomy = parsed.autonomy;
382
382
  const dispatch = loaded.getContract<DispatchContract>("dispatch");
383
383
  if (!dispatch) {
384
384
  process.stderr.write("dispatch domain unavailable\n");
@@ -394,19 +394,15 @@ async function runDispatch(
394
394
  return 1;
395
395
  }
396
396
  const settings = effectiveSettings;
397
- const profileTargetId = parsed.agentProfile ? settings.workers?.profiles?.[parsed.agentProfile]?.target : undefined;
397
+ const profileTargetId = parsed.agentProfile ? settings.fleet?.profiles?.[parsed.agentProfile]?.target : undefined;
398
398
  const runtimeByTarget = new Map(settings.targets.map((target) => [target.id, target.runtime] as const));
399
399
  const runtimeTargetId = parsed.agentRuntime
400
- ? [settings.workers?.default, ...Object.values(settings.workers?.profiles ?? {})].find(
400
+ ? [settings.fleet?.default, ...Object.values(settings.fleet?.profiles ?? {})].find(
401
401
  (profile) => profile?.target && runtimeByTarget.get(profile.target) === parsed.agentRuntime,
402
402
  )?.target
403
403
  : undefined;
404
404
  const targetId =
405
- parsed.target ??
406
- profileTargetId ??
407
- runtimeTargetId ??
408
- settings.workers?.default?.target ??
409
- settings.orchestrator?.target;
405
+ parsed.target ?? profileTargetId ?? runtimeTargetId ?? settings.fleet?.default?.target ?? settings.chat?.target;
410
406
  const target = targetId ? providers.getTarget(targetId) : null;
411
407
  const runtime = target ? providers.getRuntime(target.runtime) : null;
412
408
  if (!target || !runtime) {
@@ -441,7 +437,7 @@ async function runDispatch(
441
437
  if (skillPaths.length > 0) dispatchReq.skillPaths = skillPaths;
442
438
  try {
443
439
  const settings = effectiveSettings;
444
- if (settings.skills?.trustProjectCompatRoots) {
440
+ if (settings.integrations.projectResources?.trustProjectImports) {
445
441
  dispatchReq.trustProjectCompatRoots = true;
446
442
  }
447
443
  } catch {
@@ -451,8 +447,8 @@ async function runDispatch(
451
447
  let memorySection = "";
452
448
  try {
453
449
  const records = loadMemoryRecordsSync(clioDataDir());
454
- const boundProfileName = parsed.agentProfile ?? effectiveSettings.workers.agentBindings[parsed.agentId];
455
- const boundProfile = boundProfileName ? effectiveSettings.workers.profiles[boundProfileName] : undefined;
450
+ const boundProfileName = parsed.agentProfile ?? effectiveSettings.fleet.agentProfiles[parsed.agentId];
451
+ const boundProfile = boundProfileName ? effectiveSettings.fleet.profiles[boundProfileName] : undefined;
456
452
  const configuredRuntime = (targetId: string | null | undefined): string | undefined =>
457
453
  effectiveSettings.targets.find((target) => target.id === targetId)?.runtime;
458
454
  const profileRuntimeId = configuredRuntime(boundProfile?.target);
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 {
@@ -233,7 +237,7 @@ export function runShareCommand(argv: ReadonlyArray<string>): number {
233
237
  const archive = plan.archive;
234
238
  if (archive) {
235
239
  process.stdout.write(
236
- `archive: ${archive.manifest.format} clio=${archive.manifest.clioVersion} files=${archive.files.length} created=${archive.manifest.createdAt}\n`,
240
+ `archive: ${archive.manifest.format} clio-coder=${archive.manifest.clioCoderVersion} files=${archive.files.length} created=${archive.manifest.createdAt}\n`,
237
241
  );
238
242
  }
239
243
  }
@@ -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.
@@ -311,7 +311,7 @@ type EvalArm = "baseline" | "treatment" | "judge";
311
311
  *
312
312
  * @internal Exported for contract tests.
313
313
  */
314
- export function armRunArgs(
314
+ function armRunArgs(
315
315
  arm: EvalArm,
316
316
  prompt: string,
317
317
  options: { target?: string | undefined; skillBaseDir?: string | undefined } = {},
@@ -335,7 +335,7 @@ export function armRunArgs(
335
335
  *
336
336
  * @internal Exported for contract tests.
337
337
  */
338
- export function permissionWallReason(arm: EvalArm, run: CapturedRun): string | null {
338
+ function permissionWallReason(arm: EvalArm, run: CapturedRun): string | null {
339
339
  const haystack = `${run.transcript}\n${run.finalText}`;
340
340
  let blocked = 0;
341
341
  let at = haystack.indexOf(HEADLESS_PERMISSION_DENIED_MARKER);
@@ -360,7 +360,7 @@ function unmeasuredBullets(scenario: SkillEvalScenario, reason: string): ScoredB
360
360
  *
361
361
  * @internal Exported for contract tests.
362
362
  */
363
- export function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = process.env): NodeJS.ProcessEnv {
363
+ function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = process.env): NodeJS.ProcessEnv {
364
364
  const childEnv: NodeJS.ProcessEnv = { ...env };
365
365
  if (allowNetwork) Reflect.deleteProperty(childEnv, NO_NETWORK_TOOLS_ENV);
366
366
  else childEnv[NO_NETWORK_TOOLS_ENV] = "1";
@@ -378,7 +378,7 @@ export function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = pro
378
378
  * the catalog answers only for a name no root installed, which is the skill
379
379
  * author's case in this repository.
380
380
  */
381
- export function resolveSkillBaseDir(
381
+ function resolveSkillBaseDir(
382
382
  nameOrPath: string,
383
383
  cwd: string,
384
384
  ): { baseDir: string | null; origin?: string; error?: string } {
@@ -442,7 +442,7 @@ async function runScenario(
442
442
  // Published per-scenario figure: monotonic so a clock correction during a
443
443
  // long sweep cannot land in one row's wall time.
444
444
  const scenarioStart = performance.now();
445
- const workspace = await mkdtemp(join(tmpdir(), "clio-skill-eval-seed-"));
445
+ const workspace = await mkdtemp(join(tmpdir(), "clio-coder-skill-eval-seed-"));
446
446
  let runWorkspaces: MaterializedSkillEvalWorkspaces | null = null;
447
447
  try {
448
448
  if (workspaceOverride !== null) await copyWorkspace(workspaceOverride, workspace);
@@ -570,7 +570,7 @@ export interface MaterializedSkillEvalWorkspaces {
570
570
  * cooperative model, not as an isolation guarantee.
571
571
  */
572
572
  async function armWorkspace(created: string[]): Promise<string> {
573
- const root = await mkdtemp(join(tmpdir(), "clio-skill-eval-"));
573
+ const root = await mkdtemp(join(tmpdir(), "clio-coder-skill-eval-"));
574
574
  created.push(root);
575
575
  const workspace = join(root, "workspace");
576
576
  await mkdir(workspace, { recursive: true });
@@ -578,7 +578,7 @@ async function armWorkspace(created: string[]): Promise<string> {
578
578
  }
579
579
 
580
580
  /** @internal Exported for contract tests. */
581
- export async function materializeSkillEvalWorkspaces(seedWorkspace: string): Promise<MaterializedSkillEvalWorkspaces> {
581
+ async function materializeSkillEvalWorkspaces(seedWorkspace: string): Promise<MaterializedSkillEvalWorkspaces> {
582
582
  const created: string[] = [];
583
583
  try {
584
584
  const baseline = await armWorkspace(created);
@@ -814,7 +814,7 @@ function loadsSkillBody(tool: string, args: unknown): boolean {
814
814
  }
815
815
 
816
816
  /** @internal Exported for contract tests. */
817
- export function parseRunStdout(stdout: string): { sessionId: string | null; transcript: string; finalText: string } {
817
+ function parseRunStdout(stdout: string): { sessionId: string | null; transcript: string; finalText: string } {
818
818
  let sessionId: string | null = null;
819
819
  const lines: string[] = [];
820
820
  let finalText = "";
@@ -938,7 +938,7 @@ function judgeVerdictAbsenceReason(judge: CapturedRun): string {
938
938
  }
939
939
 
940
940
  /** Exported for contracts tests. */
941
- export function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedRun): ScoredBullet[] {
941
+ function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedRun): ScoredBullet[] {
942
942
  const parsed = extractBulletsObject(judge.finalText) ?? extractBulletsObject(judge.transcript);
943
943
  // No verdict object anywhere in the judge run. The scenario was not scored,
944
944
  // which is a fact about the judge, so every bullet stays unmeasured rather
@@ -982,7 +982,7 @@ export function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedR
982
982
  * content, so this walks candidate `{` openers around the first "bullets" key
983
983
  * and balance-scans to the matching close brace.
984
984
  */
985
- export function extractBulletsObject(text: string): Record<string, unknown> | null {
985
+ function extractBulletsObject(text: string): Record<string, unknown> | null {
986
986
  const stripped = text.replace(/```(?:json)?/g, "");
987
987
  const bulletsAt = stripped.indexOf('"bullets"');
988
988
  if (bulletsAt < 0) return null;
@@ -1085,7 +1085,7 @@ function synthesizeArtifact(
1085
1085
  evalId,
1086
1086
  taskFile: evalsPath,
1087
1087
  taskFileHash: contentHash,
1088
- clio: evalClioProvenance(),
1088
+ clioCoder: evalClioProvenance(),
1089
1089
  environment: evalEnvironmentProvenance(),
1090
1090
  target: target ?? null,
1091
1091
  model: null,
@@ -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 =
@@ -205,8 +201,7 @@ export async function runTargetsCommand(args: ReadonlyArray<string>): Promise<nu
205
201
  if (parsed.json) {
206
202
  const settings = readSettings();
207
203
  const candidateFor = (status: TargetStatus): string | null => {
208
- const orchestratorModel =
209
- settings.orchestrator?.target === status.target.id ? (settings.orchestrator?.model ?? null) : null;
204
+ const orchestratorModel = settings.chat?.target === status.target.id ? (settings.chat?.model ?? null) : null;
210
205
  return orchestratorModel ?? status.target.defaultModel ?? null;
211
206
  };
212
207
  const rows = filtered.map((status) => {
@@ -250,11 +245,11 @@ function parseUseArgs(args: ReadonlyArray<string>): UseArgs | null {
250
245
  parsed.backgroundModel = need();
251
246
  continue;
252
247
  }
253
- if (arg === "--fleet-model" || arg === "--worker-model") {
248
+ if (arg === "--fleet-model") {
254
249
  parsed.workerModel = need();
255
250
  continue;
256
251
  }
257
- if (arg === "--fleet-target" || arg === "--worker-target") {
252
+ if (arg === "--fleet-target") {
258
253
  parsed.workerTarget = need();
259
254
  continue;
260
255
  }
@@ -467,11 +462,11 @@ function runProfileRemove(args: ReadonlyArray<string>): number {
467
462
  }
468
463
  ensureClioState();
469
464
  const settings = readSettings();
470
- if (!settings.workers.profiles[parsed.name]) {
465
+ if (!settings.fleet.profiles[parsed.name]) {
471
466
  printError(`no fleet profile named ${parsed.name}`);
472
467
  return 1;
473
468
  }
474
- const boundAgents = Object.entries(settings.workers.agentBindings)
469
+ const boundAgents = Object.entries(settings.fleet.agentProfiles)
475
470
  .filter(([, profileName]) => profileName === parsed.name)
476
471
  .map(([agentId]) => agentId);
477
472
  if (boundAgents.length > 0 && !parsed.force) {
@@ -510,23 +505,23 @@ function runProfileRename(args: ReadonlyArray<string>): number {
510
505
  }
511
506
  ensureClioState();
512
507
  const settings = readSettings();
513
- if (!settings.workers.profiles[parsed.oldName]) {
508
+ if (!settings.fleet.profiles[parsed.oldName]) {
514
509
  printError(`no fleet profile named ${parsed.oldName}`);
515
510
  return 1;
516
511
  }
517
- if (settings.workers.profiles[parsed.newName]) {
512
+ if (settings.fleet.profiles[parsed.newName]) {
518
513
  printError(`fleet profile already exists: ${parsed.newName}`);
519
514
  return 2;
520
515
  }
521
516
  let updatedBindings = 0;
522
517
  updateSettings((fresh) => {
523
- const profile = fresh.workers.profiles[parsed.oldName];
518
+ const profile = fresh.fleet.profiles[parsed.oldName];
524
519
  if (!profile) return;
525
- fresh.workers.profiles[parsed.newName] = profile;
526
- delete fresh.workers.profiles[parsed.oldName];
527
- for (const [agentId, profileName] of Object.entries(fresh.workers.agentBindings)) {
520
+ fresh.fleet.profiles[parsed.newName] = profile;
521
+ delete fresh.fleet.profiles[parsed.oldName];
522
+ for (const [agentId, profileName] of Object.entries(fresh.fleet.agentProfiles)) {
528
523
  if (profileName !== parsed.oldName) continue;
529
- fresh.workers.agentBindings[agentId] = parsed.newName;
524
+ fresh.fleet.agentProfiles[agentId] = parsed.newName;
530
525
  updatedBindings += 1;
531
526
  }
532
527
  });
@@ -551,13 +546,13 @@ function runProfileBind(args: ReadonlyArray<string>): number {
551
546
  }
552
547
  ensureClioState();
553
548
  const settings = readSettings();
554
- if (settings.delegation.agents.some((agent) => agent.id === parsed.agentId)) {
549
+ if (settings.integrations.externalAgents.entries.some((agent) => agent.id === parsed.agentId)) {
555
550
  printError(
556
551
  `cannot bind ACP delegation agent '${parsed.agentId}' to a fleet profile; ACP agents use their own runner and ignore native target routing`,
557
552
  );
558
553
  return 1;
559
554
  }
560
- if (!settings.workers.profiles[parsed.profileName]) {
555
+ if (!settings.fleet.profiles[parsed.profileName]) {
561
556
  process.stderr.write(
562
557
  `${chalk.yellow("warning:")} fleet profile '${parsed.profileName}' is not configured; binding will resolve after the profile exists\n`,
563
558
  );
@@ -581,12 +576,12 @@ function runProfileUnbind(args: ReadonlyArray<string>): number {
581
576
  }
582
577
  ensureClioState();
583
578
  const settings = readSettings();
584
- if (!settings.workers.agentBindings[parsed]) {
579
+ if (!settings.fleet.agentProfiles[parsed]) {
585
580
  printError(`agent ${parsed} is not bound to a fleet profile`);
586
581
  return 1;
587
582
  }
588
583
  updateSettings((fresh) => {
589
- delete fresh.workers.agentBindings[parsed];
584
+ delete fresh.fleet.agentProfiles[parsed];
590
585
  });
591
586
  printOk(`unbound agent ${parsed}`);
592
587
  return 0;
@@ -608,10 +603,10 @@ function runProfileBindings(args: ReadonlyArray<string>): number {
608
603
  }
609
604
  ensureClioState();
610
605
  const settings = readSettings();
611
- const rows = Object.entries(settings.workers.agentBindings)
606
+ const rows = Object.entries(settings.fleet.agentProfiles)
612
607
  .sort(([a], [b]) => a.localeCompare(b))
613
608
  .map(([agentId, profileName]) => {
614
- const profile = settings.workers.profiles[profileName];
609
+ const profile = settings.fleet.profiles[profileName];
615
610
  return {
616
611
  agentId,
617
612
  profile: profileName,
@@ -686,7 +681,7 @@ function runFleet(args: ReadonlyArray<string>, usage = "clio-coder targets fleet
686
681
  ensureClioState();
687
682
  const settings = readSettings();
688
683
  const byId = new Map(settings.targets.map((target) => [target.id, target] as const));
689
- const rows = Object.entries(settings.workers.profiles).map(([name, profile]) => {
684
+ const rows = Object.entries(settings.fleet.profiles).map(([name, profile]) => {
690
685
  const target = profile.target ? byId.get(profile.target) : undefined;
691
686
  return {
692
687
  name,
@@ -782,7 +777,7 @@ function runConvert(args: ReadonlyArray<string>): number {
782
777
  printOk(`target ${id} already uses runtime ${runtimeId}`);
783
778
  return 0;
784
779
  }
785
- if (settings.orchestrator.target === id && !isOrchestratorEligibleRuntime(runtime)) {
780
+ if (settings.chat.target === id && !isOrchestratorEligibleRuntime(runtime)) {
786
781
  printError(`cannot convert orchestrator target '${id}' to non-HTTP/native runtime '${runtime.id}'`);
787
782
  return 1;
788
783
  }
@@ -917,7 +912,7 @@ function tableWidths(rows: ReadonlyArray<TargetTableRow>, width: number): Target
917
912
  * cut to its width, marked the same way. Colour is dropped on those rows because
918
913
  * the ansi bytes would sit inside the cut; a wrapped row costs more than colour.
919
914
  */
920
- export function formatTargetTable(
915
+ function formatTargetTable(
921
916
  rows: ReadonlyArray<TargetTableRow>,
922
917
  width: number,
923
918
  paintHealth: (cell: string, row: TargetTableRow) => string = (cell) => cell,
@@ -972,7 +967,7 @@ function renderTable(providers: ProvidersContract, entries: ReadonlyArray<Target
972
967
  }
973
968
  }
974
969
 
975
- export function targetTableRow(providers: ProvidersContract, status: TargetStatus): TargetTableRow {
970
+ function targetTableRow(providers: ProvidersContract, status: TargetStatus): TargetTableRow {
976
971
  const diagnostic = degradedHealthDiagnostic(status);
977
972
  return {
978
973
  id: status.target.id,
@@ -1034,7 +1029,7 @@ function capabilityBadges(caps: CapabilityFlags): string {
1034
1029
  * no states (cloud targets); "resident: none" when states are known and
1035
1030
  * nothing is loaded, so a cold box is distinguishable from an unknown one.
1036
1031
  */
1037
- export function residentModelsSummary(states: TargetStatus["discoveredModelStates"]): string | null {
1032
+ function residentModelsSummary(states: TargetStatus["discoveredModelStates"]): string | null {
1038
1033
  if (!states) return null;
1039
1034
  const entries = Object.entries(states);
1040
1035
  if (entries.length === 0) return null;
@@ -1049,7 +1044,7 @@ export function residentModelsSummary(states: TargetStatus["discoveredModelState
1049
1044
  * capability the target reported. Saying so is the difference between a number
1050
1045
  * a user can plan against and one they cannot.
1051
1046
  */
1052
- export function formatContextWindow(
1047
+ function formatContextWindow(
1053
1048
  status: Pick<TargetStatus, "capabilities" | "contextWindowProvenance"> &
1054
1049
  Partial<Pick<TargetStatus, "target" | "discoveredModelStates">>,
1055
1050
  ): string {
@@ -1065,7 +1060,7 @@ export function formatContextWindow(
1065
1060
  : `ctx ${window}`;
1066
1061
  }
1067
1062
 
1068
- export function formatNotes(status: TargetStatus): string {
1063
+ function formatNotes(status: TargetStatus): string {
1069
1064
  const parts: string[] = [];
1070
1065
  const diagnostic = degradedHealthDiagnostic(status);
1071
1066
  // The health diagnosis leads because gateway, context, and residency facts
@@ -166,7 +166,7 @@ function processSummary(reader: TraceReader, runId: string): TraceInspectProcess
166
166
  }
167
167
 
168
168
  /** Pure payload builder, exported so the fixed contract is testable without subprocess capture. */
169
- export function traceInspectSnapshot(
169
+ function traceInspectSnapshot(
170
170
  now: () => number = Date.now,
171
171
  databasePath: string = traceDatabasePath(clioStatePath()),
172
172
  ): TraceInspectSnapshot {
package/src/cli/trace.ts CHANGED
@@ -3,7 +3,10 @@ import { access } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
  import { fileURLToPath, pathToFileURL } from "node:url";
5
5
  import { clioStatePath } from "../core/xdg.js";
6
+ import type { CodeStepRecord } from "../domains/dispatch/code-step.js";
7
+ import { codeStepDir, readCodeStepRecords } from "../domains/dispatch/code-step-store.js";
6
8
  import {
9
+ assertTraceSelectOnly,
7
10
  DEFAULT_TRACE_RETENTION_POLICY,
8
11
  resolveTraceRetentionPolicy,
9
12
  TRACE_EVENT_POLL_LIMIT,
@@ -23,12 +26,16 @@ const HELP = `Usage:
23
26
  clio-coder trace phases <runId> [--db PATH]
24
27
  clio-coder trace tail <runId> [--follow] [--db PATH]
25
28
  clio-coder trace procs <runId> [--db PATH]
29
+ clio-coder trace code-steps <rootId> [--json] deterministic code steps of one fleet root
26
30
  clio-coder trace prune [--max-age-days N] [--max-bytes N] [--db PATH] [--json]
27
31
  clio-coder trace sql <SELECT query> [--db PATH]
28
32
  clio-coder trace ui [--db PATH] [--port N] source checkout only
29
33
 
30
34
  The viewer ships with the repository, not the npm package, so from an installed
31
- Clio the subcommands above are the way in. They read the same database.
35
+ Clio the subcommands above are the way in. They read the same database, except
36
+ code-steps, which reads the per-root record files under the state directory's
37
+ code-steps/ tree (a code step is a subprocess, not a model run, so it never
38
+ enters the SQLite mirror).
32
39
  Pruning keeps ${DEFAULT_TRACE_RETENTION_POLICY.maxAgeDays} days and at most ${DEFAULT_TRACE_RETENTION_POLICY.maxBytes} bytes by default. Set
33
40
  CLIO_CODER_TRACE_RETENTION_DAYS or CLIO_CODER_TRACE_MAX_BYTES to change the automatic
34
41
  policy; prune flags override those values for one command.
@@ -96,7 +103,7 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
96
103
  }
97
104
 
98
105
  /** Every subcommand `trace` answers to. Anything else is a usage error. */
99
- const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "prune", "sql", "ui"]);
106
+ const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "code-steps", "prune", "sql", "ui"]);
100
107
 
101
108
  /** The subcommands whose first positional is a run id. */
102
109
  const TRACE_COMMANDS_NEEDING_RUN_ID = new Set(["phases", "tail", "procs"]);
@@ -118,6 +125,10 @@ function invocationError(command: string, runId: string | undefined): number | n
118
125
  return 2;
119
126
  }
120
127
  if (TRACE_COMMANDS_NEEDING_RUN_ID.has(command) && !runId) return missingRunId(command);
128
+ if (command === "code-steps" && !runId) {
129
+ process.stderr.write("trace code-steps requires a fleet root id\n");
130
+ return 2;
131
+ }
121
132
  return null;
122
133
  }
123
134
 
@@ -149,9 +160,23 @@ export async function runTraceCommand(args: string[]): Promise<number> {
149
160
  process.stderr.write("trace sql requires a SELECT query\n");
150
161
  return 2;
151
162
  }
163
+ if (command === "sql") {
164
+ try {
165
+ assertTraceSelectOnly(sqlQuery);
166
+ } catch (error) {
167
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
168
+ return 2;
169
+ }
170
+ }
152
171
 
153
172
  if (command === "ui") return runTraceUi(parsed.db, parsed.port);
154
173
 
174
+ // Code-step records live in flat per-root JSON files beside the ledger, not
175
+ // in the SQLite mirror, so this answers before the database is consulted and
176
+ // ignores --db. An absent root directory is the empty state: the root either
177
+ // never ran a code step or its records were pruned with the state tree.
178
+ if (command === "code-steps") return runTraceCodeSteps(runId ?? "", parsed.json);
179
+
155
180
  // `inspect` answers ahead of the no-database courtesy below, because its
156
181
  // answer to a state tree nothing has written to is a JSON snapshot saying
157
182
  // the trace database is unavailable, not a sentence on stdout.
@@ -233,6 +258,41 @@ export async function runTraceCommand(args: string[]): Promise<number> {
233
258
  }
234
259
  }
235
260
 
261
+ /**
262
+ * Print every `CodeStepRecord` one fleet root wrote, oldest first. The record
263
+ * is the code step's stand-in for a receipt (argv, cwd, env names, exit code,
264
+ * duration, output digest, artifact paths), and until this command nothing
265
+ * read it back. JSON is the record verbatim; the table keeps the fields an
266
+ * operator scans for and leaves argv last because it is the widest.
267
+ */
268
+ function runTraceCodeSteps(rootId: string, json: boolean): number {
269
+ let records: CodeStepRecord[];
270
+ try {
271
+ records = readCodeStepRecords(rootId);
272
+ } catch (error) {
273
+ process.stderr.write(`code-step records: ${error instanceof Error ? error.message : String(error)}\n`);
274
+ return 1;
275
+ }
276
+ if (json) {
277
+ process.stdout.write(`${JSON.stringify(records, null, 2)}\n`);
278
+ return 0;
279
+ }
280
+ if (records.length === 0) {
281
+ process.stdout.write(
282
+ `no code-step records for fleet root ${rootId} under ${codeStepDir(rootId)}. a record is written when a fleet plan runs a deterministic code step.\n`,
283
+ );
284
+ return 0;
285
+ }
286
+ process.stdout.write("EXIT DURATION STARTED STEP COMMAND ARGV\n");
287
+ for (const record of records) {
288
+ const exit = record.timedOut ? "timeout" : record.signal !== null ? `sig:${record.signal}` : String(record.exitCode);
289
+ process.stdout.write(
290
+ `${exit.padEnd(5)} ${`${record.durationMs}ms`.padStart(8)} ${record.startedAt.padEnd(24)} ${record.stepId.slice(0, 20).padEnd(20)} ${record.commandId.slice(0, 20).padEnd(20)} ${record.argv.join(" ")}\n`,
291
+ );
292
+ }
293
+ return 0;
294
+ }
295
+
236
296
  function runTracePrune(parsed: ParsedTraceArgs): number {
237
297
  let policy: ReturnType<typeof resolveTraceRetentionPolicy>;
238
298
  try {
@@ -293,10 +353,10 @@ function formatEvent(row: TraceEventRow): string {
293
353
  }
294
354
 
295
355
  function printRuns(rows: TraceRunRow[]): void {
296
- process.stdout.write("STATUS STARTED TOKENS COST RUN\n");
356
+ process.stdout.write("STATUS SOURCE STARTED TOKENS COST RUN\n");
297
357
  for (const row of rows) {
298
358
  process.stdout.write(
299
- `${row.status.padEnd(8)} ${row.started_at.padEnd(28)} ${formatNumber(row.total_tokens).padStart(8)} ${formatCost(row.total_cost_usd).padStart(10)} ${row.run_id}\n`,
359
+ `${row.status.padEnd(8)} ${row.source.padEnd(8)} ${row.started_at.padEnd(28)} ${formatNumber(row.total_tokens).padStart(8)} ${formatCost(row.total_cost_usd).padStart(10)} ${row.run_id}\n`,
300
360
  );
301
361
  }
302
362
  }
@@ -378,6 +438,38 @@ function missingDatabase(parsed: ParsedTraceArgs): number {
378
438
  );
379
439
  return 1;
380
440
  }
441
+ if (parsed.json && parsed.positional[0] === "runs") {
442
+ process.stdout.write("[]\n");
443
+ return 0;
444
+ }
445
+ if (parsed.json && parsed.positional[0] === "prune") {
446
+ let policy: ReturnType<typeof resolveTraceRetentionPolicy>;
447
+ try {
448
+ policy = resolveTraceRetentionPolicy({
449
+ ...(parsed.maxAgeDays === undefined ? {} : { maxAgeDays: parsed.maxAgeDays }),
450
+ ...(parsed.maxBytes === undefined ? {} : { maxBytes: parsed.maxBytes }),
451
+ });
452
+ } catch (error) {
453
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
454
+ return 1;
455
+ }
456
+ process.stdout.write(
457
+ `${JSON.stringify(
458
+ {
459
+ available: false,
460
+ policy,
461
+ runsRemoved: 0,
462
+ rowsRemoved: 0,
463
+ bytesRemoved: 0,
464
+ vacuumed: false,
465
+ protectedRuns: 0,
466
+ },
467
+ null,
468
+ 2,
469
+ )}\n`,
470
+ );
471
+ return 0;
472
+ }
381
473
  process.stdout.write(
382
474
  `no trace database yet at ${parsed.db}. rows are recorded when a dispatch executes or an interactive turn runs; run \`clio-coder run "<task>"\` or start a session to create one.\n`,
383
475
  );
@@ -90,7 +90,7 @@ export interface ProjectContextInventory {
90
90
  * rather than one per session. Directories whose `.clio-coder/` is already gone are
91
91
  * dropped, because an inventory of nothing to do is noise.
92
92
  */
93
- export function projectContextInventory(stateDir: string): ProjectContextInventory {
93
+ function projectContextInventory(stateDir: string): ProjectContextInventory {
94
94
  const root = join(stateDir, "sessions");
95
95
  let hashes: string[];
96
96
  try {
@@ -298,7 +298,7 @@ function readNpmPrefix(): string | null {
298
298
  * that cannot be resolved is dangling, which is still something the operator
299
299
  * will hit and still not this installation.
300
300
  */
301
- export function otherClioOnPath(pathClio: string | null, localLink: string): string | null {
301
+ function otherClioOnPath(pathClio: string | null, localLink: string): string | null {
302
302
  if (pathClio === null) return null;
303
303
  if (pathClio === localLink) return null;
304
304
  const resolve = (path: string): string | null => {