@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
@@ -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
  );
@@ -7,6 +7,13 @@ import type { AgentMessage } from "../types.js";
7
7
  */
8
8
  export const ACP_USAGE_META_KEY = "clio-coder/usage";
9
9
  export const ACP_SESSION_META_KEY = "clio-coder/session";
10
+ /**
11
+ * Per-frame agent attribution on `session/update`. It names which agent
12
+ * produced the frame so a client can label a message, reasoning item, or tool
13
+ * call instead of attributing every frame to the product. Purely additive: a
14
+ * client that does not read it sees exactly the frames it saw before.
15
+ */
16
+ export const ACP_AGENT_META_KEY = "clio-coder/agent";
10
17
 
11
18
  /**
12
19
  * Wire bounds for one prompt turn (CONTRACT C001 §3). A client renders every
@@ -27,7 +34,7 @@ export const ACP_MAX_CHUNK_BYTES = 16384;
27
34
  * Upper bound on a `toolCallId` this server puts on the wire, in UTF-8 bytes
28
35
  * (CONTRACT C001 §3). Identity is one call per id in both directions: an engine
29
36
  * id over this bound, missing, or already claimed by another call this turn
30
- * 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
31
38
  * mints a fresh alias rather than reusing the first call's wire id. A permission
32
39
  * request binds only to an id the client already received a `tool_call` for and
33
40
  * has not yet seen finish; nothing is minted on that path.
@@ -87,11 +94,20 @@ export interface AcpImplementationInfo {
87
94
  version?: string;
88
95
  }
89
96
 
97
+ export interface AcpAuthMethod {
98
+ id: string;
99
+ name: string;
100
+ description?: string;
101
+ type: "agent" | "terminal";
102
+ args?: string[];
103
+ env?: Record<string, string>;
104
+ }
105
+
90
106
  export interface AcpInitializeResponse {
91
107
  protocolVersion?: number;
92
108
  agentCapabilities?: Record<string, unknown>;
93
109
  agentInfo?: AcpImplementationInfo;
94
- authMethods?: unknown[];
110
+ authMethods?: AcpAuthMethod[];
95
111
  }
96
112
 
97
113
  export interface AcpSessionInfo {
@@ -141,6 +157,8 @@ export interface AcpToolCallUpdate {
141
157
  export interface AcpSessionUpdateParams {
142
158
  sessionId?: string;
143
159
  update?: Record<string, unknown>;
160
+ /** Namespaced extension slot; carries replay and agent-attribution metadata. */
161
+ _meta?: Record<string, unknown>;
144
162
  }
145
163
 
146
164
  export type AcpPermissionOptionKind = "allow_once" | "allow_always" | "reject_once" | "reject_always" | string;
@@ -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
@@ -19,7 +19,7 @@ interface LmStudioModelMetadata {
19
19
  clio?: {
20
20
  targetId: string;
21
21
  runtimeId: string;
22
- lifecycle?: "user-managed" | "clio-managed";
22
+ lifecycle?: "user-managed" | "clio-coder-managed";
23
23
  lmstudio?: TargetDescriptor["lmstudio"];
24
24
  lmstudioDefaultModel?: string;
25
25
  };
@@ -145,11 +145,6 @@ function emitResidencyNoticeOnce(key: string, notice: Parameters<typeof emitResi
145
145
  emitResidencyNotice(notice);
146
146
  }
147
147
 
148
- /** Test seam: forget which residency facts were announced. */
149
- export function resetAnnouncedResidencyFacts(): void {
150
- announcedResidencyFacts.clear();
151
- }
152
-
153
148
  export async function ensureLmStudioResidency(
154
149
  model: Model<"openai-completions">,
155
150
  options: { apiKey?: string; signal?: AbortSignal } = {},
@@ -47,7 +47,7 @@ interface ClioRuntimeMetadata {
47
47
  targetId: string;
48
48
  runtimeId: string;
49
49
  /** Present only when settings set the target lifecycle explicitly. */
50
- lifecycle?: "user-managed" | "clio-managed";
50
+ lifecycle?: "user-managed" | "clio-coder-managed";
51
51
  gateway?: boolean;
52
52
  family?: string;
53
53
  quirks?: LocalModelQuirks;
@@ -159,7 +159,7 @@ function userToOllama(content: string | (TextContent | ImageContent)[]): OllamaM
159
159
  return out;
160
160
  }
161
161
 
162
- export function assistantToOllama(content: AssistantMessage["content"]): OllamaMessage {
162
+ function assistantToOllama(content: AssistantMessage["content"]): OllamaMessage {
163
163
  const textParts: string[] = [];
164
164
  const toolCalls: OllamaToolCall[] = [];
165
165
  const thinkingParts: string[] = [];
@@ -270,7 +270,7 @@ function ollamaEvictClient(baseUrl: string, headers?: Record<string, string>): O
270
270
  * Map an Ollama `/api/ps` response to the runtime-agnostic resident shape,
271
271
  * preserving the GPU/total footprint when the server reports it.
272
272
  */
273
- export async function listResidentOllamaModels(client: OllamaEvictClient): Promise<ResidentModelInfo[]> {
273
+ async function listResidentOllamaModels(client: OllamaEvictClient): Promise<ResidentModelInfo[]> {
274
274
  const resident = await client.ps();
275
275
  return resident.models.map((entry) => {
276
276
  const primary = entry.model || entry.name;
@@ -64,7 +64,7 @@ interface ClioRuntimeMetadata {
64
64
  targetId: string;
65
65
  runtimeId: string;
66
66
  /** Present only when settings set the target lifecycle explicitly. */
67
- lifecycle?: "user-managed" | "clio-managed";
67
+ lifecycle?: "user-managed" | "clio-coder-managed";
68
68
  gateway?: boolean;
69
69
  quirks?: LocalModelQuirks;
70
70
  chatTemplateKwargsUnsupported?: boolean;
@@ -679,7 +679,7 @@ function hasReportedReasoningUsage(usage: Usage): boolean {
679
679
  * upstream already reported reasoning usage, because ACP consumers accept all
680
680
  * three field spellings for cross-agent compatibility.
681
681
  */
682
- export function applyOpenAICompatReasoningEstimate(message: AssistantMessage): void {
682
+ function applyOpenAICompatReasoningEstimate(message: AssistantMessage): void {
683
683
  if (hasReportedReasoningUsage(message.usage)) return;
684
684
  const estimated = estimateReasoningTokens(message.content);
685
685
  const reportedOutput = message.usage.output;
@@ -130,7 +130,7 @@ export function residentTagProtected(tags: ReadonlyArray<string> | undefined): b
130
130
  const clioLoaded = new Map<string, Set<string>>();
131
131
 
132
132
  /** Record that Clio loaded `modelId` on the target identified by `targetKey`. */
133
- export function markClioLoaded(targetKey: string, modelId: string): void {
133
+ function markClioLoaded(targetKey: string, modelId: string): void {
134
134
  let set = clioLoaded.get(targetKey);
135
135
  if (!set) {
136
136
  set = new Set();
@@ -156,12 +156,6 @@ function isClioLoaded(targetKey: string, entry: ResidentModelInfo): boolean {
156
156
  export const RECONCILE_TTL_MS = 60_000;
157
157
  const reconcileCache = new Map<string, { modelId: string; decision: "reconcile" | "observe"; at: number }>();
158
158
 
159
- /** Test-only: clear the cross-call Clio-loaded registry and TTL cache. */
160
- export function resetResidencyState(): void {
161
- clioLoaded.clear();
162
- reconcileCache.clear();
163
- }
164
-
165
159
  // --- residency decision (pure) ----------------------------------------------
166
160
 
167
161
  /**
@@ -301,7 +295,7 @@ function evictionNotice(facts: ResidencyFacts, entry: ResidentClassified): Resid
301
295
  * tiers, eviction order, and every notice case directly testable without a
302
296
  * server.
303
297
  */
304
- export function decideResidency(facts: ResidencyFacts): ResidencyPlan {
298
+ function decideResidency(facts: ResidencyFacts): ResidencyPlan {
305
299
  const notices: ResidencyNotice[] = [];
306
300
  const keepResident = facts.resident.some((entry) => residentMatchesKeep(entry, facts.keepModelId));
307
301
  const others = facts.resident.filter((entry) => !residentMatchesKeep(entry, facts.keepModelId));
@@ -801,7 +795,7 @@ export function residencyManaged(env: NodeJS.ProcessEnv = process.env): boolean
801
795
  * only sets the metadata field when settings carry an explicit value.
802
796
  */
803
797
  export function residencyManagedFor(
804
- lifecycle: "user-managed" | "clio-managed" | undefined,
798
+ lifecycle: "user-managed" | "clio-coder-managed" | undefined,
805
799
  env: NodeJS.ProcessEnv = process.env,
806
800
  ): boolean {
807
801
  if (lifecycle === "user-managed") return false;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Lazy loader for the optional `@anthropic-ai/claude-agent-sdk` package.
3
+ *
4
+ * The SDK's platform package ships a 224MB proprietary binary, so it lives in
5
+ * `optionalDependencies` and a default install skips it under
6
+ * `npm install --omit=optional`. Nothing may import it at module scope: boot,
7
+ * `doctor`, and every non-Claude runtime have to work on an install that never
8
+ * fetched it. The one value the runtime needs (`query`) is reached through the
9
+ * dynamic import below, at the moment a `claude-sdk` run actually starts, and a
10
+ * missing package surfaces as a typed error naming the package and the install
11
+ * command instead of an ESM resolution stack.
12
+ */
13
+ import type { query } from "@anthropic-ai/claude-agent-sdk";
14
+
15
+ /** The optional package this module resolves. */
16
+ export const CLAUDE_AGENT_SDK_PACKAGE = "@anthropic-ai/claude-agent-sdk";
17
+
18
+ /**
19
+ * Version the checkout pins in `optionalDependencies`. A contract test keeps
20
+ * the two in step so the install command quoted in the diagnostic never drifts
21
+ * from the version the runtime was built against.
22
+ */
23
+ export const CLAUDE_AGENT_SDK_VERSION = "0.3.186";
24
+
25
+ /** Exact command an operator can paste to make the Claude SDK runtime usable. */
26
+ export const CLAUDE_AGENT_SDK_INSTALL_COMMAND = `npm install ${CLAUDE_AGENT_SDK_PACKAGE}@${CLAUDE_AGENT_SDK_VERSION}`;
27
+
28
+ /** The slice of the SDK surface the worker runtime calls. */
29
+ export interface ClaudeAgentSdkModule {
30
+ query: typeof query;
31
+ }
32
+
33
+ /** Thrown when a `claude-sdk` run starts on an install that omitted the optional package. */
34
+ export class ClaudeAgentSdkUnavailableError extends Error {
35
+ readonly code = "CLAUDE_AGENT_SDK_UNAVAILABLE";
36
+ readonly packageName = CLAUDE_AGENT_SDK_PACKAGE;
37
+ readonly installCommand = CLAUDE_AGENT_SDK_INSTALL_COMMAND;
38
+
39
+ constructor(cause?: unknown) {
40
+ super(
41
+ `The claude-sdk runtime needs the optional package ${CLAUDE_AGENT_SDK_PACKAGE}, which is not installed. ` +
42
+ `Install it with \`${CLAUDE_AGENT_SDK_INSTALL_COMMAND}\` (or reinstall clio-coder without \`--omit=optional\`), ` +
43
+ `then select the target again. Every other runtime works without it.`,
44
+ cause === undefined ? undefined : { cause },
45
+ );
46
+ this.name = "ClaudeAgentSdkUnavailableError";
47
+ }
48
+ }
49
+
50
+ /** Resolution failures that mean "the package is not on disk" rather than "the package is broken". */
51
+ const MISSING_MODULE_CODES: ReadonlySet<string> = new Set([
52
+ "ERR_MODULE_NOT_FOUND",
53
+ "MODULE_NOT_FOUND",
54
+ "ERR_PACKAGE_PATH_NOT_EXPORTED",
55
+ ]);
56
+
57
+ function isMissingModuleError(error: unknown): boolean {
58
+ const code = (error as { code?: unknown } | null)?.code;
59
+ return typeof code === "string" && MISSING_MODULE_CODES.has(code);
60
+ }
61
+
62
+ export type ClaudeAgentSdkLoader = () => Promise<ClaudeAgentSdkModule>;
63
+
64
+ // The literal specifier is what keeps the SDK's types available here; the tsup
65
+ // `external` entry keeps esbuild from bundling it and leaves this as a real
66
+ // runtime `import()`.
67
+ const realLoader: ClaudeAgentSdkLoader = async () => await import("@anthropic-ai/claude-agent-sdk");
68
+
69
+ const loader: ClaudeAgentSdkLoader = realLoader;
70
+ let cached: ClaudeAgentSdkModule | null = null;
71
+
72
+ /**
73
+ * Resolve the SDK, or fail with {@link ClaudeAgentSdkUnavailableError}. A load
74
+ * error that is not a resolution failure (a broken install, a throwing module
75
+ * top level) propagates unchanged, so a real fault is never mislabeled as an
76
+ * absent package.
77
+ */
78
+ export async function loadClaudeAgentSdk(): Promise<ClaudeAgentSdkModule> {
79
+ if (cached) return cached;
80
+ try {
81
+ cached = await loader();
82
+ return cached;
83
+ } catch (error) {
84
+ if (isMissingModuleError(error)) throw new ClaudeAgentSdkUnavailableError(error);
85
+ throw error;
86
+ }
87
+ }
@@ -1,15 +1,18 @@
1
- import {
2
- type CanUseTool,
3
- type EffortLevel,
4
- type HookCallback,
5
- type Options,
6
- type PermissionMode,
7
- type PermissionResult,
1
+ // Types only. `@anthropic-ai/claude-agent-sdk` is an optional dependency, so
2
+ // nothing here may reach it at module scope; the one value this runtime calls
3
+ // (`query`) comes from the lazy loader in ./sdk-module.js at run time.
4
+ import type {
5
+ CanUseTool,
6
+ EffortLevel,
7
+ HookCallback,
8
+ Options,
9
+ PermissionMode,
10
+ PermissionResult,
8
11
  query,
9
- type SDKMessage,
10
- type SDKResultMessage,
11
- type SDKUserMessage,
12
- type ThinkingConfig,
12
+ SDKMessage,
13
+ SDKResultMessage,
14
+ SDKUserMessage,
15
+ ThinkingConfig,
13
16
  } from "@anthropic-ai/claude-agent-sdk";
14
17
 
15
18
  import { readClioVersion } from "../../core/package-root.js";
@@ -19,6 +22,7 @@ import { isReserveAdmittedTool, resolveDeliveryTools } from "../loop-guard.js";
19
22
  import type { AgentEvent, AgentMessage, Usage } from "../types.js";
20
23
  import type { WorkerEventEmit, WorkerRunHandle, WorkerRunInput, WorkerRunResult } from "../worker-runtime.js";
21
24
  import { createWorkerSafety } from "../worker-tools.js";
25
+ import { loadClaudeAgentSdk } from "./sdk-module.js";
22
26
  import { isClaudeCodeSessionId } from "./session-id.js";
23
27
  import {
24
28
  type ClaudeToolPermissionDecision,
@@ -49,11 +53,11 @@ async function* oneSdkUserMessage(message: SDKUserMessage): AsyncIterable<SDKUse
49
53
  yield message;
50
54
  }
51
55
 
52
- export function claudeSdkPermissionModeForAutonomy(_level: AutonomyLevel | undefined): PermissionMode {
56
+ function claudeSdkPermissionModeForAutonomy(_level: AutonomyLevel | undefined): PermissionMode {
53
57
  return "default";
54
58
  }
55
59
 
56
- export function claudeSdkToolsForAutonomy(_level: AutonomyLevel | undefined): NonNullable<Options["tools"]> {
60
+ function claudeSdkToolsForAutonomy(_level: AutonomyLevel | undefined): NonNullable<Options["tools"]> {
57
61
  return DEFAULT_CLAUDE_TOOLS;
58
62
  }
59
63
 
@@ -310,7 +314,7 @@ export interface ClaudeWorkerBudgetGate {
310
314
  }
311
315
 
312
316
  /** Canonical call counter shared by the SDK's PreToolUse/canUseTool mediation seam. */
313
- export function createClaudeWorkerBudgetGate(
317
+ function createClaudeWorkerBudgetGate(
314
318
  budget: WorkerBudget,
315
319
  onBoundary: () => void,
316
320
  onHardCap: () => void,
@@ -434,7 +438,7 @@ function decideToolUse(
434
438
  }
435
439
 
436
440
  /** Share one logical permission decision across the SDK hook/callback pair. */
437
- export function decideClaudeSdkToolUseOnce(
441
+ function decideClaudeSdkToolUseOnce(
438
442
  handled: Map<string, ClaudeToolPermissionDecision>,
439
443
  toolUseID: string | undefined,
440
444
  decide: () => ClaudeToolPermissionDecision,
@@ -532,7 +536,7 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
532
536
  () => {},
533
537
  () => {
534
538
  budgetFailure = true;
535
- emit({ type: "clio_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
539
+ emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
536
540
  abort();
537
541
  },
538
542
  resolveDeliveryTools(allowedToolSet, input.product),
@@ -559,7 +563,7 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
559
563
  if (hookInput.hook_event_name !== "PostToolBatch" || !budgetGate?.phaseReached()) return { continue: true };
560
564
  if (input.budget?.synthesis === false) {
561
565
  budgetFailure = true;
562
- emit({ type: "clio_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
566
+ emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
563
567
  return { continue: false, stopReason: `worker agent budget reached (${input.budget.toolCalls})` };
564
568
  }
565
569
  return {
@@ -607,6 +611,10 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
607
611
 
608
612
  emit({ type: "agent_start" } as AgentEvent);
609
613
  try {
614
+ // First touch of the optional SDK. An install that omitted it fails
615
+ // here with a typed diagnostic naming the package and the install
616
+ // command, and lands in the catch below as an ordinary run failure.
617
+ const { query } = await loadClaudeAgentSdk();
610
618
  queryHandle = query({ prompt: buildClaudeSdkPrompt(input), options });
611
619
  for await (const sdkMessage of queryHandle) {
612
620
  if (sdkMessage.type === "system" && (sdkMessage as { subtype?: string }).subtype === "init") {
@@ -54,7 +54,7 @@ function buildClaudeCodePrompt(input: WorkerRunInput): string {
54
54
  return parts.join("\n\n");
55
55
  }
56
56
 
57
- export function buildClaudeCodeArgs(input: WorkerRunInput): string[] {
57
+ function buildClaudeCodeArgs(input: WorkerRunInput): string[] {
58
58
  assertToolProfileEnforceable(input.toolProfile, "claude-code");
59
59
  const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy);
60
60
  const args = [
@@ -227,7 +227,7 @@ function budgetDenial(
227
227
  };
228
228
  }
229
229
 
230
- export function evaluateClaudeToolPermission(input: EvaluateClaudeToolPermissionInput): ClaudeToolPermissionDecision {
230
+ function evaluateClaudeToolPermission(input: EvaluateClaudeToolPermissionInput): ClaudeToolPermissionDecision {
231
231
  const mapped = mapClaudeToolCall(input.toolName, input.input, input.cwd);
232
232
  const call: ClassifierCall = { tool: mapped.clioToolName, args: mapped.args };
233
233
  const attempt = input.budgetGate?.attempt(mapped.clioToolName);
@@ -346,7 +346,7 @@ function emitToolFinish(
346
346
  const finalReasonCode = reasonCode ?? decision.policy?.reasonCode;
347
347
  if (finalReasonCode !== undefined) event.reasonCode = finalReasonCode;
348
348
  if (decision.policy?.policySource !== undefined) event.policySource = decision.policy.policySource;
349
- emit({ type: "clio_tool_finish", payload: event });
349
+ emit({ type: "clio_coder_tool_finish", payload: event });
350
350
  }
351
351
 
352
352
  export function emitClaudeToolPermissionDecision(input: EmitClaudeToolPermissionInput): ClaudeToolPermissionDecision {
@@ -366,7 +366,7 @@ export function emitClaudeToolPermissionDecision(input: EmitClaudeToolPermission
366
366
  startedAt,
367
367
  ...(action !== null ? { action } : {}),
368
368
  };
369
- input.emit({ type: "clio_tool_start", payload: start });
369
+ input.emit({ type: "clio_coder_tool_start", payload: start });
370
370
  if (decision.kind === "allow") {
371
371
  emitToolFinish(
372
372
  input.emit,
@@ -383,7 +383,7 @@ export function emitClaudeToolPermissionDecision(input: EmitClaudeToolPermission
383
383
  if (decision.permissionRequired) {
384
384
  const mode = input.onPermission ?? "deny";
385
385
  input.emit({
386
- type: "clio_permission_resolved",
386
+ type: "clio_coder_permission_resolved",
387
387
  payload: {
388
388
  tool: decision.mapped.clioToolName,
389
389
  actionClass: decision.decision.classification.actionClass,
@@ -352,11 +352,6 @@ export function isLoopGuardSynthesisBackstopReason(reason: string): boolean {
352
352
  return /^loop guard: tool calls stayed disabled and .+ was called again instead of answering/.test(reason);
353
353
  }
354
354
 
355
- /** Worker lifetime tool-call cap: env > settings guardrails > default. */
356
- export function readWorkerToolCallCap(env: NodeJS.ProcessEnv = process.env): number {
357
- return resolveGuardrail("workerToolCallCap", env);
358
- }
359
-
360
355
  /** Soft/hard per-turn tool-call budget for the interactive orchestrator. */
361
356
  export interface OrchTurnToolCallBudget {
362
357
  /** Distinct calls in a turn that trigger the re-plan nudge. */
@@ -39,6 +39,7 @@ import {
39
39
  } from "node:fs";
40
40
  import { dirname, join, resolve } from "node:path";
41
41
  import { StringDecoder } from "node:string_decoder";
42
+ import { normalizeClioCoderEventTree } from "../core/naming-events.js";
42
43
  import { readClioVersion, readPiMonoVersion } from "../core/package-root.js";
43
44
  import { assertSafeId } from "../core/safe-id.js";
44
45
  import { fsyncDirectory, safeResourceWrite } from "../core/safe-resource-write.js";
@@ -52,7 +53,7 @@ export interface ClioSessionMeta {
52
53
  endedAt: string | null;
53
54
  model: string | null;
54
55
  target: string | null;
55
- clioVersion: string;
56
+ clioCoderVersion: string;
56
57
  piMonoVersion: string;
57
58
  platform: string;
58
59
  nodeVersion: string;
@@ -181,7 +182,7 @@ function defaultSessionJsonlWarning(warning: SessionJsonlWarning): void {
181
182
  if (reportedSessionJsonlWarnings.has(key)) return;
182
183
  if (reportedSessionJsonlWarnings.size >= REPORTED_SESSION_JSONL_WARNING_LIMIT) reportedSessionJsonlWarnings.clear();
183
184
  reportedSessionJsonlWarnings.add(key);
184
- process.stderr.write(`[clio:session] ${warning.path}:${warning.line}: ${warning.message}\n`);
185
+ process.stderr.write(`[clio-coder:session] ${warning.path}:${warning.line}: ${warning.message}\n`);
185
186
  }
186
187
 
187
188
  function serializeJsonl(entries: ReadonlyArray<unknown>): string {
@@ -201,7 +202,7 @@ function serializeJsonl(entries: ReadonlyArray<unknown>): string {
201
202
  * A crash or interruption before the rename leaves the original target
202
203
  * untouched; when no target exists yet, recovery readers can promote the tmp.
203
204
  */
204
- export function writeJsonlFileAtomic(
205
+ function writeJsonlFileAtomic(
205
206
  targetPath: string,
206
207
  entries: ReadonlyArray<unknown>,
207
208
  options: SessionJsonlWriteOptions = {},
@@ -246,7 +247,7 @@ function parseSessionJsonlLine(
246
247
  ): void {
247
248
  if (line.trim().length === 0) return;
248
249
  try {
249
- entries.push(JSON.parse(line) as unknown);
250
+ entries.push(normalizeClioCoderEventTree(JSON.parse(line) as unknown));
250
251
  } catch (error) {
251
252
  const message = error instanceof Error ? error.message : String(error);
252
253
  warn({ path: readPath, line: lineNumber, message: `invalid JSON skipped: ${message}` });
@@ -319,7 +320,7 @@ function readExactAt(fd: number, buffer: Buffer, position: number, length: numbe
319
320
  * Behaviour matches `readSessionFileEntries` line-for-line over the tail it
320
321
  * returns: same `parseSessionJsonlLine` (torn-tail tolerant), same warning sink.
321
322
  */
322
- export function readSessionFileTailEntries(
323
+ function readSessionFileTailEntries(
323
324
  path: string,
324
325
  maxEntries: number,
325
326
  options: SessionJsonlReadOptions & { chunkBytes?: number } = {},
@@ -461,7 +462,7 @@ function buildMeta(input: { cwd: string; model?: string | null; target?: string
461
462
  endedAt: null,
462
463
  model: input.model ?? null,
463
464
  target: input.target ?? null,
464
- clioVersion: readClioVersion(),
465
+ clioCoderVersion: readClioVersion(),
465
466
  piMonoVersion: readPiMonoVersion(),
466
467
  platform: process.platform,
467
468
  nodeVersion: process.version,
@@ -471,7 +472,13 @@ function buildMeta(input: { cwd: string; model?: string | null; target?: string
471
472
 
472
473
  function readMetaFile(path: string): ClioSessionMeta {
473
474
  const raw = readFileSync(path, "utf8");
474
- return JSON.parse(raw) as ClioSessionMeta;
475
+ const parsed = JSON.parse(raw) as Record<string, unknown>;
476
+ const clioCoderVersion = parsed.clioCoderVersion ?? parsed.clioVersion;
477
+ if (typeof clioCoderVersion !== "string" || clioCoderVersion.length === 0) {
478
+ throw new Error(`session metadata has no Clio Coder version: ${path}`);
479
+ }
480
+ const { clioVersion: _legacyVersion, ...canonical } = parsed;
481
+ return { ...canonical, clioCoderVersion } as unknown as ClioSessionMeta;
475
482
  }
476
483
 
477
484
  const TURN_KINDS: readonly ClioTurnRecord["kind"][] = [
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The terminal-engine primitives a non-interactive surface needs, kept in a
3
+ * module of its own rather than behind ./tui.js.
4
+ *
5
+ * ./tui.js is the interactive layer's barrel: it carries the instrumented
6
+ * renderer and SelectList, and every consumer of it also pulls the interactive
7
+ * theme. A CLI command that only measures text and paints an alternate screen
8
+ * needs none of that, and reaching it through the barrel is not free. An edge
9
+ * from outside src/interactive/ to ./tui.js, static or dynamic, gives that
10
+ * module a reachability set the theme modules do not share, so the bundler
11
+ * peels it into a chunk of its own. That chunk lands in the Stage 0 instant
12
+ * shell closure, which tests/contracts/instant-shell-import-graph.test.ts holds
13
+ * to six chunks. Everything re-exported here is a pass-through to the external
14
+ * terminal engine, which is not bundled and so adds no chunk at all.
15
+ *
16
+ * The engine-boundary rule (rule1 in tests/boundaries/check-boundaries.ts) keeps
17
+ * terminal-engine value imports inside src/engine/, which is why this seam lives
18
+ * here and not in src/cli/.
19
+ */
20
+
21
+ export { ProcessTerminal, TuiAltScreen, truncateToWidth, visibleWidth, wrapTextWithAnsi } from "@earendil-works/pi-tui";
package/src/engine/tui.ts CHANGED
@@ -18,6 +18,7 @@ export type {
18
18
  MarkdownTheme,
19
19
  OverlayHandle,
20
20
  OverlayOptions,
21
+ OverlayUnfocusOptions,
21
22
  ScrollViewScrollbar,
22
23
  SelectItem,
23
24
  SelectListLayoutOptions,