@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
@@ -0,0 +1,147 @@
1
+ import { canonicalEndpointUrl } from "../../core/endpoint-key.js";
2
+ import type { TargetDescriptor } from "./types/target-descriptor.js";
3
+
4
+ /** Fresh observations, not a persisted cache handle or permission to administer a server. */
5
+ export interface CacheDeploymentObservation {
6
+ observedAt: number;
7
+ backend: "llamacpp" | "vllm" | "unknown";
8
+ model: string;
9
+ build: string | null;
10
+ /** Absent server epoch stays unknown; Clio never invents one from a build number. */
11
+ epoch: string | null;
12
+ endpoint: string | null;
13
+ requestControls: ReadonlyArray<"cache_prompt">;
14
+ warm: "bounded" | "unsupported";
15
+ administration: "unsupported";
16
+ reason: string;
17
+ }
18
+
19
+ function record(value: unknown): Record<string, unknown> {
20
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? (value as Record<string, unknown>) : {};
21
+ }
22
+
23
+ /**
24
+ * Read-only admission evidence. Every invocation probes again, so an old route,
25
+ * build, resident state or process epoch is never reused to authorize a warm.
26
+ * Control-plane credentials are deliberately independent: this initial reader
27
+ * sends none. An authenticated/unknown control plane remains passive.
28
+ */
29
+ export async function observeCacheDeployment(
30
+ target: TargetDescriptor,
31
+ wireModelId: string,
32
+ options: { signal?: AbortSignal; gatewayApiKey?: string; fetchImpl?: typeof fetch } = {},
33
+ ): Promise<CacheDeploymentObservation> {
34
+ const binding = target.cache?.deployment;
35
+ const observation: CacheDeploymentObservation = {
36
+ observedAt: Date.now(),
37
+ backend: binding?.backend ?? "unknown",
38
+ model: binding?.model ?? wireModelId,
39
+ build: null,
40
+ epoch: null,
41
+ endpoint: null,
42
+ requestControls: [],
43
+ warm: "unsupported",
44
+ administration: "unsupported",
45
+ reason: "deployment-unbound",
46
+ };
47
+ if (!binding) return observation;
48
+ try {
49
+ const control = new URL(binding.controlUrl);
50
+ if (
51
+ !["http:", "https:"].includes(control.protocol) ||
52
+ control.username ||
53
+ control.password ||
54
+ control.search ||
55
+ control.hash
56
+ ) {
57
+ return { ...observation, reason: "deployment-invalid" };
58
+ }
59
+ const root = control.href.replace(/\/$/, "").replace(/\/v1$/, "");
60
+ observation.endpoint = canonicalEndpointUrl(root);
61
+ const signal = AbortSignal.any([AbortSignal.timeout(2000), ...(options.signal ? [options.signal] : [])]);
62
+ const get = async (url: string, headers?: Record<string, string>) => {
63
+ const response = await (options.fetchImpl ?? fetch)(url, {
64
+ method: "GET",
65
+ signal,
66
+ redirect: "error",
67
+ credentials: "omit",
68
+ ...(headers ? { headers } : {}),
69
+ });
70
+ if (!response.ok) throw new Error("discovery unavailable");
71
+ return (await response.json()) as unknown;
72
+ };
73
+ const gateway = target.runtime === "litellm";
74
+ if (gateway) {
75
+ if (!binding.gatewayDeploymentId || !target.url) return { ...observation, reason: "gateway-unbound" };
76
+ const gatewayRoot = target.url.replace(/\/$/, "").replace(/\/v1$/, "");
77
+ const info = record(
78
+ await get(`${gatewayRoot}/v1/model/info`, {
79
+ ...target.auth?.headers,
80
+ ...(options.gatewayApiKey ? { authorization: `Bearer ${options.gatewayApiKey}` } : {}),
81
+ }),
82
+ );
83
+ const rows = Array.isArray(info.data) ? info.data.map(record).filter((row) => row.model_name === wireModelId) : [];
84
+ // Multiple replicas/fallback routes do not establish a single physical
85
+ // cache. A deployment response header arrives too late for admission.
86
+ const row = rows.length === 1 ? rows[0] : undefined;
87
+ const params = record(row?.litellm_params);
88
+ const modelInfo = record(row?.model_info);
89
+ if (
90
+ !row ||
91
+ modelInfo.id !== binding.gatewayDeploymentId ||
92
+ (params.model !== binding.model && params.model !== `openai/${binding.model}`) ||
93
+ canonicalEndpointUrl(typeof params.api_base === "string" ? params.api_base : undefined) !== observation.endpoint
94
+ ) {
95
+ return { ...observation, reason: "gateway-route-mismatch" };
96
+ }
97
+ } else if (
98
+ target.runtime !== binding.backend ||
99
+ wireModelId !== binding.model ||
100
+ canonicalEndpointUrl(target.url) !== observation.endpoint
101
+ ) {
102
+ return { ...observation, reason: "deployment-mismatch" };
103
+ }
104
+ if (binding.backend === "vllm") {
105
+ const version = record(await get(`${root}/version`));
106
+ observation.build = typeof version.version === "string" ? version.version : null;
107
+ // APC and queue/memory metrics vary by deployment. A version and an
108
+ // OpenAI schema alone establish neither APC nor safe speculative load.
109
+ return {
110
+ ...observation,
111
+ reason: observation.build === binding.build ? "vllm-scheduler-unverified" : "deployment-build-mismatch",
112
+ };
113
+ }
114
+ let props = record(await get(`${root}/props`));
115
+ const router = props.role === "router";
116
+ if (router) {
117
+ const models = record(await get(`${root}/models`));
118
+ const selected = Array.isArray(models.data)
119
+ ? models.data.map(record).find((row) => row.id === binding.model)
120
+ : undefined;
121
+ if (record(selected?.status).value !== "loaded") return { ...observation, reason: "model-not-loaded" };
122
+ // Never wake sleeping models or load an absent worker during discovery.
123
+ props = record(await get(`${root}/props?model=${encodeURIComponent(binding.model)}&autoload=false`));
124
+ }
125
+ observation.build = typeof props.build_info === "string" ? props.build_info : null;
126
+ if (observation.build !== binding.build) return { ...observation, reason: "deployment-build-mismatch" };
127
+ if (!observation.build.endsWith("-c841aee"))
128
+ return { ...observation, reason: "deployment-cache-protocol-unverified" };
129
+ if (props.is_sleeping !== false) return { ...observation, reason: "model-not-loaded" };
130
+ if (typeof props.model_alias === "string" && props.model_alias !== binding.model)
131
+ return { ...observation, reason: "deployment-model-mismatch" };
132
+ if (!router) {
133
+ const models = record(await get(`${root}/v1/models`));
134
+ if (!Array.isArray(models.data) || models.data.length !== 1 || record(models.data[0]).id !== binding.model)
135
+ return { ...observation, reason: "deployment-model-mismatch" };
136
+ }
137
+ if (typeof props.start_time === "string") observation.epoch = props.start_time;
138
+ const slots = await get(`${root}/slots?model=${encodeURIComponent(binding.model)}&autoload=false`);
139
+ if (!Array.isArray(slots) || slots.length === 0 || slots.some((slot) => record(slot).is_processing !== false)) {
140
+ return { ...observation, reason: "endpoint-busy-or-unknown" };
141
+ }
142
+ if (gateway) return { ...observation, reason: "gateway-cache-transport-unverified" };
143
+ return { ...observation, requestControls: ["cache_prompt"], warm: "bounded", reason: "loaded-idle-deployment" };
144
+ } catch {
145
+ return { ...observation, reason: options.signal?.aborted ? "superseded" : "deployment-unavailable" };
146
+ }
147
+ }
@@ -148,7 +148,7 @@ export function synthesizeCatalogBackedModel(input: CatalogBackedSynthesisInput)
148
148
  }
149
149
  const pricing = input.target.pricing;
150
150
  const targetHeaders = input.target.auth?.headers;
151
- const model: Model<Api> = {
151
+ const model: Model<Api> & { clioCoder?: { cache: NonNullable<TargetDescriptor["cache"]> } } = {
152
152
  ...catalogFields,
153
153
  id: input.wireModelId,
154
154
  name: `${input.wireModelId} (${input.target.id})`,
@@ -160,14 +160,19 @@ export function synthesizeCatalogBackedModel(input: CatalogBackedSynthesisInput)
160
160
  input.defaultBaseUrl,
161
161
  reasoning: caps.reasoning,
162
162
  input: caps.vision ? (builtin?.input.includes("image") ? builtin.input : ["text", "image"]) : ["text"],
163
- cost: {
164
- input: pricing?.input ?? builtin?.cost.input ?? 0,
165
- output: pricing?.output ?? builtin?.cost.output ?? 0,
166
- cacheRead: pricing?.cacheRead ?? builtin?.cost.cacheRead ?? 0,
167
- cacheWrite: pricing?.cacheWrite ?? builtin?.cost.cacheWrite ?? 0,
168
- },
163
+ // Catalog tiers belong to the catalog rates. An explicit target price
164
+ // replaces that schedule, using the same defaults as resolveEffectivePricing.
165
+ cost: pricing
166
+ ? {
167
+ input: pricing.input,
168
+ output: pricing.output,
169
+ cacheRead: pricing.cacheRead ?? 0,
170
+ cacheWrite: pricing.cacheWrite ?? 0,
171
+ }
172
+ : structuredClone(builtin?.cost ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }),
169
173
  contextWindow: caps.contextWindow,
170
174
  maxTokens: caps.maxTokens,
175
+ ...(input.target.cache === undefined ? {} : { clioCoder: { cache: structuredClone(input.target.cache) } }),
171
176
  };
172
177
  const headers = { ...(input.defaultHeaders ?? {}), ...(builtin?.headers ?? {}), ...(targetHeaders ?? {}) };
173
178
  if (Object.keys(headers).length > 0) {
@@ -257,6 +257,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
257
257
  const statuses = new Map<string, TargetStatus>();
258
258
  const reasoningCache = new Map<string, boolean>();
259
259
  const unsubscribeConfigListeners: Array<() => void> = [];
260
+ let stopped = false;
260
261
 
261
262
  function reasoningCacheKey(targetId: string, modelId: string): string {
262
263
  return `${targetId}:${modelId}`;
@@ -268,6 +269,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
268
269
  return readSettings();
269
270
  }
270
271
 
272
+ function currentProbeTarget(probed: TargetDescriptor): TargetDescriptor | undefined {
273
+ if (stopped) return undefined;
274
+ return readConfig().targets.find((target) => sameProbeIdentity(probed, target));
275
+ }
276
+
271
277
  async function buildProbeContextForTarget(
272
278
  target: TargetDescriptor,
273
279
  desc: RuntimeDescriptor,
@@ -323,6 +329,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
323
329
  probe: ProbeResult | null,
324
330
  previous?: TargetStatus,
325
331
  ): TargetStatus {
332
+ if (previous && !sameProbeIdentity(previous.target, target)) previous = undefined;
326
333
  if (!desc) {
327
334
  const out: TargetStatus = {
328
335
  target,
@@ -385,8 +392,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
385
392
  target: TargetDescriptor,
386
393
  live: boolean,
387
394
  options?: { reasoning?: boolean; signal?: AbortSignal },
388
- ): Promise<TargetStatus> {
395
+ ): Promise<TargetStatus | null> {
389
396
  options?.signal?.throwIfAborted();
397
+ if (stopped) return null;
398
+ // A probe owns the descriptor it started with across asynchronous I/O.
399
+ target = structuredClone(target);
390
400
  const previous = statuses.get(target.id);
391
401
  const desc = registry.get(target.runtime);
392
402
  if (!desc) {
@@ -402,6 +412,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
402
412
  }
403
413
  const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
404
414
  options?.signal?.throwIfAborted();
415
+ if (!currentProbeTarget(target)) return null;
405
416
  let probeResult: ProbeResult;
406
417
  try {
407
418
  probeResult = await desc.probe(target, probeCtx);
@@ -409,6 +420,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
409
420
  probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
410
421
  }
411
422
  options?.signal?.throwIfAborted();
423
+ if (!currentProbeTarget(target)) return null;
412
424
  if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
413
425
  try {
414
426
  const ids = await desc.probeModels(target, probeCtx);
@@ -418,6 +430,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
418
430
  }
419
431
  }
420
432
  options?.signal?.throwIfAborted();
433
+ if (!currentProbeTarget(target)) return null;
421
434
  if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
422
435
  const settings = readConfig();
423
436
  const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
@@ -426,6 +439,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
426
439
  try {
427
440
  const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
428
441
  options?.signal?.throwIfAborted();
442
+ if (!currentProbeTarget(target)) return null;
429
443
  reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
430
444
  const capabilityModelId = probeResult.capabilityModelId ?? null;
431
445
  if (capabilityModelId === null || capabilityModelId === candidateModelId) {
@@ -447,9 +461,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
447
461
  }
448
462
  }
449
463
  }
450
- // A cancelled role preparation must not publish failed/stale target state.
464
+ // Cancellation, target edits/removal, and shutdown revoke publication.
451
465
  options?.signal?.throwIfAborted();
452
- const status = buildStatus(target, desc, probeResult, previous);
466
+ const current = currentProbeTarget(target);
467
+ if (!current) return null;
468
+ const status = buildStatus(current, desc, probeResult, previous);
453
469
  statuses.set(target.id, status);
454
470
  if (probeResult.ok && probeResult.models !== undefined) {
455
471
  recordTargetModelSnapshot(
@@ -467,14 +483,18 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
467
483
  }
468
484
 
469
485
  async function probeReasoningForModelInternal(targetId: string, modelId: string): Promise<boolean | null> {
486
+ if (stopped) return null;
470
487
  const settings = readConfig();
471
- const target = settings.targets.find((ep) => ep.id === targetId);
472
- if (!target) return null;
488
+ const configuredTarget = settings.targets.find((ep) => ep.id === targetId);
489
+ if (!configuredTarget) return null;
490
+ const target = structuredClone(configuredTarget);
473
491
  const desc = registry.get(target.runtime);
474
492
  if (!desc || typeof desc.probeReasoning !== "function") return null;
475
493
  const probeCtx = await buildProbeContextForTarget(target, desc);
494
+ if (!currentProbeTarget(target)) return null;
476
495
  try {
477
496
  const result = await desc.probeReasoning(target, modelId, probeCtx);
497
+ if (!currentProbeTarget(target)) return null;
478
498
  reasoningCache.set(reasoningCacheKey(targetId, modelId), result.reasoning);
479
499
  return result.reasoning;
480
500
  } catch {
@@ -508,6 +528,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
508
528
 
509
529
  const extension: DomainExtension = {
510
530
  async start() {
531
+ stopped = false;
511
532
  ensurePiAiRegistered();
512
533
  registerClioApiProviders();
513
534
  registerClioOAuthProviders();
@@ -528,6 +549,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
528
549
  }
529
550
  },
530
551
  async stop() {
552
+ stopped = true;
531
553
  for (const unsubscribe of unsubscribeConfigListeners.splice(0)) unsubscribe();
532
554
  },
533
555
  };
@@ -24,6 +24,7 @@ export {
24
24
  resolveRuntimeAuthTarget,
25
25
  targetRequiresAuth,
26
26
  } from "./auth/index.js";
27
+ export { type CacheDeploymentObservation, observeCacheDeployment } from "./cache-deployment.js";
27
28
  export { AGENT_ROLE_TOOLS_REQUIRED_REASON, mergeCapabilities, supportsAgentRoleTools } from "./capabilities.js";
28
29
  export type { ProvidersContract, TargetHealth, TargetStatus } from "./contract.js";
29
30
  export { isDispatchEligibleRuntime, isOrchestratorEligibleRuntime, isTargetEligibleRuntime } from "./eligibility.js";
@@ -54,7 +55,11 @@ export {
54
55
  } from "./endpoint-slots-store.js";
55
56
  export { ProvidersManifest } from "./manifest.js";
56
57
  export type { ModelCapabilityPatchTarget } from "./model-capabilities.js";
57
- export { applyModelCapabilityPatch, resolveModelCapabilities } from "./model-capabilities.js";
58
+ export {
59
+ applyModelCapabilityPatch,
60
+ probeCapabilitiesForModel,
61
+ resolveModelCapabilities,
62
+ } from "./model-capabilities.js";
58
63
  export {
59
64
  canonicalizeWireModelId,
60
65
  contextSlotsForModel,
@@ -636,6 +636,37 @@
636
636
  turns when the workflow is iterative; the budget caps runaway chains.
637
637
  serving: "Official Qwen card recommends max output 32768 tokens for standard queries (81920 only for math/code competitions). Coding sampler is the precise variant; preserve thinking blocks across turns for iterative workflows."
638
638
 
639
+ - family: qwopus3.8-27b-dense
640
+ matchPatterns:
641
+ - mini/qwopus3.8-27b-dense
642
+ capabilities:
643
+ reasoning: true
644
+ quirks:
645
+ measuredUnder:
646
+ runtime: "LiteLLM route mini/qwopus3.8-27b-dense-q6; model_info.runtime llama.cpp"
647
+ date: "2026-09-16"
648
+ source: "Operator report and current-source request to blade-gateway, reproduced during v0.4.9 closeout"
649
+ note: |
650
+ The exact route rejected an omitted effort with Jinja's diagnostic
651
+ Unexpected reasoning effort high. Supported types are xhigh
652
+ (default), medium, and low. Clio's captured request carried only
653
+ enable_thinking true. The upstream behavior is consistent with an
654
+ incompatible deployment default; its precise cause was not inspected.
655
+ These effort levels come from that server diagnostic, not from
656
+ Qwen or Qwopus name similarity. Other capabilities remain supplied
657
+ by the route probe; no sampler, hardware, or context size is inherited.
658
+ thinking:
659
+ mechanism: effort-levels
660
+ effortByLevel:
661
+ low: low
662
+ medium: medium
663
+ xhigh: xhigh
664
+ guidance: |
665
+ The measured mini/qwopus3.8-27b-dense-q6 route accepts low, medium,
666
+ and xhigh, and rejects high. Clio maps high and max to xhigh and
667
+ explicitly forwards that supported effort through LiteLLM. Omitting
668
+ active effort can expose an incompatible deployment default.
669
+
639
670
  - family: qwen3.8-27b
640
671
  matchPatterns:
641
672
  - qwen3.8-27b
@@ -829,23 +860,23 @@
829
860
  leakageNote: |
830
861
  LM Studio's gemma4 chat template emits chain-of-thought as plain text
831
862
  bracketed by literal '<|channel>thought\n' and '<channel|>' markers
832
- rather than structured reasoning fragments. The OpenAI-compatible path
833
- currently exposes those markers as the server streams them; filtering
834
- this family remains a follow-up.
863
+ rather than structured reasoning fragments. Clio splits those regions into
864
+ thinking content on the OpenAI-compatible stream, including LM Studio,
865
+ and removes the channel markers from the visible answer.
835
866
  gpuTiers:
836
867
  "48gb": "Fits at f16 KV when parallel=1 and ctx=122880; drop to q8_0 KV at parallel=4."
837
868
  "80gb": "Comfortable at f16 KV with parallel=1 and ctx=122880."
838
869
  runtimePreference:
839
870
  lmstudio: "Pin parallel=1 in the LM Studio per-model preset to give a single agent the full 122880 context."
840
- openaiCompat: "LM Studio chat uses this surface; visible text may contain the raw channel markers."
871
+ openaiCompat: "LM Studio chat uses this surface; Clio separates inline thought regions and removes their channel markers."
841
872
  thinking:
842
873
  mechanism: on-off
843
874
  guidance: |
844
875
  Gemma 4 chat template exposes thinking only as on or off; intermediate
845
876
  levels coerce to on. NVFP4 quantization can corrupt JSON tool-call
846
877
  output under aggressive sampling, so the instruct profile pins
847
- temperature at 0.7. LM Studio's OpenAI-compatible stream currently
848
- exposes channel markers when the server does not classify them.
878
+ temperature at 0.7. Clio classifies inline channel markers on LM Studio's
879
+ OpenAI-compatible stream when the server leaves them in content.
849
880
  serving: "LilaRest publishes no per-model sampler; values inherit the gemma family default per the official Google Gemma 4 31B card. KV cache budget at f16, ctx=122880 is roughly 57 GB on top of ~21 GB of NVFP4 weights."
850
881
 
851
882
  # The qat/UD-Q4_K_XL/MTP build is the long-context llama.cpp gemma profile and is a
@@ -928,7 +959,7 @@
928
959
  "32gb": "32 GB Vulkan llama.cpp profile with UD-Q4_K_XL weights, ctx=262144, q8 KV, flash attention, parallel=1, F16 gemma4v mmproj (vision), and MTP draft (spec-type draft-mtp, n_max 4) both active."
929
960
  runtimePreference:
930
961
  llamaCpp: "OpenAI-compatible chat completions with --jinja and --reasoning off. Recommended local profile serves at ctx=262144, q8 KV, flash attention, parallel=1, batch=1024, ubatch=256, with F16 mmproj vision and draft-mtp speculative decoding; sampler temperature 0.8, top_p 0.95, top_k 64, repeat_penalty 1.05."
931
- openaiCompat: "Fallback when a gateway fronts the same llama.cpp chat-completions surface; the openai-compat surface does not expose the channel-marker classifier, so visible text may show raw thought markers."
962
+ openaiCompat: "Fallback when a gateway fronts the same llama.cpp chat-completions surface; Clio separates inline thought regions with the shared channel-marker filter."
932
963
  llamaCpp:
933
964
  ctxSize: 262144
934
965
  cacheTypeK: q8_0
@@ -1008,15 +1039,16 @@
1008
1039
  "48gb": "Fits at f16 KV with parallel=1; q8_0 KV recommended at parallel=4."
1009
1040
  "80gb": "Comfortable at f16 KV with parallel=1 and ctx=122880."
1010
1041
  runtimePreference:
1011
- lmstudio: "LM Studio's OpenAI-compatible stream may expose this family's channel markers as visible text."
1042
+ lmstudio: "LM Studio may stream inline channel markers; Clio separates the thought region and removes the markers from the answer."
1012
1043
  openaiCompat: "Fallback; reasoning_content is absent from the openai-compat reasoning probe for this family."
1013
1044
  thinking:
1014
1045
  mechanism: always-on
1015
1046
  guidance: |
1016
1047
  Distilled traces emit unconditionally. The thinking level setting is
1017
1048
  ignored at the API surface; chain-of-thought arrives whether or not
1018
- Clio asks for it. Channel-marker filtering remains a follow-up for the
1019
- OpenAI-compatible LM Studio path.
1049
+ Clio asks for it. The shared channel-marker filter splits inline thought
1050
+ regions into thinking content on the OpenAI-compatible LM Studio path
1051
+ and removes the markers from the visible answer.
1020
1052
  serving: "Distilled from Claude 4.6 Opus reasoning traces onto Google Gemma 4 31B; sampler matches the gemopus card values."
1021
1053
 
1022
1054
  - family: qwopus3.6-27b-v1-preview
@@ -14,29 +14,19 @@
14
14
 
15
15
  import { join } from "node:path";
16
16
 
17
+ import type { ClioSettings } from "../../core/config.js";
17
18
  import { clioConfigDir } from "../../core/xdg.js";
18
19
  import { activateExternalPluginApiBridge } from "../../engine/api-registry.js";
19
20
  import type { RuntimeRegistry } from "./registry.js";
20
21
 
21
- interface PluginSettings {
22
- runtimePlugins?: unknown;
23
- }
24
-
25
- function extractPluginPackages(settings: unknown): string[] {
26
- if (!settings || typeof settings !== "object") return [];
27
- const raw = (settings as PluginSettings).runtimePlugins;
28
- if (!Array.isArray(raw)) return [];
29
- return raw.filter((entry): entry is string => typeof entry === "string" && entry.length > 0);
30
- }
31
-
32
22
  export async function loadPluginRuntimes(
33
23
  registry: RuntimeRegistry,
34
- settings?: unknown,
24
+ settings?: Pick<ClioSettings, "integrations">,
35
25
  ): Promise<ReadonlyArray<string>> {
36
26
  const loaded: string[] = [];
37
27
 
38
28
  const pluginDir = join(clioConfigDir(), "runtimes");
39
- const packages = extractPluginPackages(settings);
29
+ const packages = settings?.integrations.runtimePlugins ?? [];
40
30
  try {
41
31
  const ids = await registry.loadFromDir(pluginDir, activateExternalPluginApiBridge);
42
32
  loaded.push(...ids);
@@ -13,84 +13,69 @@ export interface HttpProbeOptions {
13
13
 
14
14
  export type JsonProbeOptions = HttpProbeOptions;
15
15
 
16
- export interface JsonProbeResult<T = unknown> extends ProbeResult {
17
- data?: T;
16
+ export interface HttpProbeResult extends ProbeResult {
17
+ /** Status of a completed HTTP response; absent when body/transport work fails. */
18
+ status?: number;
18
19
  }
19
20
 
20
- export async function probeHttp(opts: HttpProbeOptions): Promise<ProbeResult> {
21
- const { response, latencyMs, error } = await runFetch(opts);
22
- if (response === null) return { ok: false, error: error ?? "unknown transport error", latencyMs };
23
- const method = opts.method ?? "GET";
24
- if (response.ok) return { ok: true, latencyMs };
25
- // Some servers reject HEAD with 405 even though the endpoint is reachable.
26
- if (method === "HEAD" && response.status === 405) return { ok: true, latencyMs };
27
- return {
28
- ok: false,
29
- latencyMs,
30
- error: `HTTP ${response.status}: ${response.statusText}`,
31
- };
21
+ export interface JsonProbeResult<T = unknown> extends HttpProbeResult {
22
+ data?: T;
32
23
  }
33
24
 
34
- export async function probeJson<T = unknown>(opts: JsonProbeOptions): Promise<JsonProbeResult<T>> {
35
- const { response, latencyMs, error } = await runFetch(opts);
36
- if (response === null) return { ok: false, error: error ?? "unknown transport error", latencyMs };
37
- const method = opts.method ?? "GET";
38
- if (!response.ok && !(method === "HEAD" && response.status === 405)) {
39
- return {
40
- ok: false,
41
- latencyMs,
42
- error: `HTTP ${response.status}: ${response.statusText}`,
43
- };
44
- }
45
- let data: T;
46
- try {
47
- data = (await response.json()) as T;
48
- } catch (err) {
49
- return { ok: false, latencyMs, error: `JSON parse: ${describeError(err)}` };
50
- }
51
- return { ok: true, latencyMs, data };
25
+ export async function probeHttp(opts: HttpProbeOptions): Promise<HttpProbeResult> {
26
+ return runProbe(opts, false);
52
27
  }
53
28
 
54
- interface FetchOutcome {
55
- response: Response | null;
56
- latencyMs: number;
57
- error?: string;
29
+ export async function probeJson<T = unknown>(opts: JsonProbeOptions): Promise<JsonProbeResult<T>> {
30
+ return runProbe<T>(opts, true);
58
31
  }
59
32
 
60
- async function runFetch(opts: HttpProbeOptions): Promise<FetchOutcome> {
33
+ /** Own the request until its body has been consumed or cancelled. */
34
+ async function runProbe<T>(opts: HttpProbeOptions, readJson: boolean): Promise<JsonProbeResult<T>> {
61
35
  const controller = new AbortController();
62
- let timedOut = false;
63
- const timer = setTimeout(() => {
64
- timedOut = true;
36
+ let abortError: string | undefined;
37
+ const abort = (error: string): void => {
38
+ if (controller.signal.aborted) return;
39
+ abortError = error;
65
40
  controller.abort();
66
- }, opts.timeoutMs);
67
- const onExternalAbort = () => controller.abort();
68
- if (opts.signal) {
69
- if (opts.signal.aborted) controller.abort();
70
- else opts.signal.addEventListener("abort", onExternalAbort, { once: true });
71
- }
72
- const init: RequestInit = {
73
- method: opts.method ?? "GET",
74
- signal: controller.signal,
75
41
  };
42
+ const timer = setTimeout(() => abort(`timeout after ${opts.timeoutMs}ms`), opts.timeoutMs);
43
+ const onExternalAbort = () => abort("aborted by caller");
44
+ if (opts.signal?.aborted) onExternalAbort();
45
+ else opts.signal?.addEventListener("abort", onExternalAbort, { once: true });
46
+ const method = opts.method ?? "GET";
47
+ const init: RequestInit = { method, signal: controller.signal };
76
48
  if (opts.headers) init.headers = opts.headers;
77
49
  if (opts.body !== undefined) init.body = opts.body;
78
50
  const started = performance.now();
51
+ let latencyMs: number | undefined;
52
+ let parsingJson = false;
79
53
  try {
80
54
  const response = await fetch(opts.url, init);
81
- return { response, latencyMs: Math.round(performance.now() - started) };
82
- } catch (err) {
83
- const latencyMs = Math.round(performance.now() - started);
84
- if (timedOut) {
85
- return { response: null, latencyMs, error: `timeout after ${opts.timeoutMs}ms` };
55
+ // Preserve the existing network latency measurement at response headers.
56
+ latencyMs = Math.round(performance.now() - started);
57
+ // HEAD 405 demonstrates reachability, but does not supply JSON data.
58
+ const ok = response.ok || (method === "HEAD" && response.status === 405);
59
+ if (!ok || !readJson) {
60
+ await response.body?.cancel();
61
+ controller.signal.throwIfAborted();
62
+ return ok
63
+ ? { ok: true, latencyMs, status: response.status }
64
+ : { ok: false, latencyMs, status: response.status, error: `HTTP ${response.status}: ${response.statusText}` };
86
65
  }
87
- if (opts.signal?.aborted) {
88
- return { response: null, latencyMs, error: "aborted by caller" };
89
- }
90
- return { response: null, latencyMs, error: describeError(err) };
66
+ parsingJson = true;
67
+ const data = (await response.json()) as T;
68
+ controller.signal.throwIfAborted();
69
+ return { ok: true, latencyMs, status: response.status, data };
70
+ } catch (err) {
71
+ return {
72
+ ok: false,
73
+ latencyMs: latencyMs ?? Math.round(performance.now() - started),
74
+ error: abortError ?? `${parsingJson ? "JSON parse: " : ""}${describeError(err)}`,
75
+ };
91
76
  } finally {
92
77
  clearTimeout(timer);
93
- if (opts.signal) opts.signal.removeEventListener("abort", onExternalAbort);
78
+ opts.signal?.removeEventListener("abort", onExternalAbort);
94
79
  }
95
80
  }
96
81
 
@@ -95,6 +95,8 @@ export async function probeOpenAICompatReasoning(opts: ProbeReasoningOptions): P
95
95
  });
96
96
  const latencyMs = Math.round(performance.now() - started);
97
97
  if (!response.ok) {
98
+ await response.body?.cancel();
99
+ controller.signal.throwIfAborted();
98
100
  return { reasoning: false, latencyMs, error: `HTTP ${response.status}: ${response.statusText}` };
99
101
  }
100
102
  const data = (await response.json()) as ChatCompletionResponse;
@@ -25,6 +25,7 @@ export interface ClioLocalModelMetadata {
25
25
  chatTemplateKwargsUnsupported?: boolean;
26
26
  lmstudio?: TargetDescriptor["lmstudio"];
27
27
  litellm?: TargetDescriptor["litellm"];
28
+ cache?: TargetDescriptor["cache"];
28
29
  };
29
30
  }
30
31
 
@@ -65,6 +66,8 @@ function localOpenAICompat(caps: CapabilityFlags, runtimeId: string): OpenAIComp
65
66
  maxTokensField: "max_tokens",
66
67
  supportsThinkingTokenBudget: runtimeId === "vllm",
67
68
  supportsStrictMode: false,
69
+ // Native and generic gateway schemas do not establish hosted 24h retention.
70
+ supportsLongCacheRetention: false,
68
71
  };
69
72
  const thinkingFormat = openAIThinkingFormat(caps);
70
73
  if (thinkingFormat) (compat as unknown as { thinkingFormat?: string }).thinkingFormat = thinkingFormat;
@@ -111,6 +114,7 @@ export function synthLocalModel(input: LocalSynthesisInput): Model<Api> {
111
114
  ...(quirks ? { quirks } : {}),
112
115
  ...(target.lmstudio ? { lmstudio: target.lmstudio } : {}),
113
116
  ...(target.litellm ? { litellm: target.litellm } : {}),
117
+ ...(target.cache ? { cache: structuredClone(target.cache) } : {}),
114
118
  },
115
119
  };
116
120
  if (headers) model.headers = headers;