@iowarp/clio-coder 0.3.9 → 0.4.1

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 (733) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/NOTICE +33 -0
  3. package/README.md +121 -16
  4. package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
  5. package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
  8. package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
  9. package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
  10. package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
  11. package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
  12. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  13. package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
  14. package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
  15. package/dist/chunk-42FMPA75.js +101 -0
  16. package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
  17. package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
  18. package/dist/chunk-5YHDIDBP.js +97 -0
  19. package/dist/chunk-6CCS4G3W.js +1529 -0
  20. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  21. package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
  22. package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
  23. package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
  24. package/dist/chunk-6NJQITNH.js +1412 -0
  25. package/dist/chunk-6VC4OV3Z.js +365 -0
  26. package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
  27. package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
  28. package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
  29. package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
  30. package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
  31. package/dist/chunk-7RY5VZPH.js +573 -0
  32. package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
  33. package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
  34. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  35. package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
  36. package/dist/chunk-AP73CFDC.js +308 -0
  37. package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
  38. package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
  39. package/dist/chunk-BJGUKIG4.js +302 -0
  40. package/dist/chunk-BMS5RKQY.js +27 -0
  41. package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
  42. package/dist/chunk-BTK3SSSK.js +67 -0
  43. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  44. package/dist/chunk-BWW4HLO4.js +301 -0
  45. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  46. package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
  47. package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
  48. package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
  49. package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
  50. package/dist/chunk-D4CJV46V.js +462 -0
  51. package/dist/chunk-D7E7WCDF.js +27 -0
  52. package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
  53. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  54. package/dist/chunk-EIMVLWB3.js +1842 -0
  55. package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
  56. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  57. package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
  58. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  59. package/dist/chunk-GIZNH63R.js +40 -0
  60. package/dist/chunk-GPPB3JBE.js +688 -0
  61. package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
  62. package/dist/chunk-HHV2GANA.js +88 -0
  63. package/dist/chunk-HJWWJ6IL.js +184 -0
  64. package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
  65. package/dist/chunk-HRQMFLJP.js +75 -0
  66. package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
  67. package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
  68. package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
  69. package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
  70. package/dist/chunk-J4HBWF6Y.js +2635 -0
  71. package/dist/chunk-J5LZHVIT.js +284 -0
  72. package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
  73. package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
  74. package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
  75. package/dist/chunk-K6BF4U2H.js +1785 -0
  76. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  77. package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
  78. package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
  79. package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
  80. package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
  81. package/dist/chunk-NDDGJUXD.js +81 -0
  82. package/dist/chunk-NEKRRTYW.js +56 -0
  83. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
  86. package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
  87. package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
  88. package/dist/chunk-PMZCIOCJ.js +25 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
  91. package/dist/chunk-QDC3K2U3.js +262 -0
  92. package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
  93. package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
  94. package/dist/chunk-QSNYB6ZV.js +195 -0
  95. package/dist/chunk-QTFGO774.js +644 -0
  96. package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
  97. package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
  98. package/dist/chunk-R346GLFC.js +31 -0
  99. package/dist/chunk-RKSR6VSF.js +132 -0
  100. package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
  101. package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
  102. package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
  103. package/dist/chunk-T56WDKA5.js +183 -0
  104. package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
  105. package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
  106. package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
  107. package/dist/chunk-TVHHYFHE.js +255 -0
  108. package/dist/chunk-U2WB7TZS.js +271 -0
  109. package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
  110. package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
  111. package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
  112. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  113. package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
  114. package/dist/chunk-VKFQTNDV.js +66 -0
  115. package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
  116. package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
  117. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  118. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  119. package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
  120. package/dist/chunk-WR6U3OVP.js +45 -0
  121. package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
  122. package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
  123. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  124. package/dist/chunk-YAKGTXEV.js +17 -0
  125. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  126. package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
  127. package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
  128. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  129. package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
  130. package/dist/cli/index.js +48 -37
  131. package/dist/clio-IT3G3VQH.js +25 -0
  132. package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
  133. package/dist/codewiki/build-worker.js +1 -1
  134. package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
  135. package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
  136. package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
  137. package/dist/configure-FL7Y3KJF.js +54 -0
  138. package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
  139. package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
  140. package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
  141. package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
  142. package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
  143. package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
  144. package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
  145. package/dist/doctor-ZGPEGHIP.js +772 -0
  146. package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
  147. package/dist/eval-inventory-HBWSWQOK.js +315 -0
  148. package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
  149. package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
  150. package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
  151. package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
  152. package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
  153. package/dist/fleet-decisions-OTHB6KRL.js +157 -0
  154. package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
  155. package/dist/fleet-inspect-SS6YMDCK.js +445 -0
  156. package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
  157. package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
  158. package/dist/fleet-verify-QD5M7E7Q.js +178 -0
  159. package/dist/fleet-view-WAMJYNDT.js +94 -0
  160. package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
  161. package/dist/install-NKNG7KD4.js +13 -0
  162. package/dist/interop-34TVO25M.js +116 -0
  163. package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
  164. package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
  165. package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
  166. package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
  167. package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
  168. package/dist/panes-7STHOAUJ.js +103 -0
  169. package/dist/panes-SHAUIRXY.js +60 -0
  170. package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
  171. package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
  172. package/dist/resources-74GKTLSF.js +115 -0
  173. package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
  174. package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
  175. package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
  176. package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
  177. package/dist/skills-inventory-J357J34F.js +129 -0
  178. package/dist/slash-commands-JZZCQA32.js +79 -0
  179. package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
  180. package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
  181. package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
  182. package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
  183. package/dist/tools-MKNWVPBH.js +29 -0
  184. package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
  185. package/dist/tui-primitives-K5PASC3O.js +17 -0
  186. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
  187. package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
  188. package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
  189. package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
  190. package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
  191. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
  192. package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
  193. package/dist/with-panes-OBOBFIIR.js +818 -0
  194. package/dist/worker/entry.js +131 -91
  195. package/docs/README.md +3 -2
  196. package/docs/acp.md +25 -4
  197. package/docs/alcf-provider.md +1 -1
  198. package/docs/architecture.md +2 -2
  199. package/docs/artifact-versions.md +4 -1
  200. package/docs/built-in-agents.md +40 -32
  201. package/docs/capacity-and-scheduling.md +43 -5
  202. package/docs/commands-and-modes.md +39 -4
  203. package/docs/config-knobs-audit.md +3 -0
  204. package/docs/configuration-and-targets.md +138 -167
  205. package/docs/context-engine.md +1 -1
  206. package/docs/development-pipeline.md +19 -0
  207. package/docs/dispatch-typed-intent.md +385 -0
  208. package/docs/documentation-coverage.md +2 -2
  209. package/docs/documentation-guide.md +1 -1
  210. package/docs/environment-variables.md +3 -1
  211. package/docs/eval-runner.md +1 -1
  212. package/docs/evals-internal.md +1 -1
  213. package/docs/evidence-and-memory.md +2 -2
  214. package/docs/evolution.md +1 -1
  215. package/docs/exit-codes-and-output.md +3 -1
  216. package/docs/extensions-and-sharing.md +25 -1
  217. package/docs/fleet-demo-runbook.md +6 -3
  218. package/docs/fleet-dispatch.md +30 -7
  219. package/docs/installation-and-lifecycle.md +16 -3
  220. package/docs/middleware-and-components.md +1 -1
  221. package/docs/model-catalog.md +10 -1
  222. package/docs/observability.md +3 -3
  223. package/docs/proactive-memory.md +1 -1
  224. package/docs/prompt-envelope-and-tools.md +1 -1
  225. package/docs/provider-adapter-cookbook.md +1 -1
  226. package/docs/release-cut-checklist.md +164 -177
  227. package/docs/safety-model.md +2 -2
  228. package/docs/scientific-validation.md +3 -3
  229. package/docs/session-lifecycle.md +1 -1
  230. package/docs/skills-marketplace.md +1 -1
  231. package/docs/tool-usage.md +18 -8
  232. package/docs/trace-store.md +16 -11
  233. package/docs/troubleshooting.md +2 -2
  234. package/docs/tui-design.md +1 -1
  235. package/docs/worker-dispatch-mechanics.md +1 -1
  236. package/evals/README.md +5 -0
  237. package/evals/behavioral-corpus-grader.mjs +103 -0
  238. package/evals/behavioral-machinery-baseline.json +2276 -0
  239. package/evals/behavioral-machinery-driver.ts +250 -0
  240. package/evals/behavioral-machinery-support.ts +253 -0
  241. package/evals/behavioral-machinery.yaml +614 -0
  242. package/evals/behavioral-model-negative-control.yaml +68 -0
  243. package/evals/behavioral-model.yaml +216 -0
  244. package/evals/fixtures/behavioral-facts.txt +3 -0
  245. package/evals/fixtures/behavioral-main.ts +7 -0
  246. package/evals/fixtures/decoy/note.txt +2 -0
  247. package/evals/fixtures/private/credentials.txt +1 -0
  248. package/evals/tracked-metrics-baseline.yaml +229 -0
  249. package/evals/tracked-metrics-grader.mjs +129 -0
  250. package/package.json +8 -16
  251. package/skills/README.md +6 -6
  252. package/skills/coding/ast-grep/SKILL.md +8 -2
  253. package/skills/coding/coding-standards/SKILL.md +8 -2
  254. package/skills/coding/prototype/SKILL.md +8 -2
  255. package/skills/coding/tdd/SKILL.md +8 -2
  256. package/skills/context/context-handoff/SKILL.md +12 -3
  257. package/skills/context/context-handoff/evals.md +3 -3
  258. package/skills/context/context-prime/SKILL.md +8 -2
  259. package/skills/context/context-prime/evals.md +2 -2
  260. package/skills/git/file-ticket/SKILL.md +9 -4
  261. package/skills/git/file-ticket/evals.md +2 -2
  262. package/skills/git/fix-issue/SKILL.md +12 -5
  263. package/skills/git/fix-issue/evals.md +4 -4
  264. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  265. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  266. package/skills/git/ship/SKILL.md +9 -3
  267. package/skills/git/ship/evals.md +4 -4
  268. package/skills/git/worktree-create/SKILL.md +7 -2
  269. package/skills/git/worktree-create/evals.md +6 -6
  270. package/skills/git/worktree-merge/SKILL.md +7 -2
  271. package/skills/git/worktree-merge/evals.md +6 -6
  272. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  273. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  274. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  275. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  276. package/skills/meta/credentials/SKILL.md +9 -2
  277. package/skills/meta/find-skills/SKILL.md +8 -2
  278. package/skills/meta/herdr/SKILL.md +8 -2
  279. package/skills/meta/skill-craft/SKILL.md +21 -4
  280. package/skills/planning/architecture/SKILL.md +9 -3
  281. package/skills/planning/backlog/SKILL.md +8 -2
  282. package/skills/planning/prd/SKILL.md +8 -2
  283. package/skills/planning/product-intent/SKILL.md +8 -2
  284. package/skills/planning/tech-spec/SKILL.md +9 -3
  285. package/skills/registry.yaml +66 -66
  286. package/skills/research/arxiv-literature/SKILL.md +8 -2
  287. package/skills/research/experiment-protocol/SKILL.md +9 -2
  288. package/skills/research/scientific-debugging/SKILL.md +9 -2
  289. package/skills/research/scientific-debugging/evals.md +2 -2
  290. package/skills/research/scientific-modernization/SKILL.md +9 -2
  291. package/skills/skill-marketplace.json +257 -38
  292. package/skills/workflow/cut-it/SKILL.md +10 -2
  293. package/skills/workflow/design-council/SKILL.md +11 -2
  294. package/skills/workflow/grill-me/SKILL.md +8 -2
  295. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  296. package/src/cli/acp.ts +8 -4
  297. package/src/cli/argv.ts +25 -0
  298. package/src/cli/auth.ts +2 -2
  299. package/src/cli/bootstrap-generate.ts +5 -5
  300. package/src/cli/clio.ts +6 -1
  301. package/src/cli/config-inspect.ts +3 -3
  302. package/src/cli/configure-interop.ts +1 -1
  303. package/src/cli/configure.ts +50 -48
  304. package/src/cli/default-target.ts +1 -1
  305. package/src/cli/docs.ts +6 -6
  306. package/src/cli/doctor-naming.ts +323 -0
  307. package/src/cli/doctor-panes.ts +156 -0
  308. package/src/cli/doctor-toolchain.ts +78 -0
  309. package/src/cli/doctor.ts +34 -1
  310. package/src/cli/eval-inventory.ts +436 -0
  311. package/src/cli/eval.ts +13 -0
  312. package/src/cli/evidence-detail.ts +88 -0
  313. package/src/cli/evidence-inventory.ts +183 -0
  314. package/src/cli/evidence.ts +30 -5
  315. package/src/cli/fleet-decisions.ts +69 -0
  316. package/src/cli/fleet-inspect.ts +334 -0
  317. package/src/cli/fleet-preflight.ts +1 -1
  318. package/src/cli/fleet-verify.ts +133 -0
  319. package/src/cli/fleet-view.ts +827 -0
  320. package/src/cli/fleet.ts +154 -40
  321. package/src/cli/index.ts +14 -2
  322. package/src/cli/interop-inspect.ts +128 -0
  323. package/src/cli/interop.ts +34 -0
  324. package/src/cli/models.ts +3 -3
  325. package/src/cli/modes/print.ts +1 -1
  326. package/src/cli/panes.ts +35 -0
  327. package/src/cli/reset.ts +6 -3
  328. package/src/cli/run.ts +67 -13
  329. package/src/cli/share.ts +1 -1
  330. package/src/cli/skills-eval.ts +11 -11
  331. package/src/cli/skills-inventory.ts +185 -0
  332. package/src/cli/skills.ts +16 -13
  333. package/src/cli/targets.ts +23 -24
  334. package/src/cli/tools.ts +321 -0
  335. package/src/cli/trace-inspect.ts +252 -0
  336. package/src/cli/trace.ts +64 -2
  337. package/src/cli/uninstall.ts +2 -2
  338. package/src/cli/upgrade.ts +29 -34
  339. package/src/cli/usage.ts +2 -2
  340. package/src/cli/validate-model.ts +1 -1
  341. package/src/cli/verifiers-inspect.ts +347 -0
  342. package/src/cli/verifiers.ts +9 -0
  343. package/src/cli/wiki-generate.ts +5 -5
  344. package/src/core/bash-exec.ts +1 -1
  345. package/src/core/boot-trace.ts +3 -3
  346. package/src/core/bus-events.ts +4 -0
  347. package/src/core/bus-trace.ts +2 -2
  348. package/src/core/compile-cache.ts +1 -1
  349. package/src/core/config.ts +1070 -845
  350. package/src/core/defaults.ts +342 -463
  351. package/src/core/domain-loader.ts +6 -4
  352. package/src/core/event-bus.ts +1 -1
  353. package/src/core/file-references.ts +78 -88
  354. package/src/core/git-commit-attribution.ts +3 -9
  355. package/src/core/guardrails.ts +24 -4
  356. package/src/core/naming-compat.ts +45 -0
  357. package/src/core/naming-events.ts +62 -0
  358. package/src/core/recent-models.ts +1 -7
  359. package/src/core/residency-protection.ts +4 -8
  360. package/src/core/resolve-config-value.ts +1 -1
  361. package/src/core/response-model-id.ts +0 -14
  362. package/src/core/response-schema.ts +44 -4
  363. package/src/core/session-routing.ts +84 -74
  364. package/src/core/skill-activation.ts +18 -0
  365. package/src/core/termination.ts +4 -4
  366. package/src/core/theme-token-hex.ts +43 -0
  367. package/src/core/timers.ts +2 -12
  368. package/src/core/tool-names.ts +2 -1
  369. package/src/core/xdg.ts +1 -1
  370. package/src/domains/agents/catalog.ts +2 -12
  371. package/src/domains/agents/extension.ts +3 -3
  372. package/src/domains/agents/fleets/build-review.md +0 -3
  373. package/src/domains/agents/fleets/build-test.md +0 -3
  374. package/src/domains/agents/registry.ts +7 -7
  375. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  376. package/src/domains/agents/result-contract.ts +165 -36
  377. package/src/domains/agents/spec.ts +0 -11
  378. package/src/domains/config/classify.ts +37 -46
  379. package/src/domains/config/extension.ts +5 -5
  380. package/src/domains/config/keybindings.ts +48 -47
  381. package/src/domains/config/watcher.ts +1 -1
  382. package/src/domains/context/codewiki/indexer.ts +1 -1
  383. package/src/domains/context/extension.ts +3 -3
  384. package/src/domains/context/prompt-context.ts +1 -1
  385. package/src/domains/context/wiki/assemble.ts +2 -2
  386. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  387. package/src/domains/context/working-set/replay/report.ts +1 -1
  388. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  389. package/src/domains/dispatch/active-route-planner.ts +2 -2
  390. package/src/domains/dispatch/admission-error.ts +9 -0
  391. package/src/domains/dispatch/admission.ts +22 -21
  392. package/src/domains/dispatch/agent-candidates.ts +1 -1
  393. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  394. package/src/domains/dispatch/agent-ledger.ts +1 -1
  395. package/src/domains/dispatch/assignment.ts +5 -5
  396. package/src/domains/dispatch/capacity-lease.ts +23 -6
  397. package/src/domains/dispatch/code-step.ts +1 -1
  398. package/src/domains/dispatch/contract.ts +2 -2
  399. package/src/domains/dispatch/council-topology.ts +398 -0
  400. package/src/domains/dispatch/extension.ts +287 -111
  401. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  402. package/src/domains/dispatch/fleet-plan.ts +7 -2
  403. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  404. package/src/domains/dispatch/fleet-run.ts +59 -3
  405. package/src/domains/dispatch/gate-decisions.ts +36 -15
  406. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  407. package/src/domains/dispatch/gate-topology.ts +289 -0
  408. package/src/domains/dispatch/index.ts +19 -0
  409. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  410. package/src/domains/dispatch/intent.ts +85 -1
  411. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  412. package/src/domains/dispatch/path-scope.ts +0 -61
  413. package/src/domains/dispatch/placement.ts +2 -2
  414. package/src/domains/dispatch/receipt-findings.ts +1 -1
  415. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  416. package/src/domains/dispatch/reservation-store.ts +24 -27
  417. package/src/domains/dispatch/route-decision.ts +1 -1
  418. package/src/domains/dispatch/route-history.ts +1 -1
  419. package/src/domains/dispatch/route-policy.ts +1 -1
  420. package/src/domains/dispatch/route-readiness.ts +0 -28
  421. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  422. package/src/domains/dispatch/run-event-journal.ts +599 -0
  423. package/src/domains/dispatch/state.ts +45 -1
  424. package/src/domains/dispatch/tool-stats.ts +1 -1
  425. package/src/domains/dispatch/transport.ts +2 -19
  426. package/src/domains/dispatch/types.ts +16 -3
  427. package/src/domains/dispatch/validation.ts +33 -8
  428. package/src/domains/dispatch/worker-protocol.ts +2 -2
  429. package/src/domains/eval/artifacts/store.ts +5 -4
  430. package/src/domains/eval/compare/compare.ts +3 -16
  431. package/src/domains/eval/compare/thresholds.ts +0 -8
  432. package/src/domains/eval/execution-provenance.ts +1 -1
  433. package/src/domains/eval/inventory.ts +113 -0
  434. package/src/domains/eval/metrics/token-stream.ts +0 -7
  435. package/src/domains/eval/report.ts +1 -1
  436. package/src/domains/eval/runner.ts +1 -1
  437. package/src/domains/eval/runners/clio-run.ts +7 -6
  438. package/src/domains/eval/runners/external-command.ts +4 -3
  439. package/src/domains/eval/schema/artifact.ts +1 -1
  440. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  441. package/src/domains/eval/schema/behavioral.ts +7 -6
  442. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  443. package/src/domains/eval/schema/naming.ts +10 -0
  444. package/src/domains/eval/schema/serving.ts +31 -0
  445. package/src/domains/eval/schema/suite.ts +2 -2
  446. package/src/domains/eval/schema/validate.ts +9 -5
  447. package/src/domains/eval/schema/verdict.ts +4 -2
  448. package/src/domains/eval/store.ts +12 -2
  449. package/src/domains/eval/suites/run.ts +12 -6
  450. package/src/domains/eval/types.ts +1 -1
  451. package/src/domains/eval/workspaces/git.ts +1 -1
  452. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  453. package/src/domains/evidence/build.ts +13 -5
  454. package/src/domains/evidence/store.ts +6 -0
  455. package/src/domains/interop/consent.ts +7 -7
  456. package/src/domains/interop/extension.ts +1 -1
  457. package/src/domains/lifecycle/doctor.ts +27 -21
  458. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  459. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  460. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  461. package/src/domains/lifecycle/migrations/index.ts +20 -1
  462. package/src/domains/lifecycle/naming-history.ts +153 -0
  463. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  464. package/src/domains/lifecycle/naming-resources.ts +261 -0
  465. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  466. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  467. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  468. package/src/domains/memory/index.ts +0 -1
  469. package/src/domains/memory/task-memory-handoff.ts +6 -3
  470. package/src/domains/memory/task-memory-policy.ts +6 -10
  471. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  472. package/src/domains/middleware/index.ts +7 -0
  473. package/src/domains/middleware/marketplace-offer.ts +339 -0
  474. package/src/domains/middleware/memory-intervention.ts +33 -21
  475. package/src/domains/middleware/runtime.ts +2 -2
  476. package/src/domains/mux/contract.ts +566 -0
  477. package/src/domains/mux/detect.ts +182 -0
  478. package/src/domains/mux/dock-controller.ts +365 -0
  479. package/src/domains/mux/extension.ts +53 -0
  480. package/src/domains/mux/index.ts +116 -0
  481. package/src/domains/mux/manifest.ts +6 -0
  482. package/src/domains/mux/operations.ts +192 -0
  483. package/src/domains/mux/pane-registry.ts +90 -0
  484. package/src/domains/mux/protocol.ts +62 -0
  485. package/src/domains/mux/socket-client.ts +964 -0
  486. package/src/domains/mux/types.ts +265 -0
  487. package/src/domains/mux/viewer-command.ts +59 -0
  488. package/src/domains/mux/yazi/assets/init.lua +2 -0
  489. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  490. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  491. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  492. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  493. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  494. package/src/domains/mux/yazi/event-stream.ts +182 -0
  495. package/src/domains/mux/yazi/profile.ts +299 -0
  496. package/src/domains/mux/yazi/session.ts +251 -0
  497. package/src/domains/mux/yazi/theme.ts +30 -0
  498. package/src/domains/observability/cost.ts +21 -0
  499. package/src/domains/observability/extension.ts +1 -1
  500. package/src/domains/observability/index.ts +2 -0
  501. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  502. package/src/domains/observability/projection.ts +1 -1
  503. package/src/domains/observability/trace-store.ts +63 -11
  504. package/src/domains/prompts/compiler.ts +2 -2
  505. package/src/domains/prompts/extension.ts +3 -3
  506. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  507. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  508. package/src/domains/providers/endpoint-capacity.ts +154 -22
  509. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  510. package/src/domains/providers/extension.ts +25 -8
  511. package/src/domains/providers/index.ts +22 -0
  512. package/src/domains/providers/knowledge-base-path.ts +1 -1
  513. package/src/domains/providers/model-runtime-capabilities.ts +46 -2
  514. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  515. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  516. package/src/domains/providers/plugins.ts +1 -1
  517. package/src/domains/providers/resolver.ts +1 -1
  518. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  519. package/src/domains/providers/runtimes/builtins.ts +2 -0
  520. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  521. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  522. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  523. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  524. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  525. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  526. package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
  527. package/src/domains/providers/support.ts +1 -0
  528. package/src/domains/providers/target-model-cache.ts +124 -0
  529. package/src/domains/providers/types/knowledge-base.ts +13 -0
  530. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  531. package/src/domains/providers/types/target-descriptor.ts +3 -3
  532. package/src/domains/resources/extension.ts +1 -1
  533. package/src/domains/resources/index.ts +3 -0
  534. package/src/domains/resources/library.ts +6 -6
  535. package/src/domains/resources/prompts/loader.ts +1 -1
  536. package/src/domains/resources/skills/content-hash.ts +7 -6
  537. package/src/domains/resources/skills/evals.ts +1 -1
  538. package/src/domains/resources/skills/install.ts +36 -12
  539. package/src/domains/resources/skills/loader.ts +72 -13
  540. package/src/domains/resources/skills/marketplace.ts +21 -2
  541. package/src/domains/resources/skills/promotion.ts +214 -0
  542. package/src/domains/safety/action-classifier.ts +6 -0
  543. package/src/domains/safety/audit.ts +2 -2
  544. package/src/domains/safety/finish-contract.ts +2 -1
  545. package/src/domains/safety/run-effects.ts +1 -1
  546. package/src/domains/scheduling/extension.ts +4 -4
  547. package/src/domains/session/archive-readers.ts +9 -1
  548. package/src/domains/session/compaction/branch-summary.ts +4 -0
  549. package/src/domains/session/compaction/compact.ts +1 -1
  550. package/src/domains/session/compaction/tokens.ts +4 -0
  551. package/src/domains/session/context-accounting.ts +1 -1
  552. package/src/domains/session/decision-board.ts +1 -1
  553. package/src/domains/session/extension.ts +1 -1
  554. package/src/domains/session/handoff.ts +2 -2
  555. package/src/domains/session/prompt-manifest.ts +0 -5
  556. package/src/domains/session/protected-artifact-journal.ts +12 -6
  557. package/src/domains/session/retry.ts +1 -1
  558. package/src/domains/share/archive.ts +85 -36
  559. package/src/domains/toolchain/archive.ts +175 -0
  560. package/src/domains/toolchain/contract.ts +28 -0
  561. package/src/domains/toolchain/extension.ts +47 -0
  562. package/src/domains/toolchain/index.ts +39 -0
  563. package/src/domains/toolchain/install.ts +327 -0
  564. package/src/domains/toolchain/manifest.ts +8 -0
  565. package/src/domains/toolchain/paths.ts +34 -0
  566. package/src/domains/toolchain/registry.ts +265 -0
  567. package/src/domains/toolchain/remove.ts +218 -0
  568. package/src/domains/toolchain/resolve.ts +182 -0
  569. package/src/domains/toolchain/types.ts +113 -0
  570. package/src/domains/toolchain/version.ts +88 -0
  571. package/src/engine/acp/adapter.ts +3 -3
  572. package/src/engine/acp/event-mapper.ts +3 -3
  573. package/src/engine/acp/server.ts +440 -96
  574. package/src/engine/acp/tool-mediator.ts +2 -2
  575. package/src/engine/acp/types.ts +20 -2
  576. package/src/engine/alcf-oauth.ts +5 -5
  577. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  578. package/src/engine/api-registry.ts +1 -1
  579. package/src/engine/apis/llamacpp-residency.ts +1 -19
  580. package/src/engine/apis/lmstudio.ts +1 -6
  581. package/src/engine/apis/ollama-native.ts +3 -3
  582. package/src/engine/apis/openai-completions.ts +2 -2
  583. package/src/engine/apis/residency.ts +3 -9
  584. package/src/engine/claude/sdk-module.ts +87 -0
  585. package/src/engine/claude/sdk-runtime.ts +25 -17
  586. package/src/engine/claude/subprocess-runtime.ts +1 -1
  587. package/src/engine/claude/tool-safety.ts +4 -4
  588. package/src/engine/loop-guard.ts +0 -5
  589. package/src/engine/session.ts +14 -7
  590. package/src/engine/tui-primitives.ts +21 -0
  591. package/src/engine/tui.ts +1 -0
  592. package/src/engine/worker-events.ts +6 -6
  593. package/src/engine/worker-runtime.ts +16 -26
  594. package/src/entry/boot-options.ts +2 -0
  595. package/src/entry/orchestrator.ts +207 -90
  596. package/src/entry/panes-activation.ts +31 -0
  597. package/src/entry/with-panes.ts +20 -0
  598. package/src/interactive/application-controller.ts +21 -21
  599. package/src/interactive/bus-notices.ts +2 -2
  600. package/src/interactive/chat-loop.ts +8 -8
  601. package/src/interactive/chat-panel.ts +1 -1
  602. package/src/interactive/clio-editor.ts +105 -1
  603. package/src/interactive/context-activity.ts +8 -6
  604. package/src/interactive/context-meter.ts +3 -6
  605. package/src/interactive/context-overlay.ts +2 -1
  606. package/src/interactive/cost-overlay.ts +3 -1
  607. package/src/interactive/council-grid.ts +3 -5
  608. package/src/interactive/council.ts +11 -0
  609. package/src/interactive/dispatch-board.ts +56 -49
  610. package/src/interactive/editor-bash.ts +21 -0
  611. package/src/interactive/editor-steer.ts +9 -4
  612. package/src/interactive/editor-submit.ts +24 -18
  613. package/src/interactive/external-editor.ts +1 -1
  614. package/src/interactive/file-reference-completion.ts +360 -0
  615. package/src/interactive/footer/dashboard.ts +15 -17
  616. package/src/interactive/footer/notifications.ts +14 -8
  617. package/src/interactive/footer/widgets.ts +2 -44
  618. package/src/interactive/interactive-application.ts +229 -62
  619. package/src/interactive/interactive-event-projection.ts +1 -1
  620. package/src/interactive/interactive-input-runtime.ts +9 -2
  621. package/src/interactive/interactive-presentation.ts +21 -16
  622. package/src/interactive/interactive-shell.ts +2 -2
  623. package/src/interactive/interactive-slash-runtime.ts +99 -23
  624. package/src/interactive/interactive-subscriptions.ts +1 -1
  625. package/src/interactive/interactive-tickers.ts +1 -1
  626. package/src/interactive/keybinding-manager.ts +4 -4
  627. package/src/interactive/layout.ts +1 -1
  628. package/src/interactive/memory-overlay.ts +3 -2
  629. package/src/interactive/modal-marker.ts +151 -0
  630. package/src/interactive/mutation-preview.ts +1 -1
  631. package/src/interactive/mux-bridge.ts +214 -0
  632. package/src/interactive/overlay-frame.ts +62 -14
  633. package/src/interactive/overlay-general-openers.ts +7 -2
  634. package/src/interactive/overlay-key-routing.ts +21 -10
  635. package/src/interactive/overlay-lifecycle.ts +20 -4
  636. package/src/interactive/overlay-model-selectors.ts +43 -6
  637. package/src/interactive/overlay-permission-lifecycle.ts +90 -22
  638. package/src/interactive/overlay-transitions.ts +18 -4
  639. package/src/interactive/overlays/agents.ts +3 -2
  640. package/src/interactive/overlays/ask-user.ts +161 -41
  641. package/src/interactive/overlays/auth-dialog.ts +1 -0
  642. package/src/interactive/overlays/context-reset.ts +29 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +29 -4
  644. package/src/interactive/overlays/decisions.ts +15 -13
  645. package/src/interactive/overlays/extensions.ts +1 -0
  646. package/src/interactive/overlays/fleet-run-approval.ts +4 -3
  647. package/src/interactive/overlays/handoff-review.ts +3 -2
  648. package/src/interactive/overlays/help-reference.ts +2 -0
  649. package/src/interactive/overlays/interop.ts +2 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +2 -1
  651. package/src/interactive/overlays/library-tabs.ts +28 -0
  652. package/src/interactive/overlays/list-overlay.ts +10 -1
  653. package/src/interactive/overlays/message-picker.ts +2 -1
  654. package/src/interactive/overlays/model-scope.ts +86 -0
  655. package/src/interactive/overlays/model-selector.ts +40 -31
  656. package/src/interactive/overlays/prompts.ts +11 -4
  657. package/src/interactive/overlays/session-selector.ts +3 -2
  658. package/src/interactive/overlays/settings-sections.ts +30 -0
  659. package/src/interactive/overlays/settings.ts +849 -268
  660. package/src/interactive/overlays/side-question.ts +3 -2
  661. package/src/interactive/overlays/skills-hub.ts +11 -19
  662. package/src/interactive/overlays/tree-selector.ts +3 -2
  663. package/src/interactive/pane-policy.ts +46 -0
  664. package/src/interactive/panes-runtime.ts +318 -0
  665. package/src/interactive/permission-overlay.ts +2 -2
  666. package/src/interactive/renderers/compaction-summary.ts +29 -0
  667. package/src/interactive/renderers/retry-status.ts +12 -4
  668. package/src/interactive/renderers/tool-execution.ts +4 -4
  669. package/src/interactive/renderers/worker-entry.ts +122 -14
  670. package/src/interactive/session-transcript.ts +3 -3
  671. package/src/interactive/slash-autocomplete.ts +454 -165
  672. package/src/interactive/slash-commands.ts +521 -189
  673. package/src/interactive/slash-spec.ts +160 -17
  674. package/src/interactive/status/controller.ts +2 -2
  675. package/src/interactive/stream-pacing-policy.ts +1 -1
  676. package/src/interactive/tasks-overlay.ts +21 -13
  677. package/src/interactive/terminal-lease.ts +6 -7
  678. package/src/interactive/theme/tokens.ts +3 -14
  679. package/src/interactive/turn-context.ts +58 -13
  680. package/src/interactive/turn-persistence.ts +2 -2
  681. package/src/interactive/turn-prewarm.ts +2 -2
  682. package/src/interactive/turn-runtime.ts +8 -8
  683. package/src/interactive/turn-state.ts +1 -1
  684. package/src/interactive/view/artifacts.ts +120 -9
  685. package/src/interactive/view/view-overlay.ts +14 -10
  686. package/src/interactive/watch-pane.ts +180 -0
  687. package/src/interactive/welcome-dashboard.ts +15 -15
  688. package/src/interactive/worker-progress.ts +11 -5
  689. package/src/interactive/worker-receipts.ts +20 -2
  690. package/src/interactive/worker-stream.ts +6 -4
  691. package/src/interactive/yazi-bridge.ts +451 -0
  692. package/src/tools/ask-user.ts +3 -3
  693. package/src/tools/bash.ts +1 -1
  694. package/src/tools/bootstrap.ts +26 -2
  695. package/src/tools/builtin-tool-catalog.ts +16 -1
  696. package/src/tools/compete-worktrees.ts +108 -17
  697. package/src/tools/context/index.ts +15 -1
  698. package/src/tools/core-bootstrap.ts +2 -1
  699. package/src/tools/dispatch-admission.ts +18 -5
  700. package/src/tools/dispatch-arguments.ts +21 -21
  701. package/src/tools/dispatch-plan.ts +0 -11
  702. package/src/tools/dispatch-run-events.ts +145 -28
  703. package/src/tools/dispatch-runner.ts +40 -13
  704. package/src/tools/dispatch-types.ts +15 -3
  705. package/src/tools/dispatch.ts +2 -2
  706. package/src/tools/executables.ts +17 -14
  707. package/src/tools/find.ts +1 -6
  708. package/src/tools/monitor.ts +4 -4
  709. package/src/tools/observation.ts +54 -4
  710. package/src/tools/observers.ts +0 -33
  711. package/src/tools/panes-surface.ts +38 -0
  712. package/src/tools/panes.ts +112 -0
  713. package/src/tools/policy.ts +10 -1
  714. package/src/tools/presentation.ts +1 -0
  715. package/src/tools/task-worktree.ts +28 -7
  716. package/src/tools/verify/authoring.ts +3 -6
  717. package/src/tools/verify/frontend.ts +1 -1
  718. package/src/tools/web-fetch.ts +1 -1
  719. package/src/worker/entry.ts +4 -3
  720. package/src/worker/protocol.ts +16 -14
  721. package/src/worker/spec-contract.ts +2 -2
  722. package/src/worker/stdin-demux.ts +2 -2
  723. package/dist/chunk-D73KXYPF.js +0 -37
  724. package/dist/chunk-MLOK6ZOS.js +0 -2888
  725. package/dist/chunk-PNY46YEY.js +0 -1581
  726. package/dist/chunk-XDOQXGFO.js +0 -515
  727. package/dist/chunk-YKOFT37S.js +0 -279
  728. package/dist/clio-LT5V7SSZ.js +0 -26
  729. package/dist/configure-2WYWSCSD.js +0 -49
  730. package/dist/doctor-TWBWFK5V.js +0 -165
  731. package/src/engine/apis/degraded-inference.ts +0 -95
  732. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  733. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -26,13 +26,7 @@ import { AI_AGENT_NAME } from "../../core/agent-environment.js";
26
26
  import { shellQuote } from "../../core/shell-quote.js";
27
27
  import type { WorkerSpec } from "../../worker/spec-contract.js";
28
28
  import type { RunNodeIdentity } from "./types.js";
29
- import {
30
- type SpawnedWorker,
31
- type SpawnOptions,
32
- spawnNativeWorker,
33
- spawnWorkerProcess,
34
- type WorkerProcessOptions,
35
- } from "./worker-spawn.js";
29
+ import { type SpawnedWorker, spawnWorkerProcess, type WorkerProcessOptions } from "./worker-spawn.js";
36
30
 
37
31
  export type WorkerTransportKind = "local" | "ssh";
38
32
 
@@ -94,17 +88,6 @@ export function localNodeIdentity(): RunNodeIdentity {
94
88
  return { id: LOCAL_NODE_ID, kind: "local" };
95
89
  }
96
90
 
97
- export function createLocalWorkerTransport(opts?: Omit<SpawnOptions, "cwd">): WorkerTransport {
98
- return {
99
- kind: "local",
100
- node: localNodeIdentity(),
101
- spawn(spec, spawnOpts) {
102
- // The caller's per-spawn options ride over the transport's own defaults.
103
- return spawnNativeWorker(spec, { ...opts, ...spawnOpts });
104
- },
105
- };
106
- }
107
-
108
91
  const DEFAULT_SSH_CONNECT_TIMEOUT_SEC = 10;
109
92
  const DEFAULT_REMOTE_CLIO_ENTRY = "clio-coder worker";
110
93
 
@@ -126,7 +109,7 @@ function remoteEnvAssignments(node: SshNodeEndpoint): string {
126
109
  return `AI_AGENT=${AI_AGENT_NAME} CLIO_CODER_RESIDENCY=${residency} CLIO_CODER_WORKER_PGID=$$${labelAssignment}`;
127
110
  }
128
111
 
129
- export function buildRemoteWorkerCommand(node: SshNodeEndpoint, cwd: string): string {
112
+ function buildRemoteWorkerCommand(node: SshNodeEndpoint, cwd: string): string {
130
113
  const entry =
131
114
  node.clioCoderEntry !== undefined && node.clioCoderEntry.trim().length > 0
132
115
  ? node.clioCoderEntry.trim()
@@ -225,6 +225,17 @@ export interface RunGateSubjectRef {
225
225
  digest: string | null;
226
226
  }
227
227
 
228
+ /** Storage route used for one compete candidate's isolated checkout. */
229
+ export interface RunGateWorktreeProvenance {
230
+ backend: "herdr" | "native";
231
+ path: string;
232
+ branch: string;
233
+ /** Herdr workspace created around the worktree; absent for the native route. */
234
+ workspaceId?: string;
235
+ /** Why the native route was selected when mux was configured. */
236
+ fallback?: "mux-unavailable" | "mux-operation-failed";
237
+ }
238
+
228
239
  /**
229
240
  * Review/compete gate provenance, carried on the request and sealed into the
230
241
  * receipt. References point backward only: a reviewer references the builder
@@ -244,6 +255,8 @@ export interface RunGateProvenance {
244
255
  subjects?: RunGateSubjectRef[];
245
256
  /** Reviewer verdict that caused this run; only on revise builders. */
246
257
  verdict?: "pass" | "fail" | "revise";
258
+ /** Compete-only worktree route, sealed into the run receipt with the gate. */
259
+ worktree?: RunGateWorktreeProvenance;
247
260
  }
248
261
 
249
262
  export interface RunCouncilProvenance {
@@ -493,7 +506,7 @@ export interface RunEnvelope {
493
506
 
494
507
  /**
495
508
  * Per-tool aggregates folded into a receipt at run completion. Sourced from
496
- * the worker's ToolTelemetry stream (`clio_tool_finish` IPC events). Sorted
509
+ * the worker's ToolTelemetry stream (`clio_coder_tool_finish` IPC events). Sorted
497
510
  * by tool name on write so digests are deterministic across runs.
498
511
  */
499
512
  export interface ToolCallStat {
@@ -557,7 +570,7 @@ export interface RunReceiptDelegation {
557
570
  toolCallsRequested: number;
558
571
  toolCallsApproved: number;
559
572
  toolCallsDenied: number;
560
- toolGovernance: "clio-policy" | "agent-managed" | "deny-all";
573
+ toolGovernance: "clio-coder-policy" | "agent-managed" | "deny-all";
561
574
  toolCallLog: DelegationToolCallLogEntry[];
562
575
  }
563
576
 
@@ -797,7 +810,7 @@ export interface RunReceipt {
797
810
  dynamicHash?: string | null;
798
811
  promptSignature?: string | null;
799
812
  toolSignature?: string | null;
800
- clioVersion: string;
813
+ clioCoderVersion: string;
801
814
  piMonoVersion: string;
802
815
  platform: string;
803
816
  nodeVersion: string;
@@ -21,6 +21,7 @@ import {
21
21
  import { isExecutionRole } from "./execution-role.js";
22
22
  import { COMPETE_STANCES, type CompeteStance } from "./gate-role-prompts.js";
23
23
  import { type DispatchIntent, isDispatchIntent } from "./intent.js";
24
+ import { classifyDispatchIntentCompatibility, dispatchIntentRefusals } from "./intent-compatibility.js";
24
25
  import { isRoutingIntent, type RoutingIntent } from "./routing-intent.js";
25
26
  import type {
26
27
  DispatchRequestOrigin,
@@ -478,14 +479,21 @@ export function validateJobSpec(spec: unknown): Validated {
478
479
  errors.push("writeRoots must be a non-empty array of non-empty strings");
479
480
  }
480
481
  }
481
- if ("intent" in spec && spec.intent !== undefined && !isDispatchIntent(spec.intent)) {
482
- errors.push("intent must be a normalized dispatch intent");
483
- }
484
- if (isDispatchIntent(spec.intent) && spec.intent.writeRoots.length > 0 && Array.isArray(spec.writeRoots)) {
485
- const jobCwd = typeof spec.cwd === "string" && spec.cwd.length > 0 ? spec.cwd : process.cwd();
486
- const legacy = [...new Set(spec.writeRoots.map((root) => resolvePathBoundary(jobCwd, String(root))))].sort();
487
- const declared = [...new Set(spec.intent.writeRoots.map((root) => resolvePathBoundary(jobCwd, root)))].sort();
488
- if (JSON.stringify(legacy) !== JSON.stringify(declared)) errors.push("intent_write_roots_contradiction");
482
+ // One owner for the typed-intent migration rules (#163). Every dispatch
483
+ // producer reaches a worker through this validator, so classifying here is
484
+ // what makes the compatibility table true of the fleet, CLI, ACP, and
485
+ // extension paths rather than only of the model-facing tool.
486
+ if ("intent" in spec) {
487
+ for (const refusal of dispatchIntentRefusals(
488
+ classifyDispatchIntentCompatibility({
489
+ intent: spec.intent,
490
+ ...(spec.writeRoots !== undefined ? { writeRoots: spec.writeRoots } : {}),
491
+ ...(spec.autonomy !== undefined ? { autonomy: spec.autonomy } : {}),
492
+ ...(typeof spec.cwd === "string" && spec.cwd.length > 0 ? { cwd: spec.cwd } : {}),
493
+ }),
494
+ )) {
495
+ errors.push(refusal.message);
496
+ }
489
497
  }
490
498
 
491
499
  if ("requestOrigin" in spec && spec.requestOrigin !== undefined) {
@@ -696,6 +704,8 @@ function isValidProtectedArtifactRemap(value: unknown): value is ProtectedArtifa
696
704
 
697
705
  const VALID_GATE_ROLES = new Set(["builder", "reviewer", "candidate", "judge", "member", "synthesis"]);
698
706
  const VALID_GATE_VERDICTS = new Set(["pass", "fail", "revise"]);
707
+ const VALID_WORKTREE_BACKENDS = new Set(["herdr", "native"]);
708
+ const VALID_WORKTREE_FALLBACKS = new Set(["mux-unavailable", "mux-operation-failed"]);
699
709
  const VALID_PLAN_TOPOLOGIES = new Set([
700
710
  "parallel",
701
711
  "sequential",
@@ -724,6 +734,20 @@ function isValidGate(value: unknown): value is RunGateProvenance {
724
734
  if (value.verdict !== undefined && (typeof value.verdict !== "string" || !VALID_GATE_VERDICTS.has(value.verdict))) {
725
735
  return false;
726
736
  }
737
+ if (value.worktree !== undefined) {
738
+ if (!isPlainObject(value.worktree)) return false;
739
+ if (typeof value.worktree.backend !== "string" || !VALID_WORKTREE_BACKENDS.has(value.worktree.backend)) return false;
740
+ if (typeof value.worktree.path !== "string" || !path.isAbsolute(value.worktree.path)) return false;
741
+ if (typeof value.worktree.branch !== "string" || value.worktree.branch.length === 0) return false;
742
+ if (value.worktree.workspaceId !== undefined && typeof value.worktree.workspaceId !== "string") return false;
743
+ if (
744
+ value.worktree.fallback !== undefined &&
745
+ (typeof value.worktree.fallback !== "string" || !VALID_WORKTREE_FALLBACKS.has(value.worktree.fallback))
746
+ ) {
747
+ return false;
748
+ }
749
+ if (value.worktree.backend === "herdr" && typeof value.worktree.workspaceId !== "string") return false;
750
+ }
727
751
  return true;
728
752
  }
729
753
 
@@ -734,6 +758,7 @@ function cloneGate(gate: RunGateProvenance): RunGateProvenance {
734
758
  cycle: gate.cycle,
735
759
  ...(gate.subjects !== undefined ? { subjects: gate.subjects.map((subject) => ({ ...subject })) } : {}),
736
760
  ...(gate.verdict !== undefined ? { verdict: gate.verdict } : {}),
761
+ ...(gate.worktree !== undefined ? { worktree: { ...gate.worktree } } : {}),
737
762
  };
738
763
  }
739
764
 
@@ -69,7 +69,7 @@ export {
69
69
  */
70
70
  export function computeSettingsFingerprint(settings: unknown): string {
71
71
  return createHash("sha256")
72
- .update(`clio.settings:${canonicalJson(settings)}`, "utf8")
72
+ .update(`clio-coder.settings:${canonicalJson(settings)}`, "utf8")
73
73
  .digest("hex");
74
74
  }
75
75
 
@@ -151,7 +151,7 @@ export function approvedIdentityForSpec(spec: {
151
151
 
152
152
  function workerSpecDigestOf(spec: unknown): string {
153
153
  return createHash("sha256")
154
- .update(`clio.workerSpec:${canonicalJson(spec)}`, "utf8")
154
+ .update(`clio-coder.workerSpec:${canonicalJson(spec)}`, "utf8")
155
155
  .digest("hex");
156
156
  }
157
157
 
@@ -58,14 +58,15 @@ export function parseEvalArtifactV4(value: unknown, source: string): EvalArtifac
58
58
  value.aggregates === undefined
59
59
  ? undefined
60
60
  : (readArray(value, source, "aggregates") as NonNullable<EvalArtifactV4["aggregates"]>);
61
+ const clioCoder = asRecord(value.clioCoder ?? value.clio, `${source}.clioCoder`);
61
62
  return {
62
63
  version: 4,
63
64
  evalId: readString(value, source, "evalId"),
64
65
  suite: { id: readString(suite, `${source}.suite`, "id"), hash: readString(suite, `${source}.suite`, "hash") },
65
- clio: {
66
- version: readString(asRecord(value.clio, `${source}.clio`), `${source}.clio`, "version"),
67
- commit: readNullableString(asRecord(value.clio, `${source}.clio`), `${source}.clio`, "commit"),
68
- entry: readString(asRecord(value.clio, `${source}.clio`), `${source}.clio`, "entry"),
66
+ clioCoder: {
67
+ version: readString(clioCoder, `${source}.clioCoder`, "version"),
68
+ commit: readNullableString(clioCoder, `${source}.clioCoder`, "commit"),
69
+ entry: readString(clioCoder, `${source}.clioCoder`, "entry"),
69
70
  },
70
71
  environment: {
71
72
  platform: readString(asRecord(value.environment, `${source}.environment`), `${source}.environment`, "platform"),
@@ -3,6 +3,7 @@ import { assertComparableTrackedMetricSources } from "../run-compare.js";
3
3
  import type { EvalArtifactV4 } from "../schema/artifact.js";
4
4
  import {
5
5
  type EvalServingConfigurationV1,
6
+ evalServingConfigurationOf,
6
7
  renderEvalServingConfiguration,
7
8
  sameEvalServingConfiguration,
8
9
  } from "../schema/serving.js";
@@ -90,8 +91,8 @@ export function compareEvalArtifactsV4(
90
91
  ): EvalCompareV4Summary {
91
92
  const baselineTokens = baseline.summary.tokens;
92
93
  const candidateTokens = candidate.summary.tokens;
93
- const baselineServing = servingConfigurationOf(baseline);
94
- const candidateServing = servingConfigurationOf(candidate);
94
+ const baselineServing = evalServingConfigurationOf(baseline);
95
+ const candidateServing = evalServingConfigurationOf(candidate);
95
96
  const configDrift = !sameEvalServingConfiguration(baselineServing, candidateServing);
96
97
  if (configDrift && options.allowConfigDrift !== true) {
97
98
  throw new EvalServingConfigurationDriftError(baselineServing, candidateServing);
@@ -330,20 +331,6 @@ function metricComparison(
330
331
  };
331
332
  }
332
333
 
333
- function servingConfigurationOf(artifact: EvalArtifactV4): EvalServingConfigurationV1 {
334
- return (
335
- artifact.servingConfiguration ?? {
336
- targetId: artifact.matrix.target,
337
- runtimeId: null,
338
- modelId: artifact.matrix.model,
339
- serverBuild: null,
340
- total_slots: null,
341
- thinkingLevel: artifact.matrix.thinking,
342
- compiledPromptHash: null,
343
- }
344
- );
345
- }
346
-
347
334
  function normalizeMetricFilter(metric: string | undefined): string | undefined {
348
335
  if (metric === undefined) return undefined;
349
336
  const trimmed = metric.trim();
@@ -62,14 +62,6 @@ export function resolveMetricAssertion(
62
62
  return { actual, unresolved: actual === null, holds: comparisonHolds(assertion, actual) };
63
63
  }
64
64
 
65
- export function evaluateMetricAssertion(
66
- assertion: EvalMetricAssertion,
67
- metrics: Readonly<Record<string, unknown>>,
68
- artifact?: EvalArtifactV4,
69
- ): boolean {
70
- return comparisonHolds(assertion, metricValue(assertion.metric, metrics, artifact));
71
- }
72
-
73
65
  function comparisonHolds(assertion: EvalMetricAssertion, actual: number | string | boolean | null): boolean {
74
66
  switch (assertion.op) {
75
67
  case "lt":
@@ -128,7 +128,7 @@ function promptFragmentIdentities(
128
128
  .sort((left, right) => left.id.localeCompare(right.id));
129
129
  }
130
130
  if (recipe === null) return [];
131
- const selected = ["identity.clio-worker", "operating.contract", "operating.worker"];
131
+ const selected = ["identity.clio-coder-worker", "operating.contract", "operating.worker"];
132
132
  if (autonomy !== null) selected.push(`safety.${autonomy}`);
133
133
  const fragments: EvalPromptFragmentIdentityV1[] = [];
134
134
  try {
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Bounded newest-first listing of the eval reports this installation stored.
3
+ *
4
+ * The store has always been addressed by id: `eval report <evalId>` and
5
+ * `eval compare <a> <b>` both require the operator to already know which report
6
+ * they want. Nothing enumerated the directory, so a surface that wants to offer
7
+ * the choice had to invent the enumeration. This is that enumeration, and it is
8
+ * a store concern rather than a wire concern: it decides which files are in the
9
+ * window and hands back parsed artifacts, and says nothing about which of their
10
+ * fields may leave the host.
11
+ */
12
+
13
+ import { readdir } from "node:fs/promises";
14
+ import { loadEvalArtifactV4 } from "./artifacts/store.js";
15
+ import type { EvalArtifactV4 } from "./schema/artifact.js";
16
+ import { evalRoot } from "./store.js";
17
+
18
+ /**
19
+ * The exact shape `createEvalId` mints: an ISO stamp with its separators
20
+ * stripped, the first eight characters of the suite hash, and a random suffix.
21
+ */
22
+ const EVAL_ID_PATTERN = /^eval-(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\d{3})Z-([0-9a-f]{8})-([0-9a-f]{12})$/u;
23
+
24
+ export interface EvalStoredReport {
25
+ readonly evalId: string;
26
+ /**
27
+ * The instant the run started, read back out of the id.
28
+ *
29
+ * Null unless the id is one this harness minted and its embedded suite-hash
30
+ * prefix agrees with the suite the artifact names. An artifact has no
31
+ * timestamp field of its own, so the id is the only record of when it ran,
32
+ * and a stamp read off an id that does not otherwise match its contents is
33
+ * not a fact worth reporting.
34
+ */
35
+ readonly startedAt: string | null;
36
+ readonly artifact: EvalArtifactV4;
37
+ }
38
+
39
+ export interface EvalStoreListing {
40
+ /** False when the installation has no eval store at all, which reads differently from an empty one. */
41
+ readonly available: boolean;
42
+ /** Reports on disk before the window bound. */
43
+ readonly stored: number;
44
+ readonly reports: readonly EvalStoredReport[];
45
+ /**
46
+ * Files inside the window the current parser refused.
47
+ *
48
+ * Counted rather than dropped silently. Routing accepts artifact v4 only, so
49
+ * a retired shape still on disk is a real thing in this store, and a listing
50
+ * that quietly skipped it would report a smaller store than the operator has.
51
+ */
52
+ readonly unreadable: number;
53
+ }
54
+
55
+ /** The stamp an id carries, without checking it against anything. */
56
+ function idStamp(evalId: string): { startedAt: string; suiteHashPrefix: string } | null {
57
+ const match = EVAL_ID_PATTERN.exec(evalId);
58
+ if (match === null) return null;
59
+ const [, year, month, day, hour, minute, second, millisecond, suiteHashPrefix] = match;
60
+ const startedAt = `${year}-${month}-${day}T${hour}:${minute}:${second}.${millisecond}Z`;
61
+ const parsed = new Date(startedAt);
62
+ if (Number.isNaN(parsed.getTime()) || parsed.toISOString() !== startedAt) return null;
63
+ return { startedAt, suiteHashPrefix: suiteHashPrefix as string };
64
+ }
65
+
66
+ /** Newest first. An id this harness did not mint sorts oldest rather than throwing. */
67
+ function byNewest(left: string, right: string): number {
68
+ const leftStamp = idStamp(left)?.startedAt ?? "";
69
+ const rightStamp = idStamp(right)?.startedAt ?? "";
70
+ if (leftStamp !== rightStamp) return leftStamp < rightStamp ? 1 : -1;
71
+ return left < right ? 1 : -1;
72
+ }
73
+
74
+ export async function listEvalReports(dataDir: string, limit: number): Promise<EvalStoreListing> {
75
+ let entries: string[];
76
+ try {
77
+ entries = await readdir(evalRoot(dataDir));
78
+ } catch (error) {
79
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") {
80
+ return { available: false, stored: 0, reports: [], unreadable: 0 };
81
+ }
82
+ throw error;
83
+ }
84
+ const ids = entries
85
+ .filter((entry) => entry.endsWith(".json"))
86
+ .map((entry) => entry.slice(0, -".json".length))
87
+ .sort(byNewest);
88
+ const reports: EvalStoredReport[] = [];
89
+ let unreadable = 0;
90
+ for (const evalId of ids.slice(0, limit)) {
91
+ let artifact: EvalArtifactV4;
92
+ try {
93
+ artifact = await loadEvalArtifactV4(dataDir, evalId);
94
+ } catch {
95
+ unreadable += 1;
96
+ continue;
97
+ }
98
+ // The id inside the file is authoritative. A file whose stem disagrees with
99
+ // it was renamed or copied in, and the two names it now answers to are not
100
+ // the same report.
101
+ if (artifact.evalId !== evalId) {
102
+ unreadable += 1;
103
+ continue;
104
+ }
105
+ const stamp = idStamp(evalId);
106
+ reports.push({
107
+ evalId,
108
+ startedAt: stamp !== null && artifact.suite.hash.startsWith(stamp.suiteHashPrefix) ? stamp.startedAt : null,
109
+ artifact,
110
+ });
111
+ }
112
+ return { available: true, stored: ids.length, reports, unreadable };
113
+ }
@@ -90,13 +90,6 @@ export function createTokenUsageFold(): EvalTokenUsageFold {
90
90
  };
91
91
  }
92
92
 
93
- /** Whole-buffer form of {@link createTokenUsageFold}. */
94
- export function tokenUsageFromJsonl(stream: string): EvalTokenStreamUsage {
95
- const fold = createTokenUsageFold();
96
- fold.push(stream);
97
- return fold.usage();
98
- }
99
-
100
93
  export function addTokenStreamUsage(left: EvalTokenStreamUsage, right: EvalTokenStreamUsage): EvalTokenStreamUsage {
101
94
  return {
102
95
  measured: left.measured || right.measured,
@@ -14,7 +14,7 @@ export function renderEvalReport(artifact: EvalRunArtifact, artifactPath?: strin
14
14
  lines.splice(
15
15
  2,
16
16
  0,
17
- `clio: ${artifact.clio.version} commit=${artifact.clio.commit ?? "unknown"} entry=${artifact.clio.entry}`,
17
+ `clioCoder: ${artifact.clioCoder.version} commit=${artifact.clioCoder.commit ?? "unknown"} entry=${artifact.clioCoder.entry}`,
18
18
  );
19
19
  lines.splice(3, 0, `environment: ${artifact.environment.platform} node=${artifact.environment.node}`);
20
20
  const evidenceIds = uniqueEvidenceIds(artifact);
@@ -43,7 +43,7 @@ export async function runEvalTasks(options: RunEvalOptions): Promise<EvalRunArti
43
43
  evalId: options.evalId,
44
44
  taskFile: options.loadedTaskFile.path,
45
45
  taskFileHash: options.loadedTaskFile.contentHash,
46
- clio: evalClioProvenance(options.provenance),
46
+ clioCoder: evalClioProvenance(options.provenance),
47
47
  environment: evalEnvironmentProvenance(),
48
48
  target: options.provenance?.target ?? null,
49
49
  model: options.provenance?.model ?? null,
@@ -1,4 +1,5 @@
1
1
  import { isAbsolute, relative, resolve, sep } from "node:path";
2
+ import { normalizeClioCoderEventRecord } from "../../../core/naming-events.js";
2
3
  import { shellQuote } from "../../../core/shell-quote.js";
3
4
  import { clioStateDir } from "../../../core/xdg.js";
4
5
  import {
@@ -92,7 +93,7 @@ type ToolCallMetrics = {
92
93
  type ToolOutcome = "ok" | "error" | "blocked";
93
94
 
94
95
  /** Fold the terminal tool events emitted by `clio-coder run --json`. */
95
- export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
96
+ function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
96
97
  const executionEnds: ToolCallMetrics = { totalCalls: 0, failed: 0, blocked: 0 };
97
98
  const canonicalFinishes: ToolCallMetrics = { totalCalls: 0, failed: 0, blocked: 0 };
98
99
  const seenExecutionEnds = new Set<string>();
@@ -104,7 +105,7 @@ export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
104
105
  try {
105
106
  const parsed: unknown = JSON.parse(line);
106
107
  if (!isRecord(parsed)) continue;
107
- event = parsed;
108
+ event = normalizeClioCoderEventRecord(parsed);
108
109
  } catch {
109
110
  continue;
110
111
  }
@@ -119,7 +120,7 @@ export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
119
120
  continue;
120
121
  }
121
122
 
122
- if (event.type !== "clio_tool_finish" || !isRecord(event.payload)) continue;
123
+ if (event.type !== "clio_coder_tool_finish" || !isRecord(event.payload)) continue;
123
124
  const outcome = toolOutcome(event.payload);
124
125
  if (outcome === undefined) continue;
125
126
  const callId = stringField(event.payload, "toolCallId") ?? stringField(event, "toolCallId");
@@ -148,7 +149,7 @@ interface BehavioralToolTerminal {
148
149
  * bounded counters against the suite's explicit public allowlist and decoy
149
150
  * list; they never become behavioral fact values or evidence excerpts.
150
151
  */
151
- export function toolBehaviorMetricEntriesFromJsonl(
152
+ function toolBehaviorMetricEntriesFromJsonl(
152
153
  stdout: string,
153
154
  cwd: string,
154
155
  readObservation?: { allowedPaths: string[]; decoyPaths: string[] },
@@ -166,7 +167,7 @@ export function toolBehaviorMetricEntriesFromJsonl(
166
167
  try {
167
168
  const parsed: unknown = JSON.parse(line);
168
169
  if (!isRecord(parsed)) continue;
169
- event = parsed;
170
+ event = normalizeClioCoderEventRecord(parsed);
170
171
  } catch {
171
172
  continue;
172
173
  }
@@ -188,7 +189,7 @@ export function toolBehaviorMetricEntriesFromJsonl(
188
189
  executionEnds.push({ callId, tool, outcome: toolOutcome(event) ?? (event.isError === true ? "error" : "ok") });
189
190
  continue;
190
191
  }
191
- if (event.type !== "clio_tool_finish" || !isRecord(event.payload)) continue;
192
+ if (event.type !== "clio_coder_tool_finish" || !isRecord(event.payload)) continue;
192
193
  const outcome = toolOutcome(event.payload);
193
194
  const tool = stringField(event.payload, "tool");
194
195
  if (outcome === undefined || tool === undefined) continue;
@@ -1,5 +1,6 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { performance } from "node:perf_hooks";
3
+ import { normalizeClioCoderEventType } from "../../../core/naming-events.js";
3
4
  import type { RunReceipt } from "../../dispatch/types.js";
4
5
  import type { SessionEntry } from "../../session/entries.js";
5
6
  import { createEvalCallLedgerFold } from "../metrics/call-ledger-stream.js";
@@ -226,7 +227,7 @@ export interface JsonlMetricCapture {
226
227
  * split JSON arbitrarily; oversized non-metric lines are discarded without
227
228
  * growing memory.
228
229
  */
229
- export function createJsonlMetricCapture(): JsonlMetricCapture {
230
+ function createJsonlMetricCapture(): JsonlMetricCapture {
230
231
  const lines: string[] = [];
231
232
  let storedBytes = 0;
232
233
  let pending = "";
@@ -287,7 +288,7 @@ export function createJsonlMetricCapture(): JsonlMetricCapture {
287
288
  }
288
289
 
289
290
  function compactMetricEvent(event: Record<string, unknown>): Record<string, unknown> | null {
290
- const type = event.type;
291
+ const type = typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : event.type;
291
292
  if (type === "tool_execution_start") {
292
293
  const toolName = stringField(event, "toolName");
293
294
  if (toolName !== "dispatch" && toolName !== "code_nav" && toolName !== "read" && toolName !== "grep") {
@@ -315,7 +316,7 @@ function compactMetricEvent(event: Record<string, unknown>): Record<string, unkn
315
316
  ...(stringField(event, "outcome") !== undefined ? { outcome: stringField(event, "outcome") } : {}),
316
317
  };
317
318
  }
318
- if (type !== "clio_tool_finish" || !isRecord(event.payload)) return null;
319
+ if (type !== "clio_coder_tool_finish" || !isRecord(event.payload)) return null;
319
320
  return {
320
321
  type,
321
322
  payload: {
@@ -69,7 +69,7 @@ export interface EvalArtifactV4 {
69
69
  id: string;
70
70
  hash: string;
71
71
  };
72
- clio: EvalClioProvenance;
72
+ clioCoder: EvalClioProvenance;
73
73
  environment: EvalEnvironmentProvenance;
74
74
  matrix: {
75
75
  target: string;
@@ -1,7 +1,8 @@
1
1
  import type { EvalArtifactResultV4 } from "./artifact.js";
2
2
  import type { EvalBehaviorCategoryV1, EvalBehaviorLabelV1 } from "./behavioral.js";
3
+ import { normalizeEvalSchemaId } from "./naming.js";
3
4
 
4
- export const EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio.eval.behavior.metrics.v1" as const;
5
+ export const EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio-coder.eval.behavior.metrics.v1" as const;
5
6
 
6
7
  export const EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1 = [
7
8
  {
@@ -136,7 +137,7 @@ export function buildEvalBehaviorMetricsV1(
136
137
 
137
138
  export function parseEvalBehaviorMetricsV1(value: unknown, source = "behavioral metrics"): EvalBehaviorMetricsV1 {
138
139
  const record = asRecord(value, source);
139
- if (record.schema !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
140
+ if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
140
141
  throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_METRICS_SCHEMA_V1}`);
141
142
  }
142
143
  const target = asRecord(record.target, `${source}.target`);
@@ -1,8 +1,9 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { normalizeEvalSchemaId } from "./naming.js";
2
3
  import { EVAL_VERDICT_SCHEMA_V1, type EvalVerdictEnvelopeV1 } from "./verdict.js";
3
4
 
4
- export const EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio.eval.scenario.v1" as const;
5
- export const EVAL_BEHAVIOR_SCHEMA_V1 = "clio.eval.behavior.v1" as const;
5
+ export const EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio-coder.eval.scenario.v1" as const;
6
+ export const EVAL_BEHAVIOR_SCHEMA_V1 = "clio-coder.eval.behavior.v1" as const;
6
7
 
7
8
  export const EVAL_BEHAVIOR_CATEGORIES = [
8
9
  "tool_choice",
@@ -102,7 +103,7 @@ export interface EvalBehaviorVerdictV1 {
102
103
 
103
104
  export function parseEvalBehaviorScenarioV1(value: unknown, source = "behavioral scenario"): EvalBehaviorScenarioV1 {
104
105
  const record = asRecord(value, source);
105
- if (record.schema !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
106
+ if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
106
107
  throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1}`);
107
108
  }
108
109
  const corpus = asRecord(record.corpus, `${source}.corpus`);
@@ -153,7 +154,7 @@ export function parseEvalBehaviorScenarioV1(value: unknown, source = "behavioral
153
154
  };
154
155
  }
155
156
 
156
- export function canonicalizeEvalBehaviorJudgeInputV1(
157
+ function canonicalizeEvalBehaviorJudgeInputV1(
157
158
  value: unknown,
158
159
  scenario: EvalBehaviorScenarioV1,
159
160
  source = "behavioral judge input",
@@ -221,10 +222,10 @@ export function judgeEvalBehaviorV1(
221
222
 
222
223
  export function parseEvalBehaviorVerdictV1(value: unknown, source = "behavioral verdict"): EvalBehaviorVerdictV1 {
223
224
  const record = asRecord(value, source);
224
- if (record.schema !== EVAL_BEHAVIOR_SCHEMA_V1)
225
+ if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCHEMA_V1)
225
226
  throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCHEMA_V1}`);
226
227
  const verdictRef = asRecord(record.verdictRef, `${source}.verdictRef`);
227
- if (verdictRef.schema !== EVAL_VERDICT_SCHEMA_V1) {
228
+ if (normalizeEvalSchemaId(verdictRef.schema) !== EVAL_VERDICT_SCHEMA_V1) {
228
229
  throw new Error(`${source}.verdictRef.schema: expected ${EVAL_VERDICT_SCHEMA_V1}`);
229
230
  }
230
231
  const corpus = asRecord(record.corpus, `${source}.corpus`);
@@ -1,4 +1,6 @@
1
- export const EVAL_EXECUTION_ENVELOPE_SCHEMA_V1 = "clio.eval.execution-envelope.v1" as const;
1
+ import { normalizeEvalSchemaId } from "./naming.js";
2
+
3
+ export const EVAL_EXECUTION_ENVELOPE_SCHEMA_V1 = "clio-coder.eval.execution-envelope.v1" as const;
2
4
 
3
5
  export const EVAL_EXECUTION_MATRIX_DIMENSIONS_V1 = [
4
6
  "prompt",
@@ -56,7 +58,7 @@ export interface EvalExecutionEnvelopeV1 {
56
58
 
57
59
  export function parseEvalExecutionEnvelopeV1(value: unknown, source = "execution envelope"): EvalExecutionEnvelopeV1 {
58
60
  const record = asRecord(value, source);
59
- if (record.schema !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
61
+ if (normalizeEvalSchemaId(record.schema) !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
60
62
  throw new Error(`${source}.schema: expected ${EVAL_EXECUTION_ENVELOPE_SCHEMA_V1}`);
61
63
  }
62
64
  const prompt = asRecord(record.prompt, `${source}.prompt`);
@@ -0,0 +1,10 @@
1
+ /** Legacy eval identifiers are normalized only after decoding; writers use canonical schema constants. */
2
+ export function normalizeEvalSchemaId(value: unknown): unknown {
3
+ return typeof value === "string" && value.startsWith("clio.eval.")
4
+ ? `clio-coder.eval.${value.slice("clio.eval.".length)}`
5
+ : value;
6
+ }
7
+
8
+ export function normalizeEvalRunnerKind(value: unknown): unknown {
9
+ return value === "clio-run" ? "clio-coder-run" : value;
10
+ }
@@ -30,6 +30,37 @@ export function parseEvalServingConfigurationV1(value: unknown, source: string):
30
30
  };
31
31
  }
32
32
 
33
+ /**
34
+ * The serving facts an artifact was produced under.
35
+ *
36
+ * An artifact written before the observation existed has no record of its own,
37
+ * so the matrix it declared is the best available reading and the missing
38
+ * fields stay null rather than being invented. This lives beside
39
+ * `sameEvalServingConfiguration` because the two are one rule: what a
40
+ * comparison reads, and when it decides two readings agree. Anything asking
41
+ * whether two eval runs are comparable must go through both, or it is answering
42
+ * a different question from the one `eval compare` answers.
43
+ *
44
+ * The parameter is structural rather than `EvalArtifactV4` so this module stays
45
+ * free of an import cycle through `schema/artifact.ts`.
46
+ */
47
+ export function evalServingConfigurationOf(artifact: {
48
+ readonly servingConfiguration?: EvalServingConfigurationV1;
49
+ readonly matrix: { readonly target: string; readonly model: string | null; readonly thinking: string | null };
50
+ }): EvalServingConfigurationV1 {
51
+ return (
52
+ artifact.servingConfiguration ?? {
53
+ targetId: artifact.matrix.target,
54
+ runtimeId: null,
55
+ modelId: artifact.matrix.model,
56
+ serverBuild: null,
57
+ total_slots: null,
58
+ thinkingLevel: artifact.matrix.thinking,
59
+ compiledPromptHash: null,
60
+ }
61
+ );
62
+ }
63
+
33
64
  export function sameEvalServingConfiguration(
34
65
  left: EvalServingConfigurationV1,
35
66
  right: EvalServingConfigurationV1,