@iowarp/clio-coder 0.4.0 → 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 (581) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +116 -16
  3. package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
  4. package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
  7. package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
  8. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  9. package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
  10. package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
  11. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  12. package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
  13. package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
  14. package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
  15. package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
  16. package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
  17. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  18. package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
  19. package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
  20. package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
  21. package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
  22. package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
  23. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  24. package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
  25. package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
  26. package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
  27. package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
  28. package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
  29. package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
  30. package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
  33. package/dist/chunk-AP73CFDC.js +308 -0
  34. package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
  35. package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
  36. package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
  37. package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
  38. package/dist/chunk-BTK3SSSK.js +67 -0
  39. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  40. package/dist/chunk-BWW4HLO4.js +301 -0
  41. package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
  42. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  43. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  44. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  45. package/dist/chunk-D7E7WCDF.js +27 -0
  46. package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
  47. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  48. package/dist/chunk-EIMVLWB3.js +1842 -0
  49. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  50. package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
  51. package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
  52. package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
  53. package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
  54. package/dist/chunk-HJWWJ6IL.js +184 -0
  55. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  56. package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
  57. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  58. package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
  59. package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
  60. package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
  61. package/dist/chunk-J5LZHVIT.js +284 -0
  62. package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
  63. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  64. package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
  65. package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
  66. package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
  67. package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
  68. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  69. package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
  70. package/dist/chunk-NDDGJUXD.js +81 -0
  71. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  72. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  73. package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
  74. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  75. package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
  76. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  77. package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
  78. package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
  79. package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
  80. package/dist/chunk-QTFGO774.js +644 -0
  81. package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
  82. package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
  83. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  84. package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
  85. package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
  86. package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
  87. package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
  88. package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
  89. package/dist/chunk-U2WB7TZS.js +271 -0
  90. package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
  91. package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
  92. package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
  93. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  94. package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
  95. package/dist/chunk-VKFQTNDV.js +66 -0
  96. package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
  97. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  98. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  99. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  100. package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
  101. package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
  102. package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
  103. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  104. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  105. package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
  106. package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
  107. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  108. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  109. package/dist/cli/index.js +36 -36
  110. package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
  111. package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
  112. package/dist/codewiki/build-worker.js +1 -1
  113. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  114. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  115. package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
  116. package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
  117. package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
  118. package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
  119. package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
  120. package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
  121. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
  122. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
  123. package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
  124. package/dist/doctor-ZGPEGHIP.js +772 -0
  125. package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
  126. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
  127. package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
  128. package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
  129. package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
  130. package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
  131. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
  132. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
  133. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
  134. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
  135. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
  136. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
  137. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
  138. package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
  139. package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
  140. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  141. package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
  142. package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
  143. package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
  144. package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
  145. package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
  146. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
  147. package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
  148. package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
  149. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  150. package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
  151. package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
  152. package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
  153. package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
  154. package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
  155. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
  156. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
  157. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
  158. package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
  159. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  160. package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
  161. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
  162. package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
  163. package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
  164. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  165. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  166. package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
  167. package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
  168. package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
  169. package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
  170. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
  171. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
  172. package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
  173. package/dist/worker/entry.js +57 -52
  174. package/docs/acp.md +1 -1
  175. package/docs/built-in-agents.md +40 -32
  176. package/docs/commands-and-modes.md +9 -3
  177. package/docs/config-knobs-audit.md +3 -0
  178. package/docs/configuration-and-targets.md +105 -164
  179. package/docs/environment-variables.md +2 -1
  180. package/docs/exit-codes-and-output.md +2 -0
  181. package/docs/fleet-demo-runbook.md +6 -3
  182. package/docs/fleet-dispatch.md +8 -6
  183. package/docs/installation-and-lifecycle.md +1 -1
  184. package/docs/release-cut-checklist.md +164 -177
  185. package/docs/trace-store.md +15 -10
  186. package/docs/troubleshooting.md +1 -1
  187. package/evals/README.md +5 -0
  188. package/evals/behavioral-corpus-grader.mjs +103 -0
  189. package/evals/behavioral-machinery-baseline.json +2276 -0
  190. package/evals/behavioral-machinery-driver.ts +250 -0
  191. package/evals/behavioral-machinery-support.ts +253 -0
  192. package/evals/behavioral-machinery.yaml +614 -0
  193. package/evals/behavioral-model-negative-control.yaml +68 -0
  194. package/evals/behavioral-model.yaml +216 -0
  195. package/evals/fixtures/behavioral-facts.txt +3 -0
  196. package/evals/fixtures/behavioral-main.ts +7 -0
  197. package/evals/fixtures/decoy/note.txt +2 -0
  198. package/evals/fixtures/private/credentials.txt +1 -0
  199. package/evals/tracked-metrics-baseline.yaml +229 -0
  200. package/evals/tracked-metrics-grader.mjs +129 -0
  201. package/package.json +5 -15
  202. package/skills/README.md +6 -6
  203. package/skills/coding/ast-grep/SKILL.md +8 -2
  204. package/skills/coding/coding-standards/SKILL.md +8 -2
  205. package/skills/coding/prototype/SKILL.md +8 -2
  206. package/skills/coding/tdd/SKILL.md +8 -2
  207. package/skills/context/context-handoff/SKILL.md +12 -3
  208. package/skills/context/context-handoff/evals.md +3 -3
  209. package/skills/context/context-prime/SKILL.md +8 -2
  210. package/skills/context/context-prime/evals.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +9 -4
  212. package/skills/git/file-ticket/evals.md +2 -2
  213. package/skills/git/fix-issue/SKILL.md +12 -5
  214. package/skills/git/fix-issue/evals.md +4 -4
  215. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  216. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  217. package/skills/git/ship/SKILL.md +9 -3
  218. package/skills/git/ship/evals.md +4 -4
  219. package/skills/git/worktree-create/SKILL.md +7 -2
  220. package/skills/git/worktree-create/evals.md +6 -6
  221. package/skills/git/worktree-merge/SKILL.md +7 -2
  222. package/skills/git/worktree-merge/evals.md +6 -6
  223. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  224. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  225. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  226. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  227. package/skills/meta/credentials/SKILL.md +9 -2
  228. package/skills/meta/find-skills/SKILL.md +8 -2
  229. package/skills/meta/herdr/SKILL.md +8 -2
  230. package/skills/meta/skill-craft/SKILL.md +21 -4
  231. package/skills/planning/architecture/SKILL.md +9 -3
  232. package/skills/planning/backlog/SKILL.md +8 -2
  233. package/skills/planning/prd/SKILL.md +8 -2
  234. package/skills/planning/product-intent/SKILL.md +8 -2
  235. package/skills/planning/tech-spec/SKILL.md +9 -3
  236. package/skills/registry.yaml +66 -66
  237. package/skills/research/arxiv-literature/SKILL.md +8 -2
  238. package/skills/research/experiment-protocol/SKILL.md +9 -2
  239. package/skills/research/scientific-debugging/SKILL.md +9 -2
  240. package/skills/research/scientific-debugging/evals.md +2 -2
  241. package/skills/research/scientific-modernization/SKILL.md +9 -2
  242. package/skills/skill-marketplace.json +257 -38
  243. package/skills/workflow/cut-it/SKILL.md +10 -2
  244. package/skills/workflow/design-council/SKILL.md +11 -2
  245. package/skills/workflow/grill-me/SKILL.md +8 -2
  246. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  247. package/src/cli/acp.ts +2 -2
  248. package/src/cli/auth.ts +2 -2
  249. package/src/cli/bootstrap-generate.ts +5 -5
  250. package/src/cli/clio.ts +6 -1
  251. package/src/cli/config-inspect.ts +3 -3
  252. package/src/cli/configure-interop.ts +1 -1
  253. package/src/cli/configure.ts +27 -27
  254. package/src/cli/default-target.ts +1 -1
  255. package/src/cli/docs.ts +6 -6
  256. package/src/cli/doctor-naming.ts +323 -0
  257. package/src/cli/doctor-panes.ts +46 -14
  258. package/src/cli/doctor-toolchain.ts +29 -8
  259. package/src/cli/doctor.ts +15 -1
  260. package/src/cli/eval-inventory.ts +8 -8
  261. package/src/cli/evidence-detail.ts +1 -1
  262. package/src/cli/evidence-inventory.ts +1 -1
  263. package/src/cli/fleet-decisions.ts +1 -1
  264. package/src/cli/fleet-inspect.ts +1 -1
  265. package/src/cli/fleet-preflight.ts +1 -1
  266. package/src/cli/fleet-verify.ts +1 -1
  267. package/src/cli/fleet-view.ts +40 -23
  268. package/src/cli/fleet.ts +8 -5
  269. package/src/cli/interop-inspect.ts +2 -2
  270. package/src/cli/models.ts +3 -3
  271. package/src/cli/modes/print.ts +1 -1
  272. package/src/cli/reset.ts +1 -1
  273. package/src/cli/run.ts +11 -15
  274. package/src/cli/share.ts +1 -1
  275. package/src/cli/skills-eval.ts +11 -11
  276. package/src/cli/targets.ts +23 -24
  277. package/src/cli/trace-inspect.ts +1 -1
  278. package/src/cli/trace.ts +41 -0
  279. package/src/cli/uninstall.ts +2 -2
  280. package/src/cli/upgrade.ts +29 -34
  281. package/src/cli/usage.ts +2 -2
  282. package/src/cli/validate-model.ts +1 -1
  283. package/src/cli/verifiers-inspect.ts +1 -1
  284. package/src/cli/wiki-generate.ts +5 -5
  285. package/src/core/bash-exec.ts +1 -1
  286. package/src/core/boot-trace.ts +3 -3
  287. package/src/core/bus-trace.ts +2 -2
  288. package/src/core/compile-cache.ts +1 -1
  289. package/src/core/config.ts +1062 -886
  290. package/src/core/defaults.ts +321 -528
  291. package/src/core/domain-loader.ts +6 -4
  292. package/src/core/event-bus.ts +1 -1
  293. package/src/core/file-references.ts +78 -88
  294. package/src/core/git-commit-attribution.ts +3 -9
  295. package/src/core/guardrails.ts +24 -4
  296. package/src/core/naming-compat.ts +45 -0
  297. package/src/core/naming-events.ts +62 -0
  298. package/src/core/recent-models.ts +1 -7
  299. package/src/core/residency-protection.ts +4 -8
  300. package/src/core/resolve-config-value.ts +1 -1
  301. package/src/core/response-model-id.ts +0 -14
  302. package/src/core/session-routing.ts +84 -74
  303. package/src/core/skill-activation.ts +18 -0
  304. package/src/core/termination.ts +4 -4
  305. package/src/core/timers.ts +2 -12
  306. package/src/domains/agents/catalog.ts +2 -12
  307. package/src/domains/agents/extension.ts +3 -3
  308. package/src/domains/agents/registry.ts +7 -7
  309. package/src/domains/agents/result-contract.ts +1 -1
  310. package/src/domains/agents/spec.ts +0 -11
  311. package/src/domains/config/classify.ts +35 -47
  312. package/src/domains/config/extension.ts +5 -5
  313. package/src/domains/config/keybindings.ts +48 -47
  314. package/src/domains/config/watcher.ts +1 -1
  315. package/src/domains/context/codewiki/indexer.ts +1 -1
  316. package/src/domains/context/extension.ts +3 -3
  317. package/src/domains/context/prompt-context.ts +1 -1
  318. package/src/domains/context/wiki/assemble.ts +2 -2
  319. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  320. package/src/domains/context/working-set/replay/report.ts +1 -1
  321. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  322. package/src/domains/dispatch/active-route-planner.ts +2 -2
  323. package/src/domains/dispatch/agent-candidates.ts +1 -1
  324. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  325. package/src/domains/dispatch/agent-ledger.ts +1 -1
  326. package/src/domains/dispatch/assignment.ts +5 -5
  327. package/src/domains/dispatch/capacity-lease.ts +2 -5
  328. package/src/domains/dispatch/code-step.ts +1 -1
  329. package/src/domains/dispatch/contract.ts +2 -2
  330. package/src/domains/dispatch/extension.ts +65 -61
  331. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  332. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  333. package/src/domains/dispatch/fleet-run.ts +0 -7
  334. package/src/domains/dispatch/gate-decisions.ts +25 -14
  335. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  336. package/src/domains/dispatch/path-scope.ts +0 -61
  337. package/src/domains/dispatch/placement.ts +2 -2
  338. package/src/domains/dispatch/receipt-findings.ts +1 -1
  339. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  340. package/src/domains/dispatch/reservation-store.ts +0 -23
  341. package/src/domains/dispatch/route-decision.ts +1 -1
  342. package/src/domains/dispatch/route-history.ts +1 -1
  343. package/src/domains/dispatch/route-policy.ts +1 -1
  344. package/src/domains/dispatch/route-readiness.ts +0 -28
  345. package/src/domains/dispatch/run-event-journal.ts +6 -5
  346. package/src/domains/dispatch/tool-stats.ts +1 -1
  347. package/src/domains/dispatch/transport.ts +2 -19
  348. package/src/domains/dispatch/types.ts +3 -3
  349. package/src/domains/dispatch/worker-protocol.ts +2 -2
  350. package/src/domains/eval/artifacts/store.ts +5 -4
  351. package/src/domains/eval/compare/thresholds.ts +0 -8
  352. package/src/domains/eval/execution-provenance.ts +1 -1
  353. package/src/domains/eval/metrics/token-stream.ts +0 -7
  354. package/src/domains/eval/report.ts +1 -1
  355. package/src/domains/eval/runner.ts +1 -1
  356. package/src/domains/eval/runners/clio-run.ts +7 -6
  357. package/src/domains/eval/runners/external-command.ts +4 -3
  358. package/src/domains/eval/schema/artifact.ts +1 -1
  359. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  360. package/src/domains/eval/schema/behavioral.ts +7 -6
  361. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  362. package/src/domains/eval/schema/naming.ts +10 -0
  363. package/src/domains/eval/schema/suite.ts +2 -2
  364. package/src/domains/eval/schema/validate.ts +9 -5
  365. package/src/domains/eval/schema/verdict.ts +4 -2
  366. package/src/domains/eval/store.ts +12 -2
  367. package/src/domains/eval/suites/run.ts +12 -6
  368. package/src/domains/eval/types.ts +1 -1
  369. package/src/domains/eval/workspaces/git.ts +1 -1
  370. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  371. package/src/domains/evidence/build.ts +13 -5
  372. package/src/domains/interop/consent.ts +7 -7
  373. package/src/domains/interop/extension.ts +1 -1
  374. package/src/domains/lifecycle/doctor.ts +27 -21
  375. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  376. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  377. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  378. package/src/domains/lifecycle/migrations/index.ts +20 -1
  379. package/src/domains/lifecycle/naming-history.ts +153 -0
  380. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  381. package/src/domains/lifecycle/naming-resources.ts +261 -0
  382. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  383. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  384. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  385. package/src/domains/memory/task-memory-handoff.ts +6 -3
  386. package/src/domains/middleware/index.ts +7 -0
  387. package/src/domains/middleware/marketplace-offer.ts +339 -0
  388. package/src/domains/middleware/runtime.ts +2 -2
  389. package/src/domains/mux/contract.ts +157 -25
  390. package/src/domains/mux/detect.ts +29 -5
  391. package/src/domains/mux/dock-controller.ts +365 -0
  392. package/src/domains/mux/extension.ts +7 -1
  393. package/src/domains/mux/index.ts +20 -0
  394. package/src/domains/mux/operations.ts +28 -0
  395. package/src/domains/mux/protocol.ts +19 -6
  396. package/src/domains/mux/socket-client.ts +167 -19
  397. package/src/domains/mux/types.ts +49 -6
  398. package/src/domains/mux/yazi/event-stream.ts +6 -4
  399. package/src/domains/mux/yazi/profile.ts +1 -1
  400. package/src/domains/mux/yazi/session.ts +26 -3
  401. package/src/domains/observability/extension.ts +1 -1
  402. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  403. package/src/domains/observability/projection.ts +1 -1
  404. package/src/domains/observability/trace-store.ts +22 -12
  405. package/src/domains/prompts/compiler.ts +2 -2
  406. package/src/domains/prompts/extension.ts +3 -3
  407. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  408. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  409. package/src/domains/providers/extension.ts +5 -5
  410. package/src/domains/providers/knowledge-base-path.ts +1 -1
  411. package/src/domains/providers/model-runtime-capabilities.ts +14 -2
  412. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  413. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  414. package/src/domains/providers/plugins.ts +1 -1
  415. package/src/domains/providers/resolver.ts +1 -1
  416. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  417. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  418. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  419. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  420. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  421. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  422. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  423. package/src/domains/providers/types/knowledge-base.ts +13 -0
  424. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  425. package/src/domains/providers/types/target-descriptor.ts +3 -3
  426. package/src/domains/resources/extension.ts +1 -1
  427. package/src/domains/resources/library.ts +6 -6
  428. package/src/domains/resources/prompts/loader.ts +1 -1
  429. package/src/domains/resources/skills/content-hash.ts +7 -6
  430. package/src/domains/resources/skills/evals.ts +1 -1
  431. package/src/domains/resources/skills/install.ts +36 -12
  432. package/src/domains/resources/skills/loader.ts +39 -13
  433. package/src/domains/resources/skills/marketplace.ts +21 -2
  434. package/src/domains/resources/skills/promotion.ts +214 -0
  435. package/src/domains/safety/audit.ts +2 -2
  436. package/src/domains/safety/finish-contract.ts +2 -1
  437. package/src/domains/safety/run-effects.ts +1 -1
  438. package/src/domains/scheduling/extension.ts +4 -4
  439. package/src/domains/session/archive-readers.ts +9 -1
  440. package/src/domains/session/compaction/branch-summary.ts +4 -0
  441. package/src/domains/session/compaction/compact.ts +1 -1
  442. package/src/domains/session/compaction/tokens.ts +4 -0
  443. package/src/domains/session/context-accounting.ts +1 -1
  444. package/src/domains/session/decision-board.ts +1 -1
  445. package/src/domains/session/extension.ts +1 -1
  446. package/src/domains/session/handoff.ts +2 -2
  447. package/src/domains/session/prompt-manifest.ts +0 -5
  448. package/src/domains/session/protected-artifact-journal.ts +12 -6
  449. package/src/domains/session/retry.ts +1 -1
  450. package/src/domains/share/archive.ts +85 -36
  451. package/src/domains/toolchain/install.ts +1 -1
  452. package/src/engine/acp/adapter.ts +3 -3
  453. package/src/engine/acp/event-mapper.ts +3 -3
  454. package/src/engine/acp/server.ts +27 -26
  455. package/src/engine/acp/tool-mediator.ts +2 -2
  456. package/src/engine/acp/types.ts +1 -1
  457. package/src/engine/alcf-oauth.ts +5 -5
  458. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  459. package/src/engine/api-registry.ts +1 -1
  460. package/src/engine/apis/llamacpp-residency.ts +1 -19
  461. package/src/engine/apis/lmstudio.ts +1 -6
  462. package/src/engine/apis/ollama-native.ts +3 -3
  463. package/src/engine/apis/openai-completions.ts +2 -2
  464. package/src/engine/apis/residency.ts +3 -9
  465. package/src/engine/claude/sdk-module.ts +1 -12
  466. package/src/engine/claude/sdk-runtime.ts +6 -6
  467. package/src/engine/claude/subprocess-runtime.ts +1 -1
  468. package/src/engine/claude/tool-safety.ts +4 -4
  469. package/src/engine/loop-guard.ts +0 -5
  470. package/src/engine/session.ts +14 -7
  471. package/src/engine/tui-primitives.ts +1 -1
  472. package/src/engine/worker-events.ts +6 -6
  473. package/src/engine/worker-runtime.ts +14 -13
  474. package/src/entry/orchestrator.ts +107 -88
  475. package/src/interactive/application-controller.ts +21 -21
  476. package/src/interactive/bus-notices.ts +2 -2
  477. package/src/interactive/chat-loop.ts +8 -8
  478. package/src/interactive/chat-panel.ts +1 -1
  479. package/src/interactive/clio-editor.ts +105 -1
  480. package/src/interactive/context-activity.ts +8 -6
  481. package/src/interactive/context-meter.ts +3 -6
  482. package/src/interactive/context-overlay.ts +1 -1
  483. package/src/interactive/cost-overlay.ts +1 -1
  484. package/src/interactive/council-grid.ts +2 -2
  485. package/src/interactive/dispatch-board.ts +30 -33
  486. package/src/interactive/editor-bash.ts +21 -0
  487. package/src/interactive/editor-steer.ts +9 -4
  488. package/src/interactive/editor-submit.ts +24 -18
  489. package/src/interactive/external-editor.ts +1 -1
  490. package/src/interactive/file-reference-completion.ts +360 -0
  491. package/src/interactive/footer/dashboard.ts +15 -17
  492. package/src/interactive/footer/notifications.ts +14 -8
  493. package/src/interactive/footer/widgets.ts +2 -44
  494. package/src/interactive/interactive-application.ts +79 -59
  495. package/src/interactive/interactive-event-projection.ts +1 -1
  496. package/src/interactive/interactive-input-runtime.ts +2 -2
  497. package/src/interactive/interactive-presentation.ts +21 -16
  498. package/src/interactive/interactive-shell.ts +2 -2
  499. package/src/interactive/interactive-slash-runtime.ts +63 -17
  500. package/src/interactive/interactive-subscriptions.ts +1 -1
  501. package/src/interactive/interactive-tickers.ts +1 -1
  502. package/src/interactive/keybinding-manager.ts +4 -4
  503. package/src/interactive/layout.ts +1 -1
  504. package/src/interactive/memory-overlay.ts +2 -2
  505. package/src/interactive/modal-marker.ts +2 -21
  506. package/src/interactive/mutation-preview.ts +1 -1
  507. package/src/interactive/overlay-frame.ts +4 -12
  508. package/src/interactive/overlay-general-openers.ts +6 -2
  509. package/src/interactive/overlay-key-routing.ts +7 -7
  510. package/src/interactive/overlay-lifecycle.ts +1 -1
  511. package/src/interactive/overlay-model-selectors.ts +3 -3
  512. package/src/interactive/overlays/agents.ts +2 -2
  513. package/src/interactive/overlays/ask-user.ts +25 -11
  514. package/src/interactive/overlays/context-reset.ts +28 -4
  515. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  516. package/src/interactive/overlays/decisions.ts +4 -2
  517. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  518. package/src/interactive/overlays/handoff-review.ts +2 -2
  519. package/src/interactive/overlays/interop.ts +1 -1
  520. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  521. package/src/interactive/overlays/message-picker.ts +1 -1
  522. package/src/interactive/overlays/model-selector.ts +39 -31
  523. package/src/interactive/overlays/prompts.ts +10 -4
  524. package/src/interactive/overlays/session-selector.ts +2 -2
  525. package/src/interactive/overlays/settings.ts +339 -293
  526. package/src/interactive/overlays/side-question.ts +2 -2
  527. package/src/interactive/overlays/skills-hub.ts +8 -8
  528. package/src/interactive/overlays/tree-selector.ts +2 -2
  529. package/src/interactive/panes-runtime.ts +36 -10
  530. package/src/interactive/permission-overlay.ts +2 -2
  531. package/src/interactive/renderers/retry-status.ts +12 -4
  532. package/src/interactive/renderers/tool-execution.ts +4 -4
  533. package/src/interactive/session-transcript.ts +3 -3
  534. package/src/interactive/slash-autocomplete.ts +454 -165
  535. package/src/interactive/slash-commands.ts +279 -183
  536. package/src/interactive/slash-spec.ts +160 -17
  537. package/src/interactive/status/controller.ts +2 -2
  538. package/src/interactive/stream-pacing-policy.ts +1 -1
  539. package/src/interactive/tasks-overlay.ts +20 -13
  540. package/src/interactive/terminal-lease.ts +6 -7
  541. package/src/interactive/turn-context.ts +11 -11
  542. package/src/interactive/turn-persistence.ts +2 -2
  543. package/src/interactive/turn-prewarm.ts +2 -2
  544. package/src/interactive/turn-runtime.ts +8 -8
  545. package/src/interactive/turn-state.ts +1 -1
  546. package/src/interactive/view/artifacts.ts +12 -9
  547. package/src/interactive/view/view-overlay.ts +13 -10
  548. package/src/interactive/watch-pane.ts +38 -10
  549. package/src/interactive/welcome-dashboard.ts +15 -15
  550. package/src/interactive/worker-progress.ts +4 -4
  551. package/src/interactive/worker-receipts.ts +1 -1
  552. package/src/interactive/worker-stream.ts +1 -4
  553. package/src/interactive/yazi-bridge.ts +12 -5
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/builtin-tool-catalog.ts +1 -1
  557. package/src/tools/compete-worktrees.ts +27 -17
  558. package/src/tools/context/index.ts +15 -1
  559. package/src/tools/dispatch-admission.ts +4 -2
  560. package/src/tools/dispatch-arguments.ts +1 -1
  561. package/src/tools/dispatch-plan.ts +0 -11
  562. package/src/tools/dispatch-run-events.ts +12 -10
  563. package/src/tools/dispatch-runner.ts +11 -6
  564. package/src/tools/dispatch.ts +1 -1
  565. package/src/tools/find.ts +1 -6
  566. package/src/tools/monitor.ts +4 -4
  567. package/src/tools/observers.ts +0 -33
  568. package/src/tools/task-worktree.ts +28 -7
  569. package/src/tools/verify/authoring.ts +3 -6
  570. package/src/tools/verify/frontend.ts +1 -1
  571. package/src/tools/web-fetch.ts +1 -1
  572. package/src/worker/entry.ts +4 -3
  573. package/src/worker/protocol.ts +16 -14
  574. package/src/worker/spec-contract.ts +2 -2
  575. package/src/worker/stdin-demux.ts +2 -2
  576. package/dist/chunk-GXNLGKAB.js +0 -571
  577. package/dist/chunk-VFA6GDY5.js +0 -1625
  578. package/dist/doctor-QOA5FNY5.js +0 -313
  579. package/src/engine/apis/degraded-inference.ts +0 -95
  580. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  581. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -392,7 +392,7 @@ export function createSessionBundle(context: DomainContext): DomainBundle<Sessio
392
392
  await performCheckpoint(state, "shutdown");
393
393
  } catch (err) {
394
394
  process.stderr.write(
395
- `[clio:session] shutdown checkpoint failed: ${err instanceof Error ? err.message : String(err)}\n`,
395
+ `[clio-coder:session] shutdown checkpoint failed: ${err instanceof Error ? err.message : String(err)}\n`,
396
396
  );
397
397
  }
398
398
  await closeCurrent("shutdown");
@@ -176,7 +176,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
176
176
  * ceiling, so the returned string is never longer than the bound, and the cut
177
177
  * lands on a whole code point rather than mid-sequence.
178
178
  */
179
- export function boundHandoffString(value: string): { text: string; truncated: boolean } {
179
+ function boundHandoffString(value: string): { text: string; truncated: boolean } {
180
180
  const text = value.trim();
181
181
  const bytes = Buffer.byteLength(text, "utf8");
182
182
  if (bytes <= HANDOFF_MAX_STRING_BYTES) return { text, truncated: false };
@@ -343,7 +343,7 @@ export interface HandoffReadLedgerOptions {
343
343
  * absolute form, which is what makes it fail the ledger check against paths
344
344
  * recorded relative to the workspace root.
345
345
  */
346
- export function normalizeHandoffPath(value: string, cwd: string | null): string {
346
+ function normalizeHandoffPath(value: string, cwd: string | null): string {
347
347
  const trimmed = value.trim().replace(/[\\/]+$/u, "");
348
348
  if (trimmed.length === 0) return "";
349
349
  const absolute = isAbsolute(trimmed) ? normalize(trimmed) : cwd === null ? normalize(trimmed) : resolve(cwd, trimmed);
@@ -155,11 +155,6 @@ function isSessionPromptCompileRecord(value: unknown): value is SessionPromptCom
155
155
  );
156
156
  }
157
157
 
158
- /** A record written before the field existed describes the 0.3.8 layout. */
159
- export function promptManifestVersion(record: SessionPromptCompileRecord): number {
160
- return record.version ?? 1;
161
- }
162
-
163
158
  export function getPromptManifestFilePath(meta: SessionMeta, stateDir?: string): string {
164
159
  const safeMeta = {
165
160
  ...meta,
@@ -63,9 +63,12 @@ function artifactPayload(artifact: ProtectedArtifact): Record<string, unknown> {
63
63
  };
64
64
  }
65
65
 
66
- function recordPayload(record: Omit<PendingProtectedArtifactRecord, "integrity">): Record<string, unknown> {
66
+ function recordPayload(
67
+ record: Omit<PendingProtectedArtifactRecord, "integrity">,
68
+ legacyNaming = false,
69
+ ): Record<string, unknown> {
67
70
  return {
68
- contract: "clio.protectedArtifact.pending",
71
+ contract: legacyNaming ? "clio.protectedArtifact.pending" : "clio-coder.protectedArtifact.pending",
69
72
  version: record.version,
70
73
  id: record.id,
71
74
  sessionId: record.sessionId,
@@ -81,9 +84,9 @@ function recordPayload(record: Omit<PendingProtectedArtifactRecord, "integrity">
81
84
  };
82
85
  }
83
86
 
84
- function digest(record: Omit<PendingProtectedArtifactRecord, "integrity">): string {
87
+ function digest(record: Omit<PendingProtectedArtifactRecord, "integrity">, legacyNaming = false): string {
85
88
  return createHash("sha256")
86
- .update(JSON.stringify(recordPayload(record)), "utf8")
89
+ .update(JSON.stringify(recordPayload(record, legacyNaming)), "utf8")
87
90
  .digest("hex");
88
91
  }
89
92
 
@@ -153,7 +156,10 @@ function parseRecord(value: unknown, sessionId: string): PendingProtectedArtifac
153
156
  createdAt: value.createdAt,
154
157
  integrity: { algorithm: "sha256", digest: value.integrity.digest },
155
158
  };
156
- return digest(withoutIntegrity(parsed)) === parsed.integrity.digest ? parsed : null;
159
+ const without = withoutIntegrity(parsed);
160
+ return digest(without) === parsed.integrity.digest || digest(without, true) === parsed.integrity.digest
161
+ ? parsed
162
+ : null;
157
163
  }
158
164
 
159
165
  export function stagePendingProtectedArtifact(
@@ -190,7 +196,7 @@ export function clearPendingProtectedArtifact(handle: PendingProtectedArtifactHa
190
196
  rmSync(handle.path, { force: true });
191
197
  }
192
198
 
193
- export function readPendingProtectedArtifacts(sessionId: string): PendingProtectedArtifactReadResult {
199
+ function readPendingProtectedArtifacts(sessionId: string): PendingProtectedArtifactReadResult {
194
200
  const directory = journalDirectory(sessionId);
195
201
  if (!existsSync(directory)) return { records: [], errors: [] };
196
202
  const records: PendingProtectedArtifactHandle[] = [];
@@ -70,7 +70,7 @@ const MODEL_LOADING_MIN_DELAY_MS = 15000;
70
70
  * True when the error says the target is loading the model, so the wait should
71
71
  * be sized for disk and VRAM rather than for a provider backing off.
72
72
  */
73
- export function isModelLoadingErrorMessage(errorMessage: string | null | undefined): boolean {
73
+ function isModelLoadingErrorMessage(errorMessage: string | null | undefined): boolean {
74
74
  if (!errorMessage || errorMessage.length === 0) return false;
75
75
  return MODEL_LOADING_PATTERN.test(errorMessage);
76
76
  }
@@ -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();
@@ -191,7 +191,7 @@ export async function installPinnedTool(
191
191
  documents.push(join(dir, name));
192
192
  }
193
193
  writeFileSync(
194
- join(staging, "clio-install.json"),
194
+ join(staging, "clio-coder-install.json"),
195
195
  `${JSON.stringify(
196
196
  {
197
197
  id: entry.id,
@@ -32,7 +32,7 @@ export interface AcpDelegationRunInput {
32
32
  dynamicPromptMessages?: ReadonlyArray<{ body: string }>;
33
33
  cwd: string;
34
34
  safety: SafetyContract;
35
- /** Session autonomy level applied by the mediator under clio-policy governance. */
35
+ /** Session autonomy level applied by the mediator under clio-coder-policy governance. */
36
36
  autonomy?: AutonomyLevel;
37
37
  signal?: AbortSignal;
38
38
  clientVersion?: string;
@@ -223,11 +223,11 @@ export function startAcpDelegationRun(input: AcpDelegationRunInput): AcpDelegati
223
223
  const mediator = new AcpToolMediator({
224
224
  safety: input.safety,
225
225
  cwd: input.cwd,
226
- toolGovernance: input.agent.toolGovernance ?? "clio-policy",
226
+ toolGovernance: input.agent.toolGovernance ?? "clio-coder-policy",
227
227
  ...(input.autonomy !== undefined ? { autonomy: input.autonomy } : {}),
228
228
  onPermissionResolved: (event) =>
229
229
  emit({
230
- type: "clio_permission_resolved",
230
+ type: "clio_coder_permission_resolved",
231
231
  payload: event,
232
232
  } as ClioWorkerEvent),
233
233
  });
@@ -74,7 +74,7 @@ export class AcpEventMapper {
74
74
  return this.mapToolUpdate(update as AcpToolCallUpdate);
75
75
  }
76
76
  if (kind === "plan") {
77
- return [{ type: "clio_plan_update", payload: update } as unknown as AgentEvent];
77
+ return [{ type: "clio_coder_plan_update", payload: update } as unknown as AgentEvent];
78
78
  }
79
79
  return [];
80
80
  }
@@ -116,7 +116,7 @@ export class AcpEventMapper {
116
116
  // operator surface. The descriptor composed from it here does.
117
117
  const action = describeCallAction(update.kind ?? title, update.rawInput);
118
118
  out.push({
119
- type: "clio_tool_start",
119
+ type: "clio_coder_tool_start",
120
120
  payload: {
121
121
  tool: update.kind ?? title,
122
122
  toolCallId,
@@ -145,7 +145,7 @@ export class AcpEventMapper {
145
145
  isError,
146
146
  } as unknown as AgentEvent);
147
147
  out.push({
148
- type: "clio_tool_finish",
148
+ type: "clio_coder_tool_finish",
149
149
  payload: {
150
150
  tool: update.kind ?? title,
151
151
  toolCallId,
@@ -77,10 +77,10 @@ export interface AcpSafeSettingsSnapshot extends AcpRoutingSnapshot {
77
77
  }
78
78
 
79
79
  export type AcpSafeSettingsPatch = Partial<{
80
- "orchestrator.target": string | null;
81
- "orchestrator.model": string | null;
82
- "orchestrator.thinkingLevel": AcpThinkingLevel;
83
- autonomy: AutonomyLevel;
80
+ "chat.target": string | null;
81
+ "chat.model": string | null;
82
+ "chat.thinkingLevel": AcpThinkingLevel;
83
+ "safety.autonomy": AutonomyLevel;
84
84
  }>;
85
85
 
86
86
  export interface AcpSettingsControl {
@@ -676,21 +676,26 @@ function eventTextDelta(event: AcpEventRecord): string {
676
676
  }
677
677
 
678
678
  /**
679
- * The next unused `clio-tool-<n>`. The counter alone is not enough: an engine
680
- * that names its own calls `clio-tool-1` would otherwise collide with an alias
679
+ * The next unused `clio-coder-tool-<n>`. The counter alone is not enough: an engine
680
+ * that names its own calls `clio-coder-tool-1` would otherwise collide with an alias
681
681
  * this server minted, and two different calls sharing one wire id is the exact
682
682
  * failure aliasing exists to prevent.
683
683
  */
684
684
  function nextAliasToolCallId(active: ActivePrompt): string {
685
685
  for (;;) {
686
686
  active.toolCallSequence += 1;
687
- const alias = `clio-tool-${active.toolCallSequence}`;
687
+ const alias = `clio-coder-tool-${active.toolCallSequence}`;
688
688
  if (active.usedWireIds.has(alias)) continue;
689
689
  active.usedWireIds.add(alias);
690
690
  return alias;
691
691
  }
692
692
  }
693
693
 
694
+ function normalizeReleasedAliasToolCallId(engineId: string): string {
695
+ const legacy = /^clio-tool-([1-9]\d*)$/u.exec(engineId);
696
+ return legacy === null ? engineId : `clio-coder-tool-${legacy[1]}`;
697
+ }
698
+
694
699
  /** Records `wireId` as the newest wire id this engine id speaks under. */
695
700
  function pushWireId(active: ActivePrompt, engineId: string, wireId: string): string {
696
701
  const existing = active.toolCallWireIds.get(engineId);
@@ -705,9 +710,10 @@ function pushWireId(active: ActivePrompt, engineId: string, wireId: string): str
705
710
  * call travels under a per-prompt alias.
706
711
  */
707
712
  function mintWireId(active: ActivePrompt, engineId: string): string {
708
- const usable = utf8Bytes(engineId) <= ACP_MAX_TOOL_CALL_ID_BYTES && !active.usedWireIds.has(engineId);
709
- if (usable) active.usedWireIds.add(engineId);
710
- return pushWireId(active, engineId, usable ? engineId : nextAliasToolCallId(active));
713
+ const candidate = normalizeReleasedAliasToolCallId(engineId);
714
+ const usable = utf8Bytes(candidate) <= ACP_MAX_TOOL_CALL_ID_BYTES && !active.usedWireIds.has(candidate);
715
+ if (usable) active.usedWireIds.add(candidate);
716
+ return pushWireId(active, engineId, usable ? candidate : nextAliasToolCallId(active));
711
717
  }
712
718
 
713
719
  /**
@@ -975,14 +981,14 @@ function handleChatEvent(
975
981
  if (last !== undefined) applyStopReason(active, last);
976
982
  return;
977
983
  }
978
- // Clio lifecycle events (agent_start, retry_status, clio_plan_update) have
984
+ // Clio lifecycle events (agent_start, retry_status, clio_coder_plan_update) have
979
985
  // no ACP v1 SessionUpdate equivalent. The prompt turn is bounded by the
980
986
  // session/prompt response, so emitting non-spec `progress` updates would
981
987
  // break strict clients. They are intentionally dropped. The same protocol
982
988
  // gap applies to routing advisories (external settings divergence, active
983
989
  // target removed): ACP v1 has no agent-initiated advisory channel, so the
984
990
  // orchestrator records those as `custom` session-ledger entries
985
- // (customType "clio.routing-notice") instead of inventing update kinds.
991
+ // (customType "clio-coder.routing-notice") instead of inventing update kinds.
986
992
  }
987
993
 
988
994
  const ACP_MAX_SESSION_ID_BYTES = 128;
@@ -1259,12 +1265,7 @@ function sessionResultMeta(
1259
1265
  };
1260
1266
  }
1261
1267
 
1262
- const ACP_SAFE_SETTINGS_KEYS = [
1263
- "orchestrator.target",
1264
- "orchestrator.model",
1265
- "orchestrator.thinkingLevel",
1266
- "autonomy",
1267
- ] as const;
1268
+ const ACP_SAFE_SETTINGS_KEYS = ["chat.target", "chat.model", "chat.thinkingLevel", "safety.autonomy"] as const;
1268
1269
  const ACP_THINKING_LEVELS = new Set<AcpThinkingLevel>(["off", "minimal", "low", "medium", "high", "xhigh", "max"]);
1269
1270
  const ACP_AUTONOMY_LEVELS = new Set<AutonomyLevel>(["read-only", "suggest", "auto-edit", "full-auto"]);
1270
1271
  const ACP_MAX_TARGETS = 64;
@@ -1288,12 +1289,12 @@ function safeSettingsProjection(snapshot: AcpSafeSettingsSnapshot): Record<strin
1288
1289
  const autonomy = ACP_AUTONOMY_LEVELS.has(snapshot.autonomy) ? snapshot.autonomy : DEFAULT_AUTONOMY_LEVEL;
1289
1290
  return {
1290
1291
  settings: {
1291
- orchestrator: {
1292
+ chat: {
1292
1293
  target: safeConfiguredIdentifier(snapshot.target, ACP_MAX_TARGET_ID_BYTES),
1293
1294
  model: safeConfiguredIdentifier(snapshot.model, ACP_MAX_MODEL_ID_BYTES),
1294
1295
  thinkingLevel,
1295
1296
  },
1296
- autonomy,
1297
+ safety: { autonomy },
1297
1298
  },
1298
1299
  editable: [...ACP_SAFE_SETTINGS_KEYS],
1299
1300
  };
@@ -2318,7 +2319,7 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
2318
2319
  throw new AcpRequestError(-32602, "patch contains an unknown setting", { code: "invalid_params" });
2319
2320
  }
2320
2321
  switch (key) {
2321
- case "orchestrator.target": {
2322
+ case "chat.target": {
2322
2323
  if (value === null) {
2323
2324
  patch[key] = null;
2324
2325
  break;
@@ -2333,16 +2334,16 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
2333
2334
  patch[key] = target;
2334
2335
  break;
2335
2336
  }
2336
- case "orchestrator.model":
2337
+ case "chat.model":
2337
2338
  patch[key] = value === null ? null : requireBoundedClientString(value, key, ACP_MAX_MODEL_ID_BYTES);
2338
2339
  break;
2339
- case "orchestrator.thinkingLevel":
2340
+ case "chat.thinkingLevel":
2340
2341
  if (typeof value !== "string" || !ACP_THINKING_LEVELS.has(value as AcpThinkingLevel)) {
2341
2342
  throw new AcpRequestError(-32602, "invalid thinking level", { code: "invalid_params" });
2342
2343
  }
2343
2344
  patch[key] = value as AcpThinkingLevel;
2344
2345
  break;
2345
- case "autonomy":
2346
+ case "safety.autonomy":
2346
2347
  if (typeof value !== "string" || !ACP_AUTONOMY_LEVELS.has(value as AutonomyLevel)) {
2347
2348
  throw new AcpRequestError(-32602, "invalid autonomy level", { code: "invalid_params" });
2348
2349
  }
@@ -2351,8 +2352,8 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
2351
2352
  }
2352
2353
  }
2353
2354
  const current = options.settings.read();
2354
- const nextTarget = patch["orchestrator.target"] === undefined ? current.target : patch["orchestrator.target"];
2355
- const nextModel = patch["orchestrator.model"] === undefined ? current.model : patch["orchestrator.model"];
2355
+ const nextTarget = patch["chat.target"] === undefined ? current.target : patch["chat.target"];
2356
+ const nextModel = patch["chat.model"] === undefined ? current.model : patch["chat.model"];
2356
2357
  if (nextTarget === null && nextModel !== null) {
2357
2358
  throw new AcpRequestError(-32602, "model requires a configured target", { code: "invalid_params" });
2358
2359
  }
@@ -27,7 +27,7 @@ interface MediatorInput {
27
27
  toolGovernance: DelegationToolGovernance;
28
28
  /**
29
29
  * Session autonomy level (sd-01 §2.5). Applied after the safety net under
30
- * clio-policy governance; `ask` dispositions resolve as non-stall denials
30
+ * clio-coder-policy governance; `ask` dispositions resolve as non-stall denials
31
31
  * because a delegation has no operator to answer a prompt.
32
32
  */
33
33
  autonomy?: AutonomyLevel;
@@ -579,7 +579,7 @@ export class AcpToolMediator {
579
579
  let safetyDecision: SafetyDecision | undefined;
580
580
 
581
581
  if (mapped.validationError !== undefined) {
582
- if (this.input.toolGovernance === "clio-policy") {
582
+ if (this.input.toolGovernance === "clio-coder-policy") {
583
583
  const invalidSafetyDecisions = mapped.evaluations.map((evaluation) =>
584
584
  this.input.safety.evaluate({ tool: evaluation.tool, args: evaluation.args }),
585
585
  );
@@ -34,7 +34,7 @@ export const ACP_MAX_CHUNK_BYTES = 16384;
34
34
  * Upper bound on a `toolCallId` this server puts on the wire, in UTF-8 bytes
35
35
  * (CONTRACT C001 §3). Identity is one call per id in both directions: an engine
36
36
  * id over this bound, missing, or already claimed by another call this turn
37
- * travels under a `clio-tool-<n>` alias, and an engine id starting a second call
37
+ * travels under a `clio-coder-tool-<n>` alias, and an engine id starting a second call
38
38
  * mints a fresh alias rather than reusing the first call's wire id. A permission
39
39
  * request binds only to an id the client already received a `tool_call` for and
40
40
  * has not yet seen finish; nothing is minted on that path.
@@ -40,7 +40,7 @@ function randomState(): string {
40
40
  return base64Url(bytes);
41
41
  }
42
42
 
43
- export function buildAuthorizeUrl(params: { challenge: string; state: string }): string {
43
+ function buildAuthorizeUrl(params: { challenge: string; state: string }): string {
44
44
  const query = new URLSearchParams({
45
45
  client_id: AUTH_CLIENT_ID,
46
46
  response_type: "code",
@@ -55,7 +55,7 @@ export function buildAuthorizeUrl(params: { challenge: string; state: string }):
55
55
  return `${AUTHORIZE_URL}?${query.toString()}`;
56
56
  }
57
57
 
58
- export function parseAuthorizationInput(input: string): string {
58
+ function parseAuthorizationInput(input: string): string {
59
59
  const value = input.trim();
60
60
  if (!value) return "";
61
61
  try {
@@ -89,7 +89,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
89
89
  return typeof value === "object" && value !== null;
90
90
  }
91
91
 
92
- export function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGrant {
92
+ function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGrant {
93
93
  const grants: GlobusTokenGrant[] = [payload, ...(Array.isArray(payload.other_tokens) ? payload.other_tokens : [])];
94
94
  const byResourceServer = grants.find((grant) => grant.resource_server === GATEWAY_CLIENT_ID);
95
95
  if (byResourceServer) return byResourceServer;
@@ -103,7 +103,7 @@ export function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGra
103
103
  );
104
104
  }
105
105
 
106
- export function grantToCredentials(grant: GlobusTokenGrant, previousRefresh?: string): OAuthCredentials {
106
+ function grantToCredentials(grant: GlobusTokenGrant, previousRefresh?: string): OAuthCredentials {
107
107
  const access = grant.access_token;
108
108
  if (typeof access !== "string" || access.length === 0) {
109
109
  throw new Error("Globus token response is missing an access token for the ALCF gateway.");
@@ -172,7 +172,7 @@ async function refreshGatewayToken(refreshToken: string, signal: AbortSignal): P
172
172
  return grantToCredentials(selectGatewayGrant(payload), refreshToken);
173
173
  }
174
174
 
175
- export async function loginAlcf(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials> {
175
+ async function loginAlcf(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials> {
176
176
  const { verifier, challenge } = await generatePkce();
177
177
  const url = buildAuthorizeUrl({ challenge, state: randomState() });
178
178
  callbacks.onAuth({
@@ -63,7 +63,7 @@ export function antigravitySubprocessConfigForAutonomy(
63
63
  return { extraArgs: [], dangerousBypass: false, externalMode: "agy-settings-default" };
64
64
  }
65
65
 
66
- export function buildAntigravityPrompt(input: WorkerRunInput): string {
66
+ function buildAntigravityPrompt(input: WorkerRunInput): string {
67
67
  const parts: string[] = [];
68
68
  const systemPrompt = input.systemPrompt.trim();
69
69
  if (systemPrompt.length > 0) parts.push(systemPrompt);
@@ -75,7 +75,7 @@ export function buildAntigravityPrompt(input: WorkerRunInput): string {
75
75
  return parts.join("\n\n");
76
76
  }
77
77
 
78
- export function buildAgyArgs(input: WorkerRunInput): string[] {
78
+ function buildAgyArgs(input: WorkerRunInput): string[] {
79
79
  assertToolProfileEnforceable(input.toolProfile, "antigravity-code");
80
80
  const permission = antigravitySubprocessConfigForAutonomy(input.autonomy);
81
81
  const args = ["--print", ...permission.extraArgs];
@@ -78,7 +78,7 @@ function unregisterEngineApiProviders(sourceId: string): void {
78
78
  compatUniverse?.unregisterApiProviders(sourceId);
79
79
  }
80
80
 
81
- export function getEngineApiProvider(api: Api): EngineRegisteredApiProvider | undefined {
81
+ function getEngineApiProvider(api: Api): EngineRegisteredApiProvider | undefined {
82
82
  return registry.get(api)?.provider;
83
83
  }
84
84
 
@@ -5,7 +5,6 @@ import {
5
5
  type ResidencyAdapter,
6
6
  ResidencyPreconditionError,
7
7
  reconcileResidency,
8
- resetResidencyState,
9
8
  residencyManaged,
10
9
  residentTagProtected,
11
10
  } from "./residency.js";
@@ -72,11 +71,6 @@ interface LlamaCppRouterProps {
72
71
  maxInstances?: number;
73
72
  }
74
73
 
75
- /** Test-only: clear the reconciler's TTL cache and Clio-loaded registry. */
76
- export function resetLlamaCppResidencyState(): void {
77
- resetResidencyState();
78
- }
79
-
80
74
  function isRecord(value: unknown): value is Record<string, unknown> {
81
75
  return value !== null && typeof value === "object" && !Array.isArray(value);
82
76
  }
@@ -107,19 +101,7 @@ function residentModel(model: LlamaCppRouterModel): boolean {
107
101
  return isResidentState(model.state);
108
102
  }
109
103
 
110
- /** Extract resident (loaded, loading, or sleeping) model records from a /v1/models payload. */
111
- export function parseLlamaCppResidentModels(payload: unknown): LlamaCppResidentModel[] {
112
- return parseRouterModels(payload)
113
- .filter(residentModel)
114
- .map((entry) => ({ id: entry.id, tags: entry.tags }));
115
- }
116
-
117
- /** Extract resident (loaded or loading) model ids from a /v1/models payload. */
118
- export function parseLlamaCppResident(payload: unknown): string[] {
119
- return parseLlamaCppResidentModels(payload).map((entry) => entry.id);
120
- }
121
-
122
- export function parseLlamaCppRouterProps(payload: unknown): LlamaCppRouterProps {
104
+ function parseLlamaCppRouterProps(payload: unknown): LlamaCppRouterProps {
123
105
  if (!isRecord(payload)) return {};
124
106
  const maxInstances = payload.max_instances;
125
107
  return typeof maxInstances === "number" && Number.isFinite(maxInstances) && maxInstances > 0