@vibesdotdev/mcp 0.0.0-stage → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +96 -2
  3. package/dist/adapters/auth-middleware.d.ts +68 -0
  4. package/dist/adapters/auth-middleware.d.ts.map +1 -0
  5. package/dist/adapters/auth-middleware.js +161 -0
  6. package/dist/adapters/auth-middleware.js.map +1 -0
  7. package/dist/adapters/compatibility.d.ts +20 -0
  8. package/dist/adapters/compatibility.d.ts.map +1 -0
  9. package/dist/adapters/compatibility.js +57 -0
  10. package/dist/adapters/compatibility.js.map +1 -0
  11. package/dist/adapters/host-context.consumer.d.ts +12 -0
  12. package/dist/adapters/host-context.consumer.d.ts.map +1 -0
  13. package/dist/adapters/host-context.consumer.js +10 -0
  14. package/dist/adapters/host-context.consumer.js.map +1 -0
  15. package/dist/adapters/host-context.d.ts +32 -0
  16. package/dist/adapters/host-context.d.ts.map +1 -0
  17. package/dist/adapters/host-context.js +17 -0
  18. package/dist/adapters/host-context.js.map +1 -0
  19. package/dist/adapters/index.d.ts +12 -0
  20. package/dist/adapters/index.d.ts.map +1 -0
  21. package/dist/adapters/index.js +13 -0
  22. package/dist/adapters/index.js.map +1 -0
  23. package/dist/adapters/mcp/ambient-envelope.d.ts +26 -0
  24. package/dist/adapters/mcp/ambient-envelope.d.ts.map +1 -0
  25. package/dist/adapters/mcp/ambient-envelope.js +70 -0
  26. package/dist/adapters/mcp/ambient-envelope.js.map +1 -0
  27. package/dist/adapters/mcp/catalog.d.ts +15 -0
  28. package/dist/adapters/mcp/catalog.d.ts.map +1 -0
  29. package/dist/adapters/mcp/catalog.js +26 -0
  30. package/dist/adapters/mcp/catalog.js.map +1 -0
  31. package/dist/adapters/mcp/connection-identity.d.ts +81 -0
  32. package/dist/adapters/mcp/connection-identity.d.ts.map +1 -0
  33. package/dist/adapters/mcp/connection-identity.js +114 -0
  34. package/dist/adapters/mcp/connection-identity.js.map +1 -0
  35. package/dist/adapters/mcp/context.d.ts +137 -0
  36. package/dist/adapters/mcp/context.d.ts.map +1 -0
  37. package/dist/adapters/mcp/context.js +230 -0
  38. package/dist/adapters/mcp/context.js.map +1 -0
  39. package/dist/adapters/mcp/formatters.d.ts +41 -0
  40. package/dist/adapters/mcp/formatters.d.ts.map +1 -0
  41. package/dist/adapters/mcp/formatters.js +102 -0
  42. package/dist/adapters/mcp/formatters.js.map +1 -0
  43. package/dist/adapters/mcp/from-api-endpoint.d.ts +59 -0
  44. package/dist/adapters/mcp/from-api-endpoint.d.ts.map +1 -0
  45. package/dist/adapters/mcp/from-api-endpoint.js +206 -0
  46. package/dist/adapters/mcp/from-api-endpoint.js.map +1 -0
  47. package/dist/adapters/mcp/generation-contract.d.ts +5 -0
  48. package/dist/adapters/mcp/generation-contract.d.ts.map +1 -0
  49. package/dist/adapters/mcp/generation-contract.js +34 -0
  50. package/dist/adapters/mcp/generation-contract.js.map +1 -0
  51. package/dist/adapters/mcp/host-registry.d.ts +159 -0
  52. package/dist/adapters/mcp/host-registry.d.ts.map +1 -0
  53. package/dist/adapters/mcp/host-registry.js +237 -0
  54. package/dist/adapters/mcp/host-registry.js.map +1 -0
  55. package/dist/adapters/mcp/index.d.ts +12 -0
  56. package/dist/adapters/mcp/index.d.ts.map +1 -0
  57. package/dist/adapters/mcp/index.js +17 -0
  58. package/dist/adapters/mcp/index.js.map +1 -0
  59. package/dist/adapters/mcp/isolated-notice.d.ts +111 -0
  60. package/dist/adapters/mcp/isolated-notice.d.ts.map +1 -0
  61. package/dist/adapters/mcp/isolated-notice.js +217 -0
  62. package/dist/adapters/mcp/isolated-notice.js.map +1 -0
  63. package/dist/adapters/mcp/json-rpc.d.ts +16 -0
  64. package/dist/adapters/mcp/json-rpc.d.ts.map +1 -0
  65. package/dist/adapters/mcp/json-rpc.js +32 -0
  66. package/dist/adapters/mcp/json-rpc.js.map +1 -0
  67. package/dist/adapters/mcp/local-origin.d.ts +18 -0
  68. package/dist/adapters/mcp/local-origin.d.ts.map +1 -0
  69. package/dist/adapters/mcp/local-origin.js +37 -0
  70. package/dist/adapters/mcp/local-origin.js.map +1 -0
  71. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.d.ts +11 -0
  72. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.d.ts.map +1 -0
  73. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.js +21 -0
  74. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.js.map +1 -0
  75. package/dist/adapters/mcp/logging/mcp-http.descriptor.d.ts +10 -0
  76. package/dist/adapters/mcp/logging/mcp-http.descriptor.d.ts.map +1 -0
  77. package/dist/adapters/mcp/logging/mcp-http.descriptor.js +20 -0
  78. package/dist/adapters/mcp/logging/mcp-http.descriptor.js.map +1 -0
  79. package/dist/adapters/mcp/logging/mcp-server.descriptor.d.ts +9 -0
  80. package/dist/adapters/mcp/logging/mcp-server.descriptor.d.ts.map +1 -0
  81. package/dist/adapters/mcp/logging/mcp-server.descriptor.js +25 -0
  82. package/dist/adapters/mcp/logging/mcp-server.descriptor.js.map +1 -0
  83. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.d.ts +10 -0
  84. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.d.ts.map +1 -0
  85. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.js +20 -0
  86. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.js.map +1 -0
  87. package/dist/adapters/mcp/mcp-http-session.d.ts +140 -0
  88. package/dist/adapters/mcp/mcp-http-session.d.ts.map +1 -0
  89. package/dist/adapters/mcp/mcp-http-session.js +797 -0
  90. package/dist/adapters/mcp/mcp-http-session.js.map +1 -0
  91. package/dist/adapters/mcp/mcp-wire-name.d.ts +9 -0
  92. package/dist/adapters/mcp/mcp-wire-name.d.ts.map +1 -0
  93. package/dist/adapters/mcp/mcp-wire-name.js +52 -0
  94. package/dist/adapters/mcp/mcp-wire-name.js.map +1 -0
  95. package/dist/adapters/mcp/projection-doctor.d.ts +101 -0
  96. package/dist/adapters/mcp/projection-doctor.d.ts.map +1 -0
  97. package/dist/adapters/mcp/projection-doctor.js +285 -0
  98. package/dist/adapters/mcp/projection-doctor.js.map +1 -0
  99. package/dist/adapters/mcp/projection.d.ts +36 -0
  100. package/dist/adapters/mcp/projection.d.ts.map +1 -0
  101. package/dist/adapters/mcp/projection.js +136 -0
  102. package/dist/adapters/mcp/projection.js.map +1 -0
  103. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.d.ts +113 -0
  104. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.d.ts.map +1 -0
  105. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.js +15 -0
  106. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.js.map +1 -0
  107. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.d.ts +113 -0
  108. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.d.ts.map +1 -0
  109. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.js +18 -0
  110. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.js.map +1 -0
  111. package/dist/adapters/mcp/prompts/index.d.ts +113 -0
  112. package/dist/adapters/mcp/prompts/index.d.ts.map +1 -0
  113. package/dist/adapters/mcp/prompts/index.js +24 -0
  114. package/dist/adapters/mcp/prompts/index.js.map +1 -0
  115. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.d.ts +114 -0
  116. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.d.ts.map +1 -0
  117. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.js +37 -0
  118. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.js.map +1 -0
  119. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.d.ts +113 -0
  120. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.d.ts.map +1 -0
  121. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.js +20 -0
  122. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.js.map +1 -0
  123. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.d.ts +113 -0
  124. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.d.ts.map +1 -0
  125. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.js +20 -0
  126. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.js.map +1 -0
  127. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.d.ts +114 -0
  128. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.d.ts.map +1 -0
  129. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.js +21 -0
  130. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.js.map +1 -0
  131. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.d.ts +113 -0
  132. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.d.ts.map +1 -0
  133. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.js +19 -0
  134. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.js.map +1 -0
  135. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.d.ts +113 -0
  136. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.d.ts.map +1 -0
  137. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.js +18 -0
  138. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.js.map +1 -0
  139. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.d.ts +113 -0
  140. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.d.ts.map +1 -0
  141. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.js +19 -0
  142. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.js.map +1 -0
  143. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.d.ts +113 -0
  144. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.d.ts.map +1 -0
  145. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.js +18 -0
  146. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.js.map +1 -0
  147. package/dist/adapters/mcp/request-context.d.ts +28 -0
  148. package/dist/adapters/mcp/request-context.d.ts.map +1 -0
  149. package/dist/adapters/mcp/request-context.js +49 -0
  150. package/dist/adapters/mcp/request-context.js.map +1 -0
  151. package/dist/adapters/mcp/roster-announcer.d.ts +3 -0
  152. package/dist/adapters/mcp/roster-announcer.d.ts.map +1 -0
  153. package/dist/adapters/mcp/roster-announcer.js +22 -0
  154. package/dist/adapters/mcp/roster-announcer.js.map +1 -0
  155. package/dist/adapters/mcp/sampling-context.d.ts +12 -0
  156. package/dist/adapters/mcp/sampling-context.d.ts.map +1 -0
  157. package/dist/adapters/mcp/sampling-context.js +30 -0
  158. package/dist/adapters/mcp/sampling-context.js.map +1 -0
  159. package/dist/adapters/mcp/sampling.d.ts +17 -0
  160. package/dist/adapters/mcp/sampling.d.ts.map +1 -0
  161. package/dist/adapters/mcp/sampling.js +43 -0
  162. package/dist/adapters/mcp/sampling.js.map +1 -0
  163. package/dist/adapters/mcp/schemas/index.d.ts +37 -0
  164. package/dist/adapters/mcp/schemas/index.d.ts.map +1 -0
  165. package/dist/adapters/mcp/schemas/index.js +5 -0
  166. package/dist/adapters/mcp/schemas/index.js.map +1 -0
  167. package/dist/adapters/mcp/schemas/tool-selection.d.ts +12 -0
  168. package/dist/adapters/mcp/schemas/tool-selection.d.ts.map +1 -0
  169. package/dist/adapters/mcp/schemas/tool-selection.js +2 -0
  170. package/dist/adapters/mcp/schemas/tool-selection.js.map +1 -0
  171. package/dist/adapters/mcp/serve-identity.d.ts +64 -0
  172. package/dist/adapters/mcp/serve-identity.d.ts.map +1 -0
  173. package/dist/adapters/mcp/serve-identity.js +220 -0
  174. package/dist/adapters/mcp/serve-identity.js.map +1 -0
  175. package/dist/adapters/mcp/server.consumer.d.ts +5 -0
  176. package/dist/adapters/mcp/server.consumer.d.ts.map +1 -0
  177. package/dist/adapters/mcp/server.consumer.js +300 -0
  178. package/dist/adapters/mcp/server.consumer.js.map +1 -0
  179. package/dist/adapters/mcp/server.d.ts +56 -0
  180. package/dist/adapters/mcp/server.d.ts.map +1 -0
  181. package/dist/adapters/mcp/server.js +1423 -0
  182. package/dist/adapters/mcp/server.js.map +1 -0
  183. package/dist/adapters/mcp/stale-body.consumer.d.ts +85 -0
  184. package/dist/adapters/mcp/stale-body.consumer.d.ts.map +1 -0
  185. package/dist/adapters/mcp/stale-body.consumer.js +183 -0
  186. package/dist/adapters/mcp/stale-body.consumer.js.map +1 -0
  187. package/dist/adapters/mcp/startup-refusal.d.ts +8 -0
  188. package/dist/adapters/mcp/startup-refusal.d.ts.map +1 -0
  189. package/dist/adapters/mcp/startup-refusal.js +141 -0
  190. package/dist/adapters/mcp/startup-refusal.js.map +1 -0
  191. package/dist/adapters/mcp/stdio-relay.d.ts +232 -0
  192. package/dist/adapters/mcp/stdio-relay.d.ts.map +1 -0
  193. package/dist/adapters/mcp/stdio-relay.js +1169 -0
  194. package/dist/adapters/mcp/stdio-relay.js.map +1 -0
  195. package/dist/adapters/mcp/tool-audit-live.d.ts +109 -0
  196. package/dist/adapters/mcp/tool-audit-live.d.ts.map +1 -0
  197. package/dist/adapters/mcp/tool-audit-live.js +538 -0
  198. package/dist/adapters/mcp/tool-audit-live.js.map +1 -0
  199. package/dist/adapters/mcp/tool-audit.d.ts +44 -0
  200. package/dist/adapters/mcp/tool-audit.d.ts.map +1 -0
  201. package/dist/adapters/mcp/tool-audit.js +168 -0
  202. package/dist/adapters/mcp/tool-audit.js.map +1 -0
  203. package/dist/adapters/mcp/tool-catalog.d.ts +179 -0
  204. package/dist/adapters/mcp/tool-catalog.d.ts.map +1 -0
  205. package/dist/adapters/mcp/tool-catalog.js +330 -0
  206. package/dist/adapters/mcp/tool-catalog.js.map +1 -0
  207. package/dist/adapters/mcp/tool-selection.d.ts +77 -0
  208. package/dist/adapters/mcp/tool-selection.d.ts.map +1 -0
  209. package/dist/adapters/mcp/tool-selection.js +266 -0
  210. package/dist/adapters/mcp/tool-selection.js.map +1 -0
  211. package/dist/adapters/mcp/transport-registry.d.ts +5 -0
  212. package/dist/adapters/mcp/transport-registry.d.ts.map +1 -0
  213. package/dist/adapters/mcp/transport-registry.js +13 -0
  214. package/dist/adapters/mcp/transport-registry.js.map +1 -0
  215. package/dist/adapters/mcp/trust-tag.d.ts +69 -0
  216. package/dist/adapters/mcp/trust-tag.d.ts.map +1 -0
  217. package/dist/adapters/mcp/trust-tag.js +120 -0
  218. package/dist/adapters/mcp/trust-tag.js.map +1 -0
  219. package/dist/adapters/mcp/vibes-types.d.ts +115 -0
  220. package/dist/adapters/mcp/vibes-types.d.ts.map +1 -0
  221. package/dist/adapters/mcp/vibes-types.js +7 -0
  222. package/dist/adapters/mcp/vibes-types.js.map +1 -0
  223. package/dist/adapters/mcp/web-handler.d.ts +49 -0
  224. package/dist/adapters/mcp/web-handler.d.ts.map +1 -0
  225. package/dist/adapters/mcp/web-handler.js +129 -0
  226. package/dist/adapters/mcp/web-handler.js.map +1 -0
  227. package/dist/adapters/session-id.d.ts +3 -0
  228. package/dist/adapters/session-id.d.ts.map +1 -0
  229. package/dist/adapters/session-id.js +42 -0
  230. package/dist/adapters/session-id.js.map +1 -0
  231. package/dist/adapters/transport-bun-http.d.ts +39 -0
  232. package/dist/adapters/transport-bun-http.d.ts.map +1 -0
  233. package/dist/adapters/transport-bun-http.js +42 -0
  234. package/dist/adapters/transport-bun-http.js.map +1 -0
  235. package/dist/adapters/types.d.ts +135 -0
  236. package/dist/adapters/types.d.ts.map +1 -0
  237. package/dist/adapters/types.js +2 -0
  238. package/dist/adapters/types.js.map +1 -0
  239. package/dist/adapters/web-compatibility.d.ts +6 -0
  240. package/dist/adapters/web-compatibility.d.ts.map +1 -0
  241. package/dist/adapters/web-compatibility.js +13 -0
  242. package/dist/adapters/web-compatibility.js.map +1 -0
  243. package/dist/adapters/zod-mcp.d.ts +139 -0
  244. package/dist/adapters/zod-mcp.d.ts.map +1 -0
  245. package/dist/adapters/zod-mcp.js +617 -0
  246. package/dist/adapters/zod-mcp.js.map +1 -0
  247. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.d.ts +15 -0
  248. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.d.ts.map +1 -0
  249. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.js +58 -0
  250. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.js.map +1 -0
  251. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts +6 -0
  252. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts.map +1 -0
  253. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js +180 -0
  254. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js.map +1 -0
  255. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.d.ts +22 -0
  256. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.d.ts.map +1 -0
  257. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.js +19 -0
  258. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.js.map +1 -0
  259. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.d.ts +23 -0
  260. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.d.ts.map +1 -0
  261. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.js +41 -0
  262. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.js.map +1 -0
  263. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.d.ts +75 -0
  264. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.d.ts.map +1 -0
  265. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.js +84 -0
  266. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.js.map +1 -0
  267. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.d.ts +35 -0
  268. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.d.ts.map +1 -0
  269. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.js +28 -0
  270. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.js.map +1 -0
  271. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.d.ts +11 -0
  272. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.d.ts.map +1 -0
  273. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.js +47 -0
  274. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.js.map +1 -0
  275. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.d.ts +18 -0
  276. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.d.ts.map +1 -0
  277. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.js +18 -0
  278. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.js.map +1 -0
  279. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.d.ts +12 -0
  280. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.d.ts.map +1 -0
  281. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.js +17 -0
  282. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.js.map +1 -0
  283. package/dist/cli/mcp/management/dev.mcp.install.descriptor.d.ts +41 -0
  284. package/dist/cli/mcp/management/dev.mcp.install.descriptor.d.ts.map +1 -0
  285. package/dist/cli/mcp/management/dev.mcp.install.descriptor.js +49 -0
  286. package/dist/cli/mcp/management/dev.mcp.install.descriptor.js.map +1 -0
  287. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.d.ts +16 -0
  288. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.d.ts.map +1 -0
  289. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.js +244 -0
  290. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.js.map +1 -0
  291. package/dist/cli/mcp/management/dev.mcp.list.descriptor.d.ts +22 -0
  292. package/dist/cli/mcp/management/dev.mcp.list.descriptor.d.ts.map +1 -0
  293. package/dist/cli/mcp/management/dev.mcp.list.descriptor.js +24 -0
  294. package/dist/cli/mcp/management/dev.mcp.list.descriptor.js.map +1 -0
  295. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.d.ts +29 -0
  296. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.d.ts.map +1 -0
  297. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.js +127 -0
  298. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.js.map +1 -0
  299. package/dist/cli/mcp/management/dev.mcp.status.descriptor.d.ts +48 -0
  300. package/dist/cli/mcp/management/dev.mcp.status.descriptor.d.ts.map +1 -0
  301. package/dist/cli/mcp/management/dev.mcp.status.descriptor.js +56 -0
  302. package/dist/cli/mcp/management/dev.mcp.status.descriptor.js.map +1 -0
  303. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.d.ts +9 -0
  304. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.d.ts.map +1 -0
  305. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.js +253 -0
  306. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.js.map +1 -0
  307. package/dist/cli/mcp/management/install-helpers.d.ts +26 -0
  308. package/dist/cli/mcp/management/install-helpers.d.ts.map +1 -0
  309. package/dist/cli/mcp/management/install-helpers.js +95 -0
  310. package/dist/cli/mcp/management/install-helpers.js.map +1 -0
  311. package/dist/cli/mcp/management/process-audit.impl.consumer.d.ts +38 -0
  312. package/dist/cli/mcp/management/process-audit.impl.consumer.d.ts.map +1 -0
  313. package/dist/cli/mcp/management/process-audit.impl.consumer.js +145 -0
  314. package/dist/cli/mcp/management/process-audit.impl.consumer.js.map +1 -0
  315. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.d.ts +21 -0
  316. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.d.ts.map +1 -0
  317. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.js +82 -0
  318. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.js.map +1 -0
  319. package/dist/cli/mcp/management/status-doctor.d.ts +22 -0
  320. package/dist/cli/mcp/management/status-doctor.d.ts.map +1 -0
  321. package/dist/cli/mcp/management/status-doctor.js +153 -0
  322. package/dist/cli/mcp/management/status-doctor.js.map +1 -0
  323. package/dist/cli/mcp/schemas/status-doctor.d.ts +75 -0
  324. package/dist/cli/mcp/schemas/status-doctor.d.ts.map +1 -0
  325. package/dist/cli/mcp/schemas/status-doctor.js +2 -0
  326. package/dist/cli/mcp/schemas/status-doctor.js.map +1 -0
  327. package/dist/cli/mcp/support/host-port.d.ts +31 -0
  328. package/dist/cli/mcp/support/host-port.d.ts.map +1 -0
  329. package/dist/cli/mcp/support/host-port.js +31 -0
  330. package/dist/cli/mcp/support/host-port.js.map +1 -0
  331. package/dist/cli/mcp/support/server-process.impl.consumer.d.ts +24 -0
  332. package/dist/cli/mcp/support/server-process.impl.consumer.d.ts.map +1 -0
  333. package/dist/cli/mcp/support/server-process.impl.consumer.js +86 -0
  334. package/dist/cli/mcp/support/server-process.impl.consumer.js.map +1 -0
  335. package/dist/cli/mcp/support/status-doctor.d.ts +33 -0
  336. package/dist/cli/mcp/support/status-doctor.d.ts.map +1 -0
  337. package/dist/cli/mcp/support/status-doctor.js +104 -0
  338. package/dist/cli/mcp/support/status-doctor.js.map +1 -0
  339. package/dist/cli/print.d.ts +12 -0
  340. package/dist/cli/print.d.ts.map +1 -0
  341. package/dist/cli/print.js +25 -0
  342. package/dist/cli/print.js.map +1 -0
  343. package/dist/cli/surface-mcp/client-connection-identity.consumer.d.ts +19 -0
  344. package/dist/cli/surface-mcp/client-connection-identity.consumer.d.ts.map +1 -0
  345. package/dist/cli/surface-mcp/client-connection-identity.consumer.js +53 -0
  346. package/dist/cli/surface-mcp/client-connection-identity.consumer.js.map +1 -0
  347. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.d.ts +7 -0
  348. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.d.ts.map +1 -0
  349. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.js +345 -0
  350. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.js.map +1 -0
  351. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts +12 -0
  352. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts.map +1 -0
  353. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js +657 -0
  354. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js.map +1 -0
  355. package/dist/cli/surface-mcp/local-dev-flag.d.ts +24 -0
  356. package/dist/cli/surface-mcp/local-dev-flag.d.ts.map +1 -0
  357. package/dist/cli/surface-mcp/local-dev-flag.js +37 -0
  358. package/dist/cli/surface-mcp/local-dev-flag.js.map +1 -0
  359. package/dist/cli/surface-mcp/shared-host-startup.d.ts +14 -0
  360. package/dist/cli/surface-mcp/shared-host-startup.d.ts.map +1 -0
  361. package/dist/cli/surface-mcp/shared-host-startup.js +46 -0
  362. package/dist/cli/surface-mcp/shared-host-startup.js.map +1 -0
  363. package/dist/cli/surface-mcp/stdio-relay-transport.d.ts +2 -0
  364. package/dist/cli/surface-mcp/stdio-relay-transport.d.ts.map +1 -0
  365. package/dist/cli/surface-mcp/stdio-relay-transport.js +21 -0
  366. package/dist/cli/surface-mcp/stdio-relay-transport.js.map +1 -0
  367. package/dist/cli/surface-mcp/teardown.d.ts +17 -0
  368. package/dist/cli/surface-mcp/teardown.d.ts.map +1 -0
  369. package/dist/cli/surface-mcp/teardown.js +28 -0
  370. package/dist/cli/surface-mcp/teardown.js.map +1 -0
  371. package/dist/client.d.ts +49 -0
  372. package/dist/client.d.ts.map +1 -0
  373. package/dist/client.js +131 -0
  374. package/dist/client.js.map +1 -0
  375. package/dist/config/load.d.ts +6 -0
  376. package/dist/config/load.d.ts.map +1 -0
  377. package/dist/config/load.js +18 -0
  378. package/dist/config/load.js.map +1 -0
  379. package/dist/config/mcp.config.descriptor.d.ts +108 -0
  380. package/dist/config/mcp.config.descriptor.d.ts.map +1 -0
  381. package/dist/config/mcp.config.descriptor.js +63 -0
  382. package/dist/config/mcp.config.descriptor.js.map +1 -0
  383. package/dist/docs/mcp.docs.descriptor.d.ts +4 -0
  384. package/dist/docs/mcp.docs.descriptor.d.ts.map +1 -0
  385. package/dist/docs/mcp.docs.descriptor.js +44 -0
  386. package/dist/docs/mcp.docs.descriptor.js.map +1 -0
  387. package/dist/docs/prompts.docs.descriptor.d.ts +4 -0
  388. package/dist/docs/prompts.docs.descriptor.d.ts.map +1 -0
  389. package/dist/docs/prompts.docs.descriptor.js +130 -0
  390. package/dist/docs/prompts.docs.descriptor.js.map +1 -0
  391. package/dist/docs/resources.docs.descriptor.d.ts +4 -0
  392. package/dist/docs/resources.docs.descriptor.d.ts.map +1 -0
  393. package/dist/docs/resources.docs.descriptor.js +390 -0
  394. package/dist/docs/resources.docs.descriptor.js.map +1 -0
  395. package/dist/docs/server.docs.descriptor.d.ts +4 -0
  396. package/dist/docs/server.docs.descriptor.d.ts.map +1 -0
  397. package/dist/docs/server.docs.descriptor.js +383 -0
  398. package/dist/docs/server.docs.descriptor.js.map +1 -0
  399. package/dist/docs/tools.docs.descriptor.d.ts +4 -0
  400. package/dist/docs/tools.docs.descriptor.d.ts.map +1 -0
  401. package/dist/docs/tools.docs.descriptor.js +316 -0
  402. package/dist/docs/tools.docs.descriptor.js.map +1 -0
  403. package/dist/harness-identity.descriptors.d.ts +11 -0
  404. package/dist/harness-identity.descriptors.d.ts.map +1 -0
  405. package/dist/harness-identity.descriptors.js +41 -0
  406. package/dist/harness-identity.descriptors.js.map +1 -0
  407. package/dist/index.d.ts +36 -0
  408. package/dist/index.d.ts.map +1 -0
  409. package/dist/index.js +36 -0
  410. package/dist/index.js.map +1 -0
  411. package/dist/kinds/harness-identity.kind.d.ts +3 -0
  412. package/dist/kinds/harness-identity.kind.d.ts.map +1 -0
  413. package/dist/kinds/harness-identity.kind.js +16 -0
  414. package/dist/kinds/harness-identity.kind.js.map +1 -0
  415. package/dist/kinds/sampling.kind.d.ts +15 -0
  416. package/dist/kinds/sampling.kind.d.ts.map +1 -0
  417. package/dist/kinds/sampling.kind.js +24 -0
  418. package/dist/kinds/sampling.kind.js.map +1 -0
  419. package/dist/lifecycle-repeat.d.ts +23 -0
  420. package/dist/lifecycle-repeat.d.ts.map +1 -0
  421. package/dist/lifecycle-repeat.js +21 -0
  422. package/dist/lifecycle-repeat.js.map +1 -0
  423. package/dist/mcp/dev.mcp.descriptor.d.ts +18 -0
  424. package/dist/mcp/dev.mcp.descriptor.d.ts.map +1 -0
  425. package/dist/mcp/dev.mcp.descriptor.js +18 -0
  426. package/dist/mcp/dev.mcp.descriptor.js.map +1 -0
  427. package/dist/mcp/index.d.ts +20 -0
  428. package/dist/mcp/index.d.ts.map +1 -0
  429. package/dist/mcp/index.js +19 -0
  430. package/dist/mcp/index.js.map +1 -0
  431. package/dist/mcp/mcp.plugin.d.ts +9 -0
  432. package/dist/mcp/mcp.plugin.d.ts.map +1 -0
  433. package/dist/mcp/mcp.plugin.js +59 -0
  434. package/dist/mcp/mcp.plugin.js.map +1 -0
  435. package/dist/mcp-client.plugin.d.ts +4 -0
  436. package/dist/mcp-client.plugin.d.ts.map +1 -0
  437. package/dist/mcp-client.plugin.js +13 -0
  438. package/dist/mcp-client.plugin.js.map +1 -0
  439. package/dist/mcp.client.descriptor.d.ts +27 -0
  440. package/dist/mcp.client.descriptor.d.ts.map +1 -0
  441. package/dist/mcp.client.descriptor.js +7 -0
  442. package/dist/mcp.client.descriptor.js.map +1 -0
  443. package/dist/mcp.consumer.plugin.d.ts +4 -0
  444. package/dist/mcp.consumer.plugin.d.ts.map +1 -0
  445. package/dist/mcp.consumer.plugin.js +19 -0
  446. package/dist/mcp.consumer.plugin.js.map +1 -0
  447. package/dist/mcp.runtime.plugin.d.ts +10 -0
  448. package/dist/mcp.runtime.plugin.d.ts.map +1 -0
  449. package/dist/mcp.runtime.plugin.js +40 -0
  450. package/dist/mcp.runtime.plugin.js.map +1 -0
  451. package/dist/root-state.d.ts +3 -0
  452. package/dist/root-state.d.ts.map +1 -0
  453. package/dist/root-state.js +3 -0
  454. package/dist/root-state.js.map +1 -0
  455. package/dist/schemas/api-endpoint.d.ts +12 -0
  456. package/dist/schemas/api-endpoint.d.ts.map +1 -0
  457. package/dist/schemas/api-endpoint.js +11 -0
  458. package/dist/schemas/api-endpoint.js.map +1 -0
  459. package/dist/schemas/audit.d.ts +172 -0
  460. package/dist/schemas/audit.d.ts.map +1 -0
  461. package/dist/schemas/audit.js +82 -0
  462. package/dist/schemas/audit.js.map +1 -0
  463. package/dist/schemas/harness-identity.d.ts +41 -0
  464. package/dist/schemas/harness-identity.d.ts.map +1 -0
  465. package/dist/schemas/harness-identity.js +19 -0
  466. package/dist/schemas/harness-identity.js.map +1 -0
  467. package/dist/schemas/host-adapters.d.ts +14 -0
  468. package/dist/schemas/host-adapters.d.ts.map +1 -0
  469. package/dist/schemas/host-adapters.js +7 -0
  470. package/dist/schemas/host-adapters.js.map +1 -0
  471. package/dist/schemas/projection.d.ts +10 -0
  472. package/dist/schemas/projection.d.ts.map +1 -0
  473. package/dist/schemas/projection.js +9 -0
  474. package/dist/schemas/projection.js.map +1 -0
  475. package/dist/schemas/tool.d.ts +8 -0
  476. package/dist/schemas/tool.d.ts.map +1 -0
  477. package/dist/schemas/tool.js +8 -0
  478. package/dist/schemas/tool.js.map +1 -0
  479. package/dist/surface-mcp/build-provenance.d.ts +67 -0
  480. package/dist/surface-mcp/build-provenance.d.ts.map +1 -0
  481. package/dist/surface-mcp/build-provenance.js +287 -0
  482. package/dist/surface-mcp/build-provenance.js.map +1 -0
  483. package/dist/surface-mcp/crash-reporting.d.ts +28 -0
  484. package/dist/surface-mcp/crash-reporting.d.ts.map +1 -0
  485. package/dist/surface-mcp/crash-reporting.js +41 -0
  486. package/dist/surface-mcp/crash-reporting.js.map +1 -0
  487. package/dist/surface-mcp/executable-freshness-watch.d.ts +89 -0
  488. package/dist/surface-mcp/executable-freshness-watch.d.ts.map +1 -0
  489. package/dist/surface-mcp/executable-freshness-watch.js +225 -0
  490. package/dist/surface-mcp/executable-freshness-watch.js.map +1 -0
  491. package/dist/surface-mcp/host-provenance-banner.d.ts +49 -0
  492. package/dist/surface-mcp/host-provenance-banner.d.ts.map +1 -0
  493. package/dist/surface-mcp/host-provenance-banner.js +135 -0
  494. package/dist/surface-mcp/host-provenance-banner.js.map +1 -0
  495. package/dist/surface-mcp/index.d.ts +51 -0
  496. package/dist/surface-mcp/index.d.ts.map +1 -0
  497. package/dist/surface-mcp/index.js +92 -0
  498. package/dist/surface-mcp/index.js.map +1 -0
  499. package/dist/surface-mcp/local-tools-bootstrap.d.ts +36 -0
  500. package/dist/surface-mcp/local-tools-bootstrap.d.ts.map +1 -0
  501. package/dist/surface-mcp/local-tools-bootstrap.js +43 -0
  502. package/dist/surface-mcp/local-tools-bootstrap.js.map +1 -0
  503. package/dist/surface-mcp/mcp-serve.plugin.d.ts +9 -0
  504. package/dist/surface-mcp/mcp-serve.plugin.d.ts.map +1 -0
  505. package/dist/surface-mcp/mcp-serve.plugin.js +24 -0
  506. package/dist/surface-mcp/mcp-serve.plugin.js.map +1 -0
  507. package/dist/surface-mcp/project-config.d.ts +35 -0
  508. package/dist/surface-mcp/project-config.d.ts.map +1 -0
  509. package/dist/surface-mcp/project-config.js +74 -0
  510. package/dist/surface-mcp/project-config.js.map +1 -0
  511. package/dist/surface-mcp/serve-lifecycle.d.ts +102 -0
  512. package/dist/surface-mcp/serve-lifecycle.d.ts.map +1 -0
  513. package/dist/surface-mcp/serve-lifecycle.js +343 -0
  514. package/dist/surface-mcp/serve-lifecycle.js.map +1 -0
  515. package/dist/surface-mcp/session-bridge.d.ts +18 -0
  516. package/dist/surface-mcp/session-bridge.d.ts.map +1 -0
  517. package/dist/surface-mcp/session-bridge.js +26 -0
  518. package/dist/surface-mcp/session-bridge.js.map +1 -0
  519. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.d.ts +13 -0
  520. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.d.ts.map +1 -0
  521. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.js +13 -0
  522. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.js.map +1 -0
  523. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.d.ts +11 -0
  524. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.d.ts.map +1 -0
  525. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.js +36 -0
  526. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.js.map +1 -0
  527. package/dist/surface-mcp/workspace-warning.d.ts +16 -0
  528. package/dist/surface-mcp/workspace-warning.d.ts.map +1 -0
  529. package/dist/surface-mcp/workspace-warning.js +44 -0
  530. package/dist/surface-mcp/workspace-warning.js.map +1 -0
  531. package/dist/svelte/index.d.ts +12 -0
  532. package/dist/svelte/index.d.ts.map +1 -0
  533. package/dist/svelte/index.js +11 -0
  534. package/dist/svelte/mcp-svelte.plugin.d.ts +10 -0
  535. package/dist/svelte/mcp-svelte.plugin.d.ts.map +1 -0
  536. package/dist/svelte/mcp-svelte.plugin.js +24 -0
  537. package/dist/svelte/tool-widgets/VibesContextToolCard.svelte +91 -0
  538. package/dist/svelte/tool-widgets/VibesContextToolCard.svelte.d.ts +9 -0
  539. package/dist/svelte/tool-widgets/VibesContextToolCard.svelte.d.ts.map +1 -0
  540. package/dist/svelte/tool-widgets/index.d.ts +3 -0
  541. package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
  542. package/dist/svelte/tool-widgets/index.js +2 -0
  543. package/dist/svelte/tool-widgets/summary.d.ts +48 -0
  544. package/dist/svelte/tool-widgets/summary.d.ts.map +1 -0
  545. package/dist/svelte/tool-widgets/summary.js +117 -0
  546. package/dist/tools/vibes-context/schemas.d.ts +85 -0
  547. package/dist/tools/vibes-context/schemas.d.ts.map +1 -0
  548. package/dist/tools/vibes-context/schemas.js +76 -0
  549. package/dist/tools/vibes-context/schemas.js.map +1 -0
  550. package/dist/tools/vibes-context/vibes-context.descriptor.d.ts +4 -0
  551. package/dist/tools/vibes-context/vibes-context.descriptor.d.ts.map +1 -0
  552. package/dist/tools/vibes-context/vibes-context.descriptor.js +30 -0
  553. package/dist/tools/vibes-context/vibes-context.descriptor.js.map +1 -0
  554. package/dist/tools/vibes-context/vibes-context.impl.d.ts +34 -0
  555. package/dist/tools/vibes-context/vibes-context.impl.d.ts.map +1 -0
  556. package/dist/tools/vibes-context/vibes-context.impl.js +207 -0
  557. package/dist/tools/vibes-context/vibes-context.impl.js.map +1 -0
  558. package/dist/tui/index.d.ts +4 -0
  559. package/dist/tui/index.d.ts.map +1 -0
  560. package/dist/tui/index.js +4 -0
  561. package/dist/tui/index.js.map +1 -0
  562. package/dist/tui/mcp-health.d.ts +7 -0
  563. package/dist/tui/mcp-health.d.ts.map +1 -0
  564. package/dist/tui/mcp-health.js +16 -0
  565. package/dist/tui/mcp-health.js.map +1 -0
  566. package/dist/tui/mcp-tui.plugin.d.ts +3 -0
  567. package/dist/tui/mcp-tui.plugin.d.ts.map +1 -0
  568. package/dist/tui/mcp-tui.plugin.js +18 -0
  569. package/dist/tui/mcp-tui.plugin.js.map +1 -0
  570. package/dist/tui/mcp.tui-app.descriptor.d.ts +4 -0
  571. package/dist/tui/mcp.tui-app.descriptor.d.ts.map +1 -0
  572. package/dist/tui/mcp.tui-app.descriptor.js +19 -0
  573. package/dist/tui/mcp.tui-app.descriptor.js.map +1 -0
  574. package/dist/tui/mcp.tui-app.impl.consumer.d.ts +4 -0
  575. package/dist/tui/mcp.tui-app.impl.consumer.d.ts.map +1 -0
  576. package/dist/tui/mcp.tui-app.impl.consumer.js +48 -0
  577. package/dist/tui/mcp.tui-app.impl.consumer.js.map +1 -0
  578. package/dist/tui/mcp.tui-state.descriptor.d.ts +8 -0
  579. package/dist/tui/mcp.tui-state.descriptor.d.ts.map +1 -0
  580. package/dist/tui/mcp.tui-state.descriptor.js +37 -0
  581. package/dist/tui/mcp.tui-state.descriptor.js.map +1 -0
  582. package/dist/tui/mcp.tui-state.impl.consumer.d.ts +5 -0
  583. package/dist/tui/mcp.tui-state.impl.consumer.d.ts.map +1 -0
  584. package/dist/tui/mcp.tui-state.impl.consumer.js +97 -0
  585. package/dist/tui/mcp.tui-state.impl.consumer.js.map +1 -0
  586. package/dist/tui/mcp.tui-state.key.d.ts +45 -0
  587. package/dist/tui/mcp.tui-state.key.d.ts.map +1 -0
  588. package/dist/tui/mcp.tui-state.key.js +25 -0
  589. package/dist/tui/mcp.tui-state.key.js.map +1 -0
  590. package/dist/types.core.d.ts +25 -0
  591. package/dist/types.core.d.ts.map +1 -0
  592. package/dist/types.core.js +8 -0
  593. package/dist/types.core.js.map +1 -0
  594. package/dist/types.d.ts +71 -0
  595. package/dist/types.d.ts.map +1 -0
  596. package/dist/types.js +2 -0
  597. package/dist/types.js.map +1 -0
  598. package/dist/types.registry.d.ts +93 -0
  599. package/dist/types.registry.d.ts.map +1 -0
  600. package/dist/types.registry.js +32 -0
  601. package/dist/types.registry.js.map +1 -0
  602. package/package.json +323 -4
@@ -0,0 +1,657 @@
1
+ import { loadPurposePresetOverrides } from '@vibesdotdev/tools/config/load';
2
+ import { runtimePurposePresets, purposePresetPolicyKey } from '@vibesdotdev/tools/schemas/presets/registry';
3
+ /**
4
+ * MCP Serve CLI Command Implementation - Consumer
5
+ *
6
+ * Runs the MCP server in stdio or HTTP mode for consumer hardware.
7
+ * Owned by runtime-surface-mcp so @vibesdotdev/mcp stays transport/framework-only.
8
+ */
9
+ import * as z from 'zod/v4';
10
+ import { ContextDescriptorSchema } from '@vibesdotdev/kernel/schemas/context';
11
+ import { CapabilityError, CaughtFailureSchema, valueFreeFailure, createRuntimeImplementation, getRuntimeScopedValues, getRuntimeStdio, getRuntimeStdioStreams, getRuntimeStdinEvents } from '@vibesdotdev/kernel';
12
+ import { isWorkspaceNotAdmitted } from '@vibesdotdev/pm/admission';
13
+ import { createStartupRefusalServer, createStartupRefusalTransport } from "../../adapters/mcp/startup-refusal.js";
14
+ import { hostProcessProbe } from "../../adapters/mcp/host-registry.js";
15
+ import { relayAttestationVerifier, STDIO_LAUNCH_SOURCE } from "../../adapters/mcp/connection-identity.js";
16
+ import { getPathRoots } from '@vibesdotdev/paths';
17
+ import { createCLIActionLifetime, isCLIExitSignal, requestCLIExit } from '@vibesdotdev/cli/providers';
18
+ import { acquireStdoutCapture, getLogger } from '@vibesdotdev/logging';
19
+ import { stdioRelayTransportPlugins } from "./stdio-relay-transport.js";
20
+ import { createMcpAdapter } from '@vibesdotdev/mcp/adapters/mcp';
21
+ import { WireInvokeCallerSchema } from '@vibesdotdev/kernel/schemas/invoke-caller';
22
+ import { validateMcpGeneration } from "../../adapters/mcp/generation-contract.js";
23
+ import { prepareMcpServeHost } from "../../surface-mcp/index.js";
24
+ import { reportLocalToolsForMcpServe, localToolIdsForMcpAdapter } from "../../surface-mcp/local-tools-bootstrap.js";
25
+ import { getMcpBuildProvenance } from "../../surface-mcp/build-provenance.js";
26
+ import { writeHostProvenanceBanner } from "../../surface-mcp/host-provenance-banner.js";
27
+ import { startExecutableFreshnessWatch } from "../../surface-mcp/executable-freshness-watch.js";
28
+ import { subscribeServeCrashReports } from "../../surface-mcp/crash-reporting.js";
29
+ import { startLifecycleRepeat } from "../../lifecycle-repeat.js";
30
+ import { loadMcpConfig } from "../../config/load.js";
31
+ import { resolveServeHostIdentity, staleBodyBanner } from "../../adapters/mcp/stale-body.consumer.js";
32
+ import { refusesLocalDevOnPublicBinary } from "./local-dev-flag.js";
33
+ import { managedHostDependencies, startStdioMcp } from "./shared-host-startup.js";
34
+ import { runTeardown } from "./teardown.js";
35
+ import { announceSessionBound, announceSessionUnbound, archiveBoundStdioSession, bindFreshStdioSession, startConsumerBackgroundServices, getBoundStdioSessionId, rebindWorkspaceEnvironmentForActiveSession, rebindWorkspaceEnvironmentForSession, triggerProgressiveIndexingInBackground } from "../../surface-mcp/serve-lifecycle.js";
36
+ import { loadSurfaceSessions, tryGetSessionManager } from "../../surface-mcp/session-bridge.js";
37
+ const ServeOptionsSchema = z.object({
38
+ auth: z.boolean().optional(), mode: z.enum(['stdio', 'http']).optional(), port: z.string().optional(),
39
+ client: z.string().optional(), preset: z.string().optional(), tools: z.string().optional(),
40
+ agent: z.string().optional(), agentId: z.string().optional(), harness: z.string().optional(),
41
+ preloadKnowledgeBases: z.string().optional(), isolated: z.boolean().optional(), finite: z.boolean().optional()
42
+ });
43
+ function parsePreloadKnowledgeBases(value) {
44
+ if (!value)
45
+ return [];
46
+ return value
47
+ .split(',')
48
+ .map((entry) => entry.trim())
49
+ .filter((entry) => entry.length > 0);
50
+ }
51
+ function hasSessionTools(descriptors) {
52
+ return descriptors.some((descriptor) => descriptor.id === 'session' || descriptor.id.startsWith('session-'));
53
+ }
54
+ /**
55
+ * The serve host's declared MCP logger (`mcp-stdio`/`mcp-http`), else the
56
+ * `mcp` namespace logger when the host declares none. A declared logger that
57
+ * fails to resolve is a startup failure, not an absence.
58
+ */
59
+ async function resolveMcpLogger(runtime, mode) {
60
+ const loggerId = mode === 'stdio' ? 'mcp-stdio' : 'mcp-http';
61
+ if (runtime.hasKind('logging/logger') && runtime.query('logging/logger').withId(loggerId).exists()) {
62
+ return await runtime.query('logging/logger').withId(loggerId).resolve();
63
+ }
64
+ return getLogger('mcp', runtime);
65
+ }
66
+ /** A teardown step that failed: logged, never allowed to block the rest of teardown. */
67
+ /** A known PM refusal stays protocol-visible without creating a private serving body. */
68
+ export async function serveWorkspaceRefusal(runtime, failure, closeCapture) {
69
+ if (!isWorkspaceNotAdmitted(failure) || failure.code !== 'PERMISSION_DENIED')
70
+ throw failure;
71
+ const streams = await getRuntimeStdioStreams(runtime);
72
+ const server = createStartupRefusalServer(failure);
73
+ const lifetime = await createCLIActionLifetime(runtime, async () => {
74
+ const results = await Promise.allSettled([server.close(), closeCapture?.()]);
75
+ const failures = [];
76
+ for (const result of results)
77
+ if (result.status === 'rejected')
78
+ failures.push(CaughtFailureSchema.parse(result.reason));
79
+ if (failures.length === 1)
80
+ throw failures[0];
81
+ if (failures.length > 1)
82
+ throw new AggregateError(failures, 'MCP refusal cleanup failed.');
83
+ });
84
+ const transportClosed = new Promise((resolve, reject) => {
85
+ server.onerror = error => {
86
+ reject(error);
87
+ void lifetime.request('transport-error');
88
+ };
89
+ server.onclose = () => { resolve(); void lifetime.request('transport-close'); };
90
+ });
91
+ const transportOutcome = transportClosed.then(() => undefined, error => CaughtFailureSchema.parse(error));
92
+ const onDispose = () => { void lifetime.request('runtime-dispose'); };
93
+ runtime.lifecycle.signal.addEventListener('abort', onDispose, { once: true });
94
+ try {
95
+ const transport = createStartupRefusalTransport(streams.streams());
96
+ await server.connect(transport);
97
+ lifetime.bindProcessSignals();
98
+ if (runtime.lifecycle.signal.aborted)
99
+ onDispose();
100
+ await lifetime.wait();
101
+ const transportFailure = await transportOutcome;
102
+ if (transportFailure !== undefined)
103
+ throw transportFailure;
104
+ }
105
+ catch (thrown) {
106
+ void lifetime.request('startup-failure');
107
+ const [cleanup] = await Promise.allSettled([lifetime.wait()]);
108
+ if (cleanup?.status === 'rejected' && cleanup.reason !== thrown) {
109
+ const cleanupFailure = CaughtFailureSchema.parse(cleanup.reason);
110
+ throw new AggregateError([thrown, cleanupFailure], 'MCP refusal and cleanup failed.', { cause: thrown });
111
+ }
112
+ throw thrown;
113
+ }
114
+ finally {
115
+ runtime.lifecycle.signal.removeEventListener('abort', onDispose);
116
+ }
117
+ }
118
+ async function executeMcpCommand(_args, options, context) {
119
+ const opts = ServeOptionsSchema.parse(options);
120
+ // The serve host: `dev mcp serve` declares `effects.serve`, so the CLI booted
121
+ // this runtime through the one entry before the action ran (rc02-rc03 §2.3)
122
+ // — surface and purpose `mcp`, request principals, `sharedHost`,
123
+ // `qualifiers.serve`, and the `--finite ? finite : persistent` lifecycle. It
124
+ // is already composed; serving bodies activate, while stdio relays defer
125
+ // autonomous work to their shared body. Nothing here re-declares it.
126
+ // The CLI hands it to the action as `context.runtime`.
127
+ const host = context.runtime;
128
+ const configuredPresets = await loadPurposePresetOverrides(host);
129
+ const stdio = await getRuntimeStdio(host);
130
+ const scopedValues = await getRuntimeScopedValues(host);
131
+ // VIBES_LOCAL_DEV failsafe (MCP-refusal half). On the COMPILED public binary
132
+ // (the declared build surface is public), a truthy VIBES_LOCAL_DEV is a hard stop:
133
+ // we refuse to start the MCP server so a prod binary can't quietly serve under
134
+ // local-dev wiring. Override is the explicit failsafe VIBES_LOCAL_DEV=0. The
135
+ // source dev runner (VIBES_CLI_MODE !== "public") is unaffected.
136
+ if (await refusesLocalDevOnPublicBinary(host)) {
137
+ stdio.write('stderr', '\x1b[31m[mcp] Refusing to start the MCP server: VIBES_LOCAL_DEV is set on the production binary. This is a safety stop. Re-run with VIBES_LOCAL_DEV=0 to override.\x1b[0m\n');
138
+ requestCLIExit(1);
139
+ }
140
+ const mode = opts.mode ?? 'stdio';
141
+ // Human-visible stderr logs: the host's MCP_ENABLE_STDERR opt-in, or an
142
+ // interactive terminal. Passed to the capture as an option, never written
143
+ // back into the host environment.
144
+ let enableStderr = host.getEnv('MCP_ENABLE_STDERR') === 'true';
145
+ let stdoutCapture;
146
+ // WHICH BODY ANSWERED — one stderr line, before anything can swallow it.
147
+ // It must be here, above the shared-host relay below, because the relay
148
+ // RETURNS: a banner emitted after the serve body starts would never print on
149
+ // the path that actually serves most clients. Replaces the deleted
150
+ // `sourceWorkspaceDiverged` verdict (WU-11) with the three facts that do
151
+ // identify a thin-host body; see `host-provenance-banner.ts`.
152
+ // The host's declared process identity (executable and graph freshness);
153
+ // null when the host declares none, which leaves freshness unknowable.
154
+ const hostIdentity = await resolveServeHostIdentity(host);
155
+ await writeHostProvenanceBanner(host, hostIdentity);
156
+ if (mode === 'stdio') {
157
+ if (host.localEnvironment.terminal?.().stdinIsTerminal) {
158
+ stdio.write('stderr', `[mcp] Starting stdio MCP server (client=${opts.client || 'default'})\n`);
159
+ stdio.write('stderr', `[mcp] This binary is normally spawned by an MCP client (Grok, Claude, Cursor, etc.).\n`);
160
+ stdio.write('stderr', `[mcp] Protocol traffic is on stdin/stdout. Human-visible logs go to stderr + logs/stdout-capture.log.\n`);
161
+ stdio.write('stderr', `[mcp] Press Ctrl-C to stop.\n\n`);
162
+ enableStderr = true;
163
+ }
164
+ stdoutCapture = await acquireStdoutCapture(host, { mirrorToStderr: enableStderr });
165
+ }
166
+ // The workspace this serve host is bound to: the kernel's one binding
167
+ // (`--workspace-root`, else the nearest workspace above the cwd). The relay's
168
+ // host lookup, the HTTP host's port and claim, provenance and the stdio
169
+ // connection identity are all keyed by it, so an unbound host fails here with
170
+ // `workspace-unbound` and its recovery hint.
171
+ const workspaceRoot = await host.context('runtime/workspace-path');
172
+ // ── Shared-host relay ────────────────────────────────────────────────────
173
+ // This block MUST stay above the serve body (session, adapter, hot reload,
174
+ // indexing); a relay placed after it would forward correctly, log correctly,
175
+ // and save nothing. Measured 2026-08-21: 10 stdio servers on ONE workspace,
176
+ // 51.3GB resident, 8 with identical arguments. Since RC02 the serve host
177
+ // itself is booted by the CLI's serve transition BEFORE this action runs, so
178
+ // the relay composes its declared host but now defers autonomous activation
179
+ // to the shared serving body (see `effects.serve.deferActivationWhen`).
180
+ let isolation;
181
+ if (mode === 'stdio') {
182
+ if (opts.isolated === true || opts.finite === true) {
183
+ isolation = { reason: 'requested', workspaceRoot };
184
+ }
185
+ else {
186
+ const { resolveServeIdentity: resolveRelayIdentity } = await import("../../adapters/mcp/serve-identity.js");
187
+ const relayIdentity = resolveRelayIdentity(host, {
188
+ preset: opts.preset,
189
+ tools: opts.tools,
190
+ agent: opts.agent,
191
+ agentId: opts.agentId,
192
+ harness: opts.harness,
193
+ client: opts.client,
194
+ env: host.getEnvSnapshot()
195
+ }, runtimePurposePresets(host, configuredPresets));
196
+ const { resolveClientConnectionIdentity } = await import("./client-connection-identity.consumer.js");
197
+ const connection = await resolveClientConnectionIdentity(host, {
198
+ identity: relayIdentity,
199
+ env: host.getEnvSnapshot(),
200
+ workspaceRoot
201
+ });
202
+ const startup = await startStdioMcp({
203
+ lifecycle: host.lifecycle,
204
+ logger: getLogger('mcp.stdio-relay', host),
205
+ runtime: host,
206
+ workspaceRoot,
207
+ roots: getPathRoots(host),
208
+ processProbe: await hostProcessProbe(host),
209
+ identity: {
210
+ preset: relayIdentity.preset,
211
+ toolPatterns: relayIdentity.toolPatterns,
212
+ agent: connection.agentId,
213
+ harness: connection.harness,
214
+ harnessSessionId: connection.harnessSessionId,
215
+ agentSystemId: connection.agentSystemId,
216
+ projectIds: connection.projectIds,
217
+ home: connection.home,
218
+ client: opts.client
219
+ },
220
+ hostUrl: host.getEnv('VIBES_MCP_HOST_URL')
221
+ }, managedHostDependencies(host)).then(() => ({ failure: undefined }), thrown => ({ failure: CaughtFailureSchema.parse(thrown) }));
222
+ if (startup.failure !== undefined) {
223
+ if (!isWorkspaceNotAdmitted(startup.failure))
224
+ throw startup.failure;
225
+ await serveWorkspaceRefusal(host, startup.failure, () => stdoutCapture?.close() ?? Promise.resolve());
226
+ }
227
+ return;
228
+ }
229
+ }
230
+ const action = await (async () => {
231
+ let runtime = host;
232
+ await prepareMcpServeHost(runtime, workspaceRoot);
233
+ const resolvedLogger = await resolveMcpLogger(runtime, mode);
234
+ const logger = getLogger(resolvedLogger.fullNamespace, runtime);
235
+ // Runtime-owned and joined at disposal; started once per root.
236
+ void startConsumerBackgroundServices(runtime, logger);
237
+ // Fatal failures from background work are reported through the host's
238
+ // declared, runtime-scoped capability. Report-only: a crash is never
239
+ // swallowed for every runtime in the process (census #10).
240
+ const crashReporting = await subscribeServeCrashReports(runtime, logger);
241
+ const removeCrashIsolation = () => {
242
+ if (crashReporting.kind === 'subscribed')
243
+ crashReporting.stop();
244
+ };
245
+ // Dogfood: project .vibes/tools (registered by the boot's discovery pass)
246
+ // appear on MCP before selection/wire; their ids feed createMcpAdapter's
247
+ // [local] tagging.
248
+ const localToolsEnsure = reportLocalToolsForMcpServe(runtime, {
249
+ writeNotice: (line) => { stdio.write('stderr', `${line}\n`); },
250
+ logInfo: (message, meta) => logger.info(message, meta)
251
+ });
252
+ const localToolIds = localToolIdsForMcpAdapter(localToolsEnsure);
253
+ const customPresets = runtimePurposePresets(runtime, configuredPresets);
254
+ const { resolveServeIdentity } = await import("../../adapters/mcp/serve-identity.js");
255
+ const identity = resolveServeIdentity(runtime, {
256
+ preset: opts.preset,
257
+ tools: opts.tools,
258
+ agent: opts.agent,
259
+ agentId: opts.agentId,
260
+ harness: opts.harness,
261
+ client: opts.client,
262
+ env: runtime.getEnvSnapshot()
263
+ }, customPresets);
264
+ const mcpClientId = identity.harness;
265
+ // An HTTP host serves many agents and has no body of its own: it never
266
+ // writes an agent identity into its environment. Each connection declares
267
+ // its identity at `initialize`. Only a stdio server — spawned by one
268
+ // harness for one agent — resolves an identity for itself.
269
+ let stdioConnectionIdentity;
270
+ if (mode === 'stdio') {
271
+ const { resolveClientConnectionIdentity } = await import("./client-connection-identity.consumer.js");
272
+ stdioConnectionIdentity = WireInvokeCallerSchema.parse(await resolveClientConnectionIdentity(runtime, { identity, env: runtime.getEnvSnapshot(), workspaceRoot }));
273
+ }
274
+ const provenance = await getMcpBuildProvenance(runtime, workspaceRoot);
275
+ const { selectMcpTools, explainMcpToolSelection, mcpCatalogAttachKey } = await import('@vibesdotdev/mcp/adapters/mcp/tool-selection');
276
+ const enabledDescriptors = runtime.hasKind('tools/tool')
277
+ ? runtime.query('tools/tool').enabled().descriptors()
278
+ : [];
279
+ const selectedTools = selectMcpTools(enabledDescriptors, {
280
+ mcpClientId,
281
+ customPresets,
282
+ preset: identity.preset,
283
+ toolPatterns: identity.toolPatterns
284
+ });
285
+ const hasToolKind = runtime.hasKind('tools/tool');
286
+ const toolCount = hasToolKind ? selectedTools.descriptors.length : 0;
287
+ logger.info('MCP serve starting', {
288
+ hasToolKind,
289
+ toolCount,
290
+ localToolCount: localToolIds.length,
291
+ localToolIds: localToolIds.length > 0 ? localToolIds : undefined,
292
+ presetId: selectedTools.presetId,
293
+ harness: identity.harness,
294
+ agent: identity.agent,
295
+ identitySources: identity.sources,
296
+ limitedFrom: selectedTools.limitedFrom || undefined,
297
+ degraded: selectedTools.degraded || undefined,
298
+ buildProvenance: provenance.provenanceString,
299
+ sourceRoot: provenance.sourceRoot,
300
+ sourceGitRef: provenance.sourceGitRef,
301
+ sourceRefKind: provenance.sourceRefKind,
302
+ workspaceRoot: provenance.workspaceRoot,
303
+ workspaceGitRef: provenance.workspaceGitRef,
304
+ executableDistPath: provenance.executableDistPath,
305
+ distStale: provenance.distStale || undefined,
306
+ totalKinds: runtime.kindIds().length,
307
+ scope: runtime.scope
308
+ });
309
+ if (provenance.distStale) {
310
+ logger.warn('MCP serve with stale dist — code may not match current source', {
311
+ sourceGitRef: provenance.sourceGitRef,
312
+ commitTime: provenance.commitTime,
313
+ distStale: provenance.distStale
314
+ });
315
+ }
316
+ if (!provenance.sourceGitRef) {
317
+ logger.warn('MCP executable source cannot be certified', {
318
+ sourceRoot: provenance.sourceRoot,
319
+ sourceGitRef: provenance.sourceGitRef,
320
+ sourceRefKind: provenance.sourceRefKind,
321
+ workspaceRoot: provenance.workspaceRoot,
322
+ workspaceGitRef: provenance.workspaceGitRef,
323
+ executableDistPath: provenance.executableDistPath
324
+ });
325
+ }
326
+ if (selectedTools.degraded) {
327
+ logger.error('MCP serve DEGRADED — unknown client preset fallthrough', {
328
+ requestedClientId: mcpClientId,
329
+ resolvedPresetId: selectedTools.presetId,
330
+ degraded: selectedTools.degraded
331
+ });
332
+ }
333
+ // Exposure-funnel audit trail: registry → preset → wire. Tools used to
334
+ // vanish from MCP silently (config-gated plugins, preset filtering); this
335
+ // makes every exclusion and its reason greppable in stdout-capture.log.
336
+ // NOTE: no `availableIds` here — loader registration is still settling at
337
+ // this point (session bridge, scope qualifiers), so a loader check would
338
+ // report false zombies. buildServer logs the advisory separately.
339
+ if (hasToolKind) {
340
+ const exposure = explainMcpToolSelection(enabledDescriptors, {
341
+ mcpClientId,
342
+ customPresets,
343
+ preset: identity.preset,
344
+ toolPatterns: identity.toolPatterns
345
+ });
346
+ const excludedByReason = {};
347
+ for (const { id, reason } of exposure.excluded) {
348
+ (excludedByReason[reason] ??= []).push(id);
349
+ }
350
+ logger.info('MCP tool exposure', {
351
+ presetId: exposure.presetId,
352
+ registryEnabled: enabledDescriptors.length,
353
+ exposed: exposure.included.length,
354
+ exposedTools: exposure.included,
355
+ limitedFrom: exposure.limitedFrom || undefined,
356
+ degraded: exposure.degraded || undefined,
357
+ excludedByReason: Object.keys(excludedByReason).length > 0 ? excludedByReason : undefined
358
+ });
359
+ }
360
+ const initializeSessionContext = async () => {
361
+ const outcome = await (async () => {
362
+ const manager = await tryGetSessionManager(runtime);
363
+ const surfaceSessions = await loadSurfaceSessions(runtime);
364
+ if (manager) {
365
+ const { setSessionManager } = await import('@vibesdotdev/session/mcp/utils/participant');
366
+ setSessionManager(manager);
367
+ await surfaceSessions?.ensureParticipant();
368
+ // The HTTP host is one runtime serving many concurrent seats. It
369
+ // installs Session authority here, but each request carries its own
370
+ // participant/session through ToolCallContext. Adopting a process-global
371
+ // active session would make the last client win and refold the entire MCP
372
+ // catalog on every bind.
373
+ if (mode === 'http')
374
+ return;
375
+ // stdio: bind a FRESH session per connection — never adopt the
376
+ // workspace's persisted default/active session (would cross-
377
+ // contaminate parallel external-agent instances). HTTP keeps its
378
+ // own per-request model and never adopts an ambient active session.
379
+ let boundSessionId;
380
+ if (mode === 'stdio') {
381
+ boundSessionId = await bindFreshStdioSession(runtime);
382
+ // Self-healing sweep (L-03): crashed/killed stdio processes leak
383
+ // their fresh sessions as permanently-active rows (740+ had
384
+ // accumulated). Archive stale surface-owned sessions in the
385
+ // background; never block the MCP handshake on it.
386
+ if (runtime.scope.lifecycle !== 'finite' && surfaceSessions) {
387
+ void surfaceSessions.reapStale({ excludeSessionId: boundSessionId })
388
+ .then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }))
389
+ .then(outcome => {
390
+ if (outcome.error !== undefined)
391
+ logger.warn('stale-session reap failed', { error: valueFreeFailure(outcome.error) });
392
+ });
393
+ }
394
+ }
395
+ if (boundSessionId) {
396
+ await rebindWorkspaceEnvironmentForSession(runtime, boundSessionId);
397
+ }
398
+ else {
399
+ await rebindWorkspaceEnvironmentForActiveSession(runtime);
400
+ }
401
+ // Runtime-native bootstrap: announce the bound session so brain,
402
+ // presence and awareness pick it up for ALL harnesses at once
403
+ // (scope.qualifiers.sessionId via the scope subscription, and a
404
+ // turn.start awareness event) — no per-harness code.
405
+ await announceSessionBound(runtime, {
406
+ surface: 'mcp',
407
+ sessionId: boundSessionId
408
+ });
409
+ }
410
+ logger.info('Session context initialized');
411
+ })().then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }));
412
+ if (outcome.error !== undefined)
413
+ logger.warn('Session context initialization failed', { error: valueFreeFailure(outcome.error) });
414
+ };
415
+ const sessionToolsSelected = hasSessionTools(selectedTools.descriptors);
416
+ if (runtime.hasContext('session/manager')) {
417
+ if (mode === 'http') {
418
+ if (sessionToolsSelected) {
419
+ await initializeSessionContext();
420
+ logger.info('Session context initialized during HTTP startup for session tools');
421
+ }
422
+ else {
423
+ logger.info('Session context warm-up skipped during HTTP startup');
424
+ }
425
+ }
426
+ else {
427
+ await initializeSessionContext();
428
+ }
429
+ }
430
+ const envTimeout = runtime.getEnv('MCP_TOOL_TIMEOUT_MS');
431
+ const toolTimeoutMs = envTimeout ? parseInt(envTimeout, 10) : 10 * 60 * 1000;
432
+ const logLevel = z.enum(['debug', 'info', 'warn', 'error']).optional().parse(runtime.getEnv('MCP_LOG_LEVEL'));
433
+ const preloadTargets = parsePreloadKnowledgeBases(opts.preloadKnowledgeBases);
434
+ // Session authority belongs to the serving host, not an implementation
435
+ // generation. Retain the same manager and its connection/persistence maps.
436
+ const { registerHostBinding } = await import('@vibesdotdev/kernel/reload');
437
+ if (runtime.hasContext('session/manager')) {
438
+ const descriptor = runtime.assets('context').descriptor('session/manager');
439
+ if (descriptor)
440
+ registerHostBinding(runtime, ContextDescriptorSchema.parse(descriptor), await runtime.context('session/manager'));
441
+ }
442
+ const { startHostHotReload } = await import('@vibesdotdev/kernel-rpc/daemon/host-hot-reload');
443
+ const hotReload = runtime.scope.lifecycle === 'finite'
444
+ ? { enabled: false, reason: 'finite lifecycle' }
445
+ : await startHostHotReload(runtime, { installedUpdates: true, log: logger, validateCandidate: validateMcpGeneration });
446
+ if (hotReload.enabled) {
447
+ runtime = hotReload.runtime;
448
+ if (runtime.hasContext('session/manager')) {
449
+ const manager = await runtime.context('session/manager');
450
+ manager.bindRuntime(runtime);
451
+ }
452
+ }
453
+ if (mode === 'http') {
454
+ logger.debug('Entering HTTP serve branch');
455
+ // Workspace-scoped, not machine-global: an unset --port yields the port
456
+ // THIS workspace owns (cli/mcp/support/host-port.ts). An explicit
457
+ // --port is honoured exactly as given.
458
+ const { resolveMcpHostPort } = await import("../mcp/support/host-port.js");
459
+ const port = resolveMcpHostPort({ explicitPort: opts.port, workspaceRoot, env: host.getEnvSnapshot() });
460
+ // This host start's relay attestation (RC08 U7), on secrets' local
461
+ // attestation: a fresh secret in a 0600 claim beside the host claim.
462
+ // Only a relay that read it is attested; it rotates on every start and
463
+ // is withdrawn at stop.
464
+ const { createLocalAttestation } = await import('@vibesdotdev/secrets/attestation');
465
+ const { mcpRelayAttestationPath } = await import("../../adapters/mcp/host-registry.js");
466
+ const localAttestation = await createLocalAttestation({ claimPath: mcpRelayAttestationPath(workspaceRoot, getPathRoots(runtime)) }, runtime);
467
+ const relayAttestation = relayAttestationVerifier(localAttestation);
468
+ logger.debug('Creating MCP HTTP adapter');
469
+ const mcpSettings = await loadMcpConfig(runtime);
470
+ const adapter = createMcpAdapter(runtime, {
471
+ mode: 'http',
472
+ mcpClientId,
473
+ customPresets: configuredPresets,
474
+ preset: identity.preset,
475
+ toolPatterns: identity.toolPatterns,
476
+ port,
477
+ host: mcpSettings.httpHost,
478
+ relayAttestation,
479
+ logLevel,
480
+ toolExecutionTimeoutMs: toolTimeoutMs,
481
+ preloadedKnowledgeBaseIds: preloadTargets,
482
+ localToolIds,
483
+ buildProvenance: provenance.provenanceString,
484
+ staleBodyBanner: () => staleBodyBanner(runtime, hostIdentity),
485
+ scopedValues
486
+ }, logger);
487
+ logger.debug('Starting MCP HTTP adapter');
488
+ await adapter.start();
489
+ logger.debug('MCP HTTP adapter started');
490
+ // Self-heal for a replaced executable: banner on every result (stale-body.ts)
491
+ // and, for this managed body, a PM-rolled restart once the new file settles.
492
+ const freshnessWatch = runtime.scope.lifecycle === 'finite' || !hostIdentity ? null : startExecutableFreshnessWatch({ mode: 'http', runtime, workspaceRoot, managedProcessId: runtime.localEnvironment.managedProcessId?.() ?? null, identity: hostIdentity, logger, publishUpdate: hotReload.enabled ? () => hotReload.publishUpdate() : undefined });
493
+ // Advertise for relay clients. Written only AFTER a successful start,
494
+ // so a claim never points at a server that failed to bind.
495
+ const { writeHostClaim, clearHostClaim } = await import("../../adapters/mcp/host-registry.js");
496
+ const hostWorkspaceRoot = workspaceRoot;
497
+ // The claim names this process by the host's declared pid.
498
+ const hostPid = hostIdentity?.currentPid() ?? null;
499
+ const advertised = await (async () => {
500
+ if (hostPid === null) {
501
+ throw new CapabilityError('The host declares no process identity, so this process cannot name itself in a host claim.', 'UNAVAILABLE', { reason: 'host-identity-unavailable' });
502
+ }
503
+ await writeHostClaim(runtime, {
504
+ pid: hostPid,
505
+ port,
506
+ workspaceRoot: hostWorkspaceRoot,
507
+ startedAt: new Date().toISOString(),
508
+ // Advertise what this host actually serves so a relay can refuse
509
+ // a catalog it cannot honour instead of silently substituting.
510
+ presetId: selectedTools.presetId,
511
+ presetPolicyKey: purposePresetPolicyKey(customPresets),
512
+ catalogAttachKey: mcpCatalogAttachKey(selectedTools.presetId, customPresets),
513
+ clientId: mcpClientId
514
+ }, getPathRoots(runtime));
515
+ logger.info('MCP host advertised for relay clients', {
516
+ port,
517
+ workspaceRoot: hostWorkspaceRoot
518
+ });
519
+ })().then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }));
520
+ if (advertised.error !== undefined)
521
+ logger.warn('Could not advertise MCP host; relay clients cannot discover it', { error: valueFreeFailure(advertised.error) });
522
+ void triggerProgressiveIndexingInBackground(runtime, logger);
523
+ const lifetime = await createCLIActionLifetime(runtime, async () => {
524
+ freshnessWatch?.stop();
525
+ // Withdraw before shutting down, so a relay never attaches to a
526
+ // server that is on its way out — but only OUR claim: a stray body
527
+ // sharing this root must not un-advertise the live managed host.
528
+ const withdrawn = await localAttestation.dispose().then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }));
529
+ if (withdrawn.error !== undefined)
530
+ logger.warn('Could not withdraw the MCP relay attestation claim', { error: valueFreeFailure(withdrawn.error) });
531
+ if (hostPid !== null) {
532
+ const cleared = await clearHostClaim(runtime, hostWorkspaceRoot, getPathRoots(runtime), { pid: hostPid, logger }).then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }));
533
+ if (cleared.error !== undefined)
534
+ logger.warn('Could not withdraw the MCP host claim', { error: valueFreeFailure(cleared.error) });
535
+ }
536
+ const announced = await announceSessionUnbound(runtime, { surface: 'mcp', reason: 'signal' }).then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }));
537
+ if (announced.error !== undefined)
538
+ logger.warn('Could not announce MCP session closure', { error: valueFreeFailure(announced.error) });
539
+ removeCrashIsolation();
540
+ await adapter.shutdown();
541
+ if (hotReload.enabled)
542
+ await hotReload.stop();
543
+ });
544
+ lifetime.bindProcessSignals();
545
+ await lifetime.wait();
546
+ }
547
+ else {
548
+ let resolvedStdinError = null;
549
+ let requestTransportClose = () => { };
550
+ let freshnessWatch = null;
551
+ const adapter = createMcpAdapter(runtime, {
552
+ mode: 'stdio',
553
+ mcpClientId,
554
+ customPresets: configuredPresets,
555
+ // The launch identity the spawning harness established: verified (RC08 U7).
556
+ verifiedConnectionIdentity: stdioConnectionIdentity ? { source: STDIO_LAUNCH_SOURCE, caller: stdioConnectionIdentity } : undefined,
557
+ preset: identity.preset,
558
+ toolPatterns: identity.toolPatterns,
559
+ logLevel,
560
+ toolExecutionTimeoutMs: toolTimeoutMs,
561
+ preloadedKnowledgeBaseIds: preloadTargets,
562
+ localToolIds,
563
+ buildProvenance: provenance.provenanceString,
564
+ staleBodyBanner: () => staleBodyBanner(runtime, hostIdentity),
565
+ isolation,
566
+ scopedValues,
567
+ onStdioClose: async () => {
568
+ logger.debug('stdio transport closed');
569
+ requestTransportClose();
570
+ }
571
+ }, logger);
572
+ const lifetime = await createCLIActionLifetime(runtime, async (reason) => {
573
+ logger.debug(`shutting down stdio server: ${reason}`);
574
+ // Every step runs; a failed step never blocks the rest, and the
575
+ // teardown then rejects typed so the lifetime observes it.
576
+ await runTeardown(logger, [
577
+ // Close-half of announceSessionBound: emit session.unbound → turn.end
578
+ // before the runtime tears down.
579
+ ['session.unbound announcement', () => announceSessionUnbound(runtime, { surface: 'mcp', reason, sessionId: getBoundStdioSessionId(runtime) })],
580
+ ['freshness watch', () => freshnessWatch?.stop()],
581
+ // Close-half of bindFreshStdioSession (L-03): archive this process's
582
+ // minted session so clean exits leave no active-session leak behind.
583
+ ['stdio session archive', () => archiveBoundStdioSession(runtime)],
584
+ ['crash reporting', () => removeCrashIsolation()],
585
+ ['adapter shutdown', () => adapter.shutdown()],
586
+ ['hot reload', () => (hotReload.enabled ? hotReload.stop() : undefined)],
587
+ ['stdout capture close', () => stdoutCapture?.close()]
588
+ ]);
589
+ });
590
+ requestTransportClose = () => {
591
+ // The owner action's lifetime.wait() observes a cleanup failure.
592
+ void lifetime.request('transport-close');
593
+ };
594
+ await adapter.start();
595
+ // A stdio body cannot restart itself (its client owns it); the watch
596
+ // announces a replaced executable on every result and asks for help.
597
+ freshnessWatch = runtime.scope.lifecycle === 'finite' || !hostIdentity ? null : startExecutableFreshnessWatch({ mode: 'stdio', runtime, workspaceRoot, managedProcessId: runtime.localEnvironment.managedProcessId?.() ?? null, identity: hostIdentity, logger, publishUpdate: hotReload.enabled ? () => hotReload.publishUpdate() : undefined });
598
+ void triggerProgressiveIndexingInBackground(runtime, logger);
599
+ lifetime.bindProcessSignals();
600
+ const onStdinEnd = () => {
601
+ void lifetime.request('stdin-end');
602
+ };
603
+ const onStdinClose = () => {
604
+ void lifetime.request('stdin-close');
605
+ };
606
+ const onStdinError = (err) => {
607
+ resolvedStdinError = err ?? new CapabilityError('The stdin error event supplied no failure.', 'INVALID_INPUT', { reason: 'stdin-error-invalid' });
608
+ logger.error('stdin failed', { failure: valueFreeFailure(CaughtFailureSchema.parse(resolvedStdinError)) });
609
+ void lifetime.request('stdin-error');
610
+ };
611
+ const stdinEvents = await getRuntimeStdinEvents(runtime);
612
+ const detachStdin = [
613
+ stdinEvents.subscribeStdin('end', onStdinEnd),
614
+ stdinEvents.subscribeStdin('close', onStdinClose),
615
+ stdinEvents.subscribeStdin('error', onStdinError)
616
+ ];
617
+ // A pending promise is not an event-loop handle: while the lifetime is
618
+ // open, this runtime-owned tick keeps the serving process alive. It is
619
+ // the runtime's timer (RC07), cleared on dispose. A finite host refuses
620
+ // background intervals; that refusal is honoured (no keep-alive).
621
+ // The command's own runtime, not a hot-reload generation: a reload
622
+ // disposes its generation, and the serving process must outlive it.
623
+ const keepAlive = startLifecycleRepeat(host.lifecycle, 60_000, () => { });
624
+ if (keepAlive.kind === 'refused')
625
+ logger.debug('finite host: no stdio keep-alive tick', { reason: keepAlive.refusal.reason });
626
+ try {
627
+ await lifetime.wait();
628
+ }
629
+ finally {
630
+ if (keepAlive.kind === 'repeating')
631
+ keepAlive.stop();
632
+ for (const detach of detachStdin)
633
+ detach();
634
+ }
635
+ if (resolvedStdinError)
636
+ requestCLIExit(1, { cause: CaughtFailureSchema.parse(resolvedStdinError) });
637
+ }
638
+ })().then(() => ({ error: undefined }), error => ({ error: CaughtFailureSchema.parse(error) }));
639
+ if (action.error !== undefined) {
640
+ if (isCLIExitSignal(action.error))
641
+ throw action.error;
642
+ stdio.write('stderr', `FATAL: Failed to start MCP server: ${JSON.stringify(valueFreeFailure(action.error))}\n`);
643
+ requestCLIExit(1, { cause: action.error });
644
+ }
645
+ }
646
+ export default createRuntimeImplementation({
647
+ id: 'dev.mcp.serve',
648
+ kind: 'cli/command',
649
+ constraint: { hardware: ['consumer'] },
650
+ implementation: {
651
+ execute: executeMcpCommand,
652
+ // A default stdio relay runs on a transport host (CLI floor + entry): what it
653
+ // needs there before attaching to the shared body (see stdio-relay-transport.ts).
654
+ transportPlugins: stdioRelayTransportPlugins
655
+ }
656
+ });
657
+ //# sourceMappingURL=dev.mcp.serve.impl.consumer.js.map