@iowarp/clio-coder 0.4.7 → 0.4.8

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 (485) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +29 -0
  3. package/CONTRIBUTING.md +83 -74
  4. package/README.md +66 -45
  5. package/dist/{acp-W3Y3TRHD.js → acp-JWPQZM2D.js} +14 -14
  6. package/dist/{agents-J4ICNLQ3.js → agents-4GCDIRVX.js} +55 -54
  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-SYAKTDQE.js} +22 -22
  11. package/dist/background-OW67WMYR.js +37 -0
  12. package/dist/{builtins-XLXWWSRF.js → builtins-TKS63VNV.js} +4 -4
  13. package/dist/chunk-2JSCCEKO.js +85 -0
  14. package/dist/{chunk-QKWL7SYE.js → chunk-2SXGG2IV.js} +49 -38
  15. package/dist/{chunk-MZHXENL7.js → chunk-2U2U5POA.js} +5 -5
  16. package/dist/{chunk-NCCQ6DVS.js → chunk-2ZWLMA3T.js} +6 -6
  17. package/dist/{chunk-FQOOGXBH.js → chunk-36XSBPXL.js} +7 -7
  18. package/dist/{chunk-5AJPUR72.js → chunk-3IQOZRQ6.js} +7 -7
  19. package/dist/{chunk-4MFBBY2Z.js → chunk-44U2OUSM.js} +3 -3
  20. package/dist/{chunk-5ZSZEYJK.js → chunk-4P6M2TTE.js} +2 -2
  21. package/dist/{chunk-IZYTT3CD.js → chunk-526ABLHD.js} +6 -6
  22. package/dist/{chunk-BO4XV5VX.js → chunk-5C2OQHLR.js} +4 -4
  23. package/dist/chunk-5D2FNBMG.js +185 -0
  24. package/dist/{chunk-M6Z2V6YU.js → chunk-5HULHKT2.js} +5 -5
  25. package/dist/{chunk-PFLOULP3.js → chunk-5UG6EZI3.js} +4 -4
  26. package/dist/{chunk-WN552PKN.js → chunk-5W4FRA5Q.js} +280 -900
  27. package/dist/{chunk-KAFMW7WM.js → chunk-6R5MBXBJ.js} +1 -1
  28. package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
  29. package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
  30. package/dist/{chunk-GXIWHXDB.js → chunk-6X7VOCDY.js} +3 -3
  31. package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
  32. package/dist/{chunk-34XHRVKG.js → chunk-ARRUMZ7X.js} +2 -2
  33. package/dist/{chunk-3T4DXWP6.js → chunk-ATB3Q7YO.js} +1 -6
  34. package/dist/chunk-AUHVBIDW.js +19 -0
  35. package/dist/{chunk-L3Z5ANCV.js → chunk-BE4I3UJ2.js} +7 -7
  36. package/dist/chunk-BFPHMSK7.js +169 -0
  37. package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
  38. package/dist/{chunk-D2T66PDV.js → chunk-BIY22UUK.js} +35 -203
  39. package/dist/{chunk-VMATUZB6.js → chunk-D55WO5J7.js} +11 -11
  40. package/dist/{chunk-2O2LVQQK.js → chunk-E2NSPYLC.js} +4 -4
  41. package/dist/{chunk-IJMW64DX.js → chunk-EFXMQYI6.js} +32 -32
  42. package/dist/{chunk-GVZFCJHE.js → chunk-EPYATQMG.js} +18 -18
  43. package/dist/{chunk-MZNWZUJM.js → chunk-EXKUF426.js} +11 -11
  44. package/dist/{chunk-IMOD2YPV.js → chunk-F7Y6QTPL.js} +9 -19
  45. package/dist/{chunk-IQCNVLO6.js → chunk-FB3KTE2J.js} +10 -7
  46. package/dist/{chunk-3LXJOICS.js → chunk-FNVPQQYT.js} +2 -2
  47. package/dist/{chunk-UUQ5G6EZ.js → chunk-GEYX2NZ5.js} +2 -2
  48. package/dist/{chunk-CP3HIR5H.js → chunk-GJBJHJNY.js} +19 -18
  49. package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
  50. package/dist/{chunk-WT5TRMO4.js → chunk-GVU4CXPJ.js} +179 -65
  51. package/dist/{chunk-TZ6UVP2H.js → chunk-H5DPSUBB.js} +8 -8
  52. package/dist/{chunk-EUEXGXXR.js → chunk-H77XBUBM.js} +5 -5
  53. package/dist/{config-YXARKGTX.js → chunk-HMGAKB7E.js} +15 -259
  54. package/dist/{chunk-EUZRMP4Y.js → chunk-HP7KJ5O2.js} +19 -19
  55. package/dist/chunk-HVCAY2FH.js +67 -0
  56. package/dist/{chunk-CPXGJI2A.js → chunk-ICYIUNO4.js} +4 -4
  57. package/dist/{chunk-GI5RRMAH.js → chunk-IILXVWJY.js} +7 -7
  58. package/dist/{chunk-MNQN3X6Y.js → chunk-JCVIL6TY.js} +5 -5
  59. package/dist/chunk-JIMWEYWO.js +63 -0
  60. package/dist/{chunk-C3G5PNUO.js → chunk-JLBVCROW.js} +25 -25
  61. package/dist/chunk-JOBN2YQQ.js +176 -0
  62. package/dist/chunk-JOL2QRLE.js +152 -0
  63. package/dist/{chunk-N37QC5FV.js → chunk-JRA6OBHY.js} +5 -5
  64. package/dist/{chunk-C6GEXX4L.js → chunk-JV25I7ID.js} +7 -7
  65. package/dist/{chunk-SEDI5K5B.js → chunk-JYKUMHCQ.js} +16 -16
  66. package/dist/{chunk-UA6W4XFJ.js → chunk-K3W6BF5C.js} +2 -2
  67. package/dist/chunk-K45LHSCI.js +194 -0
  68. package/dist/{chunk-UA3W4FGC.js → chunk-K53E2PTW.js} +5 -5
  69. package/dist/{chunk-VCRVEDUC.js → chunk-K5UJD6MM.js} +5 -5
  70. package/dist/{chunk-65BGHOUR.js → chunk-KGP3UQGJ.js} +5 -5
  71. package/dist/chunk-KKRXONXG.js +43 -0
  72. package/dist/{chunk-LBFQMYS3.js → chunk-KWJXCL2X.js} +5 -3
  73. package/dist/{chunk-RTLNFZMD.js → chunk-L75H5B3B.js} +3 -3
  74. package/dist/{chunk-G4LGUTOE.js → chunk-LLCGGVSW.js} +6 -6
  75. package/dist/{chunk-HRAKUPIH.js → chunk-LZCCBLRC.js} +5 -5
  76. package/dist/{chunk-WURGVOZJ.js → chunk-LZDLYSUN.js} +18 -14
  77. package/dist/{chunk-ISNCCX42.js → chunk-MATCRH3M.js} +7 -6
  78. package/dist/{chunk-BAU36233.js → chunk-MEHBW2SP.js} +7 -7
  79. package/dist/{chunk-BQQ5MXUC.js → chunk-MUXNDNMZ.js} +3 -3
  80. package/dist/{chunk-NO7J45X6.js → chunk-MWMW53WW.js} +90 -51
  81. package/dist/chunk-MZDPF35R.js +45 -0
  82. package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
  83. package/dist/{chunk-T334FW2H.js → chunk-O2QJDRWP.js} +5 -5
  84. package/dist/{chunk-T7QQBNLH.js → chunk-O3HSB2YL.js} +9 -7
  85. package/dist/{chunk-WB7POC6M.js → chunk-OEMFEL26.js} +6 -6
  86. package/dist/{chunk-77CZRFTE.js → chunk-OPC4DQD6.js} +2 -2
  87. package/dist/{chunk-4UHVS5T7.js → chunk-ORRNGQDV.js} +8 -8
  88. package/dist/{chunk-TZHN5ITX.js → chunk-P4JS3MH5.js} +5 -5
  89. package/dist/{chunk-WBVKKTUT.js → chunk-P7GTE4FX.js} +2 -2
  90. package/dist/{chunk-6TAATXXH.js → chunk-PAQVETLA.js} +6 -6
  91. package/dist/{chunk-6CA2BHOR.js → chunk-PFZJMXIY.js} +4 -4
  92. package/dist/{chunk-4QKAITQT.js → chunk-PGEFOTJB.js} +70 -7
  93. package/dist/{chunk-MBJO5VNZ.js → chunk-PJ5H5B7A.js} +25 -25
  94. package/dist/{chunk-DO7M3LSX.js → chunk-PMUUAABD.js} +43 -96
  95. package/dist/{chunk-A67NR5AT.js → chunk-Q32C6AWI.js} +11 -8
  96. package/dist/{chunk-ECOMVOHP.js → chunk-QGIC5SX5.js} +2 -2
  97. package/dist/{chunk-5CMARGPF.js → chunk-QLAGXTTV.js} +7 -2
  98. package/dist/{chunk-GFQ7P2UF.js → chunk-QLKCCC2J.js} +9 -9
  99. package/dist/{chunk-SELG4SUR.js → chunk-QWUSS2QP.js} +7 -4
  100. package/dist/{chunk-P5SC4DLJ.js → chunk-QYSAZMSH.js} +2 -2
  101. package/dist/{fleet-decisions-S3PTZV2D.js → chunk-R5NRX5N4.js} +5 -41
  102. package/dist/{chunk-DLIYANB7.js → chunk-RAUOKUZV.js} +11 -11
  103. package/dist/{chunk-UFYNOQK4.js → chunk-RBES4TCZ.js} +7 -7
  104. package/dist/{chunk-T52TPHYC.js → chunk-RFULVPBX.js} +4 -4
  105. package/dist/{chunk-TLTGZTXI.js → chunk-RKFNU5UA.js} +3 -3
  106. package/dist/{chunk-T4TY5GG3.js → chunk-RM3XJX7P.js} +3 -3
  107. package/dist/{chunk-6YA46L5A.js → chunk-RNLAPBJL.js} +2 -2
  108. package/dist/chunk-RPMNIFRY.js +65 -0
  109. package/dist/{chunk-DACXIVVF.js → chunk-RRZFRIJP.js} +5 -5
  110. package/dist/{chunk-CE64C5K5.js → chunk-RXI7K4J5.js} +61 -61
  111. package/dist/{chunk-CULVKYTK.js → chunk-STC6CWUZ.js} +5 -5
  112. package/dist/{chunk-6YHPAAZR.js → chunk-TEHVMHOK.js} +3 -3
  113. package/dist/{chunk-VTYHHQ57.js → chunk-TOPICHGR.js} +2 -2
  114. package/dist/{chunk-UWD3JD5X.js → chunk-UB33F3YW.js} +10 -10
  115. package/dist/{chunk-TN5FW4XY.js → chunk-UDAK6GR2.js} +12 -9
  116. package/dist/chunk-USBBEKHW.js +177 -0
  117. package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
  118. package/dist/{chunk-6LRLOJHQ.js → chunk-W7KNI3F5.js} +11 -62
  119. package/dist/chunk-WFTSK7N3.js +637 -0
  120. package/dist/{chunk-YPRSNUTC.js → chunk-WJWNZXRM.js} +2 -2
  121. package/dist/chunk-WS4FOGLY.js +686 -0
  122. package/dist/{chunk-ZGIGW4ZG.js → chunk-WTZVSMQZ.js} +5 -5
  123. package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
  124. package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
  125. package/dist/chunk-XC5POIL4.js +68 -0
  126. package/dist/{chunk-XZ6UFQ52.js → chunk-XTLJDC2X.js} +22 -17
  127. package/dist/{chunk-7EEGBKV4.js → chunk-YGIV24MF.js} +8 -8
  128. package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
  129. package/dist/{chunk-4N2RZ4TO.js → chunk-YKIIWURD.js} +3 -3
  130. package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
  131. package/dist/{chunk-KS7ETA3P.js → chunk-YXANQGCX.js} +6 -6
  132. package/dist/{chunk-HOX4YZ2K.js → chunk-YXFKLMX2.js} +5 -5
  133. package/dist/chunk-ZST3FRCV.js +132 -0
  134. package/dist/cli/index.js +39 -37
  135. package/dist/{clio-L2P7S2R2.js → clio-BPBAPZGA.js} +9 -9
  136. package/dist/{code-nav-B5LNX4KU.js → code-nav-KBQ3RIFK.js} +33 -33
  137. package/dist/{components-63MMQKUT.js → components-6DKAXWFN.js} +10 -10
  138. package/dist/config-FWL5JK2H.js +270 -0
  139. package/dist/config-graph-ACDB26L2.js +156 -0
  140. package/dist/{configure-LMVQJ46J.js → configure-ZIZ4YV62.js} +48 -48
  141. package/dist/{context-7HJEWTTP.js → context-EZZPT2ZV.js} +49 -49
  142. package/dist/{context-YG2LZDYZ.js → context-VIL5MFRH.js} +86 -84
  143. package/dist/{context-XSZKKFBW.js → context-Z3GOBHDK.js} +16 -16
  144. package/dist/{context-clear-AC5NXHM2.js → context-clear-ZPB3L7MN.js} +72 -70
  145. package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
  146. package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
  147. package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-2GLBVF7L.js} +23 -22
  148. package/dist/{detail-H73BEF2N.js → detail-VSBWYSGZ.js} +73 -71
  149. package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-EEEHGKX4.js} +78 -76
  150. package/dist/docs-VMMWFVHL.js +101 -0
  151. package/dist/{doctor-EQYJOGUG.js → doctor-V5L4IQGP.js} +63 -62
  152. package/dist/{eval-4P7O6CCE.js → eval-VJYJ2BV3.js} +80 -65
  153. package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
  154. package/dist/evals-J2H5V6DD.js +104 -0
  155. package/dist/{evidence-D6GUSYJW.js → evidence-POWAEBEW.js} +72 -70
  156. package/dist/evidence-XCCCLS36.js +242 -0
  157. package/dist/{evidence-O76QF7TZ.js → evidence-Y35YSXH6.js} +80 -78
  158. package/dist/{evolve-H47BCETS.js → evolve-GPG72VB6.js} +74 -72
  159. package/dist/{extensions-NNL3ZOCU.js → extensions-YIZ7W3DA.js} +12 -11
  160. package/dist/fleet-2MDCQ2VK.js +264 -0
  161. package/dist/{fleet-KMNS6NOM.js → fleet-W2AF3TOJ.js} +127 -123
  162. package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-WS56G26H.js} +11 -11
  163. package/dist/fleet-decisions-MYGZ3JW7.js +52 -0
  164. package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-ELTBXBAV.js} +22 -22
  165. package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-45IK73L4.js} +84 -248
  166. package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-T5NCZKHE.js} +4 -4
  167. package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-VG4JBLA4.js} +26 -26
  168. package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-VTSABAYO.js} +72 -70
  169. package/dist/{fleet-view-BHJFW26B.js → fleet-view-XC7WMKSS.js} +75 -73
  170. package/dist/{init-XAT5N5YM.js → init-VTJNNTIP.js} +95 -92
  171. package/dist/install-6PIF6F6W.js +19 -0
  172. package/dist/{interop-FVECHFKG.js → interop-IU6BNA7C.js} +25 -25
  173. package/dist/{inventory-7KFQGLCV.js → inventory-QPQUTUUZ.js} +75 -73
  174. package/dist/{library-NY2XOT75.js → library-HUTAS57T.js} +33 -33
  175. package/dist/{library-QAPAO23R.js → library-LF7DLU6S.js} +13 -13
  176. package/dist/library-Q3NWL5CM.js +75 -0
  177. package/dist/{library-import-5Y6MAS3R.js → library-import-PPW4YUC5.js} +25 -25
  178. package/dist/{library-inventory-JT6HWITQ.js → library-inventory-DIRVFRZU.js} +19 -19
  179. package/dist/{library-validation-EQUH25DC.js → library-validation-XHUZ3INE.js} +17 -17
  180. package/dist/{memory-DYVTTCP6.js → memory-Z2LSKNV6.js} +74 -72
  181. package/dist/{models-MASFJ6Y2.js → models-3FTREYPY.js} +53 -52
  182. package/dist/{monitor-YMP4NXJJ.js → monitor-HF2MQRB3.js} +83 -80
  183. package/dist/{orchestrator-AFQRRTEI.js → orchestrator-UYPA6W4S.js} +498 -358
  184. package/dist/{panes-NICTHQCV.js → panes-736XB73K.js} +14 -14
  185. package/dist/{panes-D3Y2KFG5.js → panes-C4P3PIWT.js} +4 -4
  186. package/dist/{paths-PSFAUIGO.js → paths-JQ4QYIYB.js} +6 -6
  187. package/dist/{preload-5Q7VXRFJ.js → preload-XSLRYH3Y.js} +72 -70
  188. package/dist/{reset-7NKZK7JN.js → reset-V7QSPZYE.js} +9 -9
  189. package/dist/{resources-NILSIZAT.js → resources-OJGDFHYT.js} +22 -22
  190. package/dist/{run-BPZGEBZV.js → run-T354SMDW.js} +129 -125
  191. package/dist/settings-MWZXO6RV.js +72 -0
  192. package/dist/{share-EZ6ERBMH.js → share-Y5ZKJPND.js} +26 -26
  193. package/dist/{skills-BTVVNYVM.js → skills-4GLZC4LN.js} +28 -28
  194. package/dist/{skills-eval-UY34MNK7.js → skills-eval-L5T7GODM.js} +87 -85
  195. package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-LASKXEZI.js} +22 -22
  196. package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-OIMRU36D.js} +49 -49
  197. package/dist/{steer-2B3EQGFH.js → steer-KMAM2Y2C.js} +4 -4
  198. package/dist/{support-L2SOL3IE.js → support-AWC3XKPX.js} +8 -8
  199. package/dist/system-CD75NYBU.js +116 -0
  200. package/dist/{targets-44VKGFLN.js → targets-VSZX2J2S.js} +66 -65
  201. package/dist/{tasks-3KODKFU7.js → tasks-AN567LYH.js} +14 -14
  202. package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-6KTWNHVY.js} +3 -3
  203. package/dist/{tools-3UB7TEVR.js → tools-AGRK3V5J.js} +13 -13
  204. package/dist/{trace-TAMIU4OJ.js → trace-P4MQZD33.js} +18 -67
  205. package/dist/{uninstall-QYVRPEM4.js → uninstall-BRUTEPIC.js} +37 -12
  206. package/dist/{upgrade-7PMKM2JH.js → upgrade-SBCGHQGJ.js} +22 -21
  207. package/dist/{usage-6EQV7EQK.js → usage-BIDVTO6V.js} +93 -87
  208. package/dist/{verifiers-JLITWSHU.js → verifiers-LTGCAMXS.js} +12 -12
  209. package/dist/{verify-T7NAEVIG.js → verify-OZU4LLNP.js} +9 -9
  210. package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
  211. package/dist/web/client/assets/abnfDiagram-VCTEODGH-C5wfoHm3.js +1 -0
  212. package/dist/web/client/assets/arc-oH91sfLl.js +1 -0
  213. package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +1 -0
  214. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +36 -0
  215. package/dist/web/client/assets/array-BifhSqXX.js +1 -0
  216. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  217. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  218. package/dist/web/client/assets/blockDiagram-I7D4REHJ-wi0_CYHL.js +129 -0
  219. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DV7NYc2W.js +38 -0
  220. package/dist/web/client/assets/channel-CiUWbHN9.js +1 -0
  221. package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  222. package/dist/web/client/assets/chunk-4HAMMTFA-Bhsegh3F.js +62 -0
  223. package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  224. package/dist/web/client/assets/chunk-75Z2AOVW-RQCckcQG.js +2 -0
  225. package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +125 -0
  226. package/dist/web/client/assets/chunk-F27PBJKO-BcNqv2x1.js +1 -0
  227. package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  228. package/dist/web/client/assets/chunk-GMAD6QVW-Bq8JWiZT.js +72 -0
  229. package/dist/web/client/assets/chunk-GVQU2GXP-DbchrAeJ.js +1 -0
  230. package/dist/web/client/assets/chunk-IMKFNOWR-DrpvjocK.js +231 -0
  231. package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  232. package/dist/web/client/assets/chunk-L3NEJ4N5-DHLmTnCe.js +1 -0
  233. package/dist/web/client/assets/chunk-OSK3NFVY-CsRbtN9n.js +10 -0
  234. package/dist/web/client/assets/chunk-P2QGCYS3-aqPbxoMh.js +1 -0
  235. package/dist/web/client/assets/chunk-POPQ4Y6H-Dl5vw0h0.js +1 -0
  236. package/dist/web/client/assets/chunk-PWAF6VOD-D7OBRSdO.js +1 -0
  237. package/dist/web/client/assets/chunk-SHT3W25Y-CdKCIwuB.js +168 -0
  238. package/dist/web/client/assets/chunk-SVP7TREG-B94Nu_1-.js +88 -0
  239. package/dist/web/client/assets/chunk-TICWLB2K-jjRQI_hk.js +206 -0
  240. package/dist/web/client/assets/chunk-XXDRQBXY-azkbKE37.js +1 -0
  241. package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  242. package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +1 -0
  243. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +1 -0
  244. package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  245. package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  246. package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +1 -0
  247. package/dist/web/client/assets/cynefin-OW5HDTMX--i9RDU5f.js +1 -0
  248. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-cRcvyBdp.js +62 -0
  249. package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
  250. package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
  251. package/dist/web/client/assets/dagre-GXQ25YYZ-C9mZmAPe.js +4 -0
  252. package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  253. package/dist/web/client/assets/diagram-S7CK7UJ4-Oj_zlLDY.js +30 -0
  254. package/dist/web/client/assets/diagram-UQ7AKVKN-BWKbbfcR.js +41 -0
  255. package/dist/web/client/assets/diagram-VSXAHHWV-C3N3f7DO.js +3 -0
  256. package/dist/web/client/assets/diagram-VX7I27RA-CtDKDAWe.js +24 -0
  257. package/dist/web/client/assets/diagram-Z3DM3KII-B8bkBRCz.js +24 -0
  258. package/dist/web/client/assets/dist-D0_q-A2b.js +1 -0
  259. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-CskW-Whx.js +1 -0
  260. package/dist/web/client/assets/erDiagram-RLTQ6QDP-C-83cgCW.js +99 -0
  261. package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +1 -0
  262. package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +1 -0
  263. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +292 -0
  264. package/dist/web/client/assets/gitGraph-4MIJSDKK-B40cQtBE.js +1 -0
  265. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CH-7P7Di.js +106 -0
  266. package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
  267. package/dist/web/client/assets/index-Dsi52apB.css +1 -0
  268. package/dist/web/client/assets/index-FSIC94pi.js +83 -0
  269. package/dist/web/client/assets/info-A6RAGUB7-eCCE9D_Q.js +1 -0
  270. package/dist/web/client/assets/infoDiagram-27XIBGKW-DRnvqMjM.js +2 -0
  271. package/dist/web/client/assets/init-C-OQMol4.js +1 -0
  272. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-DBA_55wp.js +70 -0
  273. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-C-ewpNl7.js +139 -0
  274. package/dist/web/client/assets/kanban-definition-UXKFOSKX-B1taGsu0.js +89 -0
  275. package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
  276. package/dist/web/client/assets/line-lZ0kyxDI.js +1 -0
  277. package/dist/web/client/assets/linear-DIc8FgZj.js +1 -0
  278. package/dist/web/client/assets/mermaid-parser.core-SXolxpXw.js +7 -0
  279. package/dist/web/client/assets/mermaid.core-DXgQtkNg.js +44 -0
  280. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-DXJas9K7.js +96 -0
  281. package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  282. package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  283. package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  284. package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
  285. package/dist/web/client/assets/packet-AYTQ26CC-OqVl_07o.js +1 -0
  286. package/dist/web/client/assets/path-fybaL0A-.js +1 -0
  287. package/dist/web/client/assets/pegDiagram-XKGWAZYB-CPE_zdfN.js +1 -0
  288. package/dist/web/client/assets/pie-WAS4IAKB-DAxnMBLe.js +1 -0
  289. package/dist/web/client/assets/pieDiagram-E7YTZNPT-Uwjpufxv.js +39 -0
  290. package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
  291. package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
  292. package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
  293. package/dist/web/client/assets/prism-core-BngLtbUd.js +1 -0
  294. package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
  295. package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
  296. package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
  297. package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
  298. package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
  299. package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
  300. package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
  301. package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
  302. package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
  303. package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
  304. package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
  305. package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
  306. package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
  307. package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
  308. package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
  309. package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
  310. package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
  311. package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
  312. package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
  313. package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
  314. package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
  315. package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
  316. package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
  317. package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
  318. package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
  319. package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
  320. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-Bjs4yjgs.js +7 -0
  321. package/dist/web/client/assets/radar-RG4KPBEZ-CuCKjHM3.js +1 -0
  322. package/dist/web/client/assets/railroad-74A4TZTK-CnQK-Cc1.js +1 -0
  323. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +1 -0
  324. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +1 -0
  325. package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +1 -0
  326. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-BDDIPNLL.js +1 -0
  327. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-B5Ydyxc1.js +84 -0
  328. package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  329. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-Bw2Qym75.js +40 -0
  330. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-BZf36nO0.js +162 -0
  331. package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  332. package/dist/web/client/assets/src-yeptRXpt.js +1 -0
  333. package/dist/web/client/assets/stateDiagram-D77RDMKH-DnH6JRkp.js +1 -0
  334. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +1 -0
  335. package/dist/web/client/assets/swimlanes-42K2YHIH-D9PZmtZg.js +1 -0
  336. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +8 -0
  337. package/dist/web/client/assets/timeline-definition-24CTP7MA-CrkZZBo7.js +120 -0
  338. package/dist/web/client/assets/treeView-Q6P3EWNA-C9zDShoC.js +1 -0
  339. package/dist/web/client/assets/treemap-WGGIJYW6-B-plj9yK.js +1 -0
  340. package/dist/web/client/assets/vennDiagram-4TSXK5OY-VeOdaphN.js +34 -0
  341. package/dist/web/client/assets/wardley-WFR3VGLG-Wl1P_m6L.js +1 -0
  342. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-B85-R9t2.js +78 -0
  343. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BrD8OW8m.js +7 -0
  344. package/dist/web/client/clio-coder-logo.webp +0 -0
  345. package/dist/web/client/icon-192.png +0 -0
  346. package/dist/web/client/icon-512.png +0 -0
  347. package/dist/web/client/index.html +4 -0
  348. package/dist/web/client/manifest.webmanifest +15 -0
  349. package/dist/web/client/offline.css +55 -0
  350. package/dist/web/client/offline.html +5 -0
  351. package/dist/web/client/offline.js +27 -0
  352. package/dist/web/client/sw.js +34 -0
  353. package/dist/web/ops-worker.js +37 -0
  354. package/dist/web/reads-worker.js +1726 -0
  355. package/dist/web/server.js +8499 -0
  356. package/dist/web-EU6ATJWA.js +13 -0
  357. package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-U22Q7HV4.js} +3 -3
  358. package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-LZRLFG6I.js} +98 -95
  359. package/dist/{with-panes-CHFC7HGI.js → with-panes-X5CZOGML.js} +9 -9
  360. package/dist/worker/entry.js +68 -68
  361. package/docs/README.md +27 -26
  362. package/docs/architecture/acp.md +5 -9
  363. package/docs/architecture/alcf-provider.md +0 -3
  364. package/docs/architecture/architecture.md +0 -3
  365. package/docs/architecture/artifact-placement.md +0 -3
  366. package/docs/architecture/artifact-versions.md +0 -3
  367. package/docs/architecture/capacity-and-scheduling.md +0 -3
  368. package/docs/architecture/context-engine.md +0 -3
  369. package/docs/architecture/context-working-set.md +0 -3
  370. package/docs/architecture/dispatch-architecture-rationale.md +0 -3
  371. package/docs/architecture/dispatch-typed-intent.md +0 -3
  372. package/docs/architecture/evidence-and-memory.md +0 -3
  373. package/docs/architecture/library.md +0 -2
  374. package/docs/architecture/middleware-and-components.md +0 -3
  375. package/docs/architecture/model-catalog.md +1 -4
  376. package/docs/architecture/observability.md +0 -3
  377. package/docs/architecture/pi-boundary.md +6 -9
  378. package/docs/architecture/prompt-envelope-and-tools.md +1 -4
  379. package/docs/architecture/provider-adapter-cookbook.md +1 -4
  380. package/docs/architecture/safety-model.md +0 -3
  381. package/docs/architecture/session-lifecycle.md +0 -3
  382. package/docs/architecture/time-conventions.md +0 -3
  383. package/docs/architecture/trace-store.md +28 -20
  384. package/docs/architecture/tui-design.md +1 -4
  385. package/docs/architecture/worker-context.md +1 -3
  386. package/docs/architecture/worker-dispatch-mechanics.md +1 -4
  387. package/docs/guide/authoring-plugins.md +1 -3
  388. package/docs/guide/built-in-agents.md +0 -3
  389. package/docs/guide/commands-and-modes.md +2 -6
  390. package/docs/guide/configuration-and-targets.md +197 -4
  391. package/docs/guide/configuration-reference.md +9 -4
  392. package/docs/guide/environment-variables.md +0 -3
  393. package/docs/guide/exit-codes-and-output.md +0 -3
  394. package/docs/guide/extensions-and-sharing.md +0 -3
  395. package/docs/guide/fleet-dispatch.md +0 -3
  396. package/docs/guide/glossary.md +0 -3
  397. package/docs/guide/harness-extensions.md +0 -2
  398. package/docs/guide/installation-and-lifecycle.md +1 -4
  399. package/docs/guide/interop.md +0 -2
  400. package/docs/guide/panes-and-files.md +0 -3
  401. package/docs/guide/plugins.md +0 -3
  402. package/docs/guide/proactive-memory.md +0 -3
  403. package/docs/guide/resource-library.md +0 -2
  404. package/docs/guide/skills-marketplace.md +0 -2
  405. package/docs/guide/tool-usage.md +0 -3
  406. package/docs/guide/troubleshooting.md +0 -3
  407. package/docs/history/config-knobs-audit.md +0 -3
  408. package/docs/history/release-cut-checklist.md +0 -3
  409. package/docs/process/development-pipeline.md +0 -3
  410. package/docs/process/documentation-coverage.md +3 -3
  411. package/docs/process/documentation-guide.md +15 -22
  412. package/docs/process/eval-runner.md +0 -3
  413. package/docs/process/evals-internal.md +0 -3
  414. package/docs/process/evolution.md +0 -3
  415. package/docs/process/fleet-demo-runbook.md +0 -3
  416. package/docs/process/git-commit-provenance.md +0 -3
  417. package/docs/process/performance-methodology.md +1 -4
  418. package/docs/process/release-cut-checklist.md +114 -221
  419. package/docs/process/scientific-validation.md +1 -4
  420. package/library/registry.yaml +2 -2
  421. package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
  422. package/library/skills/meta/clio-coder-test/evals.md +16 -2
  423. package/library/skills/meta/clio-coder-test/plugin.json +1 -1
  424. package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
  425. package/library/skills/registry.yaml +2 -2
  426. package/library/skills/skill-marketplace.json +1 -1
  427. package/package.json +13 -11
  428. package/src/cli/docs.ts +65 -328
  429. package/src/cli/index.ts +3 -1
  430. package/src/cli/trace.ts +4 -65
  431. package/src/cli/uninstall.ts +26 -0
  432. package/src/cli/usage.ts +3 -0
  433. package/src/cli/web.ts +79 -0
  434. package/src/core/bus-events.ts +3 -4
  435. package/src/core/config.ts +71 -0
  436. package/src/core/domain-loader.ts +37 -28
  437. package/src/core/termination.ts +13 -9
  438. package/src/domains/agents/contract.ts +1 -1
  439. package/src/domains/agents/extension.ts +18 -10
  440. package/src/domains/config/extension.ts +5 -4
  441. package/src/domains/dispatch/extension.ts +75 -12
  442. package/src/domains/dispatch/index.ts +1 -0
  443. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  444. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  445. package/src/domains/dispatch/state.ts +1 -2
  446. package/src/domains/dispatch/types.ts +2 -0
  447. package/src/domains/eval/metrics/tracked.ts +22 -2
  448. package/src/domains/extensions/operator-runtime.ts +3 -1
  449. package/src/domains/middleware/hooks.ts +2 -2
  450. package/src/domains/observability/background-memory-usage.ts +3 -0
  451. package/src/domains/observability/compaction-usage.ts +2 -0
  452. package/src/domains/observability/cost.ts +5 -0
  453. package/src/domains/observability/extension.ts +1 -0
  454. package/src/domains/observability/out-of-turn-usage.ts +2 -0
  455. package/src/domains/observability/trace-store.ts +65 -5
  456. package/src/domains/prompts/extension.ts +4 -17
  457. package/src/domains/providers/cache-deployment.ts +147 -0
  458. package/src/domains/providers/catalog.ts +12 -7
  459. package/src/domains/providers/extension.ts +27 -5
  460. package/src/domains/providers/index.ts +1 -0
  461. package/src/domains/providers/plugins.ts +3 -13
  462. package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
  463. package/src/domains/providers/types/target-descriptor.ts +17 -0
  464. package/src/domains/session/compaction/compact.ts +4 -1
  465. package/src/domains/session/entries.ts +1 -0
  466. package/src/domains/session/usage.ts +6 -7
  467. package/src/engine/acp/server.ts +11 -0
  468. package/src/engine/ai.ts +2 -0
  469. package/src/engine/apis/openai-completions.ts +9 -4
  470. package/src/engine/prewarm.ts +232 -0
  471. package/src/engine/provider-diagnostics.ts +6 -1
  472. package/src/entry/orchestrator.ts +20 -16
  473. package/src/interactive/chat-loop-messages.ts +3 -0
  474. package/src/interactive/chat-loop.ts +2 -8
  475. package/src/interactive/prewarm.ts +11 -197
  476. package/src/interactive/session-usage-reseed.ts +2 -0
  477. package/src/interactive/side-question.ts +2 -0
  478. package/src/interactive/turn-context.ts +1 -0
  479. package/src/interactive/turn-persistence.ts +3 -0
  480. package/src/interactive/turn-prewarm.ts +126 -19
  481. package/src/interactive/turn-runtime.ts +14 -0
  482. package/src/tools/builtin-tool-catalog.ts +8 -4
  483. package/src/tools/registry.ts +12 -2
  484. package/src/worker/spec-contract.ts +27 -0
  485. package/dist/docs-BL7ROUFN.js +0 -292
@@ -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);
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;
package/src/cli/web.ts ADDED
@@ -0,0 +1,79 @@
1
+ import { lstatSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { resolvePackageRoot } from "../core/package-root.js";
5
+ import { printError } from "./argv.js";
6
+
7
+ const HELP = `Clio Coder web application
8
+
9
+ Usage:
10
+ clio-coder web [--open] [--port <0-65535>]
11
+ clio-coder web background install [--open] [--port <1-65535>]
12
+ clio-coder web background status|start|open|stop|uninstall
13
+ clio-coder web launcher install|status|uninstall
14
+
15
+ The foreground server prints a private launch link. --open opens your default
16
+ browser. Press Ctrl+C to stop. --no-open explicitly disables browser opening.
17
+ Optional --idle-exit <milliseconds> stops an idle foreground server.
18
+ Use --path </app/path> to open a particular page. --reuse-background uses this
19
+ installation's background app when configured, or starts a foreground server.
20
+
21
+ On Linux with a systemd user session, background install keeps the app available
22
+ at login. Open its launch link once, then install it from your browser. Background
23
+ stop stops it now; background uninstall also removes its login and desktop entries.
24
+ Other platforms can run the foreground web app. Your CLI, terminal interface,
25
+ headless runs, and web app use the same Clio runtime and configuration.
26
+ `;
27
+
28
+ export async function runWebCommand(args: string[]): Promise<number> {
29
+ if (args.includes("--help") || args.includes("-h")) {
30
+ process.stdout.write(HELP);
31
+ return 0;
32
+ }
33
+ try {
34
+ const root = resolvePackageRoot();
35
+ process.env.CLIO_CODER_PACKAGE_ROOT = root;
36
+ // A URL keeps this a separate entry; bundling it into the command chunk
37
+ // would change import.meta.url and the worker/client paths beside it.
38
+ const server = await import(pathToFileURL(join(root, "dist/web/server.js")).href);
39
+ await server.main(args);
40
+ return 0;
41
+ } catch (error) {
42
+ printError(error instanceof Error ? error.message : "Could not start the web application.");
43
+ return 1;
44
+ }
45
+ }
46
+
47
+ /** Separate packaged entry; inspection never starts a listener or opens a browser. */
48
+ export async function prepareWebUninstall(options: { stateDir: string; desktopPrefix: string }): Promise<{
49
+ items: Array<{ label: string; path: string }>;
50
+ remove(): Promise<void>;
51
+ }> {
52
+ // Most CLI-only installs have no web lifecycle files. Keep that path lazy,
53
+ // including checkouts whose optional web bundle has not been built yet.
54
+ const paths = [
55
+ join(options.stateDir, "web/background"),
56
+ join(options.desktopPrefix, "applications/io.iowarp.ClioCoder.desktop"),
57
+ join(options.desktopPrefix, "applications/io.iowarp.ClioCoder.desktop.owner.json"),
58
+ ];
59
+ const present = paths.some((path) => {
60
+ try {
61
+ lstatSync(path);
62
+ return true;
63
+ } catch (error) {
64
+ if (["ENOENT", "ENOTDIR"].includes((error as NodeJS.ErrnoException).code ?? "")) return false;
65
+ throw error;
66
+ }
67
+ });
68
+ if (!present)
69
+ return {
70
+ items: [],
71
+ remove: async () => {
72
+ if ((await prepareWebUninstall(options)).items.length)
73
+ throw new Error("A web installation appeared during confirmation; run uninstall again.");
74
+ },
75
+ };
76
+ const packageRoot = resolvePackageRoot();
77
+ const server = await import(pathToFileURL(join(packageRoot, "dist/web/server.js")).href);
78
+ return server.prepareWebUninstall({ ...options, packageRoot });
79
+ }
@@ -630,6 +630,7 @@ export interface DispatchTerminalStats {
630
630
  outputTokenCount: number;
631
631
  cacheReadTokenCount: number;
632
632
  cacheWriteTokenCount: number;
633
+ cacheWrite1hTokenCount?: number;
633
634
  reasoningTokenCount: number;
634
635
  staticShellHash: string | null;
635
636
  sessionShellHash: string | null;
@@ -714,10 +715,8 @@ export interface CompactionPayload {
714
715
  /**
715
716
  * Published on {@link BusChannels.ExtensionsReloaded} by the composition
716
717
  * root after a new extension generation and its user-hook registrations
717
- * have both been committed. Consumers that cache extension-sourced data
718
- * (prompt fragments, agent recipes, the session prompt) refresh on
719
- * `changed`; an unchanged generation carries the previous digest and needs
720
- * no work. Never published between the two commits.
718
+ * have both been committed. Never published between the two commits.
719
+ * Recipe and prompt consumers subscribe to PluginsReloaded instead.
721
720
  */
722
721
  export interface ExtensionsReloadedPayload {
723
722
  generation: number;
@@ -593,6 +593,7 @@ function validateTarget(issues: Issues, path: string, value: unknown): ClioSetti
593
593
  "lifecycle",
594
594
  "gateway",
595
595
  "pricing",
596
+ "cache",
596
597
  "lmstudio",
597
598
  "litellm",
598
599
  "maxConcurrentRequests",
@@ -642,6 +643,76 @@ function validateTarget(issues: Issues, path: string, value: unknown): ClioSetti
642
643
  const v = validatePricing(issues, `${path}.pricing`, value.pricing);
643
644
  if (v !== undefined) target.pricing = v;
644
645
  }
646
+ if ("cache" in value) {
647
+ if (!isPlainObject(value.cache)) issues.add(`${path}.cache`, "expected a map");
648
+ else {
649
+ issues.unknownKeys(`${path}.cache`, value.cache, ["retention", "deployment", "warm"]);
650
+ target.cache = {};
651
+ if ("retention" in value.cache) {
652
+ const retention = expectEnum(issues, `${path}.cache.retention`, value.cache.retention, [
653
+ "none",
654
+ "short",
655
+ "long",
656
+ ] as const);
657
+ if (retention !== undefined) target.cache.retention = retention;
658
+ }
659
+ if ("deployment" in value.cache) {
660
+ const binding = value.cache.deployment;
661
+ const bindingPath = `${path}.cache.deployment`;
662
+ if (!isPlainObject(binding)) issues.add(bindingPath, "expected a map");
663
+ else {
664
+ issues.unknownKeys(bindingPath, binding, ["backend", "controlUrl", "model", "build", "gatewayDeploymentId"]);
665
+ const backend = expectEnum(issues, `${bindingPath}.backend`, binding.backend, ["llamacpp", "vllm"] as const);
666
+ for (const key of ["controlUrl", "model", "build"] as const) {
667
+ if (typeof binding[key] !== "string" || !binding[key].trim())
668
+ issues.add(`${bindingPath}.${key}`, "expected a nonempty string");
669
+ }
670
+ if (typeof binding.controlUrl === "string") {
671
+ try {
672
+ const url = new URL(binding.controlUrl);
673
+ if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
674
+ throw new Error("invalid URL");
675
+ } catch {
676
+ issues.add(`${bindingPath}.controlUrl`, "expected an HTTP(S) URL without credentials, query, or fragment");
677
+ }
678
+ }
679
+ if (
680
+ binding.gatewayDeploymentId !== undefined &&
681
+ (typeof binding.gatewayDeploymentId !== "string" || !binding.gatewayDeploymentId.trim())
682
+ )
683
+ issues.add(`${bindingPath}.gatewayDeploymentId`, "expected a nonempty string");
684
+ if (
685
+ backend &&
686
+ typeof binding.controlUrl === "string" &&
687
+ typeof binding.model === "string" &&
688
+ typeof binding.build === "string"
689
+ ) {
690
+ target.cache.deployment = {
691
+ backend,
692
+ controlUrl: binding.controlUrl,
693
+ model: binding.model,
694
+ build: binding.build,
695
+ ...(typeof binding.gatewayDeploymentId === "string" ? { gatewayDeploymentId: binding.gatewayDeploymentId } : {}),
696
+ };
697
+ }
698
+ }
699
+ }
700
+ if ("warm" in value.cache) {
701
+ if (!isPlainObject(value.cache.warm)) issues.add(`${path}.cache.warm`, "expected a map");
702
+ else {
703
+ issues.unknownKeys(`${path}.cache.warm`, value.cache.warm, ["maxInputTokens", "maxDurationMs", "cooldownMs"]);
704
+ target.cache.warm = {};
705
+ for (const key of ["maxInputTokens", "maxDurationMs", "cooldownMs"] as const) {
706
+ const bound = value.cache.warm[key];
707
+ if (bound === undefined) continue;
708
+ if (typeof bound !== "number" || !Number.isSafeInteger(bound) || bound < 1)
709
+ issues.add(`${path}.cache.warm.${key}`, "expected a positive safe integer");
710
+ else target.cache.warm[key] = bound;
711
+ }
712
+ }
713
+ }
714
+ }
715
+ }
645
716
  if ("lmstudio" in value) {
646
717
  const v = validateLmStudioSettings(issues, `${path}.lmstudio`, value.lmstudio);
647
718
  if (v !== undefined) target.lmstudio = v;
@@ -78,35 +78,11 @@ export async function loadDomains(
78
78
  },
79
79
  };
80
80
 
81
- for (const name of order) {
82
- const mod = modules.find((m) => m.manifest.name === name);
83
- if (!mod) continue;
84
- try {
85
- const bundle = await mod.createExtension(context);
86
- await bundle.extension.start();
87
- extensions.set(name, bundle.extension);
88
- contracts.set(name, bundle.contract);
89
- loaded.push(name);
90
- bus.emit(BusChannels.DomainLoaded, { name });
91
- } catch (error) {
92
- failed.push({ name, error });
93
- bus.emit(BusChannels.DomainFailed, { name, error });
94
- // The throw below aborts boot; nothing downstream gets a chance to
95
- // render the failure, so the structured line must land first.
96
- const message = error instanceof Error ? error.message : String(error);
97
- (options.diagnostic ?? ((text: string) => process.stderr.write(text)))(
98
- `[clio-coder:domain] load failed: ${name}: ${message}\n`,
99
- );
100
- throw new DomainLoadError(name, error);
101
- }
102
- }
103
-
104
- const stop = async (): Promise<void> => {
81
+ const stopAll = async (): Promise<void> => {
105
82
  const debug = process.env.CLIO_CODER_DEBUG_SHUTDOWN === "1";
106
83
  const budgetMs = resolveShutdownHookBudgetMs();
107
- for (const name of [...loaded].reverse()) {
108
- const ext = extensions.get(name);
109
- if (!ext?.stop) continue;
84
+ for (const [name, ext] of [...extensions].reverse()) {
85
+ if (!ext.stop) continue;
110
86
  const stopFn = ext.stop.bind(ext);
111
87
  const t0 = debug ? process.hrtime.bigint() : 0n;
112
88
  const completed = await runWithBudget(stopFn, budgetMs, (err) => {
@@ -124,7 +100,34 @@ export async function loadDomains(
124
100
  );
125
101
  }
126
102
  }
103
+ extensions.clear();
104
+ contracts.clear();
127
105
  };
106
+ let stopping: Promise<void> | undefined;
107
+ const stop = (): Promise<void> => (stopping ??= stopAll());
108
+
109
+ for (const name of order) {
110
+ const mod = modules.find((m) => m.manifest.name === name);
111
+ if (!mod) continue;
112
+ try {
113
+ const bundle = await mod.createExtension(context);
114
+ // A rejected start may already own listeners or other resources.
115
+ extensions.set(name, bundle.extension);
116
+ await bundle.extension.start();
117
+ contracts.set(name, bundle.contract);
118
+ loaded.push(name);
119
+ bus.emit(BusChannels.DomainLoaded, { name });
120
+ } catch (error) {
121
+ failed.push({ name, error });
122
+ bus.emit(BusChannels.DomainFailed, { name, error });
123
+ await stop();
124
+ const message = error instanceof Error ? error.message : String(error);
125
+ (options.diagnostic ?? ((text: string) => process.stderr.write(text)))(
126
+ `[clio-coder:domain] load failed: ${name}: ${message}\n`,
127
+ );
128
+ throw new DomainLoadError(name, error);
129
+ }
130
+ }
128
131
 
129
132
  const getContract = <T extends DomainContract = DomainContract>(name: string): T | undefined => {
130
133
  return contracts.get(name) as T | undefined;
@@ -134,7 +137,13 @@ export async function loadDomains(
134
137
  }
135
138
 
136
139
  function topoSort(modules: ReadonlyArray<DomainModule>): string[] {
137
- const names = new Set(modules.map((m) => m.manifest.name));
140
+ const names = new Set<string>();
141
+ for (const { manifest } of modules) {
142
+ if (names.has(manifest.name)) {
143
+ throw new DomainLoadError("topo", new Error(`Duplicate domain: ${manifest.name}`));
144
+ }
145
+ names.add(manifest.name);
146
+ }
138
147
  const unresolved: string[] = [];
139
148
  for (const m of modules) {
140
149
  for (const dep of m.manifest.dependsOn) {
@@ -29,6 +29,16 @@ interface RegisteredHook {
29
29
  timeoutMs?: number;
30
30
  }
31
31
 
32
+ function registeredHook(hook: Hook, options?: { timeoutMs: number }): RegisteredHook {
33
+ if (
34
+ options &&
35
+ (!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs <= 0 || options.timeoutMs > 2 ** 31 - 1)
36
+ ) {
37
+ throw new RangeError("shutdown hook timeout must be a positive 32-bit timer delay");
38
+ }
39
+ return { run: hook, ...options };
40
+ }
41
+
32
42
  /** Wall-clock budget per hook and per domain.stop() call. */
33
43
  export const DEFAULT_SHUTDOWN_HOOK_MS = 500;
34
44
 
@@ -141,19 +151,13 @@ class TerminationCoordinator {
141
151
  }
142
152
 
143
153
  onDrain(hook: Hook, options?: { timeoutMs: number }): void {
144
- if (
145
- options &&
146
- (!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs <= 0 || options.timeoutMs > 2 ** 31 - 1)
147
- ) {
148
- throw new RangeError("shutdown hook timeout must be a positive 32-bit timer delay");
149
- }
150
- this.drainHooks.push({ run: hook, ...options });
154
+ this.drainHooks.push(registeredHook(hook, options));
151
155
  }
152
156
  onTerminate(hook: Hook): void {
153
157
  this.terminateHooks.push({ run: hook });
154
158
  }
155
- onPersist(hook: Hook): void {
156
- this.persistHooks.push({ run: hook });
159
+ onPersist(hook: Hook, options?: { timeoutMs: number }): void {
160
+ this.persistHooks.push(registeredHook(hook, options));
157
161
  }
158
162
 
159
163
  async shutdown(code = 0): Promise<void> {
@@ -3,7 +3,7 @@ import type { AgentRecipeDiagnostic } from "./registry.js";
3
3
  import type { AgentSpec } from "./spec.js";
4
4
 
5
5
  export interface AgentsContract {
6
- /** Monotonic catalog revision; changes after every successful discovery. */
6
+ /** Monotonic catalog revision; changes after discovery or external-agent settings updates. */
7
7
  revision(): number;
8
8
  /** Raw recipes as loaded from Markdown files. */
9
9
  list(): ReadonlyArray<AgentRecipe>;
@@ -29,10 +29,22 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
29
29
  rediscoveryPending = false;
30
30
  }
31
31
 
32
- let unsubscribeExtensionsReload: (() => void) | null = null;
32
+ let unsubscribePluginsReload: (() => void) | null = null;
33
+ let unsubscribeConfigChange: (() => void) | null = null;
33
34
  const extension: DomainExtension = {
34
35
  async start() {
35
36
  discover();
37
+ unsubscribeConfigChange =
38
+ _context.getContract<ConfigContract>("config")?.onChange("nextTurn", ({ diff }) => {
39
+ if (
40
+ diff.nextTurn.some(
41
+ (path) =>
42
+ path === "integrations.externalAgents.entries" || path.startsWith("integrations.externalAgents.entries."),
43
+ )
44
+ ) {
45
+ revision += 1;
46
+ }
47
+ }) ?? null;
36
48
  // Recipes are cached at start; plugin agent roots come from the
37
49
  // committed plugin generation, so a changed generation rediscovers.
38
50
  const onResourceReload = (payload: unknown) => {
@@ -69,17 +81,13 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
69
81
  );
70
82
  }
71
83
  };
72
- const unsubscribe = [
73
- _context.bus.on(BusChannels.ExtensionsReloaded, onResourceReload),
74
- _context.bus.on(BusChannels.PluginsReloaded, onResourceReload),
75
- ];
76
- unsubscribeExtensionsReload = () => {
77
- for (const stop of unsubscribe) stop();
78
- };
84
+ unsubscribePluginsReload = _context.bus.on(BusChannels.PluginsReloaded, onResourceReload);
79
85
  },
80
86
  async stop() {
81
- unsubscribeExtensionsReload?.();
82
- unsubscribeExtensionsReload = null;
87
+ unsubscribePluginsReload?.();
88
+ unsubscribePluginsReload = null;
89
+ unsubscribeConfigChange?.();
90
+ unsubscribeConfigChange = null;
83
91
  },
84
92
  };
85
93
 
@@ -116,13 +116,14 @@ export function createConfigBundle(
116
116
  update(mutate) {
117
117
  if (!snapshot) throw new Error("config domain not started");
118
118
  const previous = snapshot;
119
- const candidate = structuredClone(previous);
120
- mutate(candidate);
121
- assertAgentNamespace(candidate);
122
119
  // Apply the effective-view delta to the user document under one lock,
123
120
  // then validate it with the project layers before writing. In particular,
124
121
  // a route may name a target supplied only by this workspace.
125
- const normalized = updateLayeredSettings(process.cwd(), mutate);
122
+ const normalized = updateLayeredSettings(process.cwd(), (candidate) => {
123
+ const next = mutate(candidate) ?? candidate;
124
+ assertAgentNamespace(next);
125
+ return next;
126
+ });
126
127
  snapshot = normalized;
127
128
  setGitCommitAttributionEnabled(normalized.integrations.git.commitAttribution);
128
129
  const diff = diffSettings(previous, normalized);