@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
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import { existsSync, lstatSync, readdirSync, readFileSync, realpathSync, type Stats, statSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
5
- import { type ClioSettings, readSettings, settingsPath, updateSettings } from "../../core/config.js";
5
+ import { type ClioSettings, readSettings, settingsPath, updateSettings, validateSettings } from "../../core/config.js";
6
6
  import { DEFAULT_SETTINGS } from "../../core/defaults.js";
7
7
  import { readClioVersion } from "../../core/package-root.js";
8
8
  import {
@@ -18,6 +18,7 @@ import {
18
18
  parseAgentRecipeSchema,
19
19
  parseFleetContract,
20
20
  } from "../agents/index.js";
21
+ import { migrateSettingsV1Document } from "../lifecycle/migrations/2026-09-01-settings-v2.js";
21
22
 
22
23
  export type ShareScope = "project" | "user";
23
24
  export type ShareEntryType = "project-context" | "prompt" | "skill" | "agent" | "fleet" | "settings" | "extension";
@@ -43,14 +44,14 @@ export interface ShareArchiveManifestFile {
43
44
  }
44
45
 
45
46
  export interface ShareArchiveManifest {
46
- format: "clio.share.v1";
47
- clioVersion: string;
47
+ format: "clio-coder.share.v1";
48
+ clioCoderVersion: string;
48
49
  createdAt: string;
49
50
  files: ShareArchiveManifestFile[];
50
51
  }
51
52
 
52
53
  export interface ClioShareArchive {
53
- kind: "clio-share-archive";
54
+ kind: "clio-coder-share-archive";
54
55
  formatVersion: 1;
55
56
  manifest: ShareArchiveManifest;
56
57
  files: ShareArchiveFile[];
@@ -194,17 +195,49 @@ function addTree(
194
195
 
195
196
  function settingsFragment(settings: Readonly<ClioSettings>): Record<string, unknown> {
196
197
  return {
197
- autonomy: settings.autonomy,
198
- scope: settings.scope,
199
- budget: settings.budget,
200
- theme: settings.theme,
201
- terminal: settings.terminal,
202
- keybindings: settings.keybindings,
203
- compaction: settings.compaction,
204
- retry: settings.retry,
198
+ version: 2,
199
+ chat: {
200
+ modelPicker: { cycleSet: [...settings.chat.modelPicker.cycleSet] },
201
+ retry: structuredClone(settings.chat.retry),
202
+ },
203
+ fleet: { concurrency: settings.fleet.concurrency },
204
+ context: { compaction: structuredClone(settings.context.compaction) },
205
+ safety: {
206
+ autonomy: settings.safety.autonomy,
207
+ limits: { sessionCostUsd: settings.safety.limits.sessionCostUsd },
208
+ },
209
+ interface: structuredClone(settings.interface),
205
210
  };
206
211
  }
207
212
 
213
+ const SETTINGS_FRAGMENT_ROOTS = ["chat", "fleet", "context", "safety", "interface"] as const;
214
+
215
+ function normalizedSettingsFragment(parsed: unknown): Record<string, unknown> {
216
+ if (!isRecord(parsed)) throw new Error("settings fragment must be a YAML object");
217
+ let normalized = parsed;
218
+ if (parsed.version === undefined || parsed.version === 1) {
219
+ normalized = migrateSettingsV1Document(parsed).document;
220
+ } else if (parsed.version !== 2) {
221
+ throw new Error(`settings fragment version must be 1 or 2, got ${String(parsed.version)}`);
222
+ }
223
+ const validation = validateSettings(normalized);
224
+ if (validation.issues.length > 0) {
225
+ throw new Error(
226
+ `invalid settings fragment: ${validation.issues.map((issue) => `${issue.path}: ${issue.message}`).join("; ")}`,
227
+ );
228
+ }
229
+ return normalized;
230
+ }
231
+
232
+ function mergeFragmentValue(current: unknown, fragment: unknown): unknown {
233
+ if (!isRecord(current) || !isRecord(fragment)) return structuredClone(fragment);
234
+ const merged: Record<string, unknown> = { ...current };
235
+ for (const [key, value] of Object.entries(fragment)) {
236
+ merged[key] = mergeFragmentValue(merged[key], value);
237
+ }
238
+ return merged;
239
+ }
240
+
208
241
  function requestedScopes(scope: ShareExportOptions["scope"]): ShareScope[] {
209
242
  if (scope === "both") return ["project", "user"];
210
243
  return [scope ?? "project"];
@@ -314,11 +347,11 @@ export function createShareArchive(options: ShareExportOptions = {}): ClioShareA
314
347
 
315
348
  const manifestFiles = files.map(({ data: _data, encoding: _encoding, ...entry }) => entry);
316
349
  return {
317
- kind: "clio-share-archive",
350
+ kind: "clio-coder-share-archive",
318
351
  formatVersion: 1,
319
352
  manifest: {
320
- format: "clio.share.v1",
321
- clioVersion: readClioVersion(),
353
+ format: "clio-coder.share.v1",
354
+ clioCoderVersion: readClioVersion(),
322
355
  createdAt: new Date().toISOString(),
323
356
  files: manifestFiles,
324
357
  },
@@ -337,13 +370,33 @@ function decodeArchiveFile(entry: ShareArchiveFile): Buffer {
337
370
  }
338
371
 
339
372
  function parseArchive(raw: unknown): ClioShareArchive {
340
- if (!isRecord(raw) || raw.kind !== "clio-share-archive" || raw.formatVersion !== 1 || !isRecord(raw.manifest)) {
373
+ if (
374
+ !isRecord(raw) ||
375
+ (raw.kind !== "clio-coder-share-archive" && raw.kind !== "clio-share-archive") ||
376
+ raw.formatVersion !== 1 ||
377
+ !isRecord(raw.manifest)
378
+ ) {
341
379
  throw new Error("not a Clio share archive v1");
342
380
  }
343
- if (raw.manifest.format !== "clio.share.v1" || !Array.isArray(raw.files)) {
381
+ if (
382
+ (raw.manifest.format !== "clio-coder.share.v1" && raw.manifest.format !== "clio.share.v1") ||
383
+ !Array.isArray(raw.files)
384
+ ) {
344
385
  throw new Error("share archive manifest is malformed");
345
386
  }
346
- const archive = raw as unknown as ClioShareArchive;
387
+ const clioCoderVersion = raw.manifest.clioCoderVersion ?? raw.manifest.clioVersion;
388
+ if (typeof clioCoderVersion !== "string") throw new Error("share archive manifest is malformed");
389
+ const archive: ClioShareArchive = {
390
+ kind: "clio-coder-share-archive",
391
+ formatVersion: 1,
392
+ manifest: {
393
+ format: "clio-coder.share.v1",
394
+ clioCoderVersion,
395
+ createdAt: raw.manifest.createdAt as string,
396
+ files: raw.manifest.files as ShareArchiveManifestFile[],
397
+ },
398
+ files: raw.files as ShareArchiveFile[],
399
+ };
347
400
  const allowedTypes = new Set<ShareEntryType>([
348
401
  "project-context",
349
402
  "prompt",
@@ -558,12 +611,12 @@ function preflightImportTargets(
558
611
  function versionDiagnostics(archive: ClioShareArchive): ShareDiagnostic[] {
559
612
  const current = readClioVersion();
560
613
  const [curMajor, curMinor] = current.split(".");
561
- const [arcMajor, arcMinor] = archive.manifest.clioVersion.split(".");
614
+ const [arcMajor, arcMinor] = archive.manifest.clioCoderVersion.split(".");
562
615
  if (curMajor !== arcMajor || curMinor !== arcMinor) {
563
616
  return [
564
617
  {
565
618
  type: "warning",
566
- message: `archive was created by Clio ${archive.manifest.clioVersion}; current Clio is ${current}`,
619
+ message: `archive was created by Clio ${archive.manifest.clioCoderVersion}; current Clio is ${current}`,
567
620
  },
568
621
  ];
569
622
  }
@@ -571,12 +624,18 @@ function versionDiagnostics(archive: ClioShareArchive): ShareDiagnostic[] {
571
624
  }
572
625
 
573
626
  function settingsPlan(buffer: Buffer, options: ShareImportOptions): ShareDiagnostic[] {
574
- const parsed = parseYaml(buffer.toString("utf8")) as unknown;
575
- if (!isRecord(parsed)) return [{ type: "error", message: "settings fragment must be a YAML object" }];
627
+ let parsed: Record<string, unknown>;
628
+ try {
629
+ parsed = normalizedSettingsFragment(parseYaml(buffer.toString("utf8")) as unknown);
630
+ } catch (error) {
631
+ return [{ type: "error", message: error instanceof Error ? error.message : String(error) }];
632
+ }
576
633
  const settingsTarget = settingsFilePath();
577
634
  const current = settingsFragment(existsSync(settingsTarget) ? readSettings() : DEFAULT_SETTINGS);
578
635
  const diagnostics: ShareDiagnostic[] = [];
579
- for (const [key, value] of Object.entries(parsed)) {
636
+ for (const [key, value] of Object.entries(parsed).filter(([key]) =>
637
+ (SETTINGS_FRAGMENT_ROOTS as ReadonlyArray<string>).includes(key),
638
+ )) {
580
639
  if (key in current && JSON.stringify(current[key]) !== JSON.stringify(value)) {
581
640
  diagnostics.push({
582
641
  type: "conflict",
@@ -664,25 +723,15 @@ export function planShareImport(filePath: string, options: ShareImportOptions =
664
723
  }
665
724
 
666
725
  function mergeSettingsFragment(buffer: Buffer): string {
667
- const parsed = parseYaml(buffer.toString("utf8")) as unknown;
668
- if (!isRecord(parsed)) throw new Error("settings fragment must be a YAML object");
726
+ const parsed = normalizedSettingsFragment(parseYaml(buffer.toString("utf8")) as unknown);
669
727
  // Single-writer rule: the merge goes through updateSettings (lock + strict
670
728
  // re-validation), so an invalid fragment throws here instead of landing on
671
729
  // disk. No backup sidecar: settings.yaml is machine-owned and versioned by
672
730
  // the importer's own plan/diagnostics flow.
673
731
  updateSettings((settings) => {
674
732
  const next = settings as unknown as Record<string, unknown>;
675
- for (const key of [
676
- "autonomy",
677
- "scope",
678
- "budget",
679
- "theme",
680
- "terminal",
681
- "keybindings",
682
- "compaction",
683
- "retry",
684
- ] as const) {
685
- if (key in parsed) next[key] = parsed[key];
733
+ for (const key of SETTINGS_FRAGMENT_ROOTS) {
734
+ if (key in parsed) next[key] = mergeFragmentValue(next[key], parsed[key]);
686
735
  }
687
736
  });
688
737
  return settingsPath();
@@ -0,0 +1,175 @@
1
+ import { gunzipSync, inflateRawSync } from "node:zlib";
2
+
3
+ /**
4
+ * Just enough zip and tar.gz reading to unpack a pinned release asset.
5
+ *
6
+ * Node ships neither reader, and the alternatives were a dependency or shelling
7
+ * out to `unzip` and `tar`. A dependency for two hundred lines of well-specified
8
+ * format is a poor trade, and shelling out makes the install fail on a machine
9
+ * that has one of the two but not the other, which is exactly the machine a
10
+ * vendored-tool installer exists to serve. Both readers are deliberately narrow:
11
+ * they read the members the registry names and refuse anything they do not
12
+ * understand rather than guessing.
13
+ *
14
+ * The bytes reaching here have already been checksum-verified against the pin,
15
+ * so these are not parsing hostile input. The size cap and the path checks are
16
+ * belt and braces for the day a pin is updated carelessly.
17
+ */
18
+
19
+ /** One file read out of an archive. */
20
+ export interface ArchiveEntry {
21
+ path: string;
22
+ data: Buffer;
23
+ /** Unix mode when the archive records one, otherwise null. */
24
+ mode: number | null;
25
+ }
26
+
27
+ /** Refuse to materialize more than this from one asset. */
28
+ const MAX_TOTAL_UNCOMPRESSED_BYTES = 512 * 1024 * 1024;
29
+
30
+ const ZIP_EOCD_SIGNATURE = 0x06054b50;
31
+ const ZIP_CENTRAL_SIGNATURE = 0x02014b50;
32
+ const ZIP_LOCAL_SIGNATURE = 0x04034b50;
33
+ const ZIP_STORED = 0;
34
+ const ZIP_DEFLATED = 8;
35
+
36
+ /** Every regular file in a zip, keyed by its path inside the archive. */
37
+ export function readZipEntries(buffer: Buffer): Map<string, ArchiveEntry> {
38
+ const eocd = findEndOfCentralDirectory(buffer);
39
+ if (eocd < 0) throw new Error("not a zip archive: end-of-central-directory record not found");
40
+ const entryCount = buffer.readUInt16LE(eocd + 10);
41
+ let cursor = buffer.readUInt32LE(eocd + 16);
42
+ const entries = new Map<string, ArchiveEntry>();
43
+ let total = 0;
44
+
45
+ for (let i = 0; i < entryCount; i += 1) {
46
+ if (cursor + 46 > buffer.length || buffer.readUInt32LE(cursor) !== ZIP_CENTRAL_SIGNATURE) {
47
+ throw new Error(`zip central directory is malformed at entry ${i}`);
48
+ }
49
+ const method = buffer.readUInt16LE(cursor + 10);
50
+ const compressedSize = buffer.readUInt32LE(cursor + 20);
51
+ const uncompressedSize = buffer.readUInt32LE(cursor + 24);
52
+ const nameLength = buffer.readUInt16LE(cursor + 28);
53
+ const extraLength = buffer.readUInt16LE(cursor + 30);
54
+ const commentLength = buffer.readUInt16LE(cursor + 32);
55
+ const externalAttributes = buffer.readUInt32LE(cursor + 38);
56
+ const localOffset = buffer.readUInt32LE(cursor + 42);
57
+ const name = buffer.toString("utf8", cursor + 46, cursor + 46 + nameLength);
58
+ cursor += 46 + nameLength + extraLength + commentLength;
59
+
60
+ if (name.endsWith("/")) continue;
61
+ assertSafeMember(name);
62
+ total += uncompressedSize;
63
+ if (total > MAX_TOTAL_UNCOMPRESSED_BYTES) throw new Error("zip archive expands beyond the size cap");
64
+
65
+ if (localOffset + 30 > buffer.length || buffer.readUInt32LE(localOffset) !== ZIP_LOCAL_SIGNATURE) {
66
+ throw new Error(`zip local header is malformed for ${name}`);
67
+ }
68
+ const localNameLength = buffer.readUInt16LE(localOffset + 26);
69
+ const localExtraLength = buffer.readUInt16LE(localOffset + 28);
70
+ const dataStart = localOffset + 30 + localNameLength + localExtraLength;
71
+ const raw = buffer.subarray(dataStart, dataStart + compressedSize);
72
+ const data =
73
+ method === ZIP_STORED
74
+ ? Buffer.from(raw)
75
+ : method === ZIP_DEFLATED
76
+ ? inflateRawSync(raw)
77
+ : (() => {
78
+ throw new Error(`unsupported zip compression method ${method} for ${name}`);
79
+ })();
80
+ // The high 16 bits of the external attributes carry the unix mode when the
81
+ // archive was produced on a unix host, which is where the executable bit
82
+ // on a release binary lives.
83
+ const unixMode = (externalAttributes >>> 16) & 0o7777;
84
+ entries.set(name, { path: name, data, mode: unixMode === 0 ? null : unixMode });
85
+ }
86
+ return entries;
87
+ }
88
+
89
+ /** Every regular file in a gzipped tar, keyed by its path inside the archive. */
90
+ export function readTarGzEntries(buffer: Buffer): Map<string, ArchiveEntry> {
91
+ const tar = gunzipSync(buffer);
92
+ const entries = new Map<string, ArchiveEntry>();
93
+ let offset = 0;
94
+ let total = 0;
95
+ let pendingLongName: string | null = null;
96
+
97
+ while (offset + 512 <= tar.length) {
98
+ const header = tar.subarray(offset, offset + 512);
99
+ // Two consecutive zero blocks end the archive; one is enough to stop.
100
+ if (header.every((byte) => byte === 0)) break;
101
+ const rawName = readTarString(header, 0, 100);
102
+ const prefix = readTarString(header, 345, 155);
103
+ const size = readTarOctal(header, 124, 12);
104
+ const mode = readTarOctal(header, 100, 8);
105
+ const typeFlag = String.fromCharCode(header[156] ?? 0);
106
+ const dataStart = offset + 512;
107
+ const padded = Math.ceil(size / 512) * 512;
108
+ offset = dataStart + padded;
109
+
110
+ // GNU long-name extension: this block's payload is the next block's name.
111
+ if (typeFlag === "L") {
112
+ pendingLongName = tar.toString("utf8", dataStart, dataStart + size).replace(/\0+$/, "");
113
+ continue;
114
+ }
115
+ // PAX headers and directories carry no file content Clio wants.
116
+ if (typeFlag === "x" || typeFlag === "g" || typeFlag === "5") {
117
+ pendingLongName = null;
118
+ continue;
119
+ }
120
+ if (typeFlag !== "0" && typeFlag !== "\0") {
121
+ pendingLongName = null;
122
+ continue;
123
+ }
124
+
125
+ const name = pendingLongName ?? (prefix.length > 0 ? `${prefix}/${rawName}` : rawName);
126
+ pendingLongName = null;
127
+ if (name.length === 0 || name.endsWith("/")) continue;
128
+ assertSafeMember(name);
129
+ total += size;
130
+ if (total > MAX_TOTAL_UNCOMPRESSED_BYTES) throw new Error("tar archive expands beyond the size cap");
131
+ entries.set(name, {
132
+ path: name,
133
+ data: Buffer.from(tar.subarray(dataStart, dataStart + size)),
134
+ mode: mode === 0 ? null : mode & 0o7777,
135
+ });
136
+ }
137
+ return entries;
138
+ }
139
+
140
+ function findEndOfCentralDirectory(buffer: Buffer): number {
141
+ // The record is at the very end unless a zip comment follows it, and the
142
+ // comment length field is 16 bits, so 22 + 65535 bytes is the whole search.
143
+ const start = Math.max(0, buffer.length - (22 + 0xffff));
144
+ for (let i = buffer.length - 22; i >= start; i -= 1) {
145
+ if (buffer.readUInt32LE(i) === ZIP_EOCD_SIGNATURE) return i;
146
+ }
147
+ return -1;
148
+ }
149
+
150
+ function readTarString(header: Buffer, offset: number, length: number): string {
151
+ const slice = header.subarray(offset, offset + length);
152
+ const end = slice.indexOf(0);
153
+ return slice.toString("utf8", 0, end === -1 ? slice.length : end);
154
+ }
155
+
156
+ function readTarOctal(header: Buffer, offset: number, length: number): number {
157
+ const text = readTarString(header, offset, length).trim();
158
+ if (text.length === 0) return 0;
159
+ const value = Number.parseInt(text, 8);
160
+ return Number.isNaN(value) ? 0 : value;
161
+ }
162
+
163
+ /**
164
+ * An archive member's path is used to look up a registry-named member, never to
165
+ * build a write path, but a member escaping the archive root still means the
166
+ * asset is not what the pin says it is.
167
+ */
168
+ function assertSafeMember(name: string): void {
169
+ if (name.startsWith("/") || name.startsWith("\\") || /^[A-Za-z]:/.test(name)) {
170
+ throw new Error(`archive member has an absolute path: ${name}`);
171
+ }
172
+ if (name.split(/[/\\]/).includes("..")) {
173
+ throw new Error(`archive member escapes the archive root: ${name}`);
174
+ }
175
+ }
@@ -0,0 +1,28 @@
1
+ import type { DomainContract } from "../../core/domain-loader.js";
2
+ import type { ToolInstallOptions, ToolInstallResult } from "./install.js";
3
+ import type { ToolRemoveOptions, ToolRemoveResult } from "./remove.js";
4
+ import type { PinnedTool, ToolResolution, ToolStatus } from "./types.js";
5
+
6
+ export interface ToolchainContract extends DomainContract {
7
+ /** The pinned table, in registry order. */
8
+ list(): ReadonlyArray<PinnedTool>;
9
+ /** One row by id. */
10
+ get(id: string): PinnedTool | null;
11
+ /** Resolve an executable name through PATH, then the vendored pin, then none. */
12
+ resolve(name: string): ToolResolution;
13
+ /** Per-entry state for one row. */
14
+ status(id: string): ToolStatus | null;
15
+ /** Per-entry state for every row. */
16
+ statuses(): ToolStatus[];
17
+ /**
18
+ * Download and vendor one tool. Only ever called from an explicit operator
19
+ * command; nothing on a startup path may reach it.
20
+ */
21
+ install(id: string, options?: ToolInstallOptions): Promise<ToolInstallResult>;
22
+ /**
23
+ * Delete every vendored version of one tool. Nothing outside
24
+ * `<data>/tools/<id>` is reachable, and a tool with nothing installed is a
25
+ * successful no-op rather than an error.
26
+ */
27
+ remove(id: string, options?: ToolRemoveOptions): ToolRemoveResult;
28
+ }
@@ -0,0 +1,47 @@
1
+ import type { DomainBundle, DomainContext, DomainExtension } from "../../core/domain-loader.js";
2
+ import type { ToolchainContract } from "./contract.js";
3
+ import type { ToolInstallOptions } from "./install.js";
4
+ import { findPinnedTool, PINNED_TOOLS } from "./registry.js";
5
+ import { removeTool, type ToolRemoveOptions } from "./remove.js";
6
+ import { resolveToolBinary, toolStatus, toolStatuses } from "./resolve.js";
7
+
8
+ export function createToolchainBundle(_context: DomainContext): DomainBundle<ToolchainContract> {
9
+ const extension: DomainExtension = {
10
+ start() {
11
+ // Nothing to start. Resolution is on demand and installs are operator
12
+ // commands, so loading the domain touches neither the network nor disk.
13
+ return undefined;
14
+ },
15
+ };
16
+ const contract: ToolchainContract = {
17
+ list() {
18
+ return PINNED_TOOLS;
19
+ },
20
+ get(id) {
21
+ return findPinnedTool(id);
22
+ },
23
+ resolve(name) {
24
+ return resolveToolBinary(name);
25
+ },
26
+ status(id) {
27
+ const entry = findPinnedTool(id);
28
+ return entry === null ? null : toolStatus(entry);
29
+ },
30
+ statuses() {
31
+ return toolStatuses();
32
+ },
33
+ async install(id: string, options: ToolInstallOptions = {}) {
34
+ // Imported lazily so the installer's archive readers stay out of every
35
+ // graph that only ever resolves a binary.
36
+ const { installTool } = await import("./install.js");
37
+ return installTool(id, options);
38
+ },
39
+ remove(id: string, options: ToolRemoveOptions = {}) {
40
+ // Statically imported, unlike install: removal is a readdir and an
41
+ // unlink, so it carries none of the archive readers that keep the
42
+ // installer off graphs which only ever resolve a binary.
43
+ return removeTool(id, options);
44
+ },
45
+ };
46
+ return { extension, contract };
47
+ }
@@ -0,0 +1,39 @@
1
+ import type { DomainModule } from "../../core/domain-loader.js";
2
+ import type { ToolchainContract } from "./contract.js";
3
+ import { createToolchainBundle } from "./extension.js";
4
+ import { ToolchainManifest } from "./manifest.js";
5
+
6
+ export const ToolchainDomainModule: DomainModule<ToolchainContract> = {
7
+ manifest: ToolchainManifest,
8
+ createExtension: createToolchainBundle,
9
+ };
10
+
11
+ export type { ToolchainContract } from "./contract.js";
12
+ export type { ToolFetcher, ToolInstallOptions, ToolInstallResult } from "./install.js";
13
+ export { installPinnedTool, installTool } from "./install.js";
14
+ export { ToolchainManifest } from "./manifest.js";
15
+ export { toolchainRoot, toolVersionDir, vendoredBinaryPath } from "./paths.js";
16
+ export { currentToolPlatform, findPinnedTool, findPinnedToolByBinary, PINNED_TOOLS } from "./registry.js";
17
+ export type { ToolRemoveOptions, ToolRemoveResult } from "./remove.js";
18
+ export { installedToolVersions, pruneSupersededVersions, removeTool, STALE_STAGING_MS } from "./remove.js";
19
+ export {
20
+ describeFloorRejection,
21
+ describeResolution,
22
+ installRemedy,
23
+ resolveEntryBinary,
24
+ resolveToolBinary,
25
+ toolStatus,
26
+ toolStatuses,
27
+ } from "./resolve.js";
28
+ export type {
29
+ PinnedTool,
30
+ PinnedToolDocument,
31
+ PinnedToolDownload,
32
+ ToolArchiveKind,
33
+ ToolPathCandidate,
34
+ ToolPlatform,
35
+ ToolResolution,
36
+ ToolSource,
37
+ ToolStatus,
38
+ } from "./types.js";
39
+ export { compareVersions, parseVersion, resetVersionProbeCache, satisfiesMinimum } from "./version.js";