@iowarp/clio-coder 0.4.9 → 0.5.0

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 (1172) hide show
  1. package/.claude-plugin/marketplace.json +11 -3
  2. package/CHANGELOG.md +153 -0
  3. package/CODE_OF_CONDUCT.md +10 -0
  4. package/CONTRIBUTING.md +208 -382
  5. package/NOTICE +8 -2
  6. package/README.md +199 -418
  7. package/ROADMAP.md +82 -0
  8. package/SECURITY.md +14 -11
  9. package/dist/acp-KS7ARGV6.js +132 -0
  10. package/dist/agents-YOGJ2YEJ.js +163 -0
  11. package/dist/assets/codewiki.json +1 -1
  12. package/dist/auth-CEDCO6O6.js +557 -0
  13. package/dist/background-YWTBPSQU.js +39 -0
  14. package/dist/builtins-GDYO4RTR.js +23 -0
  15. package/dist/chunk-27YTM2CV.js +175 -0
  16. package/dist/chunk-2AF6YC7Q.js +75 -0
  17. package/dist/chunk-2DTIWSAW.js +381 -0
  18. package/dist/chunk-2EMLKSCX.js +262 -0
  19. package/dist/chunk-2OJ3YZQP.js +665 -0
  20. package/dist/chunk-2VLYHHFT.js +35 -0
  21. package/dist/chunk-2WVPJF3Z.js +204 -0
  22. package/dist/chunk-33OASOS6.js +176 -0
  23. package/dist/chunk-3BD2LXYJ.js +19 -0
  24. package/dist/chunk-3JHUFKG7.js +30 -0
  25. package/dist/chunk-3JLTRPN7.js +711 -0
  26. package/dist/chunk-3LT34CAM.js +2796 -0
  27. package/dist/chunk-3O5JWP4L.js +1670 -0
  28. package/dist/chunk-3UW3KU4A.js +21 -0
  29. package/dist/chunk-4A6YRGV4.js +569 -0
  30. package/dist/chunk-4D2BRCZ3.js +67 -0
  31. package/dist/chunk-4SYHGVDE.js +668 -0
  32. package/dist/chunk-4VDHLCF5.js +66 -0
  33. package/dist/chunk-4WOOTKFD.js +637 -0
  34. package/dist/chunk-4WV4PI66.js +80 -0
  35. package/dist/chunk-53OXPRI6.js +195 -0
  36. package/dist/chunk-55RMDDFM.js +1347 -0
  37. package/dist/chunk-56XP4FJU.js +2025 -0
  38. package/dist/chunk-5B3RTYAK.js +123 -0
  39. package/dist/chunk-5CD243WE.js +45 -0
  40. package/dist/chunk-5JQR5B4D.js +709 -0
  41. package/dist/chunk-5KQEUIWM.js +597 -0
  42. package/dist/chunk-5LP5FNNR.js +915 -0
  43. package/dist/chunk-62UK7AGW.js +9344 -0
  44. package/dist/chunk-6CTHLZFB.js +563 -0
  45. package/dist/chunk-6EJYVCTN.js +23 -0
  46. package/dist/chunk-6OWUM2NC.js +12289 -0
  47. package/dist/chunk-6RJMYYIE.js +1023 -0
  48. package/dist/chunk-6W75D37F.js +643 -0
  49. package/dist/chunk-733ZBT5P.js +1721 -0
  50. package/dist/chunk-77DCC6JZ.js +3710 -0
  51. package/dist/chunk-7QXCO3AF.js +156 -0
  52. package/dist/chunk-7RET77VB.js +481 -0
  53. package/dist/chunk-A4MVRV4C.js +65 -0
  54. package/dist/chunk-ALJWT6O6.js +93 -0
  55. package/dist/chunk-AVSR2HKI.js +232 -0
  56. package/dist/chunk-B7GY6QER.js +42 -0
  57. package/dist/chunk-BFOSV5EZ.js +178 -0
  58. package/dist/chunk-BGOIM7NB.js +103 -0
  59. package/dist/chunk-BJH6WFIB.js +372 -0
  60. package/dist/chunk-BOBCCDJ6.js +1533 -0
  61. package/dist/chunk-BRCOSE7O.js +117 -0
  62. package/dist/chunk-BYFHHCFV.js +601 -0
  63. package/dist/chunk-C2CPOIH2.js +83 -0
  64. package/dist/chunk-C7AQTPCE.js +694 -0
  65. package/dist/chunk-CBAQPTDU.js +165 -0
  66. package/dist/chunk-CDQ2UC6W.js +125 -0
  67. package/dist/chunk-CN6SW5DC.js +177 -0
  68. package/dist/chunk-CRHPCPZP.js +132 -0
  69. package/dist/chunk-CTFPFW3H.js +44 -0
  70. package/dist/chunk-D3KWFOUT.js +103 -0
  71. package/dist/chunk-D65E25JG.js +185 -0
  72. package/dist/chunk-DCGHJQ2U.js +236 -0
  73. package/dist/chunk-DE2LU267.js +106 -0
  74. package/dist/chunk-DF6PI6GN.js +97 -0
  75. package/dist/chunk-DGC6X6XR.js +53 -0
  76. package/dist/chunk-DOUISWEE.js +526 -0
  77. package/dist/chunk-DR3TAEUA.js +188 -0
  78. package/dist/chunk-DVTBERFY.js +33 -0
  79. package/dist/chunk-DXSETN72.js +1051 -0
  80. package/dist/chunk-DZLR4UEH.js +128 -0
  81. package/dist/chunk-E6IPKW2E.js +77 -0
  82. package/dist/chunk-EG4ARXPC.js +139 -0
  83. package/dist/chunk-EKV4UBCM.js +652 -0
  84. package/dist/chunk-EOJPDNUP.js +1325 -0
  85. package/dist/chunk-EX57VVWW.js +4157 -0
  86. package/dist/chunk-EYTLV3W3.js +5937 -0
  87. package/dist/chunk-EZD2BXGP.js +475 -0
  88. package/dist/chunk-EZDCA34W.js +314 -0
  89. package/dist/chunk-FD2I4KBR.js +33 -0
  90. package/dist/chunk-FD3IAHQM.js +27 -0
  91. package/dist/chunk-FFYTC2KQ.js +416 -0
  92. package/dist/chunk-FGSQHUCK.js +110 -0
  93. package/dist/chunk-GCQFN7YI.js +32 -0
  94. package/dist/chunk-GGPF6LLE.js +38 -0
  95. package/dist/chunk-GGWI3OVM.js +215 -0
  96. package/dist/chunk-GLIQT7SU.js +172 -0
  97. package/dist/chunk-GN7QBEEI.js +95 -0
  98. package/dist/chunk-GRHOXDKB.js +1104 -0
  99. package/dist/chunk-HMN2C6YL.js +54 -0
  100. package/dist/chunk-HOEDA42N.js +310 -0
  101. package/dist/chunk-HOYZUKG7.js +192 -0
  102. package/dist/chunk-HQVN7G4F.js +1021 -0
  103. package/dist/chunk-HSQQFDB3.js +519 -0
  104. package/dist/chunk-I4ELN5BX.js +47 -0
  105. package/dist/chunk-I4Y4WKZR.js +386 -0
  106. package/dist/chunk-IFPDAD7R.js +797 -0
  107. package/dist/chunk-IN7DGBVS.js +582 -0
  108. package/dist/chunk-ISHUS7HC.js +396 -0
  109. package/dist/chunk-JPXLJSGR.js +191 -0
  110. package/dist/chunk-JQCLXSFI.js +69 -0
  111. package/dist/chunk-KBUTSJSR.js +61 -0
  112. package/dist/chunk-KW5HXKLJ.js +56 -0
  113. package/dist/chunk-L4APUGCT.js +139 -0
  114. package/dist/chunk-L7G7K4I2.js +505 -0
  115. package/dist/chunk-LAR7DX5E.js +1840 -0
  116. package/dist/chunk-LAVUQX3B.js +462 -0
  117. package/dist/chunk-LJRBX7QR.js +116 -0
  118. package/dist/chunk-LNOXCGN2.js +1864 -0
  119. package/dist/chunk-LTWH2ACR.js +23002 -0
  120. package/dist/chunk-LYJJ6546.js +661 -0
  121. package/dist/chunk-M2IPMWCN.js +457 -0
  122. package/dist/chunk-MGLRTOCK.js +101 -0
  123. package/dist/chunk-MZF5IKZT.js +160 -0
  124. package/dist/chunk-N24R6KWS.js +386 -0
  125. package/dist/chunk-NASYVWDB.js +604 -0
  126. package/dist/chunk-NBXFPI7U.js +195 -0
  127. package/dist/chunk-NDPF2N2L.js +400 -0
  128. package/dist/chunk-NFSK2VNU.js +446 -0
  129. package/dist/chunk-NG3QQSXY.js +43 -0
  130. package/dist/chunk-NOCSM22Y.js +63 -0
  131. package/dist/chunk-NVPXXW2H.js +1143 -0
  132. package/dist/chunk-O63U2I6I.js +30 -0
  133. package/dist/chunk-OJXOA6YU.js +98 -0
  134. package/dist/chunk-OPD7GL6F.js +1196 -0
  135. package/dist/chunk-OQ2EOAHA.js +14399 -0
  136. package/dist/chunk-OV62D6KO.js +688 -0
  137. package/dist/chunk-OZ76TLGU.js +740 -0
  138. package/dist/chunk-P4GNZPXO.js +1156 -0
  139. package/dist/chunk-PS6JAWJZ.js +78 -0
  140. package/dist/chunk-PXRCXGLK.js +1865 -0
  141. package/dist/chunk-QDUUOZ3S.js +108 -0
  142. package/dist/chunk-QG6I2T5E.js +1416 -0
  143. package/dist/chunk-QHSBROEW.js +308 -0
  144. package/dist/chunk-QNUQ7K7D.js +46 -0
  145. package/dist/chunk-QZTTRSJE.js +333 -0
  146. package/dist/chunk-R2UUNSNQ.js +1605 -0
  147. package/dist/chunk-R7FGRZNF.js +1794 -0
  148. package/dist/chunk-RNDCROSG.js +199 -0
  149. package/dist/chunk-S36CXHO2.js +302 -0
  150. package/dist/chunk-SJGS3GDI.js +575 -0
  151. package/dist/chunk-SQZHXUB3.js +510 -0
  152. package/dist/chunk-SUTLW6ND.js +686 -0
  153. package/dist/chunk-SYF7FVBL.js +179 -0
  154. package/dist/chunk-T2MDZES3.js +1577 -0
  155. package/dist/chunk-T33IYTZM.js +1146 -0
  156. package/dist/chunk-TDGYTWM6.js +49 -0
  157. package/dist/chunk-TGL5FZVD.js +132 -0
  158. package/dist/chunk-TGWZXJ7L.js +1205 -0
  159. package/dist/chunk-TKDRT2DF.js +114 -0
  160. package/dist/chunk-TV2EBCSQ.js +152 -0
  161. package/dist/chunk-U26XXPJS.js +367 -0
  162. package/dist/chunk-U5QU5ZOD.js +419 -0
  163. package/dist/chunk-U6YTUVOX.js +1011 -0
  164. package/dist/chunk-UCINIRHW.js +188 -0
  165. package/dist/chunk-UJD5MPP6.js +52 -0
  166. package/dist/chunk-URCXX7WJ.js +146 -0
  167. package/dist/chunk-UX2L5CUD.js +898 -0
  168. package/dist/chunk-UZVYEF57.js +114 -0
  169. package/dist/chunk-V35KZDUZ.js +218 -0
  170. package/dist/chunk-VESL6DQY.js +1058 -0
  171. package/dist/chunk-VKHLUZNO.js +986 -0
  172. package/dist/chunk-VOYUCAQF.js +584 -0
  173. package/dist/chunk-VYRQHORQ.js +414 -0
  174. package/dist/chunk-W53XSRQE.js +245 -0
  175. package/dist/chunk-X4CEFOSG.js +226 -0
  176. package/dist/chunk-XDHUDE5K.js +380 -0
  177. package/dist/chunk-XISLDHEL.js +1290 -0
  178. package/dist/chunk-XM34YQ2Y.js +169 -0
  179. package/dist/chunk-XMDBTYCH.js +661 -0
  180. package/dist/chunk-XS2QPZJE.js +449 -0
  181. package/dist/chunk-YBUECLAF.js +618 -0
  182. package/dist/chunk-YQ6XEFVK.js +332 -0
  183. package/dist/chunk-YYLCPDCC.js +990 -0
  184. package/dist/chunk-Z4GLJ6J4.js +1035 -0
  185. package/dist/chunk-ZARZ4POR.js +210 -0
  186. package/dist/chunk-ZJPORZTC.js +119 -0
  187. package/dist/chunk-ZNUZ3EXD.js +243 -0
  188. package/dist/chunk-ZPST2KQO.js +49 -0
  189. package/dist/chunk-ZR5YA6ZF.js +512 -0
  190. package/dist/chunk-ZU4JPCPR.js +319 -0
  191. package/dist/chunk-ZUKUCZYZ.js +39 -0
  192. package/dist/cli/index.js +56 -45
  193. package/dist/clio-K2PBVCEM.js +27 -0
  194. package/dist/clio-context-tools-GR4OHFSO.js +145 -0
  195. package/dist/code-nav-4X3OI6DK.js +715 -0
  196. package/dist/codewiki/build-worker.js +4 -4
  197. package/dist/compile-cache-YRB6QRO7.js +18 -0
  198. package/dist/components-RQOJ6NUR.js +675 -0
  199. package/dist/config-Q5J7UBAB.js +291 -0
  200. package/dist/config-XE7XYZLU.js +38 -0
  201. package/dist/config-graph-P3555574.js +175 -0
  202. package/dist/configure-KIJ32ZO6.js +104 -0
  203. package/dist/context-LFBQOSXT.js +344 -0
  204. package/dist/context-NNLBES2Y.js +82 -0
  205. package/dist/context-WBH3KSVR.js +302 -0
  206. package/dist/context-clear-YOHMQ6SQ.js +208 -0
  207. package/dist/context-index-X2N5UAIF.js +120 -0
  208. package/dist/context-map-HOSMGUG2.js +555 -0
  209. package/dist/context-working-set-MRAEVDNV.js +1564 -0
  210. package/dist/data-tool-JJPBGMQJ.js +2986 -0
  211. package/dist/detail-RHJOTGN4.js +139 -0
  212. package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
  213. package/dist/docs-K4GBWRUX.js +342 -0
  214. package/dist/doctor-S5KZ2GTN.js +1138 -0
  215. package/dist/doctor-deep-2EJQSHIZ.js +130 -0
  216. package/dist/domain-loader-MB34FDPD.js +13 -0
  217. package/dist/eval-3D6M36N7.js +5220 -0
  218. package/dist/eval-inventory-SM3HNM47.js +260 -0
  219. package/dist/evals-FO6JEUCN.js +104 -0
  220. package/dist/evidence-6IYN52ET.js +262 -0
  221. package/dist/evidence-JVECPI3F.js +250 -0
  222. package/dist/evidence-XNVPPLVK.js +410 -0
  223. package/dist/evolve-TLPUDJDM.js +634 -0
  224. package/dist/extensions-ROZJ5X3J.js +311 -0
  225. package/dist/fleet-6RJWIOEO.js +284 -0
  226. package/dist/fleet-WKVBF5SZ.js +942 -0
  227. package/dist/fleet-commands-L6WFT7KZ.js +76 -0
  228. package/dist/fleet-decisions-BTQMWU5A.js +55 -0
  229. package/dist/fleet-graph-553DZ67Q.js +141 -0
  230. package/dist/fleet-inspect-236FZPRB.js +329 -0
  231. package/dist/fleet-new-CKUXP3CO.js +48 -0
  232. package/dist/fleet-preflight-NZQHABWO.js +95 -0
  233. package/dist/fleet-validate-7NLAE26R.js +96 -0
  234. package/dist/fleet-verify-E3RO6A5W.js +226 -0
  235. package/dist/fleet-view-KMZQY7YJ.js +144 -0
  236. package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
  237. package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
  238. package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
  239. package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
  240. package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
  241. package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
  242. package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
  243. package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
  244. package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
  245. package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
  246. package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
  247. package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
  248. package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
  249. package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
  250. package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
  251. package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
  252. package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
  253. package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
  254. package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
  255. package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
  256. package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
  257. package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
  258. package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
  259. package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
  260. package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
  261. package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
  262. package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
  263. package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
  264. package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
  265. package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
  266. package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
  267. package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
  268. package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
  269. package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
  270. package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
  271. package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
  272. package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
  273. package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
  274. package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
  275. package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
  276. package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
  277. package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
  278. package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
  279. package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
  280. package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
  281. package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
  282. package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
  283. package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
  284. package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
  285. package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
  286. package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
  287. package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
  288. package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
  289. package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
  290. package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
  291. package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
  292. package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
  293. package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
  294. package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
  295. package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
  296. package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
  297. package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
  298. package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
  299. package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
  300. package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
  301. package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
  302. package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
  303. package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
  304. package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
  305. package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
  306. package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
  307. package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
  308. package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
  309. package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
  310. package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
  311. package/dist/gui/client/index.html +6 -0
  312. package/dist/gui/ops-worker.js +167 -0
  313. package/dist/gui/reads-worker.js +473 -0
  314. package/dist/gui/server.js +9780 -0
  315. package/dist/gui-QJS7XQMV.js +16 -0
  316. package/dist/init-DV5B6HQG.js +354 -0
  317. package/dist/install-6C45YXFP.js +19 -0
  318. package/dist/install-O7NSRU2W.js +13 -0
  319. package/dist/interactive-OXGYZYAS.js +22381 -0
  320. package/dist/interop-J7UOBOSF.js +254 -0
  321. package/dist/inventory-OEGIL6PY.js +144 -0
  322. package/dist/library-B3UPGY4V.js +83 -0
  323. package/dist/library-MXQA5DLT.js +309 -0
  324. package/dist/library-ROZAMUIL.js +496 -0
  325. package/dist/library-import-2LTWOVBD.js +190 -0
  326. package/dist/library-inventory-LJ3XHLWO.js +60 -0
  327. package/dist/library-validation-DARHHUNW.js +46 -0
  328. package/dist/mcp-2GSPYQ54.js +28 -0
  329. package/dist/memory-J3STUUIK.js +537 -0
  330. package/dist/models-Y3GMFJ2V.js +314 -0
  331. package/dist/monitor-LHNH577J.js +811 -0
  332. package/dist/orchestrator-DTAPXULA.js +12117 -0
  333. package/dist/panes-A743ONZ5.js +103 -0
  334. package/dist/panes-CTNO57ZY.js +76 -0
  335. package/dist/paths-3SBYJQDP.js +68 -0
  336. package/dist/preload-OJBMAIXF.js +140 -0
  337. package/dist/providers-CMETPZNS.js +232 -0
  338. package/dist/registry-37T4U6X2.js +15 -0
  339. package/dist/reset-O7EUCYWO.js +346 -0
  340. package/dist/resources-FY6XYFN2.js +189 -0
  341. package/dist/run-H64MEVTA.js +1067 -0
  342. package/dist/run-script-PQ5NRU3X.js +42 -0
  343. package/dist/settings-SNIQNXCW.js +73 -0
  344. package/dist/settings-controls-X6GMCPVG.js +202 -0
  345. package/dist/share-CAFMMQLM.js +299 -0
  346. package/dist/skills-ERKQUC7L.js +114 -0
  347. package/dist/skills-eval-CQ23MYQK.js +1099 -0
  348. package/dist/skills-inventory-TVUYJDVN.js +142 -0
  349. package/dist/slash-commands-ROG3KIFJ.js +107 -0
  350. package/dist/startup-background-KDWCQMWT.js +247 -0
  351. package/dist/steer-KKYXJSH4.js +77 -0
  352. package/dist/support-M3RCUUEL.js +40 -0
  353. package/dist/system-ZDW44ZGX.js +142 -0
  354. package/dist/target-runtimes-PWA22WVW.js +73 -0
  355. package/dist/targets-AJWA6E7Z.js +1207 -0
  356. package/dist/tasks-6L2JJRC5.js +39 -0
  357. package/dist/terminal-lease-YFUSDPAD.js +432 -0
  358. package/dist/tools-5XJUABRD.js +30 -0
  359. package/dist/trace-LA5MVR4Y.js +527 -0
  360. package/dist/tree-sitter-TQW3Y52T.js +4673 -0
  361. package/dist/tui-primitives-IUCVWLH5.js +19 -0
  362. package/dist/uninstall-SAWGGXAB.js +448 -0
  363. package/dist/upgrade-HSNSVTZG.js +300 -0
  364. package/dist/usage-XSILDHKF.js +1083 -0
  365. package/dist/verifiers-ECA5GIHL.js +633 -0
  366. package/dist/verify-R6QQCCEB.js +31 -0
  367. package/dist/version-PLZYB5KW.js +22 -0
  368. package/dist/web-fetch-PVZNMBOB.js +803 -0
  369. package/dist/wiki-generate-RP22WP5K.js +647 -0
  370. package/dist/with-panes-W3PAZPRF.js +629 -0
  371. package/dist/worker/entry.js +324 -284
  372. package/dist/workspace-check-3764ZKC2.js +83 -0
  373. package/docs/README.md +26 -10
  374. package/docs/architecture/acp.md +179 -12
  375. package/docs/architecture/artifact-placement.md +1 -1
  376. package/docs/architecture/capacity-and-scheduling.md +7 -8
  377. package/docs/architecture/context-engine.md +350 -95
  378. package/docs/architecture/model-catalog.md +18 -11
  379. package/docs/architecture/observability.md +1 -1
  380. package/docs/architecture/pi-boundary.md +59 -6
  381. package/docs/architecture/prompt-envelope-and-tools.md +147 -39
  382. package/docs/architecture/provider-adapter-cookbook.md +2 -2
  383. package/docs/architecture/safety-model.md +18 -4
  384. package/docs/architecture/trace-store.md +2 -2
  385. package/docs/architecture/tui-design.md +41 -81
  386. package/docs/architecture/worker-dispatch-mechanics.md +9 -1
  387. package/docs/gui/README.md +69 -0
  388. package/docs/gui/boundary-doctrine.md +104 -0
  389. package/docs/gui/chat-rendering-spec.md +1440 -0
  390. package/docs/gui/cli-surface-routing.md +148 -0
  391. package/docs/gui/delivery-order.md +53 -0
  392. package/docs/gui/event-bus-coverage.md +103 -0
  393. package/docs/gui/inspector-presentation.md +71 -0
  394. package/docs/gui/parity/01-cli-surface.md +74 -0
  395. package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
  396. package/docs/gui/parity/03-domains-and-plan.md +69 -0
  397. package/docs/gui/performance-baseline.md +76 -0
  398. package/docs/gui/settings-write-surface.md +267 -0
  399. package/docs/gui/workflow-coverage.md +64 -0
  400. package/docs/guide/built-in-agents.md +1 -1
  401. package/docs/guide/commands-and-modes.md +256 -99
  402. package/docs/guide/configuration-and-targets.md +485 -124
  403. package/docs/guide/configuration-reference.md +165 -82
  404. package/docs/guide/doctor.md +127 -0
  405. package/docs/guide/environment-variables.md +1 -1
  406. package/docs/guide/exit-codes-and-output.md +3 -1
  407. package/docs/guide/extensions-and-sharing.md +3 -14
  408. package/docs/guide/fleet-dispatch.md +231 -45
  409. package/docs/guide/glossary.md +1 -1
  410. package/docs/guide/installation-and-lifecycle.md +27 -16
  411. package/docs/guide/interop.md +2 -2
  412. package/docs/guide/proactive-memory.md +154 -68
  413. package/docs/guide/resource-library.md +4 -0
  414. package/docs/guide/skills-marketplace.md +8 -4
  415. package/docs/guide/slurm.md +88 -0
  416. package/docs/guide/tool-usage.md +134 -11
  417. package/docs/guide/troubleshooting.md +4 -2
  418. package/docs/process/battletest-2026-09-20-fixes.md +161 -0
  419. package/docs/process/configure-tree-proposal.md +637 -0
  420. package/docs/process/documentation-coverage.md +8 -0
  421. package/docs/process/documentation-guide.md +18 -1
  422. package/docs/process/eval-runner.md +58 -14
  423. package/docs/process/performance-methodology.md +11 -3
  424. package/docs/process/release-cut-checklist.md +29 -3
  425. package/docs/process/tool-audit-v0.4.9.md +3 -0
  426. package/examples/extensions/README.md +1 -3
  427. package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
  428. package/examples/extensions/measurements/clio-coder-extension.json +1 -1
  429. package/library/registry.yaml +30 -5
  430. package/library/skills/git/fix-issue/SKILL.md +2 -1
  431. package/library/skills/git/fix-issue/plugin.json +1 -1
  432. package/library/skills/git/ship/SKILL.md +2 -1
  433. package/library/skills/git/ship/plugin.json +1 -1
  434. package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
  435. package/library/skills/meta/clio-coder-test/evals.md +2 -2
  436. package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
  437. package/library/skills/registry.yaml +9 -5
  438. package/library/skills/research/slurm-jobs/SKILL.md +110 -0
  439. package/library/skills/research/slurm-jobs/evals.md +39 -0
  440. package/library/skills/research/slurm-jobs/plugin.json +23 -0
  441. package/library/skills/skill-marketplace.json +18 -2
  442. package/package.json +15 -10
  443. package/src/cli/args.ts +59 -0
  444. package/src/cli/argv.ts +7 -0
  445. package/src/cli/clio.ts +9 -1
  446. package/src/cli/configure-controls.ts +136 -0
  447. package/src/cli/configure-onboarding.ts +24 -7
  448. package/src/cli/configure-quick.ts +32 -7
  449. package/src/cli/configure-target.ts +11 -1
  450. package/src/cli/configure.ts +253 -256
  451. package/src/cli/docs-server.ts +290 -0
  452. package/src/cli/docs.ts +60 -15
  453. package/src/cli/doctor-deep.ts +126 -0
  454. package/src/cli/doctor-hpc.ts +122 -0
  455. package/src/cli/doctor-slurm.ts +130 -0
  456. package/src/cli/doctor-task-worktrees.ts +88 -0
  457. package/src/cli/doctor.ts +165 -16
  458. package/src/cli/fleet-verify.ts +3 -2
  459. package/src/cli/gui.ts +111 -0
  460. package/src/cli/index.ts +14 -4
  461. package/src/cli/library.ts +2 -7
  462. package/src/cli/modes/json-stream.ts +4 -2
  463. package/src/cli/modes/print.ts +252 -25
  464. package/src/cli/run.ts +199 -71
  465. package/src/cli/skills.ts +25 -7
  466. package/src/cli/targets.ts +87 -9
  467. package/src/cli/uninstall.ts +28 -8
  468. package/src/cli/usage.ts +2 -1
  469. package/src/cli/workspace-check.ts +71 -0
  470. package/src/core/bash-exec.ts +8 -2
  471. package/src/core/bus-events.ts +32 -3
  472. package/src/core/cache-telemetry.ts +3 -2
  473. package/src/core/compile-cache.ts +11 -1
  474. package/src/core/config.ts +59 -6
  475. package/src/core/defaults.ts +27 -5
  476. package/src/core/diagnostics.ts +25 -0
  477. package/src/core/event-bus.ts +2 -1
  478. package/src/core/gateway-routing.ts +10 -3
  479. package/src/core/git-commit-attribution.ts +2 -1
  480. package/src/core/naming-compat.ts +6 -4
  481. package/src/core/package-root.ts +0 -9
  482. package/src/core/path-canonical.ts +143 -24
  483. package/src/core/residency-target-key.ts +2 -6
  484. package/src/core/run-overrides.ts +1 -1
  485. package/src/core/settings-awareness.ts +108 -0
  486. package/src/core/settings-controls.ts +673 -0
  487. package/src/core/settings-navigation.ts +116 -0
  488. package/src/core/theme-token-hex.ts +19 -9
  489. package/src/core/turn-constraints.ts +52 -0
  490. package/src/domains/agents/builtins/scout.md +7 -17
  491. package/src/domains/agents/catalog.ts +5 -1
  492. package/src/domains/agents/extension.ts +2 -1
  493. package/src/domains/agents/registry.ts +4 -3
  494. package/src/domains/agents/result-contract.ts +132 -1
  495. package/src/domains/config/classify.ts +11 -7
  496. package/src/domains/config/extension.ts +5 -1
  497. package/src/domains/config/keybindings.ts +2 -2
  498. package/src/domains/context/codewiki/coordinator.ts +10 -0
  499. package/src/domains/context/worker/snapshot.ts +6 -3
  500. package/src/domains/dispatch/active-route-planner.ts +2 -0
  501. package/src/domains/dispatch/agent-candidates.ts +5 -1
  502. package/src/domains/dispatch/capability-match.ts +1 -1
  503. package/src/domains/dispatch/contract.ts +28 -0
  504. package/src/domains/dispatch/event-pump.ts +37 -3
  505. package/src/domains/dispatch/extension.ts +391 -48
  506. package/src/domains/dispatch/failure-classification.ts +37 -2
  507. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  508. package/src/domains/dispatch/run-identity.ts +10 -3
  509. package/src/domains/dispatch/target-breaker.ts +163 -0
  510. package/src/domains/dispatch/types.ts +29 -2
  511. package/src/domains/dispatch/worker-model-loads.ts +66 -0
  512. package/src/domains/dispatch/worker-protocol.ts +20 -1
  513. package/src/domains/dispatch/worker-spawn.ts +28 -2
  514. package/src/domains/eval/artifacts/redact.ts +9 -0
  515. package/src/domains/eval/metrics/noop.ts +61 -0
  516. package/src/domains/eval/reports/junit.ts +5 -1
  517. package/src/domains/eval/reports/text.ts +7 -0
  518. package/src/domains/eval/runners/clio-run.ts +19 -8
  519. package/src/domains/eval/runners/external-command.ts +29 -4
  520. package/src/domains/eval/schema/adapter.ts +6 -2
  521. package/src/domains/eval/schema/suite.ts +2 -0
  522. package/src/domains/eval/schema/validate.ts +3 -0
  523. package/src/domains/eval/suites/run.ts +167 -26
  524. package/src/domains/evidence/detail.ts +3 -2
  525. package/src/domains/extensions/operator-runtime.ts +11 -4
  526. package/src/domains/gateway/mcp/client.ts +1 -1
  527. package/src/domains/lifecycle/doctor.ts +42 -26
  528. package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
  529. package/src/domains/lifecycle/migrations/index.ts +2 -0
  530. package/src/domains/middleware/demo-guidance.ts +36 -0
  531. package/src/domains/middleware/dispatch-nudge.ts +1 -1
  532. package/src/domains/middleware/memory-intervention.ts +51 -4
  533. package/src/domains/middleware/runtime.ts +5 -4
  534. package/src/domains/middleware/skills-reminder.ts +29 -52
  535. package/src/domains/middleware/task-nudge.ts +1 -0
  536. package/src/domains/middleware/watchdog.ts +4 -0
  537. package/src/domains/observability/extension.ts +2 -1
  538. package/src/domains/observability/out-of-turn-usage.ts +3 -2
  539. package/src/domains/observability/projection.ts +3 -2
  540. package/src/domains/observability/worker-progress.ts +48 -0
  541. package/src/domains/prompts/compiler.ts +148 -52
  542. package/src/domains/prompts/contract.ts +3 -3
  543. package/src/domains/prompts/demo-guidance.ts +8 -0
  544. package/src/domains/prompts/extension.ts +12 -7
  545. package/src/domains/prompts/fragments/identity/clio.md +2 -1
  546. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
  547. package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
  548. package/src/domains/prompts/fragments/operating/contract.md +16 -7
  549. package/src/domains/prompts/fragments/operating/delegation.md +29 -13
  550. package/src/domains/prompts/fragments/operating/skills.md +18 -10
  551. package/src/domains/prompts/fragments/operating/worker.md +2 -0
  552. package/src/domains/providers/cache-deployment.ts +45 -2
  553. package/src/domains/providers/contract.ts +52 -11
  554. package/src/domains/providers/extension.ts +230 -53
  555. package/src/domains/providers/model-discovery.ts +22 -8
  556. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
  557. package/src/domains/providers/plugins.ts +3 -4
  558. package/src/domains/providers/probe/fingerprint.ts +2 -2
  559. package/src/domains/providers/probe/reasoning.ts +9 -16
  560. package/src/domains/providers/probe/tool-call.ts +236 -0
  561. package/src/domains/providers/registry.ts +51 -8
  562. package/src/domains/providers/runtime-resolution.ts +60 -12
  563. package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
  564. package/src/domains/providers/runtimes/builtins.ts +2 -2
  565. package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
  566. package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
  567. package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
  568. package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
  569. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
  570. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
  571. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
  572. package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
  573. package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
  574. package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
  575. package/src/domains/providers/support.ts +1 -1
  576. package/src/domains/providers/types/local-model-quirks.ts +2 -3
  577. package/src/domains/providers/types/runtime-descriptor.ts +23 -3
  578. package/src/domains/providers/types/target-descriptor.ts +15 -3
  579. package/src/domains/resources/collision.ts +7 -2
  580. package/src/domains/resources/index.ts +1 -0
  581. package/src/domains/resources/library-actions.ts +4 -2
  582. package/src/domains/resources/library-inventory.ts +6 -2
  583. package/src/domains/resources/prompts/loader.ts +20 -7
  584. package/src/domains/resources/skills/availability.ts +56 -0
  585. package/src/domains/resources/skills/loader.ts +20 -9
  586. package/src/domains/safety/action-classifier.ts +282 -31
  587. package/src/domains/safety/audit.ts +2 -1
  588. package/src/domains/safety/autonomy.ts +54 -11
  589. package/src/domains/safety/decision-presentation.ts +17 -4
  590. package/src/domains/safety/finish-contract-registration.ts +25 -1
  591. package/src/domains/safety/finish-contract.ts +20 -5
  592. package/src/domains/safety/path-policy.ts +6 -2
  593. package/src/domains/safety/policy-engine.ts +168 -48
  594. package/src/domains/safety/protected-artifacts.ts +527 -16
  595. package/src/domains/safety/read-scope.ts +120 -0
  596. package/src/domains/safety/skill-authority.ts +52 -16
  597. package/src/domains/scheduling/cluster.ts +14 -3
  598. package/src/domains/scheduling/contract.ts +7 -0
  599. package/src/domains/scheduling/extension.ts +20 -9
  600. package/src/domains/scheduling/local-capacity.ts +160 -0
  601. package/src/domains/session/context-accounting.ts +44 -31
  602. package/src/domains/session/context-ledger.ts +10 -3
  603. package/src/domains/session/entries.ts +4 -0
  604. package/src/domains/session/history.ts +1 -1
  605. package/src/domains/session/prompt-cache.ts +1 -0
  606. package/src/domains/session/prompt-manifest.ts +3 -1
  607. package/src/domains/session/retry.ts +4 -6
  608. package/src/domains/session/task-board.ts +19 -4
  609. package/src/domains/session/tree/preview.ts +3 -2
  610. package/src/engine/acp/commands.ts +653 -0
  611. package/src/engine/acp/server.ts +639 -20
  612. package/src/engine/acp/tool-mediator.ts +30 -7
  613. package/src/engine/acp/types.ts +58 -0
  614. package/src/engine/agent.ts +55 -10
  615. package/src/engine/ai.ts +11 -2
  616. package/src/engine/api-registry.ts +5 -4
  617. package/src/engine/apis/degraded-inference.ts +243 -0
  618. package/src/engine/apis/llamacpp-residency.ts +50 -6
  619. package/src/engine/apis/lmstudio-residency.ts +3 -5
  620. package/src/engine/apis/lmstudio.ts +137 -31
  621. package/src/engine/apis/ollama-http.ts +118 -0
  622. package/src/engine/apis/ollama-native.ts +216 -97
  623. package/src/engine/apis/openai-completions.ts +191 -189
  624. package/src/engine/apis/output-budget.ts +3 -1
  625. package/src/engine/apis/residency-lock.ts +2 -1
  626. package/src/engine/apis/residency.ts +339 -89
  627. package/src/engine/apis/sampling-overrides.ts +23 -2
  628. package/src/engine/apis/types.ts +1 -2
  629. package/src/engine/claude/tool-safety.ts +30 -5
  630. package/src/engine/context.ts +13 -0
  631. package/src/engine/env-api-keys.ts +2 -1
  632. package/src/engine/gemma-channel-filter.ts +3 -2
  633. package/src/engine/instrumented-tui.ts +25 -0
  634. package/src/engine/loop-guard.ts +172 -6
  635. package/src/engine/pi-mono-names.ts +16 -0
  636. package/src/engine/prewarm.ts +44 -15
  637. package/src/engine/provider-payload.ts +52 -14
  638. package/src/engine/session.ts +4 -2
  639. package/src/engine/worker-events.ts +9 -1
  640. package/src/engine/worker-runtime.ts +269 -42
  641. package/src/engine/worker-tools.ts +8 -3
  642. package/src/entry/boot-options.ts +23 -0
  643. package/src/entry/orchestrator.ts +207 -36
  644. package/src/interactive/assistant-generation-timing.ts +52 -0
  645. package/src/interactive/chat-loop-messages.ts +4 -1
  646. package/src/interactive/chat-loop.ts +59 -9
  647. package/src/interactive/chat-panel.ts +10 -1
  648. package/src/interactive/clio-editor.ts +51 -79
  649. package/src/interactive/context-meter.ts +1 -0
  650. package/src/interactive/context-overlay.ts +21 -8
  651. package/src/interactive/cost-overlay.ts +1 -1
  652. package/src/interactive/dispatch-board.ts +39 -8
  653. package/src/interactive/editor-bash.ts +0 -34
  654. package/src/interactive/editor-rails.ts +43 -0
  655. package/src/interactive/editor-submit.ts +34 -2
  656. package/src/interactive/footer/dashboard.ts +67 -38
  657. package/src/interactive/footer/demo-hints.ts +40 -0
  658. package/src/interactive/footer/key-hints.ts +21 -0
  659. package/src/interactive/footer/notifications.ts +1 -1
  660. package/src/interactive/footer/pages.ts +486 -0
  661. package/src/interactive/footer/system-metrics.ts +147 -0
  662. package/src/interactive/footer/widgets.ts +158 -63
  663. package/src/interactive/footer-panel.ts +29 -7
  664. package/src/interactive/interactive-application.ts +109 -21
  665. package/src/interactive/interactive-event-projection.ts +6 -2
  666. package/src/interactive/interactive-presentation.ts +25 -29
  667. package/src/interactive/interactive-slash-runtime.ts +32 -18
  668. package/src/interactive/interactive-subscriptions.ts +25 -5
  669. package/src/interactive/interactive-tickers.ts +21 -5
  670. package/src/interactive/keybinding-manager.ts +9 -0
  671. package/src/interactive/overlay-frame.ts +29 -7
  672. package/src/interactive/overlay-lifecycle.ts +5 -3
  673. package/src/interactive/overlay-model-selectors.ts +4 -0
  674. package/src/interactive/overlay-permission-lifecycle.ts +6 -5
  675. package/src/interactive/overlays/ask-user.ts +103 -110
  676. package/src/interactive/overlays/help-reference.ts +1 -0
  677. package/src/interactive/overlays/message-picker.ts +3 -29
  678. package/src/interactive/overlays/session-selector.ts +3 -2
  679. package/src/interactive/overlays/settings-sections.ts +2 -30
  680. package/src/interactive/overlays/settings.ts +310 -607
  681. package/src/interactive/permission-hint.ts +3 -3
  682. package/src/interactive/permission-overlay.ts +45 -27
  683. package/src/interactive/renderers/doctor-report.ts +43 -0
  684. package/src/interactive/renderers/tool-execution.ts +87 -62
  685. package/src/interactive/renderers/worker-entry.ts +76 -3
  686. package/src/interactive/side-question.ts +3 -1
  687. package/src/interactive/slash-commands.ts +78 -23
  688. package/src/interactive/startup-background.ts +131 -0
  689. package/src/interactive/startup-diagnostics.ts +16 -0
  690. package/src/interactive/status/state-machine.ts +16 -3
  691. package/src/interactive/status/types.ts +2 -0
  692. package/src/interactive/status/verbs.ts +1 -1
  693. package/src/interactive/terminal-lease.ts +26 -22
  694. package/src/interactive/theme/components.ts +1 -1
  695. package/src/interactive/theme/rules.ts +1 -1
  696. package/src/interactive/theme/tokens.ts +16 -10
  697. package/src/interactive/transcript-detail.ts +4 -0
  698. package/src/interactive/turn-context.ts +56 -20
  699. package/src/interactive/turn-middleware.ts +57 -9
  700. package/src/interactive/turn-prewarm.ts +121 -18
  701. package/src/interactive/turn-recovery.ts +10 -8
  702. package/src/interactive/turn-runtime.ts +74 -29
  703. package/src/interactive/turn-state.ts +3 -0
  704. package/src/interactive/welcome-art.ts +36 -0
  705. package/src/interactive/welcome-dashboard.ts +209 -49
  706. package/src/interactive/worker-replay.ts +4 -0
  707. package/src/interactive/worker-stream.ts +17 -2
  708. package/src/tools/agent-tools.ts +22 -1
  709. package/src/tools/builtin-tool-catalog.ts +2 -2
  710. package/src/tools/codewiki/code-nav.ts +1 -1
  711. package/src/tools/codewiki/shared.ts +39 -1
  712. package/src/tools/compete-worktrees.ts +8 -91
  713. package/src/tools/context/docs-engine.ts +44 -12
  714. package/src/tools/context/index.ts +126 -22
  715. package/src/tools/context/library.ts +1 -1
  716. package/src/tools/context/surface.ts +12 -7
  717. package/src/tools/core-bootstrap.ts +3 -0
  718. package/src/tools/dispatch-runner.ts +18 -0
  719. package/src/tools/dispatch-schema.ts +187 -206
  720. package/src/tools/edit.ts +46 -42
  721. package/src/tools/file-mutation-queue.ts +25 -26
  722. package/src/tools/gateway/clio-context-surface.ts +1 -1
  723. package/src/tools/gateway/index.ts +7 -3
  724. package/src/tools/gateway/mcp-capabilities.ts +5 -3
  725. package/src/tools/grep.ts +14 -2
  726. package/src/tools/ls.ts +1 -4
  727. package/src/tools/monitor.ts +14 -1
  728. package/src/tools/observation.ts +1 -3
  729. package/src/tools/path-utils.ts +51 -18
  730. package/src/tools/process-lease.ts +99 -0
  731. package/src/tools/read.ts +1 -1
  732. package/src/tools/registry.ts +71 -9
  733. package/src/tools/task-worktree.ts +296 -17
  734. package/src/tools/tasks.ts +29 -7
  735. package/src/tools/worker-evidence.ts +60 -1
  736. package/src/tools/worktree-root.ts +252 -0
  737. package/src/tools/write.ts +34 -30
  738. package/src/worker/entry.ts +18 -1
  739. package/src/worker/protocol.ts +54 -1
  740. package/src/worker/spec-contract.ts +22 -2
  741. package/dist/acp-ZWZCPS2A.js +0 -130
  742. package/dist/agents-LYSOWZUE.js +0 -150
  743. package/dist/auth-WBQGKWQ5.js +0 -551
  744. package/dist/background-BUMOBAQN.js +0 -37
  745. package/dist/builtins-ODRJOEDI.js +0 -22
  746. package/dist/chunk-2DRRZ57Q.js +0 -571
  747. package/dist/chunk-2JBZYUPY.js +0 -105
  748. package/dist/chunk-2VBWFXYE.js +0 -198
  749. package/dist/chunk-2X2R3UTH.js +0 -1018
  750. package/dist/chunk-32KJPXAM.js +0 -75
  751. package/dist/chunk-37LW32LZ.js +0 -32
  752. package/dist/chunk-3A3CUMKA.js +0 -54
  753. package/dist/chunk-3AND2EFU.js +0 -215
  754. package/dist/chunk-3RDHGNU7.js +0 -647
  755. package/dist/chunk-3SUDBGEI.js +0 -1323
  756. package/dist/chunk-3TQN67I2.js +0 -396
  757. package/dist/chunk-3U4BL2EV.js +0 -103
  758. package/dist/chunk-3UQADNG2.js +0 -302
  759. package/dist/chunk-434LRQ6Z.js +0 -13441
  760. package/dist/chunk-4ATBOFRP.js +0 -7802
  761. package/dist/chunk-4DNL43EZ.js +0 -139
  762. package/dist/chunk-4HFJKRGZ.js +0 -5250
  763. package/dist/chunk-555E2WVV.js +0 -322
  764. package/dist/chunk-5GZICIYO.js +0 -462
  765. package/dist/chunk-5PHVPU4G.js +0 -160
  766. package/dist/chunk-5RTEFNBP.js +0 -197
  767. package/dist/chunk-64XJW7NT.js +0 -380
  768. package/dist/chunk-6TKOFFGE.js +0 -1058
  769. package/dist/chunk-6UJ7RDI7.js +0 -1143
  770. package/dist/chunk-7FBCRWVT.js +0 -1801
  771. package/dist/chunk-7JSOSVLP.js +0 -283
  772. package/dist/chunk-7N3OLLSL.js +0 -637
  773. package/dist/chunk-7QQRPB2E.js +0 -915
  774. package/dist/chunk-A6DULIMH.js +0 -986
  775. package/dist/chunk-AB3QXXBC.js +0 -123
  776. package/dist/chunk-ACCECAH4.js +0 -49
  777. package/dist/chunk-AM6CEP2K.js +0 -2120
  778. package/dist/chunk-AUHVBIDW.js +0 -19
  779. package/dist/chunk-AY4XE6GN.js +0 -665
  780. package/dist/chunk-BBA2TAWV.js +0 -667
  781. package/dist/chunk-BFPHMSK7.js +0 -169
  782. package/dist/chunk-BMNVVKEW.js +0 -604
  783. package/dist/chunk-CKK25WN3.js +0 -72
  784. package/dist/chunk-CTGZCEI6.js +0 -33
  785. package/dist/chunk-DIAJYJYG.js +0 -446
  786. package/dist/chunk-DVNAPPXU.js +0 -27
  787. package/dist/chunk-DXVMLM3Z.js +0 -92
  788. package/dist/chunk-E3LEPLQ2.js +0 -68
  789. package/dist/chunk-EHZRAB4U.js +0 -63
  790. package/dist/chunk-EM2DIQAJ.js +0 -179
  791. package/dist/chunk-EM2WNQS2.js +0 -93
  792. package/dist/chunk-ETF4ROKH.js +0 -595
  793. package/dist/chunk-F2YM3JY4.js +0 -22513
  794. package/dist/chunk-FEBQWHJT.js +0 -1023
  795. package/dist/chunk-FPS4R2RN.js +0 -1975
  796. package/dist/chunk-GD55RTIW.js +0 -33
  797. package/dist/chunk-GJDRMBDI.js +0 -573
  798. package/dist/chunk-GREYLTZ5.js +0 -658
  799. package/dist/chunk-H2WSCZZT.js +0 -238
  800. package/dist/chunk-H6IUCY6Q.js +0 -117
  801. package/dist/chunk-H72DCH3E.js +0 -563
  802. package/dist/chunk-H7TXJR23.js +0 -705
  803. package/dist/chunk-HBJQQTKM.js +0 -40
  804. package/dist/chunk-HCVKSGNZ.js +0 -990
  805. package/dist/chunk-HVCAY2FH.js +0 -67
  806. package/dist/chunk-I47EJPYL.js +0 -1377
  807. package/dist/chunk-IALGWTLO.js +0 -36
  808. package/dist/chunk-IALZJE37.js +0 -1710
  809. package/dist/chunk-IC7JXLOM.js +0 -1577
  810. package/dist/chunk-IOSVTTCD.js +0 -108
  811. package/dist/chunk-IPTPMLA6.js +0 -475
  812. package/dist/chunk-IZZI3SKQ.js +0 -128
  813. package/dist/chunk-JABWPKFY.js +0 -27
  814. package/dist/chunk-JIYWMQZ5.js +0 -175
  815. package/dist/chunk-JKU34ACI.js +0 -693
  816. package/dist/chunk-JOBN2YQQ.js +0 -176
  817. package/dist/chunk-JOL2QRLE.js +0 -152
  818. package/dist/chunk-JTR3VSV3.js +0 -44
  819. package/dist/chunk-JU6MAMRJ.js +0 -362
  820. package/dist/chunk-JURMQWVJ.js +0 -15
  821. package/dist/chunk-K2BLQC5E.js +0 -262
  822. package/dist/chunk-K3XN4LZ4.js +0 -402
  823. package/dist/chunk-KIVFXGBM.js +0 -688
  824. package/dist/chunk-KKRXONXG.js +0 -43
  825. package/dist/chunk-KOAHT3N2.js +0 -395
  826. package/dist/chunk-KP5BPXR3.js +0 -73
  827. package/dist/chunk-KQ6IDQIB.js +0 -39
  828. package/dist/chunk-KRJQG47M.js +0 -1289
  829. package/dist/chunk-KW6OJ7IY.js +0 -221
  830. package/dist/chunk-L3NBWLSN.js +0 -314
  831. package/dist/chunk-L4RUTLRL.js +0 -59
  832. package/dist/chunk-LGTVWPRN.js +0 -47
  833. package/dist/chunk-LSQW6KZO.js +0 -200
  834. package/dist/chunk-LTR5QCLS.js +0 -446
  835. package/dist/chunk-LWJYOHT3.js +0 -165
  836. package/dist/chunk-M6YLF66Z.js +0 -2687
  837. package/dist/chunk-MJ4QEJVT.js +0 -185
  838. package/dist/chunk-MO65K5CH.js +0 -1148
  839. package/dist/chunk-MTOZEQHL.js +0 -637
  840. package/dist/chunk-MZDPF35R.js +0 -45
  841. package/dist/chunk-MZKYVIWW.js +0 -188
  842. package/dist/chunk-NBPA5QM6.js +0 -386
  843. package/dist/chunk-NMBEW4PP.js +0 -688
  844. package/dist/chunk-NPLLK3HO.js +0 -3610
  845. package/dist/chunk-NSYGPIVW.js +0 -39
  846. package/dist/chunk-NXTV5OI5.js +0 -1020
  847. package/dist/chunk-NYDG4QP4.js +0 -689
  848. package/dist/chunk-OA2GDACN.js +0 -146
  849. package/dist/chunk-PJI57EC6.js +0 -236
  850. package/dist/chunk-PJJBUGMR.js +0 -4484
  851. package/dist/chunk-PNJE7JPS.js +0 -50
  852. package/dist/chunk-PP23PZEV.js +0 -1347
  853. package/dist/chunk-PPIFDSBK.js +0 -409
  854. package/dist/chunk-PTFISXQO.js +0 -319
  855. package/dist/chunk-QB33Z5S7.js +0 -1865
  856. package/dist/chunk-QGNII5VC.js +0 -110
  857. package/dist/chunk-QH3ZTUOA.js +0 -113
  858. package/dist/chunk-QI72X67S.js +0 -481
  859. package/dist/chunk-QJMRYTCX.js +0 -56
  860. package/dist/chunk-QKHZZFKH.js +0 -98
  861. package/dist/chunk-RDKX2PME.js +0 -66
  862. package/dist/chunk-RL7LJYN4.js +0 -66
  863. package/dist/chunk-RPMNIFRY.js +0 -65
  864. package/dist/chunk-RQROVOV3.js +0 -670
  865. package/dist/chunk-S34A7BSP.js +0 -97
  866. package/dist/chunk-SJETVJHX.js +0 -119
  867. package/dist/chunk-SJMNU4ZS.js +0 -634
  868. package/dist/chunk-SL2RDHKO.js +0 -19
  869. package/dist/chunk-SLLG2G44.js +0 -85
  870. package/dist/chunk-SQAZN2V3.js +0 -2744
  871. package/dist/chunk-SQBT46OF.js +0 -814
  872. package/dist/chunk-SRCEQKQS.js +0 -165
  873. package/dist/chunk-TCUOGIL2.js +0 -52
  874. package/dist/chunk-TIWPKCVO.js +0 -42
  875. package/dist/chunk-U44YYLVV.js +0 -1529
  876. package/dist/chunk-UIU7MGZ3.js +0 -486
  877. package/dist/chunk-USBBEKHW.js +0 -177
  878. package/dist/chunk-VHKTOLEW.js +0 -1416
  879. package/dist/chunk-VPWGADBG.js +0 -3151
  880. package/dist/chunk-VQD7NH7Z.js +0 -356
  881. package/dist/chunk-VWFCAK34.js +0 -697
  882. package/dist/chunk-W5RM7YAH.js +0 -78
  883. package/dist/chunk-W72LLZAV.js +0 -243
  884. package/dist/chunk-WGRDABW7.js +0 -207
  885. package/dist/chunk-WWRV5RJI.js +0 -165
  886. package/dist/chunk-XCUDZQLX.js +0 -195
  887. package/dist/chunk-XFLSL7BT.js +0 -386
  888. package/dist/chunk-XJZEDCNT.js +0 -391
  889. package/dist/chunk-XLLEL3K7.js +0 -709
  890. package/dist/chunk-XNZWWDC3.js +0 -686
  891. package/dist/chunk-XRECG65F.js +0 -308
  892. package/dist/chunk-XTQ7MEJG.js +0 -457
  893. package/dist/chunk-XW2UZICE.js +0 -372
  894. package/dist/chunk-Y3M2T5RO.js +0 -891
  895. package/dist/chunk-YGDMBK7O.js +0 -567
  896. package/dist/chunk-YJCCMYYT.js +0 -125
  897. package/dist/chunk-YPQOPFP7.js +0 -797
  898. package/dist/chunk-YQYINEJI.js +0 -132
  899. package/dist/chunk-ZF6CV4WZ.js +0 -5614
  900. package/dist/chunk-ZKJU55MX.js +0 -326
  901. package/dist/chunk-ZKQ63XZ5.js +0 -1196
  902. package/dist/chunk-ZKVMDNAN.js +0 -962
  903. package/dist/chunk-ZST3FRCV.js +0 -132
  904. package/dist/clio-JUDCLNHC.js +0 -26
  905. package/dist/clio-context-tools-FT672MNZ.js +0 -136
  906. package/dist/code-nav-7OVCTP2Z.js +0 -688
  907. package/dist/compile-cache-WJEPUZEJ.js +0 -16
  908. package/dist/components-OZXZMDWU.js +0 -674
  909. package/dist/config-P3ZQVF63.js +0 -275
  910. package/dist/config-graph-GKAOBAS5.js +0 -160
  911. package/dist/configure-25LRYZJG.js +0 -86
  912. package/dist/context-72VQV7JX.js +0 -73
  913. package/dist/context-COWRWXP3.js +0 -286
  914. package/dist/context-WB3D474G.js +0 -344
  915. package/dist/context-clear-Y4LYMWC6.js +0 -192
  916. package/dist/context-index-W6A4V7OC.js +0 -120
  917. package/dist/context-map-DKL3QT6D.js +0 -555
  918. package/dist/context-working-set-TMZYVC7A.js +0 -1560
  919. package/dist/data-tool-KMBWKKWR.js +0 -2987
  920. package/dist/detail-4GLROGY5.js +0 -123
  921. package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
  922. package/dist/docs-ZK777W2G.js +0 -101
  923. package/dist/doctor-WC4OV2OB.js +0 -814
  924. package/dist/eval-FUNWJNUJ.js +0 -5050
  925. package/dist/eval-inventory-CX24K2JT.js +0 -260
  926. package/dist/evals-L73EBHSU.js +0 -104
  927. package/dist/evidence-AVJ2RTHX.js +0 -392
  928. package/dist/evidence-P4NZOAK7.js +0 -233
  929. package/dist/evidence-Y55WKYHH.js +0 -246
  930. package/dist/evolve-MAWKRYWF.js +0 -617
  931. package/dist/extensions-PYQH3H47.js +0 -308
  932. package/dist/fleet-M4H2QBWT.js +0 -268
  933. package/dist/fleet-ULBXXRDR.js +0 -923
  934. package/dist/fleet-commands-7NNC4JZU.js +0 -76
  935. package/dist/fleet-decisions-EHEY7KPU.js +0 -52
  936. package/dist/fleet-graph-LQ2AHZT3.js +0 -136
  937. package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
  938. package/dist/fleet-new-RCKGSRDV.js +0 -48
  939. package/dist/fleet-preflight-UTTNOKMG.js +0 -27
  940. package/dist/fleet-validate-YGILJKA6.js +0 -91
  941. package/dist/fleet-verify-AUWTCDKR.js +0 -210
  942. package/dist/fleet-view-TGUFCY5A.js +0 -127
  943. package/dist/init-GFN2Z7NF.js +0 -333
  944. package/dist/install-3RZDDP23.js +0 -13
  945. package/dist/install-6PIF6F6W.js +0 -19
  946. package/dist/interop-EF5JUWWK.js +0 -246
  947. package/dist/inventory-I6VJDDYF.js +0 -127
  948. package/dist/library-3J5IO2OJ.js +0 -75
  949. package/dist/library-IJTOFTDS.js +0 -307
  950. package/dist/library-Z3KZSHPE.js +0 -492
  951. package/dist/library-import-IMKFLDHX.js +0 -183
  952. package/dist/library-inventory-CQP5D6GU.js +0 -56
  953. package/dist/library-validation-33UTX7AI.js +0 -42
  954. package/dist/mcp-5FWZKUS6.js +0 -26
  955. package/dist/memory-36CWN67Y.js +0 -520
  956. package/dist/models-KQ6PQJJQ.js +0 -302
  957. package/dist/monitor-XX6ZD6KC.js +0 -785
  958. package/dist/orchestrator-SK6HDAOP.js +0 -42067
  959. package/dist/panes-L27QRXUH.js +0 -74
  960. package/dist/panes-LXZIWNOZ.js +0 -103
  961. package/dist/paths-7DJDU4P4.js +0 -67
  962. package/dist/preload-K2TDYI4Y.js +0 -124
  963. package/dist/registry-DESGAXWK.js +0 -11
  964. package/dist/reset-73VU3XNT.js +0 -345
  965. package/dist/resources-3BYJYVYL.js +0 -181
  966. package/dist/run-AR7PY6GW.js +0 -896
  967. package/dist/run-script-H2KUDIII.js +0 -41
  968. package/dist/settings-3VMBMWID.js +0 -72
  969. package/dist/share-HVWH4FPF.js +0 -293
  970. package/dist/skills-5TYEY75Q.js +0 -100
  971. package/dist/skills-eval-CK3MD63Z.js +0 -1083
  972. package/dist/skills-inventory-KSFYG3I6.js +0 -138
  973. package/dist/slash-commands-DMVHML7P.js +0 -98
  974. package/dist/steer-XCD6V3EW.js +0 -77
  975. package/dist/support-JAZL6VBR.js +0 -38
  976. package/dist/system-3TDQRMZZ.js +0 -116
  977. package/dist/targets-EZKHAYRN.js +0 -1117
  978. package/dist/tasks-SNEFHWYW.js +0 -36
  979. package/dist/terminal-lease-BNLFA4OF.js +0 -419
  980. package/dist/tools-7IM6BDCE.js +0 -28
  981. package/dist/trace-C3MBGD4S.js +0 -524
  982. package/dist/tree-sitter-AQUUOSYM.js +0 -4673
  983. package/dist/tui-primitives-36BY2774.js +0 -18
  984. package/dist/uninstall-WWLOSZ42.js +0 -432
  985. package/dist/upgrade-ETK2JNSJ.js +0 -297
  986. package/dist/usage-S2HOB7BZ.js +0 -1065
  987. package/dist/verifiers-QDTEVH7R.js +0 -632
  988. package/dist/verify-SUKUK6XM.js +0 -31
  989. package/dist/version-RFPKO6T7.js +0 -21
  990. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
  991. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
  992. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
  993. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
  994. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
  995. package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
  996. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
  997. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
  998. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
  999. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
  1000. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
  1001. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
  1002. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
  1003. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
  1004. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
  1005. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
  1006. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
  1007. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
  1008. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
  1009. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
  1010. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
  1011. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
  1012. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
  1013. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
  1014. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
  1015. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
  1016. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
  1017. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
  1018. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
  1019. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
  1020. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
  1021. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
  1022. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
  1023. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
  1024. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
  1025. package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
  1026. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
  1027. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
  1028. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
  1029. package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
  1030. package/dist/web/client/assets/index-Dsi52apB.css +0 -1
  1031. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
  1032. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
  1033. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
  1034. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
  1035. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
  1036. package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
  1037. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
  1038. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
  1039. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
  1040. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
  1041. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
  1042. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
  1043. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
  1044. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
  1045. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
  1046. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
  1047. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
  1048. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
  1049. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
  1050. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
  1051. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
  1052. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
  1053. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
  1054. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
  1055. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
  1056. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
  1057. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
  1058. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
  1059. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
  1060. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
  1061. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
  1062. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
  1063. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
  1064. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
  1065. package/dist/web/client/index.html +0 -6
  1066. package/dist/web/ops-worker.js +0 -37
  1067. package/dist/web/reads-worker.js +0 -1726
  1068. package/dist/web/server.js +0 -8499
  1069. package/dist/web-EMGUGGEI.js +0 -13
  1070. package/dist/web-fetch-6BRRVQON.js +0 -805
  1071. package/dist/wiki-generate-XHSJTDOP.js +0 -627
  1072. package/dist/with-panes-Z6BTEHMZ.js +0 -628
  1073. package/evals/README.md +0 -9
  1074. package/evals/behavioral-corpus-grader.mjs +0 -236
  1075. package/evals/behavioral-machinery-baseline.json +0 -2276
  1076. package/evals/behavioral-machinery-driver.ts +0 -250
  1077. package/evals/behavioral-machinery-support.ts +0 -254
  1078. package/evals/behavioral-machinery.yaml +0 -614
  1079. package/evals/behavioral-model-negative-control.yaml +0 -69
  1080. package/evals/behavioral-model.yaml +0 -482
  1081. package/evals/fixtures/behavioral-facts.txt +0 -3
  1082. package/evals/fixtures/behavioral-main.ts +0 -7
  1083. package/evals/fixtures/decoy/note.txt +0 -2
  1084. package/evals/fixtures/docs-retrieval.json +0 -102
  1085. package/evals/fixtures/private/credentials.txt +0 -1
  1086. package/evals/fixtures/scalar-decision.json +0 -17
  1087. package/evals/fixtures/scout-citation-pipeline.json +0 -55
  1088. package/evals/fixtures/source-explanation.json +0 -74
  1089. package/evals/fixtures/tool-arguments.json +0 -18
  1090. package/evals/fixtures/tool-surface/read.txt +0 -4
  1091. package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
  1092. package/evals/no-edit-memory-grader.mjs +0 -149
  1093. package/evals/scalar-decision-grader.py +0 -41
  1094. package/evals/scalar-decision-machinery.ts +0 -145
  1095. package/evals/source-explanation-grader.mjs +0 -118
  1096. package/evals/tool-surface-grader.mjs +0 -53
  1097. package/evals/tool-surface-model.yaml +0 -274
  1098. package/evals/tracked-metrics-baseline.yaml +0 -229
  1099. package/evals/tracked-metrics-grader.mjs +0 -129
  1100. package/src/cli/web.ts +0 -79
  1101. package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
  1102. /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
  1103. /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
  1104. /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
  1105. /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
  1106. /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
  1107. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  1108. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  1109. /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
  1110. /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
  1111. /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
  1112. /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
  1113. /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
  1114. /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
  1115. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  1116. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  1117. /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
  1118. /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
  1119. /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
  1120. /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
  1121. /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
  1122. /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
  1123. /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
  1124. /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
  1125. /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
  1126. /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  1127. /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  1128. /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  1129. /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
  1130. /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
  1131. /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
  1132. /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
  1133. /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
  1134. /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
  1135. /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
  1136. /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
  1137. /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
  1138. /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
  1139. /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
  1140. /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
  1141. /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
  1142. /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
  1143. /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
  1144. /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
  1145. /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
  1146. /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
  1147. /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
  1148. /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
  1149. /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
  1150. /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
  1151. /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
  1152. /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
  1153. /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
  1154. /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
  1155. /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
  1156. /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
  1157. /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
  1158. /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
  1159. /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
  1160. /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
  1161. /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
  1162. /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
  1163. /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
  1164. /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
  1165. /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
  1166. /package/dist/{web → gui}/client/icon-192.png +0 -0
  1167. /package/dist/{web → gui}/client/icon-512.png +0 -0
  1168. /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
  1169. /package/dist/{web → gui}/client/offline.css +0 -0
  1170. /package/dist/{web → gui}/client/offline.html +0 -0
  1171. /package/dist/{web → gui}/client/offline.js +0 -0
  1172. /package/dist/{web → gui}/client/sw.js +0 -0
@@ -0,0 +1,1347 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ require_dist
4
+ } from "./chunk-B5GGDIHT.js";
5
+ import {
6
+ buildSafeToolEnv,
7
+ resolveSafeCwd
8
+ } from "./chunk-M2IPMWCN.js";
9
+ import {
10
+ clampTimerDelayMs,
11
+ sleep
12
+ } from "./chunk-6EXUUOSN.js";
13
+ import {
14
+ clioConfigDir
15
+ } from "./chunk-CTTI7G3T.js";
16
+ import {
17
+ safeResourceWrite
18
+ } from "./chunk-ZZFWWYLX.js";
19
+ import {
20
+ __toESM,
21
+ init_esm_shims
22
+ } from "./chunk-ECBHH7LU.js";
23
+
24
+ // src/domains/gateway/mcp/trust.ts
25
+ init_esm_shims();
26
+ import { realpathSync as realpathSync2 } from "node:fs";
27
+ import path2 from "node:path";
28
+
29
+ // src/domains/gateway/mcp/config.ts
30
+ init_esm_shims();
31
+ var import_yaml = __toESM(require_dist(), 1);
32
+ import { createHash } from "node:crypto";
33
+ import { closeSync, constants as fsConstants, fstatSync, openSync, readSync, realpathSync, statSync } from "node:fs";
34
+ import path from "node:path";
35
+ var MCP_CONFIG_VERSION = 1;
36
+ var MCP_USER_CONFIG_FILENAME = "mcp.yaml";
37
+ var MCP_PROJECT_CONFIG_RELATIVE_PATH = ".clio-coder/mcp.yaml";
38
+ var MCP_CONFIG_CAPS = Object.freeze({
39
+ fileBytes: 256 * 1024,
40
+ servers: 32,
41
+ idChars: 32,
42
+ commandBytes: 512,
43
+ args: 64,
44
+ argBytes: 4096,
45
+ envEntries: 64,
46
+ envValueBytes: 4096,
47
+ cwdBytes: 512,
48
+ timeoutMs: 9e5
49
+ });
50
+ var ID_PATTERN = /^[a-z0-9][a-z0-9_-]*$/;
51
+ var ENV_KEY_PATTERN = /^[A-Z_][A-Z0-9_]*$/;
52
+ var ROOT_FIELDS = /* @__PURE__ */ new Set(["version", "servers"]);
53
+ var SERVER_FIELDS = /* @__PURE__ */ new Set(["id", "command", "args", "cwd", "env", "timeoutMs"]);
54
+ var SHELL_EXECUTABLES = /* @__PURE__ */ new Set([
55
+ "bash",
56
+ "cmd",
57
+ "command.com",
58
+ "dash",
59
+ "fish",
60
+ "ksh",
61
+ "powershell",
62
+ "pwsh",
63
+ "sh",
64
+ "tcsh",
65
+ "zsh"
66
+ ]);
67
+ function isRecord(value) {
68
+ return value !== null && typeof value === "object" && !Array.isArray(value);
69
+ }
70
+ function utf8Bytes(value) {
71
+ return Buffer.byteLength(value, "utf8");
72
+ }
73
+ function unknownFields(record, allowed) {
74
+ return Object.keys(record).filter((key) => !allowed.has(key)).sort();
75
+ }
76
+ function mcpServerDigest(fields) {
77
+ const canonical = JSON.stringify({
78
+ id: fields.id,
79
+ command: fields.command,
80
+ args: [...fields.args],
81
+ cwd: fields.cwd,
82
+ env: Object.fromEntries(
83
+ Object.keys(fields.env).sort().map((key) => [key, fields.env[key]])
84
+ ),
85
+ timeoutMs: fields.timeoutMs
86
+ });
87
+ return createHash("sha256").update(canonical).digest("hex");
88
+ }
89
+ function mcpConfigPaths(options) {
90
+ return {
91
+ user: path.join(options.configDir ?? clioConfigDir(), MCP_USER_CONFIG_FILENAME),
92
+ project: path.join(path.resolve(options.cwd), MCP_PROJECT_CONFIG_RELATIVE_PATH)
93
+ };
94
+ }
95
+ function validateId(value, location) {
96
+ if (typeof value !== "string" || value.length === 0) return new Error(`${location} must be a non-empty string`);
97
+ if (value.length > MCP_CONFIG_CAPS.idChars) {
98
+ return new Error(`${location} exceeds the ${MCP_CONFIG_CAPS.idChars}-character cap`);
99
+ }
100
+ if (!ID_PATTERN.test(value)) return new Error(`${location} must match /^[a-z0-9][a-z0-9_-]*$/`);
101
+ return value;
102
+ }
103
+ function validateCommand(value, location) {
104
+ if (typeof value !== "string" || value.length === 0) return new Error(`${location} must be a non-empty string`);
105
+ if (value.includes("\0")) return new Error(`${location} must not contain a NUL byte`);
106
+ if (/\s/u.test(value)) return new Error(`${location} must be one executable token, not a shell command string`);
107
+ if (utf8Bytes(value) > MCP_CONFIG_CAPS.commandBytes) {
108
+ return new Error(`${location} exceeds the ${MCP_CONFIG_CAPS.commandBytes}-byte cap`);
109
+ }
110
+ const hasSeparator = value.includes("/") || value.includes("\\");
111
+ if (hasSeparator && !(path.isAbsolute(value) || path.win32.isAbsolute(value))) {
112
+ return new Error(
113
+ `${location} must be an executable name resolved on PATH or an absolute path; relative path '${value}' is not allowed`
114
+ );
115
+ }
116
+ const executable = path.basename(value).toLowerCase().replace(/\.exe$/u, "");
117
+ if (SHELL_EXECUTABLES.has(executable)) {
118
+ return new Error(`${location} may not invoke shell executable '${value}'`);
119
+ }
120
+ return value;
121
+ }
122
+ function validateArgs(value, location) {
123
+ if (value === void 0) return [];
124
+ if (!Array.isArray(value)) return new Error(`${location} must be an array of strings`);
125
+ if (value.length > MCP_CONFIG_CAPS.args) return new Error(`${location} exceeds the ${MCP_CONFIG_CAPS.args}-entry cap`);
126
+ const args = [];
127
+ for (const [index, entry] of value.entries()) {
128
+ const entryLocation = `${location}[${index}]`;
129
+ if (typeof entry !== "string") return new Error(`${entryLocation} must be a string`);
130
+ if (entry.includes("\0")) return new Error(`${entryLocation} must not contain a NUL byte`);
131
+ if (utf8Bytes(entry) > MCP_CONFIG_CAPS.argBytes) {
132
+ return new Error(`${entryLocation} exceeds the ${MCP_CONFIG_CAPS.argBytes}-byte cap`);
133
+ }
134
+ args.push(entry);
135
+ }
136
+ return args;
137
+ }
138
+ function validateEnv(value, location) {
139
+ if (value === void 0) return {};
140
+ if (!isRecord(value)) return new Error(`${location} must be an object of string values`);
141
+ const keys = Object.keys(value);
142
+ if (keys.length > MCP_CONFIG_CAPS.envEntries) {
143
+ return new Error(`${location} exceeds the ${MCP_CONFIG_CAPS.envEntries}-entry cap`);
144
+ }
145
+ const env = {};
146
+ for (const key of keys.sort()) {
147
+ if (!ENV_KEY_PATTERN.test(key)) return new Error(`${location}.${key} is not a valid environment variable name`);
148
+ const entry = value[key];
149
+ if (typeof entry !== "string") return new Error(`${location}.${key} must be a string`);
150
+ if (entry.includes("\0")) return new Error(`${location}.${key} must not contain a NUL byte`);
151
+ if (utf8Bytes(entry) > MCP_CONFIG_CAPS.envValueBytes) {
152
+ return new Error(`${location}.${key} exceeds the ${MCP_CONFIG_CAPS.envValueBytes}-byte cap`);
153
+ }
154
+ env[key] = entry;
155
+ }
156
+ return env;
157
+ }
158
+ function validateTimeout(value, location) {
159
+ if (value === void 0) return null;
160
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
161
+ return new Error(`${location} must be a positive integer number of milliseconds`);
162
+ }
163
+ if (value > MCP_CONFIG_CAPS.timeoutMs) return new Error(`${location} exceeds the ${MCP_CONFIG_CAPS.timeoutMs}ms cap`);
164
+ return value;
165
+ }
166
+ function realDirectory(candidate, location) {
167
+ try {
168
+ if (!statSync(candidate).isDirectory()) return new Error(`${location} is not a directory: '${candidate}'`);
169
+ return realpathSync(candidate);
170
+ } catch (error) {
171
+ return new Error(
172
+ `${location} cannot be resolved as a directory: '${candidate}' (${error instanceof Error ? error.message : String(error)})`
173
+ );
174
+ }
175
+ }
176
+ function resolveCwd(raw, scope, root, location) {
177
+ if (raw !== null) {
178
+ if (raw.length === 0) return new Error(`${location} must be a non-empty path when given`);
179
+ if (raw.includes("\0")) return new Error(`${location} must not contain a NUL byte`);
180
+ if (utf8Bytes(raw) > MCP_CONFIG_CAPS.cwdBytes) {
181
+ return new Error(`${location} exceeds the ${MCP_CONFIG_CAPS.cwdBytes}-byte cap`);
182
+ }
183
+ }
184
+ const absolute = raw !== null && (path.isAbsolute(raw) || path.win32.isAbsolute(raw));
185
+ if (scope === "project" && absolute) {
186
+ return new Error(`${location} must be repository-relative; absolute cwd '${raw}' is not allowed`);
187
+ }
188
+ const realRoot = realDirectory(root, `${location} root`);
189
+ if (realRoot instanceof Error) return realRoot;
190
+ if (scope === "user" && absolute && raw !== null) {
191
+ const real2 = realDirectory(raw, location);
192
+ if (real2 instanceof Error) return real2;
193
+ return { cwd: real2, cwdRoot: real2 };
194
+ }
195
+ let resolved;
196
+ try {
197
+ resolved = resolveSafeCwd(raw ?? void 0, realRoot);
198
+ } catch {
199
+ return new Error(`${location} escapes its root: '${raw}'`);
200
+ }
201
+ const real = realDirectory(resolved, location);
202
+ if (real instanceof Error) return real;
203
+ try {
204
+ resolveSafeCwd(real, realRoot);
205
+ } catch {
206
+ return new Error(`${location} escapes its root through a symbolic link: '${raw}'`);
207
+ }
208
+ return { cwd: real, cwdRoot: realRoot };
209
+ }
210
+ function validateServer(value, location) {
211
+ if (!isRecord(value)) return new Error(`${location} must be an object`);
212
+ const unknown = unknownFields(value, SERVER_FIELDS);
213
+ if (unknown.length > 0) return new Error(`${location} has unknown field(s): ${unknown.join(", ")}`);
214
+ for (const field of ["id", "command"]) {
215
+ if (!Object.hasOwn(value, field)) return new Error(`${location}.${field} is required`);
216
+ }
217
+ const id = validateId(value.id, `${location}.id`);
218
+ if (id instanceof Error) return id;
219
+ const command = validateCommand(value.command, `${location}.command`);
220
+ if (command instanceof Error) return command;
221
+ const args = validateArgs(value.args, `${location}.args`);
222
+ if (args instanceof Error) return args;
223
+ const env = validateEnv(value.env, `${location}.env`);
224
+ if (env instanceof Error) return env;
225
+ const timeoutMs = validateTimeout(value.timeoutMs, `${location}.timeoutMs`);
226
+ if (timeoutMs instanceof Error) return timeoutMs;
227
+ let declaredCwd = null;
228
+ if (value.cwd !== void 0) {
229
+ if (typeof value.cwd !== "string") return new Error(`${location}.cwd must be a string`);
230
+ declaredCwd = value.cwd;
231
+ }
232
+ return { fields: { id, command, args, cwd: declaredCwd, env, timeoutMs }, declaredCwd };
233
+ }
234
+ function parseMcpConfigText(text, input) {
235
+ const diagnostic = (message) => ({
236
+ servers: [],
237
+ diagnostics: [{ scope: input.scope, path: input.path, message }]
238
+ });
239
+ if (utf8Bytes(text) > MCP_CONFIG_CAPS.fileBytes) {
240
+ return diagnostic(`file exceeds the ${MCP_CONFIG_CAPS.fileBytes}-byte cap`);
241
+ }
242
+ const document = (0, import_yaml.parseDocument)(text, { prettyErrors: false, strict: true, uniqueKeys: true });
243
+ if (document.errors.length > 0) {
244
+ return diagnostic(`invalid YAML: ${document.errors.map((error) => error.message).join("; ")}`);
245
+ }
246
+ let parsed;
247
+ try {
248
+ parsed = document.toJS({ maxAliasCount: 0 });
249
+ } catch (error) {
250
+ return diagnostic(`invalid YAML: ${error instanceof Error ? error.message : String(error)}`);
251
+ }
252
+ if (!isRecord(parsed)) return diagnostic("root must be an object with version and servers fields");
253
+ const rootUnknown = unknownFields(parsed, ROOT_FIELDS);
254
+ if (rootUnknown.length > 0) return diagnostic(`root has unknown field(s): ${rootUnknown.join(", ")}`);
255
+ if (!Object.hasOwn(parsed, "version")) return diagnostic("root.version is required");
256
+ if (parsed.version !== MCP_CONFIG_VERSION) {
257
+ return diagnostic(
258
+ `unsupported version ${JSON.stringify(parsed.version)}; supported version is ${MCP_CONFIG_VERSION}`
259
+ );
260
+ }
261
+ if (!Object.hasOwn(parsed, "servers")) return diagnostic("root.servers is required");
262
+ if (!Array.isArray(parsed.servers)) return diagnostic("root.servers must be an array");
263
+ if (parsed.servers.length > MCP_CONFIG_CAPS.servers) {
264
+ return diagnostic(`root.servers exceeds the ${MCP_CONFIG_CAPS.servers}-server cap`);
265
+ }
266
+ const servers = [];
267
+ const ids = /* @__PURE__ */ new Map();
268
+ for (const [index, value] of parsed.servers.entries()) {
269
+ const location = `servers[${index}]`;
270
+ const validated = validateServer(value, location);
271
+ if (validated instanceof Error) return diagnostic(validated.message);
272
+ const { fields, declaredCwd } = validated;
273
+ const duplicateIndex = ids.get(fields.id);
274
+ if (duplicateIndex !== void 0) {
275
+ return diagnostic(`${location}.id duplicates '${fields.id}' from servers[${duplicateIndex}].id`);
276
+ }
277
+ const resolved = resolveCwd(declaredCwd, input.scope, input.root, `${location}.cwd`);
278
+ if (resolved instanceof Error) return diagnostic(resolved.message);
279
+ ids.set(fields.id, index);
280
+ servers.push({
281
+ id: fields.id,
282
+ scope: input.scope,
283
+ path: input.path,
284
+ command: fields.command,
285
+ args: fields.args,
286
+ cwd: resolved.cwd,
287
+ cwdRoot: resolved.cwdRoot,
288
+ env: fields.env,
289
+ timeoutMs: fields.timeoutMs,
290
+ digest: mcpServerDigest(fields)
291
+ });
292
+ }
293
+ return { servers, diagnostics: [] };
294
+ }
295
+ function readBoundedFileText(filePath, maxBytes) {
296
+ const describe = (error) => error instanceof Error ? error.message : String(error);
297
+ let fd;
298
+ try {
299
+ fd = openSync(filePath, fsConstants.O_RDONLY | (fsConstants.O_NONBLOCK ?? 0));
300
+ } catch (error) {
301
+ if (error.code === "ENOENT") {
302
+ return { ok: false, reason: "missing", message: "file does not exist" };
303
+ }
304
+ return { ok: false, reason: "unreadable", message: `cannot read (${describe(error)})` };
305
+ }
306
+ try {
307
+ const stats = fstatSync(fd);
308
+ if (!stats.isFile()) return { ok: false, reason: "unreadable", message: "path must be a regular file" };
309
+ let buffer = Buffer.allocUnsafe(Math.min(Math.max(stats.size, 0), maxBytes) + 1);
310
+ let total = 0;
311
+ for (; ; ) {
312
+ if (total === buffer.length) {
313
+ if (total > maxBytes) break;
314
+ buffer = Buffer.concat([buffer], maxBytes + 1);
315
+ }
316
+ const read = readSync(fd, buffer, total, buffer.length - total, null);
317
+ if (read === 0) break;
318
+ total += read;
319
+ }
320
+ if (total > maxBytes) return { ok: false, reason: "oversized", message: `file exceeds the ${maxBytes}-byte cap` };
321
+ return { ok: true, text: buffer.toString("utf8", 0, total) };
322
+ } catch (error) {
323
+ return { ok: false, reason: "unreadable", message: `cannot read (${describe(error)})` };
324
+ } finally {
325
+ closeSync(fd);
326
+ }
327
+ }
328
+ function loadFile(filePath, scope, root) {
329
+ const read = readBoundedFileText(filePath, MCP_CONFIG_CAPS.fileBytes);
330
+ if (!read.ok) {
331
+ if (read.reason === "missing") return { servers: [], diagnostics: [] };
332
+ return { servers: [], diagnostics: [{ scope, path: filePath, message: read.message }] };
333
+ }
334
+ return parseMcpConfigText(read.text, { scope, path: filePath, root });
335
+ }
336
+ function loadMcpServerConfig(options) {
337
+ const paths = mcpConfigPaths(options);
338
+ const configDir = options.configDir ?? clioConfigDir();
339
+ const user = loadFile(paths.user, "user", configDir);
340
+ const project = loadFile(paths.project, "project", path.resolve(options.cwd));
341
+ const servers = [...user.servers];
342
+ const diagnostics = [...user.diagnostics, ...project.diagnostics];
343
+ const userIds = new Set(user.servers.map((server) => server.id));
344
+ for (const server of project.servers) {
345
+ if (userIds.has(server.id)) {
346
+ diagnostics.push({
347
+ scope: "project",
348
+ path: server.path,
349
+ message: `server '${server.id}' is shadowed by the user declaration in ${paths.user}`
350
+ });
351
+ continue;
352
+ }
353
+ servers.push(server);
354
+ }
355
+ return { servers, diagnostics };
356
+ }
357
+
358
+ // src/domains/gateway/mcp/trust.ts
359
+ var MCP_TRUST_FILENAME = "mcp-trust.json";
360
+ var MCP_TRUST_VERSION = 1;
361
+ var MCP_TRUST_CAPS = Object.freeze({
362
+ fileBytes: 1024 * 1024,
363
+ records: 256
364
+ });
365
+ var MCP_TRUST_ACTION_CLASSES = ["read", "execute", "unknown"];
366
+ function isRecord2(value) {
367
+ return value !== null && typeof value === "object" && !Array.isArray(value);
368
+ }
369
+ function isActionClass(value) {
370
+ return typeof value === "string" && MCP_TRUST_ACTION_CLASSES.includes(value);
371
+ }
372
+ function mcpTrustPath(configDir) {
373
+ return path2.join(configDir ?? clioConfigDir(), MCP_TRUST_FILENAME);
374
+ }
375
+ function canonicalProjectRoot(cwd) {
376
+ const resolved = path2.resolve(cwd);
377
+ try {
378
+ return realpathSync2(resolved);
379
+ } catch {
380
+ return resolved;
381
+ }
382
+ }
383
+ function parseTrustState(text) {
384
+ let parsed;
385
+ try {
386
+ parsed = JSON.parse(text);
387
+ } catch (error) {
388
+ return new Error(`invalid JSON: ${error instanceof Error ? error.message : String(error)}`);
389
+ }
390
+ if (!isRecord2(parsed) || parsed.version !== MCP_TRUST_VERSION) {
391
+ return new Error(`trust state must be a version ${MCP_TRUST_VERSION} object`);
392
+ }
393
+ if (!Array.isArray(parsed.records)) return new Error("trust state records must be an array");
394
+ if (parsed.records.length > MCP_TRUST_CAPS.records) {
395
+ return new Error(`trust state exceeds the ${MCP_TRUST_CAPS.records}-record cap`);
396
+ }
397
+ const records = [];
398
+ for (const [index, raw] of parsed.records.entries()) {
399
+ if (!isRecord2(raw)) return new Error(`records[${index}] must be an object`);
400
+ for (const field of ["projectRoot", "id", "digest", "trustedAt"]) {
401
+ if (typeof raw[field] !== "string" || raw[field].length === 0) {
402
+ return new Error(`records[${index}].${field} must be a non-empty string`);
403
+ }
404
+ }
405
+ if (!isActionClass(raw.actionClass)) {
406
+ return new Error(`records[${index}].actionClass must be one of ${MCP_TRUST_ACTION_CLASSES.join(", ")}`);
407
+ }
408
+ records.push({
409
+ projectRoot: raw.projectRoot,
410
+ id: raw.id,
411
+ digest: raw.digest,
412
+ actionClass: raw.actionClass,
413
+ trustedAt: raw.trustedAt
414
+ });
415
+ }
416
+ return { version: MCP_TRUST_VERSION, records };
417
+ }
418
+ function readMcpTrustState(configDir) {
419
+ const filePath = mcpTrustPath(configDir);
420
+ const empty = { version: MCP_TRUST_VERSION, records: [] };
421
+ const read = readBoundedFileText(filePath, MCP_TRUST_CAPS.fileBytes);
422
+ if (!read.ok) {
423
+ if (read.reason === "missing") return { state: empty, diagnostics: [] };
424
+ return { state: empty, diagnostics: [`${filePath}: ${read.message}`] };
425
+ }
426
+ const parsed = parseTrustState(read.text);
427
+ if (parsed instanceof Error) return { state: empty, diagnostics: [`${filePath}: ${parsed.message}`] };
428
+ return { state: parsed, diagnostics: [] };
429
+ }
430
+ function writeTrustState(records, configDir) {
431
+ if (records.length > MCP_TRUST_CAPS.records) {
432
+ return `trust state would exceed the ${MCP_TRUST_CAPS.records}-record cap; untrust servers you no longer use first`;
433
+ }
434
+ const sorted = [...records].sort(
435
+ (left, right) => left.projectRoot.localeCompare(right.projectRoot) || left.id.localeCompare(right.id)
436
+ );
437
+ const text = `${JSON.stringify({ version: MCP_TRUST_VERSION, records: sorted }, null, 2)}
438
+ `;
439
+ if (Buffer.byteLength(text, "utf8") > MCP_TRUST_CAPS.fileBytes) {
440
+ return `trust state would exceed the ${MCP_TRUST_CAPS.fileBytes}-byte cap; untrust servers you no longer use first`;
441
+ }
442
+ safeResourceWrite(mcpTrustPath(configDir), text, { mode: 384 });
443
+ return null;
444
+ }
445
+ function trustStatusFor(server, projectRoot, state) {
446
+ if (server.scope === "user") return { status: "trusted", actionClass: "unknown" };
447
+ const record = state.records.find((entry) => entry.projectRoot === projectRoot && entry.id === server.id);
448
+ if (record === void 0) {
449
+ return {
450
+ status: "untrusted",
451
+ actionClass: "unknown",
452
+ reason: `project-scope server '${server.id}' requires explicit trust: clio-coder mcp trust ${server.id}`
453
+ };
454
+ }
455
+ if (record.digest !== server.digest) {
456
+ return {
457
+ status: "stale",
458
+ actionClass: "unknown",
459
+ reason: `declaration of '${server.id}' changed (command, args, env, cwd, or timeout) since it was trusted; review it and run clio-coder mcp trust ${server.id} again`
460
+ };
461
+ }
462
+ return { status: "trusted", actionClass: record.actionClass };
463
+ }
464
+ function resolveMcpServers(options) {
465
+ const loaded = loadMcpServerConfig(options);
466
+ const trust = readMcpTrustState(options.configDir);
467
+ const projectRoot = canonicalProjectRoot(options.cwd);
468
+ return {
469
+ servers: loaded.servers.map((server) => ({ ...server, trust: trustStatusFor(server, projectRoot, trust.state) })),
470
+ diagnostics: loaded.diagnostics,
471
+ trustDiagnostics: trust.diagnostics
472
+ };
473
+ }
474
+ function trustMcpServer(options) {
475
+ const actionClass = options.actionClass ?? "unknown";
476
+ if (!isActionClass(actionClass)) {
477
+ return { ok: false, message: `actionClass must be one of ${MCP_TRUST_ACTION_CLASSES.join(", ")}` };
478
+ }
479
+ const loaded = loadMcpServerConfig(options);
480
+ const server = loaded.servers.find((entry) => entry.id === options.id);
481
+ if (server === void 0) {
482
+ const problems = loaded.diagnostics.map((entry) => `${entry.path}: ${entry.message}`);
483
+ return {
484
+ ok: false,
485
+ message: `no declared MCP server with id '${options.id}'` + (problems.length > 0 ? `; config diagnostics: ${problems.join("; ")}` : "")
486
+ };
487
+ }
488
+ if (server.scope !== "project") {
489
+ return { ok: false, message: `server '${options.id}' is a user-scope declaration; it is trusted by authorship` };
490
+ }
491
+ const trust = readMcpTrustState(options.configDir);
492
+ if (trust.diagnostics.length > 0) {
493
+ return { ok: false, message: `trust state is unusable; repair or remove it first: ${trust.diagnostics.join("; ")}` };
494
+ }
495
+ const projectRoot = canonicalProjectRoot(options.cwd);
496
+ const record = {
497
+ projectRoot,
498
+ id: server.id,
499
+ digest: server.digest,
500
+ actionClass,
501
+ trustedAt: (options.now?.() ?? /* @__PURE__ */ new Date()).toISOString()
502
+ };
503
+ const records = trust.state.records.filter((entry) => !(entry.projectRoot === projectRoot && entry.id === server.id));
504
+ records.push(record);
505
+ const refused = writeTrustState(records, options.configDir);
506
+ if (refused !== null) return { ok: false, message: refused };
507
+ return { ok: true, record };
508
+ }
509
+ function untrustMcpServer(options) {
510
+ const trust = readMcpTrustState(options.configDir);
511
+ if (trust.diagnostics.length > 0) {
512
+ return { ok: false, message: `trust state is unusable; repair or remove it first: ${trust.diagnostics.join("; ")}` };
513
+ }
514
+ const projectRoot = canonicalProjectRoot(options.cwd);
515
+ const records = trust.state.records.filter((entry) => !(entry.projectRoot === projectRoot && entry.id === options.id));
516
+ const removed = records.length !== trust.state.records.length;
517
+ if (removed) {
518
+ const refused = writeTrustState(records, options.configDir);
519
+ if (refused !== null) return { ok: false, message: refused };
520
+ }
521
+ return { ok: true, removed };
522
+ }
523
+
524
+ // src/domains/gateway/mcp/index.ts
525
+ init_esm_shims();
526
+
527
+ // src/domains/gateway/mcp/client.ts
528
+ init_esm_shims();
529
+ import { spawn } from "node:child_process";
530
+ import { realpathSync as realpathSync3, statSync as statSync2 } from "node:fs";
531
+ import path3 from "node:path";
532
+ import { performance } from "node:perf_hooks";
533
+
534
+ // src/domains/gateway/mcp/protocol.ts
535
+ init_esm_shims();
536
+ var MCP_PROTOCOL_VERSION = "2025-06-18";
537
+ var DEFAULT_MAX_LINE_BYTES = 4 * 1024 * 1024;
538
+ var JSON_RPC_METHOD_NOT_FOUND = -32601;
539
+ var McpError = class extends Error {
540
+ name = "McpError";
541
+ code;
542
+ data;
543
+ constructor(code, message, data) {
544
+ super(message);
545
+ this.code = code;
546
+ this.data = data;
547
+ }
548
+ };
549
+ function isRecord3(value) {
550
+ return value !== null && typeof value === "object" && !Array.isArray(value);
551
+ }
552
+ function isJsonRpcId(value) {
553
+ return typeof value === "string" || typeof value === "number" && Number.isFinite(value);
554
+ }
555
+ var structuredJson = /* @__PURE__ */ new WeakMap();
556
+ function structuredContentJson(result) {
557
+ return structuredJson.get(result);
558
+ }
559
+ function classifyJsonRpcMessage(value) {
560
+ if (!isRecord3(value)) return new McpError("protocol", "message is not a JSON object");
561
+ if (value.jsonrpc !== "2.0") return new McpError("protocol", 'message lacks jsonrpc: "2.0"');
562
+ if (typeof value.method === "string") {
563
+ if (value.id === void 0 || value.id === null) {
564
+ const notification = { jsonrpc: "2.0", method: value.method };
565
+ if (value.params !== void 0) notification.params = value.params;
566
+ return { kind: "notification", message: notification };
567
+ }
568
+ if (!isJsonRpcId(value.id)) return new McpError("protocol", "request id must be a string or a finite number");
569
+ const request = { jsonrpc: "2.0", id: value.id, method: value.method };
570
+ if (value.params !== void 0) request.params = value.params;
571
+ return { kind: "request", message: request };
572
+ }
573
+ const hasResult = Object.hasOwn(value, "result");
574
+ const hasError = Object.hasOwn(value, "error");
575
+ if (!hasResult && !hasError) return new McpError("protocol", "message has neither method, result, nor error");
576
+ if (hasResult && hasError) return new McpError("protocol", "response carries both result and error");
577
+ if (value.id !== null && !isJsonRpcId(value.id)) {
578
+ return new McpError("protocol", "response id must be a string, a finite number, or null");
579
+ }
580
+ const response = {
581
+ jsonrpc: "2.0",
582
+ id: value.id === void 0 ? null : value.id
583
+ };
584
+ if (hasResult) response.result = value.result;
585
+ if (hasError) {
586
+ const error = value.error;
587
+ if (!isRecord3(error) || typeof error.code !== "number" || typeof error.message !== "string") {
588
+ return new McpError("protocol", "response error must carry a numeric code and a message");
589
+ }
590
+ const errorObject = { code: error.code, message: error.message };
591
+ if (error.data !== void 0) errorObject.data = error.data;
592
+ response.error = errorObject;
593
+ }
594
+ return { kind: "response", message: response };
595
+ }
596
+ function parseJsonRpcLine(line) {
597
+ let text;
598
+ try {
599
+ text = new TextDecoder("utf-8", { fatal: true }).decode(line);
600
+ } catch {
601
+ return new McpError("protocol", "message line is not valid UTF-8");
602
+ }
603
+ let parsed;
604
+ try {
605
+ const sources = /* @__PURE__ */ new WeakMap();
606
+ parsed = JSON.parse(text, function(key, value, context) {
607
+ if (typeof value === "number") {
608
+ if (context?.source === void 0) throw new Error("JSON numeric source tokens are unavailable");
609
+ let entries = sources.get(this);
610
+ if (entries === void 0) {
611
+ entries = /* @__PURE__ */ new Map();
612
+ sources.set(this, entries);
613
+ }
614
+ entries.set(key, context.source);
615
+ }
616
+ return value;
617
+ });
618
+ if (isRecord3(parsed) && isRecord3(parsed.result) && isRecord3(parsed.result.structuredContent)) {
619
+ const content = parsed.result.structuredContent;
620
+ const rawJSON = JSON.rawJSON;
621
+ const exact = JSON.stringify(content, function(key, value) {
622
+ const source = sources.get(this)?.get(key);
623
+ return source === void 0 ? value : rawJSON(source);
624
+ });
625
+ parsed.result.structuredContent = JSON.parse(
626
+ JSON.stringify(content, function(key, value) {
627
+ const source = sources.get(this)?.get(key);
628
+ return source !== void 0 && JSON.stringify(value) !== source ? { $literal: source } : value;
629
+ })
630
+ );
631
+ structuredJson.set(parsed.result, exact);
632
+ }
633
+ } catch (error) {
634
+ return new McpError(
635
+ "protocol",
636
+ `message line is not valid JSON: ${error instanceof Error ? error.message : String(error)}`
637
+ );
638
+ }
639
+ return classifyJsonRpcMessage(parsed);
640
+ }
641
+ function encodeJsonRpcMessage(message) {
642
+ return Buffer.from(`${JSON.stringify(message)}
643
+ `, "utf8");
644
+ }
645
+ function createLineFramer(maxLineBytes = DEFAULT_MAX_LINE_BYTES) {
646
+ const pending = [];
647
+ let pendingBytes = 0;
648
+ let failed = false;
649
+ const fail = (message) => {
650
+ failed = true;
651
+ pending.length = 0;
652
+ pendingBytes = 0;
653
+ return [{ kind: "error", error: new McpError("protocol", message) }];
654
+ };
655
+ const frameLine = (line) => {
656
+ const trimmed = line.length > 0 && line[line.length - 1] === 13 ? line.subarray(0, line.length - 1) : line;
657
+ if (trimmed.length === 0) return null;
658
+ const decoded = parseJsonRpcLine(trimmed);
659
+ if (decoded instanceof McpError) return { kind: "error", error: decoded };
660
+ return { kind: "message", message: decoded };
661
+ };
662
+ return {
663
+ get pendingBytes() {
664
+ return pendingBytes;
665
+ },
666
+ get failed() {
667
+ return failed;
668
+ },
669
+ push(chunk) {
670
+ if (failed) return [];
671
+ const frames = [];
672
+ let start = 0;
673
+ for (; ; ) {
674
+ const newline = chunk.indexOf(10, start);
675
+ if (newline === -1) break;
676
+ const tail = chunk.subarray(start, newline);
677
+ const lineBytes = pendingBytes + tail.length;
678
+ if (lineBytes > maxLineBytes) return fail(`message line exceeds ${maxLineBytes} bytes`);
679
+ const line = pending.length === 0 ? tail : Buffer.concat([...pending, tail], lineBytes);
680
+ pending.length = 0;
681
+ pendingBytes = 0;
682
+ const frame = frameLine(line);
683
+ if (frame !== null) {
684
+ frames.push(frame);
685
+ if (frame.kind === "error") {
686
+ failed = true;
687
+ return frames;
688
+ }
689
+ }
690
+ start = newline + 1;
691
+ }
692
+ if (start < chunk.length) {
693
+ const rest = chunk.subarray(start);
694
+ if (pendingBytes + rest.length > maxLineBytes) {
695
+ frames.push(...fail(`message line exceeds ${maxLineBytes} bytes`));
696
+ return frames;
697
+ }
698
+ pending.push(Buffer.from(rest));
699
+ pendingBytes += rest.length;
700
+ }
701
+ return frames;
702
+ },
703
+ flush() {
704
+ if (failed || pendingBytes === 0) return [];
705
+ const line = Buffer.concat(pending, pendingBytes);
706
+ pending.length = 0;
707
+ pendingBytes = 0;
708
+ const frame = frameLine(line);
709
+ if (frame === null) return [];
710
+ if (frame.kind === "error") failed = true;
711
+ return [frame];
712
+ }
713
+ };
714
+ }
715
+
716
+ // src/domains/gateway/mcp/client.ts
717
+ var MCP_CLIENT_NAME = "clio-coder";
718
+ var DEFAULT_MCP_CLIENT_VERSION = "0.5.0";
719
+ var DEFAULT_INITIALIZE_TIMEOUT_MS = 15e3;
720
+ var DEFAULT_REQUEST_TIMEOUT_MS = 6e4;
721
+ var DEFAULT_STDERR_TAIL_BYTES = 16 * 1024;
722
+ var DEFAULT_RESULT_TEXT_BYTES = 1024 * 1024;
723
+ var DEFAULT_KILL_GRACE_MS = 3e3;
724
+ var DEFAULT_MAX_OUTBOUND_BYTES = 4 * 1024 * 1024;
725
+ var MCP_TOOL_LIST_CAP = 500;
726
+ var MCP_TOOL_LIST_PAGE_CAP = 100;
727
+ var MIN_OUTBOUND_BYTES = 4096;
728
+ var DEFAULT_TEARDOWN_BOUND_MS = 2e3;
729
+ function isRecord4(value) {
730
+ return value !== null && typeof value === "object" && !Array.isArray(value);
731
+ }
732
+ function errorMessage(error) {
733
+ return error instanceof Error ? error.message : String(error);
734
+ }
735
+ function cutUtf8(text, maxBytes) {
736
+ if (Buffer.byteLength(text, "utf8") <= maxBytes) return text;
737
+ const bytes = Buffer.from(text, "utf8");
738
+ let cut = Math.max(0, maxBytes);
739
+ while (cut > 0) {
740
+ const byte = bytes[cut];
741
+ if (byte === void 0 || (byte & 192) !== 128) break;
742
+ cut -= 1;
743
+ }
744
+ return bytes.subarray(0, cut).toString("utf8");
745
+ }
746
+ function containedCwd(spec, workspaceRoot) {
747
+ let lexical;
748
+ try {
749
+ lexical = resolveSafeCwd(spec.cwd, workspaceRoot);
750
+ } catch (error) {
751
+ return error instanceof Error ? error : new Error(String(error));
752
+ }
753
+ let realRoot;
754
+ let real;
755
+ try {
756
+ realRoot = realpathSync3(path3.resolve(workspaceRoot));
757
+ real = realpathSync3(lexical);
758
+ if (!statSync2(real).isDirectory()) return new Error(`cwd is not a directory: ${lexical}`);
759
+ } catch (error) {
760
+ return new Error(`cwd cannot be resolved: ${lexical} (${errorMessage(error)})`);
761
+ }
762
+ try {
763
+ resolveSafeCwd(real, realRoot);
764
+ } catch {
765
+ return new Error(`cwd escapes workspace root through a symbolic link: ${lexical} -> ${real}`);
766
+ }
767
+ return real;
768
+ }
769
+ function parseServerInfo(value) {
770
+ if (!isRecord4(value)) return new McpError("protocol", "initialize result is not an object");
771
+ if (typeof value.protocolVersion !== "string" || value.protocolVersion.length === 0) {
772
+ return new McpError("protocol", "initialize result lacks a protocolVersion string");
773
+ }
774
+ const capabilities = isRecord4(value.capabilities) ? value.capabilities : {};
775
+ let serverInfo = null;
776
+ if (isRecord4(value.serverInfo)) {
777
+ serverInfo = {
778
+ name: typeof value.serverInfo.name === "string" ? value.serverInfo.name : "",
779
+ version: typeof value.serverInfo.version === "string" ? value.serverInfo.version : ""
780
+ };
781
+ }
782
+ return {
783
+ protocolVersion: value.protocolVersion,
784
+ serverInfo,
785
+ capabilities,
786
+ instructions: typeof value.instructions === "string" ? value.instructions : null
787
+ };
788
+ }
789
+ function parseToolDescriptor(value) {
790
+ if (!isRecord4(value)) return new McpError("protocol", "tools/list entry is not an object");
791
+ if (typeof value.name !== "string" || value.name.length === 0) {
792
+ return new McpError("protocol", "tools/list entry lacks a name");
793
+ }
794
+ const inputSchema = isRecord4(value.inputSchema) ? value.inputSchema : { type: "object" };
795
+ return {
796
+ name: value.name,
797
+ title: typeof value.title === "string" ? value.title : null,
798
+ description: typeof value.description === "string" ? value.description : "",
799
+ inputSchema,
800
+ annotations: isRecord4(value.annotations) ? value.annotations : null
801
+ };
802
+ }
803
+ function normalizeContentBlock(value) {
804
+ if (!isRecord4(value) || typeof value.type !== "string") return { type: "other", raw: value };
805
+ switch (value.type) {
806
+ case "text":
807
+ return typeof value.text === "string" ? { type: "text", text: value.text } : { type: "other", raw: value };
808
+ case "image":
809
+ case "audio":
810
+ if (typeof value.data === "string" && typeof value.mimeType === "string") {
811
+ return { type: value.type, mimeType: value.mimeType, data: value.data };
812
+ }
813
+ return { type: "other", raw: value };
814
+ case "resource": {
815
+ const resource = value.resource;
816
+ if (!isRecord4(resource) || typeof resource.uri !== "string") return { type: "other", raw: value };
817
+ return {
818
+ type: "resource",
819
+ uri: resource.uri,
820
+ ...typeof resource.text === "string" ? { text: resource.text } : {},
821
+ ...typeof resource.mimeType === "string" ? { mimeType: resource.mimeType } : {}
822
+ };
823
+ }
824
+ case "resource_link":
825
+ if (typeof value.uri !== "string") return { type: "other", raw: value };
826
+ return {
827
+ type: "resource",
828
+ uri: value.uri,
829
+ ...typeof value.mimeType === "string" ? { mimeType: value.mimeType } : {}
830
+ };
831
+ default:
832
+ return { type: "other", raw: value };
833
+ }
834
+ }
835
+ function renderContentBlock(block) {
836
+ switch (block.type) {
837
+ case "text":
838
+ return block.text;
839
+ case "image":
840
+ case "audio":
841
+ return `[${block.type} ${block.mimeType}, ${Buffer.byteLength(block.data, "base64")} bytes]`;
842
+ case "resource":
843
+ return block.text === void 0 ? `[resource ${block.uri}]` : `[resource ${block.uri}]
844
+ ${block.text}`;
845
+ case "other": {
846
+ const type = isRecord4(block.raw) && typeof block.raw.type === "string" ? block.raw.type : "unknown";
847
+ return `[unsupported content type ${type}]`;
848
+ }
849
+ }
850
+ }
851
+ function renderMcpContent(blocks, maxBytes = DEFAULT_RESULT_TEXT_BYTES) {
852
+ const joined = blocks.map(renderContentBlock).join("\n");
853
+ if (Buffer.byteLength(joined, "utf8") <= maxBytes) return { text: joined, truncated: false };
854
+ const marker = `
855
+ [mcp result text truncated at ${maxBytes} bytes]`;
856
+ const budget = Math.max(0, maxBytes - Buffer.byteLength(marker, "utf8"));
857
+ return { text: `${cutUtf8(joined, budget)}${marker}`, truncated: true };
858
+ }
859
+ function parseToolCallResult(value, maxTextBytes) {
860
+ if (!isRecord4(value)) return new McpError("protocol", "tools/call result is not an object");
861
+ if (!Array.isArray(value.content)) return new McpError("protocol", "tools/call result.content must be an array");
862
+ if (value.isError !== void 0 && typeof value.isError !== "boolean") {
863
+ return new McpError("protocol", "tools/call result.isError must be a boolean");
864
+ }
865
+ if (value.structuredContent !== void 0 && !isRecord4(value.structuredContent)) {
866
+ return new McpError("protocol", "tools/call result.structuredContent must be an object");
867
+ }
868
+ const content = value.content.map(normalizeContentBlock);
869
+ const structuredText = structuredContentJson(value);
870
+ const rendered = renderMcpContent(
871
+ content.length === 0 && value.structuredContent !== void 0 ? [{ type: "text", text: structuredText ?? JSON.stringify(value.structuredContent) }] : content,
872
+ maxTextBytes
873
+ );
874
+ const result = {
875
+ content,
876
+ isError: value.isError === true,
877
+ text: rendered.text,
878
+ textTruncated: rendered.truncated
879
+ };
880
+ if (value.structuredContent !== void 0) result.structuredContent = value.structuredContent;
881
+ if (structuredText !== void 0) result.structuredContentJson = structuredText;
882
+ return result;
883
+ }
884
+ function createMcpStdioClient(spec, options) {
885
+ const initialCwd = containedCwd(spec, options.workspaceRoot);
886
+ if (initialCwd instanceof Error) throw new McpError("spawn", `mcp server ${spec.id}: ${initialCwd.message}`);
887
+ const initializeTimeoutMs = clampTimerDelayMs(options.initializeTimeoutMs ?? DEFAULT_INITIALIZE_TIMEOUT_MS);
888
+ const requestTimeoutMs = clampTimerDelayMs(options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);
889
+ const stderrTailBytes = Math.max(0, options.stderrTailBytes ?? DEFAULT_STDERR_TAIL_BYTES);
890
+ const maxResultTextBytes = Math.max(64, options.maxResultTextBytes ?? DEFAULT_RESULT_TEXT_BYTES);
891
+ const maxOutboundBytes = Math.max(MIN_OUTBOUND_BYTES, options.maxOutboundBytes ?? DEFAULT_MAX_OUTBOUND_BYTES);
892
+ const killGraceMs = clampTimerDelayMs(options.killGraceMs ?? DEFAULT_KILL_GRACE_MS);
893
+ const teardownBoundMs = clampTimerDelayMs(options.teardownBoundMs ?? DEFAULT_TEARDOWN_BOUND_MS);
894
+ const clientVersion = options.clientVersion ?? DEFAULT_MCP_CLIENT_VERSION;
895
+ const framer = createLineFramer(options.maxLineBytes ?? DEFAULT_MAX_LINE_BYTES);
896
+ let status = "idle";
897
+ let failure = null;
898
+ let child = null;
899
+ let spawned = null;
900
+ let exited = null;
901
+ let leaderExited = false;
902
+ let groupPhase = "unspawned";
903
+ let groupCleanup = null;
904
+ let teardown = null;
905
+ let closing = false;
906
+ let initializePromise = null;
907
+ let closePromise = null;
908
+ let info = null;
909
+ let nextId = 1;
910
+ const pending = /* @__PURE__ */ new Map();
911
+ const outbound = [];
912
+ let outboundQueuedBytes = 0;
913
+ let awaitingDrain = false;
914
+ let notifications = 0;
915
+ let toolsChangedFlag = false;
916
+ let stderrTailBuffer = Buffer.alloc(0);
917
+ const isAlive = () => child !== null && child.exitCode === null && child.signalCode === null;
918
+ const closedError = () => failure ?? new McpError("closed", `mcp server ${spec.id} is closed`);
919
+ const rejectAllPending = (error) => {
920
+ for (const entry of [...pending.values()]) entry.reject(error);
921
+ };
922
+ const fail = (error) => {
923
+ if (status === "closed" || status === "failed") return;
924
+ status = "failed";
925
+ failure = error;
926
+ rejectAllPending(error);
927
+ };
928
+ const groupOwned = () => groupPhase === "live" || groupPhase === "cleaning";
929
+ const signalGroup = (signalName) => {
930
+ const pid = child?.pid;
931
+ if (pid !== void 0 && process.platform !== "win32" && groupOwned()) {
932
+ try {
933
+ process.kill(-pid, signalName);
934
+ return;
935
+ } catch (error) {
936
+ if (error.code === "ESRCH") groupPhase = "released";
937
+ }
938
+ }
939
+ try {
940
+ child?.kill(signalName);
941
+ } catch {
942
+ }
943
+ };
944
+ const groupAlive = () => {
945
+ const pid = child?.pid;
946
+ if (pid === void 0 || !groupOwned()) return false;
947
+ if (process.platform !== "win32") {
948
+ try {
949
+ process.kill(-pid, 0);
950
+ return true;
951
+ } catch (error) {
952
+ if (error.code !== "ESRCH") return true;
953
+ groupPhase = "released";
954
+ return false;
955
+ }
956
+ }
957
+ return isAlive();
958
+ };
959
+ const terminationObserved = () => leaderExited && !groupAlive();
960
+ const waitForTermination = async (timeoutMs) => {
961
+ const deadline = performance.now() + timeoutMs;
962
+ while (!terminationObserved()) {
963
+ const remaining = deadline - performance.now();
964
+ if (remaining <= 0) return terminationObserved();
965
+ const nap = sleep(Math.min(10, remaining));
966
+ await (leaderExited || exited === null ? nap : Promise.race([exited, nap]));
967
+ }
968
+ return true;
969
+ };
970
+ const destroyStdio = () => {
971
+ for (const stream of [child?.stdin, child?.stdout, child?.stderr]) stream?.destroy();
972
+ };
973
+ const cleanupGroup = () => {
974
+ if (groupCleanup !== null) return groupCleanup;
975
+ groupCleanup = (async () => {
976
+ let terminated = true;
977
+ const pgid = child?.pid;
978
+ if (groupPhase === "live" && pgid !== void 0) {
979
+ groupPhase = "cleaning";
980
+ if (groupAlive()) signalGroup("SIGTERM");
981
+ terminated = await waitForTermination(killGraceMs);
982
+ if (!terminated) {
983
+ if (groupAlive()) signalGroup("SIGKILL");
984
+ terminated = await waitForTermination(teardownBoundMs);
985
+ }
986
+ } else {
987
+ await (exited ?? Promise.resolve());
988
+ }
989
+ groupPhase = "released";
990
+ const outcome = terminated || pgid === void 0 ? { complete: true } : { complete: false, reason: "group-survived-sigkill", pgid, boundMs: killGraceMs + teardownBoundMs };
991
+ teardown = outcome;
992
+ if (!outcome.complete) destroyStdio();
993
+ return outcome;
994
+ })();
995
+ return groupCleanup;
996
+ };
997
+ const pendingOutboundBytes = () => outboundQueuedBytes + (child?.stdin?.writableLength ?? 0);
998
+ const flushOutbound = () => {
999
+ while (!awaitingDrain) {
1000
+ const entry = outbound.shift();
1001
+ if (entry === void 0) return;
1002
+ outboundQueuedBytes -= entry.payload.length;
1003
+ const stdin = child?.stdin;
1004
+ if (!stdin || stdin.destroyed || !stdin.writable) {
1005
+ entry.onError?.(new Error("server stdin is not writable"));
1006
+ continue;
1007
+ }
1008
+ const accepted = stdin.write(entry.payload, (error) => {
1009
+ if (error) entry.onError?.(error);
1010
+ });
1011
+ if (!accepted) {
1012
+ awaitingDrain = true;
1013
+ stdin.once("drain", () => {
1014
+ awaitingDrain = false;
1015
+ flushOutbound();
1016
+ });
1017
+ }
1018
+ }
1019
+ };
1020
+ const enqueueOutbound = (message, requestId, onError) => {
1021
+ const payload = encodeJsonRpcMessage(message);
1022
+ if (payload.length > maxOutboundBytes) return { kind: "oversized", bytes: payload.length };
1023
+ const queued = pendingOutboundBytes();
1024
+ if (queued + payload.length > maxOutboundBytes) {
1025
+ fail(
1026
+ new McpError(
1027
+ "overload",
1028
+ `mcp server ${spec.id} stopped reading its stdin: ${queued} bytes are queued for it and the outbound cap is ${maxOutboundBytes} bytes`
1029
+ )
1030
+ );
1031
+ void close();
1032
+ return { kind: "overloaded" };
1033
+ }
1034
+ outbound.push({ payload, requestId, onError });
1035
+ outboundQueuedBytes += payload.length;
1036
+ flushOutbound();
1037
+ return { kind: "queued" };
1038
+ };
1039
+ const withdrawOutbound = (requestId) => {
1040
+ const index = outbound.findIndex((entry2) => entry2.requestId === requestId);
1041
+ if (index === -1) return;
1042
+ const [entry] = outbound.splice(index, 1);
1043
+ if (entry !== void 0) outboundQueuedBytes -= entry.payload.length;
1044
+ };
1045
+ const dispatch = (frame) => {
1046
+ if (frame.kind === "response") {
1047
+ const id = frame.message.id;
1048
+ if (typeof id !== "number") return;
1049
+ const entry = pending.get(id);
1050
+ if (entry === void 0) return;
1051
+ if (frame.message.error !== void 0) {
1052
+ const error = frame.message.error;
1053
+ entry.reject(new McpError("server", `${entry.method}: ${error.message} (code ${error.code})`, error));
1054
+ return;
1055
+ }
1056
+ entry.resolve(frame.message.result);
1057
+ return;
1058
+ }
1059
+ if (frame.kind === "request") {
1060
+ const request2 = frame.message;
1061
+ const outcome = enqueueOutbound(
1062
+ {
1063
+ jsonrpc: "2.0",
1064
+ id: request2.id,
1065
+ error: { code: JSON_RPC_METHOD_NOT_FOUND, message: `method not found: ${request2.method}` }
1066
+ },
1067
+ null
1068
+ );
1069
+ if (outcome.kind === "oversized") {
1070
+ fail(
1071
+ new McpError(
1072
+ "overload",
1073
+ `mcp server ${spec.id} sent a request whose ${outcome.bytes}-byte reply exceeds the ${maxOutboundBytes}-byte outbound cap`
1074
+ )
1075
+ );
1076
+ void close();
1077
+ }
1078
+ return;
1079
+ }
1080
+ notifications += 1;
1081
+ if (frame.message.method === "notifications/tools/list_changed") toolsChangedFlag = true;
1082
+ };
1083
+ const consumeFrames = (frames) => {
1084
+ for (const frame of frames) {
1085
+ if (status === "closed" || status === "failed") return;
1086
+ if (frame.kind === "message") {
1087
+ dispatch(frame.message);
1088
+ continue;
1089
+ }
1090
+ fail(new McpError("protocol", `protocol error from mcp server ${spec.id}: ${frame.error.message}`));
1091
+ void close();
1092
+ return;
1093
+ }
1094
+ };
1095
+ const spawnChild = () => {
1096
+ const cwd = containedCwd(spec, options.workspaceRoot);
1097
+ if (cwd instanceof Error) {
1098
+ fail(new McpError("spawn", `mcp server ${spec.id} failed to start: ${cwd.message}`));
1099
+ return false;
1100
+ }
1101
+ let proc;
1102
+ try {
1103
+ proc = spawn(spec.command, [...spec.args ?? []], {
1104
+ cwd,
1105
+ env: buildSafeToolEnv({ ...spec.env ?? {} }),
1106
+ detached: process.platform !== "win32",
1107
+ stdio: ["pipe", "pipe", "pipe"]
1108
+ });
1109
+ } catch (error) {
1110
+ fail(new McpError("spawn", `mcp server ${spec.id} failed to start: ${errorMessage(error)}`));
1111
+ return false;
1112
+ }
1113
+ child = proc;
1114
+ if (proc.pid !== void 0) groupPhase = "live";
1115
+ spawned = new Promise((resolve) => {
1116
+ proc.once("spawn", () => resolve(true));
1117
+ proc.once("error", (error) => {
1118
+ fail(new McpError("spawn", `mcp server ${spec.id} failed to start: ${error.message}`));
1119
+ resolve(false);
1120
+ });
1121
+ });
1122
+ exited = new Promise((resolve) => {
1123
+ proc.once("exit", (code, signal) => {
1124
+ leaderExited = true;
1125
+ if (!closing && status !== "failed") {
1126
+ fail(
1127
+ new McpError(
1128
+ "closed",
1129
+ `mcp server ${spec.id} exited with ${signal !== null ? `signal ${signal}` : `code ${code ?? "?"}`} before the client closed it`
1130
+ )
1131
+ );
1132
+ } else {
1133
+ rejectAllPending(closedError());
1134
+ }
1135
+ resolve();
1136
+ void cleanupGroup();
1137
+ });
1138
+ proc.once("error", () => {
1139
+ if (proc.pid === void 0) {
1140
+ leaderExited = true;
1141
+ resolve();
1142
+ }
1143
+ });
1144
+ });
1145
+ proc.stdin?.on("error", () => {
1146
+ });
1147
+ proc.stdout?.on("data", (chunk) => consumeFrames(framer.push(chunk)));
1148
+ proc.stdout?.on("end", () => consumeFrames(framer.flush()));
1149
+ proc.stderr?.on("data", (chunk) => {
1150
+ if (stderrTailBytes === 0) return;
1151
+ const joined = Buffer.concat([stderrTailBuffer, chunk]);
1152
+ stderrTailBuffer = joined.length > stderrTailBytes ? Buffer.from(joined.subarray(joined.length - stderrTailBytes)) : joined;
1153
+ });
1154
+ return true;
1155
+ };
1156
+ const request = (method, params, timeoutMs, signal) => new Promise((resolve, reject) => {
1157
+ if (signal?.aborted) {
1158
+ reject(new McpError("aborted", `${method} aborted before it was sent`));
1159
+ return;
1160
+ }
1161
+ if (child === null || status === "closed" || status === "failed") {
1162
+ reject(closedError());
1163
+ return;
1164
+ }
1165
+ const id = nextId++;
1166
+ let timer = null;
1167
+ const settle = (finish) => {
1168
+ if (!pending.has(id)) return;
1169
+ pending.delete(id);
1170
+ withdrawOutbound(id);
1171
+ if (timer !== null) clearTimeout(timer);
1172
+ signal?.removeEventListener("abort", onAbort);
1173
+ finish();
1174
+ };
1175
+ const onAbort = () => settle(() => reject(new McpError("aborted", `${method} aborted`)));
1176
+ pending.set(id, {
1177
+ method,
1178
+ resolve: (value) => settle(() => resolve(value)),
1179
+ reject: (error) => settle(() => reject(error))
1180
+ });
1181
+ if (timeoutMs > 0) {
1182
+ timer = setTimeout(
1183
+ () => settle(() => reject(new McpError("timeout", `${method} timed out after ${timeoutMs}ms`))),
1184
+ timeoutMs
1185
+ );
1186
+ }
1187
+ signal?.addEventListener("abort", onAbort, { once: true });
1188
+ const outcome = enqueueOutbound(
1189
+ { jsonrpc: "2.0", id, method, ...params === void 0 ? {} : { params } },
1190
+ id,
1191
+ (error) => {
1192
+ settle(() => reject(failure ?? new McpError("closed", `write to mcp server ${spec.id} failed: ${error.message}`)));
1193
+ }
1194
+ );
1195
+ if (outcome.kind === "oversized") {
1196
+ settle(
1197
+ () => reject(
1198
+ new McpError(
1199
+ "overload",
1200
+ `${method} request of ${outcome.bytes} bytes exceeds the ${maxOutboundBytes}-byte outbound cap`
1201
+ )
1202
+ )
1203
+ );
1204
+ }
1205
+ });
1206
+ const initialize = () => {
1207
+ if (status === "closed" || status === "failed") return Promise.reject(closedError());
1208
+ if (initializePromise !== null) return initializePromise;
1209
+ initializePromise = (async () => {
1210
+ status = "starting";
1211
+ if (!spawnChild()) {
1212
+ await close();
1213
+ throw closedError();
1214
+ }
1215
+ const started = await (spawned ?? Promise.resolve(false));
1216
+ if (!started) {
1217
+ await close();
1218
+ throw closedError();
1219
+ }
1220
+ let result;
1221
+ try {
1222
+ result = await request(
1223
+ "initialize",
1224
+ {
1225
+ protocolVersion: MCP_PROTOCOL_VERSION,
1226
+ capabilities: {},
1227
+ clientInfo: { name: MCP_CLIENT_NAME, version: clientVersion }
1228
+ },
1229
+ initializeTimeoutMs
1230
+ );
1231
+ } catch (error) {
1232
+ const cause = error instanceof McpError ? error : new McpError("protocol", errorMessage(error));
1233
+ fail(new McpError(cause.code, `initialize failed: ${cause.message}`, cause.data));
1234
+ await close();
1235
+ throw closedError();
1236
+ }
1237
+ const parsed = parseServerInfo(result);
1238
+ if (parsed instanceof McpError) {
1239
+ fail(new McpError("protocol", `initialize failed: ${parsed.message}`));
1240
+ await close();
1241
+ throw closedError();
1242
+ }
1243
+ info = parsed;
1244
+ enqueueOutbound({ jsonrpc: "2.0", method: "notifications/initialized" }, null);
1245
+ if (status === "starting") status = "ready";
1246
+ return parsed;
1247
+ })();
1248
+ return initializePromise;
1249
+ };
1250
+ const ensureReady = async () => {
1251
+ if (status === "ready") return;
1252
+ await initialize();
1253
+ };
1254
+ const listTools = async () => {
1255
+ await ensureReady();
1256
+ const tools = [];
1257
+ let cursor;
1258
+ let pages = 0;
1259
+ for (; ; ) {
1260
+ pages += 1;
1261
+ const result = await request("tools/list", cursor === void 0 ? {} : { cursor }, requestTimeoutMs);
1262
+ if (!isRecord4(result) || !Array.isArray(result.tools)) {
1263
+ throw new McpError("protocol", "tools/list result lacks a tools array");
1264
+ }
1265
+ for (const entry of result.tools) {
1266
+ if (tools.length >= MCP_TOOL_LIST_CAP) return { tools, truncated: true };
1267
+ const descriptor = parseToolDescriptor(entry);
1268
+ if (descriptor instanceof McpError) throw descriptor;
1269
+ tools.push(descriptor);
1270
+ }
1271
+ const next = typeof result.nextCursor === "string" && result.nextCursor.length > 0 ? result.nextCursor : void 0;
1272
+ if (next === void 0) return { tools, truncated: false };
1273
+ if (tools.length >= MCP_TOOL_LIST_CAP || pages >= MCP_TOOL_LIST_PAGE_CAP) return { tools, truncated: true };
1274
+ cursor = next;
1275
+ }
1276
+ };
1277
+ const callTool = async (name, args, callOptions = {}) => {
1278
+ await ensureReady();
1279
+ const timeoutMs = clampTimerDelayMs(callOptions.timeoutMs ?? requestTimeoutMs);
1280
+ const result = await request("tools/call", { name, arguments: args }, timeoutMs, callOptions.signal);
1281
+ const parsed = parseToolCallResult(result, maxResultTextBytes);
1282
+ if (parsed instanceof McpError) throw parsed;
1283
+ return parsed;
1284
+ };
1285
+ const close = () => {
1286
+ if (closePromise !== null) return closePromise;
1287
+ closePromise = (async () => {
1288
+ closing = true;
1289
+ if (status !== "failed") status = "closed";
1290
+ rejectAllPending(closedError());
1291
+ outbound.length = 0;
1292
+ outboundQueuedBytes = 0;
1293
+ if (child === null) {
1294
+ teardown ??= { complete: true };
1295
+ return teardown;
1296
+ }
1297
+ try {
1298
+ child.stdin?.end();
1299
+ } catch {
1300
+ }
1301
+ const outcome = await cleanupGroup();
1302
+ destroyStdio();
1303
+ return outcome;
1304
+ })();
1305
+ return closePromise;
1306
+ };
1307
+ if (options.signal !== void 0) {
1308
+ if (options.signal.aborted) void close();
1309
+ else options.signal.addEventListener("abort", () => void close(), { once: true });
1310
+ }
1311
+ return {
1312
+ id: spec.id,
1313
+ get pid() {
1314
+ return child?.pid;
1315
+ },
1316
+ initialize,
1317
+ listTools,
1318
+ callTool,
1319
+ close,
1320
+ killOwnedOnExit: () => {
1321
+ if (groupOwned()) signalGroup("SIGKILL");
1322
+ },
1323
+ state: () => {
1324
+ const cleanup = { cleanupIncomplete: teardown?.complete === false, teardown };
1325
+ return status === "failed" ? { status, reason: failure?.message ?? `mcp server ${spec.id} failed`, ...cleanup } : { status, ...cleanup };
1326
+ },
1327
+ serverInfo: () => info,
1328
+ toolsChanged: () => toolsChangedFlag,
1329
+ acknowledgeToolsChanged: () => {
1330
+ toolsChangedFlag = false;
1331
+ },
1332
+ notificationCount: () => notifications,
1333
+ stderrTail: () => stderrTailBuffer.toString("utf8")
1334
+ };
1335
+ }
1336
+
1337
+ export {
1338
+ McpError,
1339
+ DEFAULT_KILL_GRACE_MS,
1340
+ DEFAULT_TEARDOWN_BOUND_MS,
1341
+ createMcpStdioClient,
1342
+ MCP_TRUST_ACTION_CLASSES,
1343
+ resolveMcpServers,
1344
+ trustMcpServer,
1345
+ untrustMcpServer
1346
+ };
1347
+ //# sourceMappingURL=chunk-55RMDDFM.js.map