@iowarp/clio-coder 0.4.7 → 0.4.9

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 (675) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +111 -0
  3. package/CONTRIBUTING.md +83 -74
  4. package/README.md +69 -47
  5. package/dist/{acp-W3Y3TRHD.js → acp-ZWZCPS2A.js} +15 -15
  6. package/dist/{agents-J4ICNLQ3.js → agents-LYSOWZUE.js} +61 -59
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
  9. package/dist/assets/web-notices/hono-LICENSE +21 -0
  10. package/dist/{auth-X2UJUMOC.js → auth-WBQGKWQ5.js} +27 -27
  11. package/dist/background-BUMOBAQN.js +37 -0
  12. package/dist/{builtins-XLXWWSRF.js → builtins-ODRJOEDI.js} +7 -7
  13. package/dist/{chunk-C3G5PNUO.js → chunk-2DRRZ57Q.js} +36 -27
  14. package/dist/chunk-2JBZYUPY.js +105 -0
  15. package/dist/chunk-2KUBKL63.js +336 -0
  16. package/dist/chunk-2VBWFXYE.js +198 -0
  17. package/dist/{chunk-XZ6UFQ52.js → chunk-2X2R3UTH.js} +25 -15
  18. package/dist/{chunk-M6Z2V6YU.js → chunk-37LW32LZ.js} +5 -5
  19. package/dist/{chunk-6LRLOJHQ.js → chunk-3AND2EFU.js} +11 -62
  20. package/dist/{chunk-FQOOGXBH.js → chunk-3RDHGNU7.js} +101 -33
  21. package/dist/{chunk-D2T66PDV.js → chunk-3SUDBGEI.js} +41 -208
  22. package/dist/{chunk-5AJPUR72.js → chunk-3TQN67I2.js} +9 -9
  23. package/dist/{chunk-LBFQMYS3.js → chunk-3U4BL2EV.js} +5 -3
  24. package/dist/{chunk-UFYNOQK4.js → chunk-3UQADNG2.js} +7 -7
  25. package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
  26. package/dist/{chunk-NO7J45X6.js → chunk-4ATBOFRP.js} +713 -218
  27. package/dist/{chunk-ECOMVOHP.js → chunk-4DNL43EZ.js} +3 -3
  28. package/dist/{chunk-WT5TRMO4.js → chunk-4HFJKRGZ.js} +255 -82
  29. package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
  30. package/dist/{chunk-WURGVOZJ.js → chunk-5RTEFNBP.js} +18 -14
  31. package/dist/{config-YXARKGTX.js → chunk-64XJW7NT.js} +24 -268
  32. package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
  33. package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
  34. package/dist/{chunk-MZNWZUJM.js → chunk-7FBCRWVT.js} +288 -288
  35. package/dist/{chunk-UA6W4XFJ.js → chunk-7JSOSVLP.js} +2 -2
  36. package/dist/chunk-7N3OLLSL.js +637 -0
  37. package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
  38. package/dist/{chunk-N37QC5FV.js → chunk-A6DULIMH.js} +21 -9
  39. package/dist/{fleet-decisions-S3PTZV2D.js → chunk-AB3QXXBC.js} +5 -41
  40. package/dist/chunk-ACCECAH4.js +49 -0
  41. package/dist/{chunk-CP3HIR5H.js → chunk-AM6CEP2K.js} +20 -19
  42. package/dist/chunk-AUHVBIDW.js +19 -0
  43. package/dist/{chunk-BQQ5MXUC.js → chunk-AY4XE6GN.js} +19 -13
  44. package/dist/{chunk-ISNCCX42.js → chunk-BBA2TAWV.js} +10 -9
  45. package/dist/chunk-BFPHMSK7.js +169 -0
  46. package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
  47. package/dist/{chunk-DO7M3LSX.js → chunk-BMNVVKEW.js} +40 -93
  48. package/dist/{chunk-VTYHHQ57.js → chunk-CTGZCEI6.js} +2 -2
  49. package/dist/{chunk-RTLNFZMD.js → chunk-DIAJYJYG.js} +3 -3
  50. package/dist/chunk-EHZRAB4U.js +63 -0
  51. package/dist/{chunk-KS7ETA3P.js → chunk-EM2DIQAJ.js} +3 -3
  52. package/dist/{chunk-MNQN3X6Y.js → chunk-ETF4ROKH.js} +5 -5
  53. package/dist/{chunk-WN552PKN.js → chunk-F2YM3JY4.js} +744 -1134
  54. package/dist/{chunk-7EEGBKV4.js → chunk-FEBQWHJT.js} +24 -19
  55. package/dist/{chunk-4QKAITQT.js → chunk-FPS4R2RN.js} +74 -10
  56. package/dist/chunk-G5R53COU.js +68 -0
  57. package/dist/chunk-GHXGMFQ5.js +40 -0
  58. package/dist/{chunk-GFQ7P2UF.js → chunk-GJDRMBDI.js} +10 -10
  59. package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
  60. package/dist/{chunk-NCCQ6DVS.js → chunk-GREYLTZ5.js} +8 -8
  61. package/dist/{chunk-HOX4YZ2K.js → chunk-H2WSCZZT.js} +19 -3
  62. package/dist/{chunk-3LXJOICS.js → chunk-H6IUCY6Q.js} +2 -2
  63. package/dist/{chunk-BO4XV5VX.js → chunk-H72DCH3E.js} +95 -206
  64. package/dist/{chunk-SEDI5K5B.js → chunk-H7TXJR23.js} +20 -20
  65. package/dist/chunk-HBJQQTKM.js +40 -0
  66. package/dist/chunk-HCVKSGNZ.js +990 -0
  67. package/dist/chunk-HVCAY2FH.js +67 -0
  68. package/dist/{chunk-34XHRVKG.js → chunk-I47EJPYL.js} +3 -3
  69. package/dist/{chunk-4N2RZ4TO.js → chunk-IALGWTLO.js} +3 -3
  70. package/dist/{chunk-IQCNVLO6.js → chunk-IALZJE37.js} +10 -7
  71. package/dist/{chunk-DLIYANB7.js → chunk-IC7JXLOM.js} +16 -11
  72. package/dist/{chunk-G4LGUTOE.js → chunk-IOSVTTCD.js} +5 -5
  73. package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
  74. package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
  75. package/dist/{chunk-TN5FW4XY.js → chunk-JIYWMQZ5.js} +12 -9
  76. package/dist/{chunk-T7QQBNLH.js → chunk-JKU34ACI.js} +10 -8
  77. package/dist/chunk-JOBN2YQQ.js +176 -0
  78. package/dist/chunk-JOL2QRLE.js +152 -0
  79. package/dist/{chunk-GXIWHXDB.js → chunk-JTR3VSV3.js} +3 -3
  80. package/dist/{chunk-T334FW2H.js → chunk-JU6MAMRJ.js} +7 -7
  81. package/dist/chunk-JURMQWVJ.js +15 -0
  82. package/dist/{chunk-CULVKYTK.js → chunk-K3XN4LZ4.js} +5 -5
  83. package/dist/{chunk-3T4DXWP6.js → chunk-KIVFXGBM.js} +27 -7
  84. package/dist/chunk-KKRXONXG.js +43 -0
  85. package/dist/{chunk-YPRSNUTC.js → chunk-KOAHT3N2.js} +2 -2
  86. package/dist/chunk-KP5BPXR3.js +73 -0
  87. package/dist/{chunk-UA3W4FGC.js → chunk-KRJQG47M.js} +6 -6
  88. package/dist/{chunk-GI5RRMAH.js → chunk-KW6OJ7IY.js} +19 -21
  89. package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
  90. package/dist/{chunk-MZHXENL7.js → chunk-L4RUTLRL.js} +8 -8
  91. package/dist/{chunk-P5SC4DLJ.js → chunk-LGTVWPRN.js} +2 -2
  92. package/dist/{chunk-65BGHOUR.js → chunk-LSQW6KZO.js} +5 -5
  93. package/dist/{chunk-TZHN5ITX.js → chunk-LWJYOHT3.js} +8 -8
  94. package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
  95. package/dist/chunk-MJ4QEJVT.js +185 -0
  96. package/dist/{chunk-T4TY5GG3.js → chunk-MO65K5CH.js} +5 -5
  97. package/dist/{chunk-TZ6UVP2H.js → chunk-MTOZEQHL.js} +8 -8
  98. package/dist/chunk-MZDPF35R.js +45 -0
  99. package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
  100. package/dist/{chunk-KAFMW7WM.js → chunk-NBPA5QM6.js} +2 -2
  101. package/dist/{chunk-EUEXGXXR.js → chunk-NMBEW4PP.js} +5 -5
  102. package/dist/{chunk-SELG4SUR.js → chunk-NPLLK3HO.js} +72 -89
  103. package/dist/{chunk-VCRVEDUC.js → chunk-NSYGPIVW.js} +5 -5
  104. package/dist/{context-7HJEWTTP.js → chunk-NXTV5OI5.js} +36 -90
  105. package/dist/{chunk-IMOD2YPV.js → chunk-NYDG4QP4.js} +9 -19
  106. package/dist/{chunk-6CA2BHOR.js → chunk-OA2GDACN.js} +5 -5
  107. package/dist/{chunk-A67NR5AT.js → chunk-PJI57EC6.js} +14 -11
  108. package/dist/{chunk-IJMW64DX.js → chunk-PJJBUGMR.js} +50 -50
  109. package/dist/{chunk-CPXGJI2A.js → chunk-PNJE7JPS.js} +20 -5
  110. package/dist/chunk-PP23PZEV.js +1347 -0
  111. package/dist/chunk-PPIFDSBK.js +409 -0
  112. package/dist/{chunk-T52TPHYC.js → chunk-PTFISXQO.js} +8 -7
  113. package/dist/{chunk-C6GEXX4L.js → chunk-QB33Z5S7.js} +5 -5
  114. package/dist/{chunk-VMATUZB6.js → chunk-QGNII5VC.js} +10 -10
  115. package/dist/{chunk-TLTGZTXI.js → chunk-QI72X67S.js} +104 -27
  116. package/dist/chunk-QKHZZFKH.js +98 -0
  117. package/dist/{chunk-PFLOULP3.js → chunk-RDKX2PME.js} +4 -4
  118. package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
  119. package/dist/chunk-RPMNIFRY.js +65 -0
  120. package/dist/{chunk-L3Z5ANCV.js → chunk-RQROVOV3.js} +13 -11
  121. package/dist/{chunk-6YHPAAZR.js → chunk-S34A7BSP.js} +3 -3
  122. package/dist/{chunk-5ZSZEYJK.js → chunk-SJETVJHX.js} +2 -2
  123. package/dist/{chunk-77CZRFTE.js → chunk-SJMNU4ZS.js} +2 -2
  124. package/dist/chunk-SLLG2G44.js +85 -0
  125. package/dist/{chunk-GVZFCJHE.js → chunk-SQAZN2V3.js} +48 -22
  126. package/dist/{chunk-2O2LVQQK.js → chunk-SQBT46OF.js} +2 -2
  127. package/dist/{chunk-ZGIGW4ZG.js → chunk-TCUOGIL2.js} +5 -5
  128. package/dist/{chunk-DACXIVVF.js → chunk-TIWPKCVO.js} +5 -5
  129. package/dist/{chunk-5CMARGPF.js → chunk-UIU7MGZ3.js} +11 -2
  130. package/dist/chunk-USBBEKHW.js +177 -0
  131. package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
  132. package/dist/{chunk-MBJO5VNZ.js → chunk-VPWGADBG.js} +33 -33
  133. package/dist/{chunk-UUQ5G6EZ.js → chunk-VWFCAK34.js} +6 -6
  134. package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
  135. package/dist/{chunk-4MFBBY2Z.js → chunk-W72LLZAV.js} +3 -3
  136. package/dist/{chunk-4UHVS5T7.js → chunk-WGRDABW7.js} +8 -8
  137. package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
  138. package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
  139. package/dist/{chunk-6YA46L5A.js → chunk-XFLSL7BT.js} +2 -2
  140. package/dist/{chunk-QKWL7SYE.js → chunk-XJZEDCNT.js} +50 -39
  141. package/dist/{chunk-UWD3JD5X.js → chunk-XLLEL3K7.js} +10 -10
  142. package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
  143. package/dist/chunk-XNZWWDC3.js +686 -0
  144. package/dist/{chunk-WBVKKTUT.js → chunk-XRECG65F.js} +2 -2
  145. package/dist/chunk-XTQ7MEJG.js +457 -0
  146. package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
  147. package/dist/{chunk-WB7POC6M.js → chunk-Y3M2T5RO.js} +6 -6
  148. package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
  149. package/dist/{chunk-EUZRMP4Y.js → chunk-YPQOPFP7.js} +20 -20
  150. package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
  151. package/dist/{chunk-BAU36233.js → chunk-YQYINEJI.js} +9 -9
  152. package/dist/{chunk-CE64C5K5.js → chunk-ZF6CV4WZ.js} +1356 -235
  153. package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
  154. package/dist/{chunk-IZYTT3CD.js → chunk-ZKQ63XZ5.js} +16 -39
  155. package/dist/{chunk-6TAATXXH.js → chunk-ZKVMDNAN.js} +7 -7
  156. package/dist/chunk-ZST3FRCV.js +132 -0
  157. package/dist/cli/index.js +50 -38
  158. package/dist/{clio-L2P7S2R2.js → clio-JUDCLNHC.js} +11 -11
  159. package/dist/clio-context-tools-FT672MNZ.js +136 -0
  160. package/dist/{code-nav-B5LNX4KU.js → code-nav-7OVCTP2Z.js} +39 -37
  161. package/dist/{components-63MMQKUT.js → components-OZXZMDWU.js} +11 -11
  162. package/dist/config-P3ZQVF63.js +275 -0
  163. package/dist/config-graph-GKAOBAS5.js +160 -0
  164. package/dist/{configure-LMVQJ46J.js → configure-25LRYZJG.js} +56 -55
  165. package/dist/context-72VQV7JX.js +73 -0
  166. package/dist/{context-YG2LZDYZ.js → context-COWRWXP3.js} +89 -83
  167. package/dist/{context-XSZKKFBW.js → context-WB3D474G.js} +16 -16
  168. package/dist/{context-clear-AC5NXHM2.js → context-clear-Y4LYMWC6.js} +88 -82
  169. package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
  170. package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
  171. package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-TMZYVC7A.js} +27 -25
  172. package/dist/data-tool-KMBWKKWR.js +2987 -0
  173. package/dist/{detail-H73BEF2N.js → detail-4GLROGY5.js} +89 -83
  174. package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-TR3LBP5P.js} +113 -107
  175. package/dist/docs-ZK777W2G.js +101 -0
  176. package/dist/{doctor-EQYJOGUG.js → doctor-WC4OV2OB.js} +76 -73
  177. package/dist/{eval-4P7O6CCE.js → eval-FUNWJNUJ.js} +88 -73
  178. package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
  179. package/dist/evals-L73EBHSU.js +104 -0
  180. package/dist/{evidence-O76QF7TZ.js → evidence-AVJ2RTHX.js} +99 -93
  181. package/dist/{evidence-D6GUSYJW.js → evidence-P4NZOAK7.js} +88 -82
  182. package/dist/evidence-Y55WKYHH.js +246 -0
  183. package/dist/{evolve-H47BCETS.js → evolve-MAWKRYWF.js} +93 -87
  184. package/dist/{extensions-NNL3ZOCU.js → extensions-PYQH3H47.js} +14 -13
  185. package/dist/fleet-M4H2QBWT.js +268 -0
  186. package/dist/{fleet-KMNS6NOM.js → fleet-ULBXXRDR.js} +146 -138
  187. package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-7NNC4JZU.js} +18 -17
  188. package/dist/fleet-decisions-EHEY7KPU.js +52 -0
  189. package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-LQ2AHZT3.js} +24 -24
  190. package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-5IGBIIYZ.js} +98 -258
  191. package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-UTTNOKMG.js} +9 -4
  192. package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-YGILJKA6.js} +29 -29
  193. package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-AUWTCDKR.js} +88 -82
  194. package/dist/{fleet-view-BHJFW26B.js → fleet-view-TGUFCY5A.js} +90 -84
  195. package/dist/{init-XAT5N5YM.js → init-GFN2Z7NF.js} +111 -104
  196. package/dist/install-6PIF6F6W.js +19 -0
  197. package/dist/{interop-FVECHFKG.js → interop-EF5JUWWK.js} +29 -29
  198. package/dist/{inventory-7KFQGLCV.js → inventory-I6VJDDYF.js} +90 -84
  199. package/dist/library-3J5IO2OJ.js +75 -0
  200. package/dist/{library-QAPAO23R.js → library-IJTOFTDS.js} +20 -19
  201. package/dist/{library-NY2XOT75.js → library-Z3KZSHPE.js} +35 -35
  202. package/dist/{library-import-5Y6MAS3R.js → library-import-IMKFLDHX.js} +29 -29
  203. package/dist/{library-inventory-JT6HWITQ.js → library-inventory-CQP5D6GU.js} +21 -21
  204. package/dist/{library-validation-EQUH25DC.js → library-validation-33UTX7AI.js} +19 -19
  205. package/dist/mcp-5FWZKUS6.js +26 -0
  206. package/dist/{memory-DYVTTCP6.js → memory-36CWN67Y.js} +93 -87
  207. package/dist/{models-MASFJ6Y2.js → models-KQ6PQJJQ.js} +57 -56
  208. package/dist/{monitor-YMP4NXJJ.js → monitor-XX6ZD6KC.js} +98 -91
  209. package/dist/{orchestrator-AFQRRTEI.js → orchestrator-SK6HDAOP.js} +1537 -832
  210. package/dist/{panes-NICTHQCV.js → panes-L27QRXUH.js} +14 -14
  211. package/dist/{panes-D3Y2KFG5.js → panes-LXZIWNOZ.js} +4 -4
  212. package/dist/{paths-PSFAUIGO.js → paths-7DJDU4P4.js} +6 -6
  213. package/dist/{preload-5Q7VXRFJ.js → preload-K2TDYI4Y.js} +88 -82
  214. package/dist/{reset-7NKZK7JN.js → reset-73VU3XNT.js} +13 -13
  215. package/dist/{resources-NILSIZAT.js → resources-3BYJYVYL.js} +24 -24
  216. package/dist/{run-BPZGEBZV.js → run-AR7PY6GW.js} +144 -136
  217. package/dist/run-script-H2KUDIII.js +41 -0
  218. package/dist/settings-3VMBMWID.js +72 -0
  219. package/dist/{share-EZ6ERBMH.js → share-HVWH4FPF.js} +30 -30
  220. package/dist/{skills-BTVVNYVM.js → skills-5TYEY75Q.js} +30 -30
  221. package/dist/{skills-eval-UY34MNK7.js → skills-eval-CK3MD63Z.js} +114 -103
  222. package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-KSFYG3I6.js} +24 -24
  223. package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-DMVHML7P.js} +60 -57
  224. package/dist/{steer-2B3EQGFH.js → steer-XCD6V3EW.js} +4 -4
  225. package/dist/{support-L2SOL3IE.js → support-JAZL6VBR.js} +7 -7
  226. package/dist/system-3TDQRMZZ.js +116 -0
  227. package/dist/{targets-44VKGFLN.js → targets-EZKHAYRN.js} +74 -72
  228. package/dist/{tasks-3KODKFU7.js → tasks-SNEFHWYW.js} +18 -18
  229. package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-BNLFA4OF.js} +8 -7
  230. package/dist/{tools-3UB7TEVR.js → tools-7IM6BDCE.js} +12 -12
  231. package/dist/{trace-TAMIU4OJ.js → trace-C3MBGD4S.js} +16 -65
  232. package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
  233. package/dist/{uninstall-QYVRPEM4.js → uninstall-WWLOSZ42.js} +35 -10
  234. package/dist/{upgrade-7PMKM2JH.js → upgrade-ETK2JNSJ.js} +42 -51
  235. package/dist/{usage-6EQV7EQK.js → usage-S2HOB7BZ.js} +112 -102
  236. package/dist/{verifiers-JLITWSHU.js → verifiers-QDTEVH7R.js} +26 -24
  237. package/dist/{verify-T7NAEVIG.js → verify-SUKUK6XM.js} +16 -15
  238. package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
  239. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +1 -0
  240. package/dist/web/client/assets/arc-Pry-7G1_.js +1 -0
  241. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
  242. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
  243. package/dist/web/client/assets/array-BifhSqXX.js +1 -0
  244. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  245. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  246. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +129 -0
  247. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +38 -0
  248. package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
  249. package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  250. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +62 -0
  251. package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  252. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +2 -0
  253. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
  254. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +1 -0
  255. package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  256. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +72 -0
  257. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +1 -0
  258. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +231 -0
  259. package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  260. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +1 -0
  261. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +10 -0
  262. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +1 -0
  263. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +1 -0
  264. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +1 -0
  265. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +168 -0
  266. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +88 -0
  267. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +206 -0
  268. package/dist/web/client/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  269. package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  270. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
  271. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
  272. package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  273. package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  274. package/dist/web/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
  275. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +1 -0
  276. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +62 -0
  277. package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
  278. package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
  279. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +4 -0
  280. package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  281. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +30 -0
  282. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +41 -0
  283. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +3 -0
  284. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +24 -0
  285. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +24 -0
  286. package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
  287. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +1 -0
  288. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +99 -0
  289. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
  290. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
  291. package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
  292. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
  293. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +1 -0
  294. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +106 -0
  295. package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
  296. package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
  297. package/dist/web/client/assets/index-Dsi52apB.css +1 -0
  298. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +1 -0
  299. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +2 -0
  300. package/dist/web/client/assets/init-C-OQMol4.js +1 -0
  301. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +70 -0
  302. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +139 -0
  303. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +89 -0
  304. package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
  305. package/dist/web/client/assets/line-BIDAcEtX.js +1 -0
  306. package/dist/web/client/assets/linear-SzVmGSw4.js +1 -0
  307. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +7 -0
  308. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +44 -0
  309. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +96 -0
  310. package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  311. package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  312. package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  313. package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
  314. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +1 -0
  315. package/dist/web/client/assets/path-fybaL0A-.js +1 -0
  316. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +1 -0
  317. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +1 -0
  318. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +39 -0
  319. package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
  320. package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
  321. package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
  322. package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
  323. package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
  324. package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
  325. package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
  326. package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
  327. package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
  328. package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
  329. package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
  330. package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
  331. package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
  332. package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
  333. package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
  334. package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
  335. package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
  336. package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
  337. package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
  338. package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
  339. package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
  340. package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
  341. package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
  342. package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
  343. package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
  344. package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
  345. package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
  346. package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
  347. package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
  348. package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
  349. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +7 -0
  350. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +1 -0
  351. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +1 -0
  352. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
  353. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
  354. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
  355. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +1 -0
  356. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +84 -0
  357. package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
  358. package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  359. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +40 -0
  360. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +162 -0
  361. package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  362. package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
  363. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +1 -0
  364. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
  365. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +1 -0
  366. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
  367. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +120 -0
  368. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +1 -0
  369. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +1 -0
  370. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +34 -0
  371. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +1 -0
  372. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +78 -0
  373. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +7 -0
  374. package/dist/web/client/clio-coder-logo.webp +0 -0
  375. package/dist/web/client/icon-192.png +0 -0
  376. package/dist/web/client/icon-512.png +0 -0
  377. package/dist/web/client/index.html +6 -0
  378. package/dist/web/client/manifest.webmanifest +15 -0
  379. package/dist/web/client/offline.css +55 -0
  380. package/dist/web/client/offline.html +5 -0
  381. package/dist/web/client/offline.js +27 -0
  382. package/dist/web/client/sw.js +34 -0
  383. package/dist/web/ops-worker.js +37 -0
  384. package/dist/web/reads-worker.js +1726 -0
  385. package/dist/web/server.js +8499 -0
  386. package/dist/web-EMGUGGEI.js +13 -0
  387. package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-6BRRVQON.js} +22 -5
  388. package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-XHSJTDOP.js} +120 -113
  389. package/dist/{with-panes-CHFC7HGI.js → with-panes-Z6BTEHMZ.js} +12 -12
  390. package/dist/worker/entry.js +113 -99
  391. package/docs/README.md +28 -27
  392. package/docs/architecture/acp.md +5 -9
  393. package/docs/architecture/alcf-provider.md +0 -3
  394. package/docs/architecture/architecture.md +0 -3
  395. package/docs/architecture/artifact-placement.md +12 -4
  396. package/docs/architecture/artifact-versions.md +0 -3
  397. package/docs/architecture/capacity-and-scheduling.md +0 -3
  398. package/docs/architecture/context-engine.md +0 -3
  399. package/docs/architecture/context-working-set.md +0 -3
  400. package/docs/architecture/dispatch-architecture-rationale.md +0 -3
  401. package/docs/architecture/dispatch-typed-intent.md +0 -3
  402. package/docs/architecture/evidence-and-memory.md +0 -3
  403. package/docs/architecture/library.md +1 -3
  404. package/docs/architecture/middleware-and-components.md +0 -3
  405. package/docs/architecture/model-catalog.md +1 -4
  406. package/docs/architecture/observability.md +0 -3
  407. package/docs/architecture/pi-boundary.md +6 -9
  408. package/docs/architecture/prompt-envelope-and-tools.md +37 -30
  409. package/docs/architecture/provider-adapter-cookbook.md +1 -4
  410. package/docs/architecture/safety-model.md +19 -9
  411. package/docs/architecture/session-lifecycle.md +10 -7
  412. package/docs/architecture/time-conventions.md +0 -3
  413. package/docs/architecture/trace-store.md +28 -20
  414. package/docs/architecture/tui-design.md +38 -18
  415. package/docs/architecture/worker-context.md +1 -3
  416. package/docs/architecture/worker-dispatch-mechanics.md +1 -4
  417. package/docs/guide/authoring-plugins.md +1 -3
  418. package/docs/guide/built-in-agents.md +0 -3
  419. package/docs/guide/commands-and-modes.md +41 -25
  420. package/docs/guide/configuration-and-targets.md +204 -9
  421. package/docs/guide/configuration-reference.md +125 -17
  422. package/docs/guide/environment-variables.md +2 -8
  423. package/docs/guide/exit-codes-and-output.md +0 -3
  424. package/docs/guide/extensions-and-sharing.md +0 -3
  425. package/docs/guide/fleet-dispatch.md +3 -5
  426. package/docs/guide/glossary.md +1 -4
  427. package/docs/guide/harness-extensions.md +0 -2
  428. package/docs/guide/installation-and-lifecycle.md +3 -6
  429. package/docs/guide/interop.md +0 -2
  430. package/docs/guide/panes-and-files.md +0 -3
  431. package/docs/guide/plugins.md +0 -3
  432. package/docs/guide/proactive-memory.md +0 -3
  433. package/docs/guide/resource-library.md +1 -3
  434. package/docs/guide/skills-marketplace.md +0 -2
  435. package/docs/guide/tool-usage.md +166 -67
  436. package/docs/guide/troubleshooting.md +1 -4
  437. package/docs/history/config-knobs-audit.md +0 -3
  438. package/docs/history/release-cut-checklist.md +0 -3
  439. package/docs/process/development-pipeline.md +0 -3
  440. package/docs/process/documentation-coverage.md +3 -3
  441. package/docs/process/documentation-guide.md +16 -22
  442. package/docs/process/eval-runner.md +0 -3
  443. package/docs/process/evals-internal.md +0 -3
  444. package/docs/process/evolution.md +0 -3
  445. package/docs/process/fleet-demo-runbook.md +6 -9
  446. package/docs/process/git-commit-provenance.md +0 -3
  447. package/docs/process/performance-methodology.md +1 -4
  448. package/docs/process/release-cut-checklist.md +114 -221
  449. package/docs/process/scientific-validation.md +23 -6
  450. package/docs/process/tool-audit-v0.4.9.md +357 -0
  451. package/library/registry.yaml +2 -2
  452. package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
  453. package/library/skills/meta/clio-coder-test/evals.md +16 -2
  454. package/library/skills/meta/clio-coder-test/plugin.json +1 -1
  455. package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
  456. package/library/skills/registry.yaml +2 -2
  457. package/library/skills/skill-marketplace.json +1 -1
  458. package/package.json +13 -11
  459. package/src/cli/argv.ts +31 -0
  460. package/src/cli/clio.ts +17 -13
  461. package/src/cli/config.ts +4 -0
  462. package/src/cli/docs.ts +65 -328
  463. package/src/cli/doctor-panes.ts +1 -1
  464. package/src/cli/doctor.ts +3 -1
  465. package/src/cli/index.ts +17 -2
  466. package/src/cli/mcp.ts +106 -0
  467. package/src/cli/skills-eval.ts +8 -2
  468. package/src/cli/trace.ts +4 -65
  469. package/src/cli/uninstall.ts +26 -0
  470. package/src/cli/upgrade.ts +34 -38
  471. package/src/cli/usage.ts +3 -0
  472. package/src/cli/verifiers.ts +1 -1
  473. package/src/cli/web.ts +79 -0
  474. package/src/core/bash-exec.ts +27 -4
  475. package/src/core/bus-events.ts +3 -4
  476. package/src/core/config.ts +73 -1
  477. package/src/core/defaults.ts +10 -1
  478. package/src/core/domain-loader.ts +37 -28
  479. package/src/core/event-bus.ts +1 -1
  480. package/src/core/run-records.ts +438 -0
  481. package/src/core/safe-exec.ts +506 -56
  482. package/src/core/skill-activation.ts +5 -3
  483. package/src/core/termination.ts +16 -12
  484. package/src/core/tool-names.ts +33 -12
  485. package/src/domains/agents/contract.ts +1 -1
  486. package/src/domains/agents/extension.ts +18 -10
  487. package/src/domains/config/extension.ts +5 -4
  488. package/src/domains/context/clio-md.ts +1 -1
  489. package/src/domains/context/worker/pressure.ts +6 -2
  490. package/src/domains/context/working-set/path-index.ts +7 -2
  491. package/src/domains/dispatch/code-step.ts +7 -2
  492. package/src/domains/dispatch/contract.ts +7 -0
  493. package/src/domains/dispatch/execution-role.ts +3 -3
  494. package/src/domains/dispatch/execution-scheduler.ts +204 -79
  495. package/src/domains/dispatch/extension.ts +206 -26
  496. package/src/domains/dispatch/fleet-preflight.ts +18 -3
  497. package/src/domains/dispatch/fleet-run.ts +1 -0
  498. package/src/domains/dispatch/gate-decisions.ts +3 -3
  499. package/src/domains/dispatch/heartbeat.ts +1 -1
  500. package/src/domains/dispatch/host-verification.ts +16 -14
  501. package/src/domains/dispatch/index.ts +1 -0
  502. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  503. package/src/domains/dispatch/receipt-findings.ts +3 -4
  504. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  505. package/src/domains/dispatch/reservation-store.ts +7 -9
  506. package/src/domains/dispatch/route-facts.ts +1 -1
  507. package/src/domains/dispatch/state.ts +4 -5
  508. package/src/domains/dispatch/types.ts +3 -1
  509. package/src/domains/eval/metrics/tracked.ts +22 -2
  510. package/src/domains/evidence/build.ts +35 -7
  511. package/src/domains/extensions/operator-runtime.ts +3 -1
  512. package/src/domains/gateway/mcp/client.ts +923 -0
  513. package/src/domains/gateway/mcp/config.ts +456 -0
  514. package/src/domains/gateway/mcp/index.ts +88 -0
  515. package/src/domains/gateway/mcp/protocol.ts +273 -0
  516. package/src/domains/gateway/mcp/trust.ts +263 -0
  517. package/src/domains/lifecycle/doctor.ts +17 -3
  518. package/src/domains/middleware/hooks.ts +2 -2
  519. package/src/domains/mux/contract.ts +5 -9
  520. package/src/domains/mux/detect.ts +1 -1
  521. package/src/domains/mux/extension.ts +1 -1
  522. package/src/domains/mux/protocol.ts +5 -7
  523. package/src/domains/mux/socket-client.ts +3 -3
  524. package/src/domains/observability/accountability.ts +2 -2
  525. package/src/domains/observability/background-memory-usage.ts +3 -0
  526. package/src/domains/observability/compaction-usage.ts +2 -0
  527. package/src/domains/observability/contract.ts +7 -3
  528. package/src/domains/observability/cost.ts +5 -0
  529. package/src/domains/observability/evidence-index.ts +2 -2
  530. package/src/domains/observability/extension.ts +1 -0
  531. package/src/domains/observability/out-of-turn-usage.ts +2 -0
  532. package/src/domains/observability/projection.ts +10 -0
  533. package/src/domains/observability/trace-store.ts +65 -5
  534. package/src/domains/prompts/compiler.ts +41 -23
  535. package/src/domains/prompts/extension.ts +4 -17
  536. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
  537. package/src/domains/prompts/fragments/operating/skills.md +12 -10
  538. package/src/domains/providers/cache-deployment.ts +147 -0
  539. package/src/domains/providers/catalog.ts +12 -7
  540. package/src/domains/providers/extension.ts +27 -5
  541. package/src/domains/providers/index.ts +6 -1
  542. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
  543. package/src/domains/providers/plugins.ts +3 -13
  544. package/src/domains/providers/probe/http.ts +44 -59
  545. package/src/domains/providers/probe/reasoning.ts +2 -0
  546. package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
  547. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
  548. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
  549. package/src/domains/providers/types/target-descriptor.ts +17 -0
  550. package/src/domains/safety/action-classifier.ts +17 -1
  551. package/src/domains/safety/call-target.ts +14 -0
  552. package/src/domains/safety/contract.ts +1 -1
  553. package/src/domains/safety/finish-contract.ts +9 -3
  554. package/src/domains/safety/loop-detector.ts +1 -1
  555. package/src/domains/safety/policy-engine.ts +7 -0
  556. package/src/domains/safety/protected-artifacts.ts +3 -4
  557. package/src/domains/safety/rejection-feedback.ts +1 -1
  558. package/src/domains/safety/scope.ts +2 -3
  559. package/src/domains/safety/validation-contract.ts +3 -2
  560. package/src/domains/scheduling/budget.ts +5 -3
  561. package/src/domains/scheduling/contract.ts +2 -1
  562. package/src/domains/scheduling/extension.ts +3 -3
  563. package/src/domains/session/compaction/branch-summary.ts +1 -1
  564. package/src/domains/session/compaction/compact.ts +29 -3
  565. package/src/domains/session/compaction/cut-point.ts +1 -1
  566. package/src/domains/session/compaction/tokens.ts +5 -10
  567. package/src/domains/session/contract.ts +1 -1
  568. package/src/domains/session/cwd-fallback.ts +2 -2
  569. package/src/domains/session/entries.ts +1 -0
  570. package/src/domains/session/handoff.ts +5 -1
  571. package/src/domains/session/history.ts +6 -0
  572. package/src/domains/session/manager.ts +14 -7
  573. package/src/domains/session/retry.ts +2 -1
  574. package/src/domains/session/session-artifacts.ts +12 -7
  575. package/src/domains/session/task-board.ts +2 -3
  576. package/src/domains/session/usage.ts +6 -7
  577. package/src/engine/acp/server.ts +11 -0
  578. package/src/engine/ai.ts +2 -0
  579. package/src/engine/apis/openai-completions.ts +17 -4
  580. package/src/engine/loop-guard.ts +7 -0
  581. package/src/engine/prewarm.ts +232 -0
  582. package/src/engine/provider-diagnostics.ts +6 -1
  583. package/src/engine/provider-error-body.ts +65 -0
  584. package/src/engine/session.ts +118 -29
  585. package/src/engine/worker-runtime.ts +3 -0
  586. package/src/entry/boot-options.ts +2 -0
  587. package/src/entry/orchestrator.ts +38 -18
  588. package/src/interactive/chat-loop-messages.ts +3 -0
  589. package/src/interactive/chat-loop-policy.ts +1 -0
  590. package/src/interactive/chat-loop.ts +10 -12
  591. package/src/interactive/chat-panel.ts +23 -9
  592. package/src/interactive/chat-renderer.ts +33 -11
  593. package/src/interactive/clio-editor.ts +13 -5
  594. package/src/interactive/dispatch-board.ts +70 -30
  595. package/src/interactive/editor-submit.ts +30 -25
  596. package/src/interactive/footer/widgets.ts +12 -9
  597. package/src/interactive/interactive-presentation.ts +2 -3
  598. package/src/interactive/mux-bridge.ts +3 -7
  599. package/src/interactive/overlay-general-openers.ts +14 -7
  600. package/src/interactive/overlays/cwd-fallback.ts +1 -1
  601. package/src/interactive/overlays/library-model.ts +114 -35
  602. package/src/interactive/overlays/library.ts +52 -5
  603. package/src/interactive/overlays/list-overlay.ts +4 -1
  604. package/src/interactive/overlays/session-selector.ts +28 -23
  605. package/src/interactive/overlays/settings.ts +20 -1
  606. package/src/interactive/overlays/tree-selector.ts +47 -10
  607. package/src/interactive/panes-runtime.ts +1 -1
  608. package/src/interactive/prewarm.ts +11 -197
  609. package/src/interactive/renderers/compaction-summary.ts +1 -1
  610. package/src/interactive/renderers/provider-error.ts +118 -0
  611. package/src/interactive/renderers/retry-status.ts +59 -23
  612. package/src/interactive/renderers/tool-execution.ts +67 -7
  613. package/src/interactive/renderers/worker-answer.ts +198 -0
  614. package/src/interactive/renderers/worker-entry.ts +57 -163
  615. package/src/interactive/session-usage-reseed.ts +2 -0
  616. package/src/interactive/side-question.ts +2 -0
  617. package/src/interactive/slash-commands.ts +26 -1
  618. package/src/interactive/slash-spec.ts +2 -2
  619. package/src/interactive/theme/labels.ts +66 -30
  620. package/src/interactive/turn-context.ts +1 -0
  621. package/src/interactive/turn-persistence.ts +9 -1
  622. package/src/interactive/turn-prewarm.ts +126 -19
  623. package/src/interactive/turn-recovery.ts +2 -1
  624. package/src/interactive/turn-runtime.ts +36 -5
  625. package/src/interactive/view/artifacts.ts +3 -2
  626. package/src/interactive/view/view-overlay.ts +96 -20
  627. package/src/tools/agent-tools.ts +21 -7
  628. package/src/tools/artifact.ts +16 -8
  629. package/src/tools/bash.ts +90 -11
  630. package/src/tools/bootstrap.ts +42 -4
  631. package/src/tools/builtin-tool-catalog.ts +80 -11
  632. package/src/tools/context/index.ts +27 -31
  633. package/src/tools/context/library.ts +3 -1
  634. package/src/tools/context/surface.ts +12 -26
  635. package/src/tools/core-bootstrap.ts +72 -1
  636. package/src/tools/data/csv.ts +1189 -0
  637. package/src/tools/data/index.ts +308 -0
  638. package/src/tools/data/json.ts +1799 -0
  639. package/src/tools/data/jsonl.ts +561 -0
  640. package/src/tools/data/shared.ts +452 -0
  641. package/src/tools/edit-diff.ts +0 -7
  642. package/src/tools/edit.ts +115 -18
  643. package/src/tools/file-mutation-queue.ts +114 -4
  644. package/src/tools/find.ts +108 -29
  645. package/src/tools/gateway/caps.ts +11 -0
  646. package/src/tools/gateway/clio-context-surface.ts +41 -0
  647. package/src/tools/gateway/clio-context-tools.ts +77 -0
  648. package/src/tools/gateway/data-surface.ts +138 -0
  649. package/src/tools/gateway/data-tool.ts +201 -0
  650. package/src/tools/gateway/index.ts +342 -0
  651. package/src/tools/gateway/mcp-capabilities.ts +469 -0
  652. package/src/tools/grep.ts +88 -33
  653. package/src/tools/harness-extensions.ts +3 -0
  654. package/src/tools/ignore-policy.ts +7 -5
  655. package/src/tools/ls.ts +111 -20
  656. package/src/tools/policy.ts +35 -13
  657. package/src/tools/presentation.ts +6 -0
  658. package/src/tools/read.ts +634 -156
  659. package/src/tools/registry.ts +106 -8
  660. package/src/tools/run-script.ts +997 -0
  661. package/src/tools/spawn-hygiene.ts +157 -5
  662. package/src/tools/surface.ts +163 -0
  663. package/src/tools/verify/authoring.ts +8 -3
  664. package/src/tools/verify/catalog.ts +14 -1
  665. package/src/tools/verify/numeric.ts +367 -59
  666. package/src/tools/verify/perf.ts +171 -9
  667. package/src/tools/verify/scripts.ts +178 -26
  668. package/src/tools/web-fetch-surface.ts +22 -0
  669. package/src/tools/web-fetch.ts +26 -1
  670. package/src/tools/write.ts +45 -19
  671. package/src/worker/spec-contract.ts +27 -0
  672. package/dist/chunk-B6UM3OZC.js +0 -15
  673. package/dist/chunk-GJ24ODAX.js +0 -196
  674. package/dist/chunk-HRAKUPIH.js +0 -57
  675. package/dist/docs-BL7ROUFN.js +0 -292
package/src/cli/index.ts CHANGED
@@ -20,6 +20,7 @@ process.env.AI_AGENT = AI_AGENT_NAME;
20
20
  // its own chunk.
21
21
  import { traceBoot } from "../core/boot-trace.js";
22
22
  import { incompleteInstallationAdvice } from "../core/incomplete-installation.js";
23
+ import type { AutonomyLevel } from "../domains/safety/autonomy.js";
23
24
  import { extractGlobalFlags, parseFlags, printError } from "./argv.js";
24
25
 
25
26
  const HELP = `Clio Coder command line
@@ -29,6 +30,7 @@ science. CLIO stands for Context Layer for Input/Output, named for the Greek mus
29
30
 
30
31
  Usage:
31
32
  clio-coder start interactive repository chat
33
+ clio-coder web [--open] start the browser application
32
34
  clio-coder acp serve Clio as an ACP v1 agent over stdio
33
35
  clio-coder --acp alias for clio-coder acp
34
36
  clio-coder run [flags] <task> run one headless main-agent turn
@@ -37,6 +39,7 @@ Usage:
37
39
  clio-coder --no-context-files, -nc skip CLIO-CODER.md project-context injection
38
40
  clio-coder --with-panes activate the panes extension (terminal panes for workers and tools)
39
41
  clio-coder --no-panes keep panes off even when settings turn them on
42
+ clio-coder --autonomy <level> start this interactive session at read-only|suggest|auto-edit|full-auto
40
43
  clio-coder configure interactive first-run/configuration wizard
41
44
  clio-coder targets list configured targets, health, auth, and capabilities
42
45
  clio-coder targets add add a target interactively or via flags
@@ -70,12 +73,13 @@ Usage:
70
73
  clio-coder trace query or view the durable dispatch trace mirror
71
74
  clio-coder extensions install, list, enable, disable, or remove extension packages
72
75
  clio-coder library register, install, update, import, inspect, and manage packages of every kind
76
+ clio-coder mcp list|trust|untrust list MCP servers and manage trust for project-declared servers
73
77
  clio-coder tasks list, add, hand, finish, or drop project operator tasks
74
78
  clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
75
79
  clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
76
80
  clio-coder interop inspect --json detected external coding agents and how far each one is wired
77
81
  clio-coder panes install|theme install the pane multiplexer (alias for 'tools install herdr'), or print Clio's theme as a herdr block
78
- clio-coder docs [topic] serve the HTML docs of a source checkout on 127.0.0.1 (--no-open to skip browser)
82
+ clio-coder docs [topic] open documentation in the web app (--no-open to print the launch link)
79
83
  clio-coder dev <command> harness instruments; run 'clio-coder dev' for the list
80
84
  clio-coder --help, -h this message
81
85
  clio-coder --help --all this message plus every command under 'clio-coder dev'
@@ -121,6 +125,7 @@ interface CliBootOptions {
121
125
  noSkills?: boolean;
122
126
  skillPaths?: string[];
123
127
  panes?: "with" | "without";
128
+ autonomy?: AutonomyLevel;
124
129
  }
125
130
 
126
131
  type CommandHandler = (subArgs: string[], bootOptions: CliBootOptions) => Promise<number>;
@@ -153,6 +158,7 @@ async function main(argv: string[]): Promise<number> {
153
158
  noSkills,
154
159
  skillPaths,
155
160
  panes,
161
+ autonomy,
156
162
  rest,
157
163
  error: globalFlagError,
158
164
  } = extractGlobalFlags(argv, isCommandToken);
@@ -181,10 +187,17 @@ async function main(argv: string[]): Promise<number> {
181
187
  ...(skillPaths.length > 0 ? { skillPaths } : {}),
182
188
  ...(panes === undefined ? {} : { panes }),
183
189
  };
190
+ if (autonomy !== undefined && subcommand) {
191
+ // Silently dropping a safety level would be worse than refusing it.
192
+ printError(
193
+ `--autonomy before a subcommand applies to the interactive session only. For a headless turn use: clio-coder run --autonomy ${autonomy} "<task>"`,
194
+ );
195
+ return 2;
196
+ }
184
197
  if (!subcommand) {
185
198
  await enableBootCompileCache();
186
199
  const { runClioCommand } = await import("./clio.js");
187
- return runClioCommand(bootOptions);
200
+ return runClioCommand({ ...bootOptions, ...(autonomy === undefined ? {} : { autonomy }) });
188
201
  }
189
202
 
190
203
  return dispatch(subcommand, subArgs, bootOptions);
@@ -259,7 +272,9 @@ const COMMAND_HANDLERS = new Map<string, CommandHandler>([
259
272
  ["fleet", async (subArgs) => (await import("./fleet.js")).runFleetCommand(subArgs)],
260
273
  ["library", async (subArgs) => (await import("./library.js")).runLibraryCommand(subArgs)],
261
274
  ["tasks", async (subArgs) => (await import("./tasks.js")).runTasksCommand(subArgs)],
275
+ ["mcp", async (subArgs) => (await import("./mcp.js")).runMcpCommand(subArgs)],
262
276
  ["verifiers", async (subArgs) => (await import("./verifiers.js")).runVerifiersCommand(subArgs)],
277
+ ["web", async (subArgs) => (await import("./web.js")).runWebCommand(subArgs)],
263
278
  ["docs", async (subArgs) => (await import("./docs.js")).runDocsCommand(subArgs)],
264
279
  ["share", async (subArgs) => (await import("./share.js")).runShareCommand(subArgs)],
265
280
  ["export", async (subArgs) => (await import("./share.js")).runExportCommand(subArgs)],
package/src/cli/mcp.ts ADDED
@@ -0,0 +1,106 @@
1
+ import {
2
+ MCP_TRUST_ACTION_CLASSES,
3
+ type McpTrustActionClass,
4
+ type McpTrustOptions,
5
+ resolveMcpServers,
6
+ trustMcpServer,
7
+ untrustMcpServer,
8
+ } from "../domains/gateway/mcp/index.js";
9
+ import { printError } from "./shared.js";
10
+
11
+ const HELP = `clio-coder mcp <command>
12
+
13
+ Commands:
14
+ clio-coder mcp list [--json]
15
+ clio-coder mcp trust <id> [--action-class <class>] [--json]
16
+ clio-coder mcp untrust <id> [--json]
17
+
18
+ Action classes: ${MCP_TRUST_ACTION_CLASSES.join(", ")}
19
+
20
+ JSON responses (--json):
21
+ list: {servers: [...], diagnostics: [...], trustDiagnostics: [...]}
22
+ Each server includes its declaration and trust {status, actionClass, reason?}.
23
+ trust: {ok: true, record: {projectRoot, id, digest, actionClass, trustedAt}}
24
+ untrust: {ok: true, removed: boolean}
25
+ errors: {ok: false, message: string}
26
+ Exit codes: 0 success; 1 operational failure; 2 invalid usage.
27
+ List retains its response shape on failure and exits 1 when config or trust
28
+ diagnostics are present. Mutation errors return the error shape with a
29
+ one-line reason. --help prints this text even when --json is supplied.
30
+ `;
31
+
32
+ export interface McpCommandOutput {
33
+ code: number;
34
+ text: string;
35
+ data: unknown;
36
+ }
37
+
38
+ /** Shared operator outcomes for the CLI and slash command. */
39
+ export function mcpCommandOutput(
40
+ argv: ReadonlyArray<string>,
41
+ options: McpTrustOptions = { cwd: process.cwd() },
42
+ ): McpCommandOutput {
43
+ const fail = (code: number, message: string): McpCommandOutput => {
44
+ const text = message.replace(/[\r\n]+/gu, " ");
45
+ return { code, text, data: { ok: false, message: text } };
46
+ };
47
+ try {
48
+ const [command, id, ...rest] = argv;
49
+ if (command === "list" && id === undefined) {
50
+ const result = resolveMcpServers(options);
51
+ const lines = result.servers.map(
52
+ (server) =>
53
+ `${server.id} scope=${server.scope} command=${JSON.stringify([server.command, ...server.args])} cwd=${JSON.stringify(server.cwd)} trust=${server.trust.status}${"reason" in server.trust ? ` (${server.trust.reason})` : ""} actionClass=${server.trust.actionClass}`,
54
+ );
55
+ lines.push(...result.diagnostics.map((entry) => `${entry.path}: ${entry.message}`), ...result.trustDiagnostics);
56
+ return {
57
+ code: result.diagnostics.length || result.trustDiagnostics.length ? 1 : 0,
58
+ text: lines.join("\n") || "mcp: none",
59
+ data: result,
60
+ };
61
+ }
62
+ if ((command !== "trust" && command !== "untrust") || !id)
63
+ return fail(2, "usage: clio-coder mcp list | trust <id> [--action-class <class>] | untrust <id>");
64
+ let actionClass: McpTrustActionClass | undefined;
65
+ if (rest.length) {
66
+ if (
67
+ command !== "trust" ||
68
+ rest.length !== 2 ||
69
+ rest[0] !== "--action-class" ||
70
+ !MCP_TRUST_ACTION_CLASSES.includes(rest[1] as McpTrustActionClass)
71
+ )
72
+ return fail(2, `--action-class must be one of ${MCP_TRUST_ACTION_CLASSES.join(", ")} and applies only to trust`);
73
+ actionClass = rest[1] as McpTrustActionClass;
74
+ }
75
+ if (command === "trust") {
76
+ const result = trustMcpServer({ ...options, id, ...(actionClass ? { actionClass } : {}) });
77
+ return result.ok
78
+ ? { code: 0, text: `mcp: trusted ${id} ${JSON.stringify(result.record)}`, data: result }
79
+ : fail(1, result.message);
80
+ }
81
+ const resolved = resolveMcpServers(options);
82
+ const server = resolved.servers.find((entry) => entry.id === id);
83
+ if (!server) return fail(1, `no declared MCP server with id '${id}'`);
84
+ if (server.scope === "user")
85
+ return fail(1, `server '${id}' is a user-scope declaration; it is trusted by authorship`);
86
+ const result = untrustMcpServer({ ...options, id });
87
+ return result.ok
88
+ ? { code: 0, text: `mcp: untrusted ${id} (record ${result.removed ? "removed" : "already absent"})`, data: result }
89
+ : fail(1, result.message);
90
+ } catch (error) {
91
+ return fail(1, error instanceof Error ? error.message : String(error));
92
+ }
93
+ }
94
+
95
+ export function runMcpCommand(argv: ReadonlyArray<string>): number {
96
+ if (argv.includes("--help") || argv.includes("-h")) {
97
+ process.stdout.write(HELP);
98
+ return 0;
99
+ }
100
+ const json = argv.includes("--json");
101
+ const result = mcpCommandOutput(argv.filter((arg) => arg !== "--json"));
102
+ if (json) process.stdout.write(`${JSON.stringify(result.data, null, 2)}\n`);
103
+ else if (result.code && argv[0] !== "list") printError(result.text);
104
+ else process.stdout.write(`${result.text}\n`);
105
+ return result.code;
106
+ }
@@ -26,6 +26,7 @@ import {
26
26
  type SkillEvalScenario,
27
27
  } from "../domains/resources/index.js";
28
28
  import { NO_NETWORK_TOOLS_ENV } from "../tools/network-policy.js";
29
+ import { effectiveToolCall } from "../tools/surface.js";
29
30
  import { formatColumns, printError } from "./shared.js";
30
31
 
31
32
  /**
@@ -845,9 +846,14 @@ function parseRunStdout(stdout: string): { sessionId: string | null; transcript:
845
846
  continue;
846
847
  }
847
848
  if (event.type === "tool_execution_start") {
848
- const tool = readString(event.toolName) ?? readString(event.tool) ?? "tool";
849
- const args = event.args ?? event.arguments ?? event.input;
849
+ const recordedTool = readString(event.toolName) ?? readString(event.tool) ?? "tool";
850
+ const recordedArgs = event.args ?? event.arguments ?? event.input;
850
851
  const callId = readString(event.toolCallId);
852
+ // A gateway call is judged as the capability it reached: an artifact
853
+ // written through the gateway is still the terminal answer.
854
+ const effective = effectiveToolCall(recordedTool, recordedArgs);
855
+ const tool = effective.toolName;
856
+ const args = effective.viaGateway ? effective.args : recordedArgs;
851
857
  if (callId !== null && loadsSkillBody(tool, args)) skillBodyCallIds.add(callId);
852
858
  lines.push(`TOOL ${tool} args=${preview(args)}`);
853
859
  // Terminating tools end the turn with no assistant text; their content
package/src/cli/trace.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import { existsSync } from "node:fs";
2
- import { access } from "node:fs/promises";
3
2
  import { resolve } from "node:path";
4
- import { fileURLToPath, pathToFileURL } from "node:url";
5
3
  import { clioStatePath } from "../core/xdg.js";
6
4
  import type { CodeStepRecord } from "../domains/dispatch/code-step.js";
7
5
  import { codeStepDir, readCodeStepRecords } from "../domains/dispatch/code-step-store.js";
@@ -29,10 +27,8 @@ const HELP = `Usage:
29
27
  clio-coder trace code-steps <rootId> [--json] deterministic code steps of one fleet root
30
28
  clio-coder trace prune [--max-age-days N] [--max-bytes N] [--db PATH] [--json]
31
29
  clio-coder trace sql <SELECT query> [--db PATH]
32
- clio-coder trace ui [--db PATH] [--port N] source checkout only
33
30
 
34
- The viewer ships with the repository, not the npm package, so from an installed
35
- Clio the subcommands above are the way in. They read the same database, except
31
+ The subcommands above read the same database, except
36
32
  code-steps, which reads the per-root record files under the state directory's
37
33
  code-steps/ tree (a code step is a subprocess, not a model run, so it never
38
34
  enters the SQLite mirror).
@@ -51,7 +47,6 @@ interface ParsedTraceArgs {
51
47
  dbExplicit: boolean;
52
48
  follow: boolean;
53
49
  limit: number;
54
- port: number;
55
50
  json: boolean;
56
51
  maxAgeDays: number | undefined;
57
52
  maxBytes: number | undefined;
@@ -63,7 +58,6 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
63
58
  let dbExplicit = false;
64
59
  let follow = false;
65
60
  let limit = DEFAULT_TRACE_LIMIT;
66
- let port = 0;
67
61
  let json = false;
68
62
  let maxAgeDays: number | undefined;
69
63
  let maxBytes: number | undefined;
@@ -71,13 +65,7 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
71
65
  const arg = args[index];
72
66
  if (arg === "--follow") follow = true;
73
67
  else if (arg === "--json") json = true;
74
- else if (
75
- arg === "--db" ||
76
- arg === "--limit" ||
77
- arg === "--port" ||
78
- arg === "--max-age-days" ||
79
- arg === "--max-bytes"
80
- ) {
68
+ else if (arg === "--db" || arg === "--limit" || arg === "--max-age-days" || arg === "--max-bytes") {
81
69
  const value = args[index + 1];
82
70
  if (value === undefined) throw new Error(`${arg} requires a value`);
83
71
  index += 1;
@@ -85,25 +73,23 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
85
73
  db = resolve(value);
86
74
  dbExplicit = true;
87
75
  } else if (arg === "--limit") limit = parseInteger(value, "--limit", 1, 500);
88
- else if (arg === "--port") port = parseInteger(value, "--port", 0, 65_535);
89
76
  else if (arg === "--max-age-days") maxAgeDays = parseInteger(value, arg, 1, 36_500);
90
77
  else maxBytes = parseInteger(value, arg, 1024 * 1024, Number.MAX_SAFE_INTEGER);
91
78
  } else if (arg?.startsWith("--db=")) {
92
79
  db = resolve(arg.slice(5));
93
80
  dbExplicit = true;
94
81
  } else if (arg?.startsWith("--limit=")) limit = parseInteger(arg.slice(8), "--limit", 1, 500);
95
- else if (arg?.startsWith("--port=")) port = parseInteger(arg.slice(7), "--port", 0, 65_535);
96
82
  else if (arg?.startsWith("--max-age-days=")) maxAgeDays = parseInteger(arg.slice(15), "--max-age-days", 1, 36_500);
97
83
  else if (arg?.startsWith("--max-bytes="))
98
84
  maxBytes = parseInteger(arg.slice(12), "--max-bytes", 1024 * 1024, Number.MAX_SAFE_INTEGER);
99
85
  else if (arg?.startsWith("-")) throw new Error(`unknown trace flag: ${arg}`);
100
86
  else if (arg !== undefined) positional.push(arg);
101
87
  }
102
- return { positional, db, dbExplicit, follow, limit, port, json, maxAgeDays, maxBytes };
88
+ return { positional, db, dbExplicit, follow, limit, json, maxAgeDays, maxBytes };
103
89
  }
104
90
 
105
91
  /** Every subcommand `trace` answers to. Anything else is a usage error. */
106
- const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "code-steps", "prune", "sql", "ui"]);
92
+ const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "code-steps", "prune", "sql"]);
107
93
 
108
94
  /** The subcommands whose first positional is a run id. */
109
95
  const TRACE_COMMANDS_NEEDING_RUN_ID = new Set(["phases", "tail", "procs"]);
@@ -169,8 +155,6 @@ export async function runTraceCommand(args: string[]): Promise<number> {
169
155
  }
170
156
  }
171
157
 
172
- if (command === "ui") return runTraceUi(parsed.db, parsed.port);
173
-
174
158
  // Code-step records live in flat per-root JSON files beside the ledger, not
175
159
  // in the SQLite mirror, so this answers before the database is consulted and
176
160
  // ignores --db. An absent root directory is the empty state: the root either
@@ -187,7 +171,6 @@ export async function runTraceCommand(args: string[]): Promise<number> {
187
171
  !parsed.dbExplicit &&
188
172
  !parsed.follow &&
189
173
  parsed.limit === DEFAULT_TRACE_LIMIT &&
190
- parsed.port === 0 &&
191
174
  parsed.maxAgeDays === undefined &&
192
175
  parsed.maxBytes === undefined,
193
176
  );
@@ -379,50 +362,6 @@ function printProcesses(rows: TraceProcessRow[]): void {
379
362
  }
380
363
  }
381
364
 
382
- async function runTraceUi(db: string, port: number): Promise<number> {
383
- const candidates = [
384
- fileURLToPath(new URL("../apps/trace-viewer/server.mjs", import.meta.url)),
385
- fileURLToPath(new URL("../../apps/trace-viewer/server.mjs", import.meta.url)),
386
- ];
387
- const entry = await firstExisting(candidates);
388
- if (entry === null) {
389
- process.stderr.write(
390
- "trace viewer is available only from a source checkout; apps/trace-viewer/server.mjs was not found\n" +
391
- " the npm package does not carry the viewer, so an installed clio cannot start it\n" +
392
- ` the same run is readable here: clio-coder trace runs --db ${db}\n` +
393
- " from a checkout of the repository: npm run trace:ui\n",
394
- );
395
- return 1;
396
- }
397
- const module = (await import(pathToFileURL(entry).href)) as {
398
- startTraceViewer(options: { db: string; port: number }): Promise<{ url: string; close(): Promise<void> }>;
399
- };
400
- const server = await module.startTraceViewer({ db, port });
401
- process.stdout.write(`Trace viewer: ${server.url}\n`);
402
- await new Promise<void>((resolveStop) => {
403
- const stop = (): void => {
404
- process.off("SIGINT", stop);
405
- process.off("SIGTERM", stop);
406
- void server.close().finally(resolveStop);
407
- };
408
- process.on("SIGINT", stop);
409
- process.on("SIGTERM", stop);
410
- });
411
- return 0;
412
- }
413
-
414
- async function firstExisting(paths: string[]): Promise<string | null> {
415
- for (const path of paths) {
416
- try {
417
- await access(path);
418
- return path;
419
- } catch {
420
- // Try the next source-checkout location.
421
- }
422
- }
423
- return null;
424
- }
425
-
426
365
  function parseInteger(value: string, flag: string, min: number, max: number): number {
427
366
  const parsed = Number(value);
428
367
  if (!Number.isInteger(parsed) || parsed < min || parsed > max)
@@ -9,6 +9,7 @@ import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
9
9
  import { createLifecyclePresenter, type LifecycleItem, measurePath, shortenPath } from "./lifecycle-presenter.js";
10
10
  import { type RemovalFailure, removePath, reportRemovalFailures } from "./removal.js";
11
11
  import { printError } from "./shared.js";
12
+ import { prepareWebUninstall } from "./web.js";
12
13
 
13
14
  const HELP = `clio-coder uninstall [--remove-binary] [--keep-config] [--keep-data] [--dry-run] [--force] [--json]
14
15
 
@@ -18,6 +19,8 @@ Per-project \`.clio-coder/\` directories sit outside those roots and are never
18
19
  removed here. Every project Clio has run in is recorded in the session metadata,
19
20
  so the real run and --dry-run both list them and name the command that clears one.
20
21
  Shell startup files are reported, never edited.
22
+ Owned web background services are stopped and disabled before their state is
23
+ removed; their desktop launchers are removed using the app's ownership manifests.
21
24
 
22
25
  Flags:
23
26
  --keep-config preserve the configuration root (settings.yaml, credentials)
@@ -331,6 +334,18 @@ export async function runUninstallCommand(argv: ReadonlyArray<string>): Promise<
331
334
  const linkSize = measurePath(linkPath);
332
335
  const launcher = classifyLauncher(linkPath);
333
336
  const shellEdits = detectShellRcEdits();
337
+ let web: Awaited<ReturnType<typeof prepareWebUninstall>>;
338
+ try {
339
+ const desktopPrefix =
340
+ process.env.XDG_DATA_HOME && isAbsolute(process.env.XDG_DATA_HOME)
341
+ ? process.env.XDG_DATA_HOME
342
+ : join(homedir(), ".local/share");
343
+ web = await prepareWebUninstall({ stateDir: dirs.state, desktopPrefix });
344
+ } catch (error) {
345
+ presenter.fail(error instanceof Error ? error.message : "Web installation ownership could not be checked.");
346
+ presenter.finish();
347
+ return 1;
348
+ }
334
349
 
335
350
  // The state root's own children (audit, sessions) are inside the State row
336
351
  // and go with it; listing them again as separate removals double-counted the
@@ -372,6 +387,7 @@ export async function runUninstallCommand(argv: ReadonlyArray<string>): Promise<
372
387
  detail: launcherItemDetail(launcher, args.removeBinary),
373
388
  },
374
389
  ];
390
+ for (const item of web.items) items.push({ ...item, status: "remove", detail: "verified app ownership" });
375
391
 
376
392
  // A login file is reported, never edited; see detectShellRcEdits.
377
393
  for (const file of shellEdits) {
@@ -413,6 +429,16 @@ export async function runUninstallCommand(argv: ReadonlyArray<string>): Promise<
413
429
  }
414
430
 
415
431
  const failures: RemovalFailure[] = [];
432
+ try {
433
+ await web.remove();
434
+ for (const item of web.items) presenter.completedStep(`Removed ${item.label}`);
435
+ } catch (error) {
436
+ presenter.fail(
437
+ error instanceof Error ? error.message : "Could not stop the web installation; Clio state was preserved.",
438
+ );
439
+ presenter.finish();
440
+ return 1;
441
+ }
416
442
 
417
443
  if (cacheSize.exists) {
418
444
  const failure = removePath("cache", dirs.cache, false);
@@ -86,24 +86,10 @@ function parseUpgradeArgs(argv: ReadonlyArray<string>): UpgradeOptions {
86
86
  * the installed version is the newest one.
87
87
  */
88
88
  type RegistryLookup =
89
- | { asked: false; reason: "source checkout" | "network checks are disabled" | "post-install checks" }
89
+ | { asked: false; reason: "source checkout" | "post-install checks" }
90
90
  | { asked: true; version: string | null };
91
91
 
92
- function testSeam(name: string): string | undefined {
93
- if (process.env.NODE_ENV !== "test") return undefined;
94
- return process.env[name];
95
- }
96
-
97
- async function lookUpAvailableVersion(
98
- channel: Channel,
99
- method: "source" | "npm",
100
- noNetwork: boolean,
101
- ): Promise<RegistryLookup> {
102
- const seam = testSeam("CLIO_CODER_TEST_UPGRADE_AVAILABLE");
103
- // `unreachable` stands in for a registry that answered nothing, which is the
104
- // only way to reach that branch without a network in the test.
105
- if (seam) return { asked: true, version: seam === "unreachable" ? null : seam };
106
- if (noNetwork) return { asked: false, reason: "network checks are disabled" };
92
+ async function lookUpAvailableVersion(channel: Channel, method: "source" | "npm"): Promise<RegistryLookup> {
107
93
  if (method === "source") return { asked: false, reason: "source checkout" };
108
94
  try {
109
95
  const res = await fetch(`https://registry.npmjs.org/@iowarp/clio-coder/${channel}`, {
@@ -149,16 +135,10 @@ async function runChild(command: string, args: ReadonlyArray<string>, label: str
149
135
  }
150
136
 
151
137
  async function runNpmInstall(channel: Channel): Promise<void> {
152
- if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "npm") {
153
- throw new Error("npm ERR! 404 Not Found (mock failure)");
154
- }
155
138
  await runChild("npm", ["install", "-g", `@iowarp/clio-coder@${channel}`], "npm install");
156
139
  }
157
140
 
158
141
  async function runDoctorFixAfterInstall(): Promise<void> {
159
- if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "doctor") {
160
- throw new Error("mock doctor fix failure");
161
- }
162
142
  await runChild("clio-coder", ["doctor", "--fix"], "clio-coder doctor --fix");
163
143
  }
164
144
 
@@ -168,7 +148,29 @@ async function runPostInstallUpgrade(opts: UpgradeOptions): Promise<void> {
168
148
  await runChild("clio-coder", args, "clio-coder upgrade --post-install");
169
149
  }
170
150
 
171
- export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<number> {
151
+ export interface UpgradeDependencies {
152
+ detectInstallMethod: typeof detectInstallMethod;
153
+ lookUpAvailableVersion: typeof lookUpAvailableVersion;
154
+ runNpmInstall: typeof runNpmInstall;
155
+ runDoctorFixAfterInstall: typeof runDoctorFixAfterInstall;
156
+ runPostInstallUpgrade: typeof runPostInstallUpgrade;
157
+ runPending: typeof runPending;
158
+ }
159
+
160
+ const DEFAULT_DEPENDENCIES: UpgradeDependencies = {
161
+ detectInstallMethod,
162
+ lookUpAvailableVersion,
163
+ runNpmInstall,
164
+ runDoctorFixAfterInstall,
165
+ runPostInstallUpgrade,
166
+ runPending,
167
+ };
168
+
169
+ export async function runUpgradeCommand(
170
+ argv: ReadonlyArray<string>,
171
+ dependencies: Partial<UpgradeDependencies> = {},
172
+ ): Promise<number> {
173
+ const deps = { ...DEFAULT_DEPENDENCIES, ...dependencies };
172
174
  let opts: UpgradeOptions;
173
175
  try {
174
176
  opts = parseUpgradeArgs(argv);
@@ -186,14 +188,13 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
186
188
 
187
189
  const before = getVersionInfo().clio;
188
190
  const stateDir = resolveClioDirs().state;
189
- const method = detectInstallMethod();
191
+ const method = deps.detectInstallMethod();
190
192
  const methodLabel = method === "source" ? "source checkout" : opts.postInstall ? "package install" : "npm global";
191
193
  presenter.setMethod(methodLabel);
192
194
 
193
- const noNetwork = Boolean(testSeam("CLIO_CODER_TEST_UPGRADE_NO_NETWORK"));
194
195
  const lookup: RegistryLookup = opts.postInstall
195
196
  ? { asked: false, reason: "post-install checks" }
196
- : await lookUpAvailableVersion(opts.channel, method, noNetwork);
197
+ : await deps.lookUpAvailableVersion(opts.channel, method);
197
198
  const availableVersion = lookup.asked ? lookup.version : null;
198
199
 
199
200
  presenter.step(`Installation method: ${methodLabel}`);
@@ -223,8 +224,8 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
223
224
  // "Already current" is a claim about a version that was compared. A lookup
224
225
  // that was made and came back empty has compared nothing, so it does not get
225
226
  // to make it: the run falls through and attempts the install, which is what
226
- // the operator asked for. A lookup that was never owed (a checkout, or the
227
- // network seam) leaves the recorded state version to decide.
227
+ // the operator asked for. A lookup that was never owed for a checkout or
228
+ // post-install checks leaves the recorded state version to decide.
228
229
  const versionIsCurrent =
229
230
  (lookup.asked ? lookup.version === before : true) && (recorded === null || recorded === before);
230
231
  const hasPendingMigrations = pendingMigrationIds.length > 0;
@@ -260,11 +261,9 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
260
261
  presenter.note("Running post-install checks with the active clio-coder binary.");
261
262
  } else if (method === "source") {
262
263
  presenter.note("Source checkout: no npm install to run.");
263
- } else if (noNetwork) {
264
- presenter.note("CLIO_CODER_TEST_UPGRADE_NO_NETWORK is set; skipping npm install.");
265
264
  } else {
266
265
  try {
267
- await runNpmInstall(opts.channel);
266
+ await deps.runNpmInstall(opts.channel);
268
267
  presenter.completedStep(`Installed @iowarp/clio-coder@${opts.channel}`);
269
268
  } catch (err) {
270
269
  presenter.fail("npm install failed", err instanceof Error ? err.message : String(err));
@@ -276,7 +275,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
276
275
  return 1;
277
276
  }
278
277
  try {
279
- await runPostInstallUpgrade(opts);
278
+ await deps.runPostInstallUpgrade(opts);
280
279
  presenter.done("Done");
281
280
  return 0;
282
281
  } catch (err) {
@@ -293,10 +292,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
293
292
  } else {
294
293
  let result: Awaited<ReturnType<typeof runPending>>;
295
294
  try {
296
- if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "migration") {
297
- throw new Error("mock migration failure in 2026-09-01-settings-v2");
298
- }
299
- result = await runPending(stateDir);
295
+ result = await deps.runPending(stateDir);
300
296
  } catch (err) {
301
297
  presenter.fail("migration failed", err instanceof Error ? err.message : String(err));
302
298
  presenter.commandAdvice(
@@ -312,13 +308,13 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
312
308
  else for (const id of applied) presenter.completedStep(`Applied migration ${id}`);
313
309
  }
314
310
 
315
- if (method === "source" || noNetwork) {
311
+ if (method === "source") {
316
312
  const refresh = describeRefresh();
317
313
  initializeClioHome();
318
314
  presenter.completedStep(`Refreshed ${refresh}`);
319
315
  } else {
320
316
  try {
321
- await runDoctorFixAfterInstall();
317
+ await deps.runDoctorFixAfterInstall();
322
318
  presenter.completedStep("Checked the install with clio-coder doctor --fix");
323
319
  } catch (err) {
324
320
  presenter.fail("doctor fix failed", err instanceof Error ? err.message : String(err));
package/src/cli/usage.ts CHANGED
@@ -85,6 +85,7 @@ interface UsageTotals {
85
85
  output: number;
86
86
  cacheRead: number;
87
87
  cacheWrite: number;
88
+ cacheWrite1h?: number;
88
89
  reasoningTokens: number;
89
90
  totalTokens: number;
90
91
  costUsd: number;
@@ -169,6 +170,7 @@ function outOfTurnUsageCall(row: OutOfTurnUsageRow): LedgerUsageCall {
169
170
  output: row.usage.output ?? 0,
170
171
  cacheRead: row.usage.cacheRead ?? 0,
171
172
  cacheWrite: row.usage.cacheWrite ?? 0,
173
+ ...(typeof row.usage.cacheWrite1h === "number" ? { cacheWrite1h: row.usage.cacheWrite1h } : {}),
172
174
  reasoningTokens: row.usage.reasoning ?? 0,
173
175
  totalTokens: row.usage.totalTokens ?? 0,
174
176
  costUsd: row.usage.costUsd ?? 0,
@@ -197,6 +199,7 @@ function addUsageCall(totals: UsageTotals, call: LedgerUsageCall): void {
197
199
  totals.output += call.output;
198
200
  totals.cacheRead += call.cacheRead;
199
201
  totals.cacheWrite += call.cacheWrite;
202
+ if (call.cacheWrite1h !== undefined) totals.cacheWrite1h = (totals.cacheWrite1h ?? 0) + call.cacheWrite1h;
200
203
  totals.reasoningTokens += call.reasoningTokens;
201
204
  totals.totalTokens += call.totalTokens;
202
205
  totals.costUsd += call.costUsd;
@@ -38,7 +38,7 @@ Fields:
38
38
  --tags <a,b> comma-separated catalog tags
39
39
  --kind <kind> command (default), numeric-compare, or perf-budget
40
40
  --reference <path> numeric-compare: repository-relative reference JSON of string -> number | number[]
41
- --tolerance <json> numeric-compare: {"relative"?,"absolute"?,"ulp"?}, at least one;
41
+ --tolerance <json> numeric-compare: {"relative"?,"absolute"?,"ulp"?,"combine"?:all|any,"nonFinite"?:fail|match}, at least one numeric bound;
42
42
  perf-budget with --baseline: {"relative"} headroom over the baseline
43
43
  --budget-ms <number> perf-budget: wall-time bound in milliseconds
44
44
  --budget-relative <r> perf-budget with --budget-ms: fractional headroom over the bound