@vibesdotdev/mcp 0.0.0-stage → 1.0.0-rc.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 (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,225 @@
1
+ /**
2
+ * Executable-freshness watch — the MCP body's self-heal for a replaced binary.
3
+ *
4
+ * Every 30s the body asks TWO nerves whether the build it is serving still
5
+ * matches disk: executable-identity (was the file at my own path replaced?) and
6
+ * graph-freshness (was the module graph under my resolution root replaced?).
7
+ * The second one is the thin host's normal case — the binary is recompiled very
8
+ * rarely and `vibes update` moves the plugins instead. When either fires:
9
+ * - it logs the injury once, at ERROR, with the exact remedy;
10
+ * - every tool result already carries the banner (adapters/mcp/stale-body.ts);
11
+ * - a MANAGED body (VIBES_PM_MANAGED set, http mode) asks the PM daemon to
12
+ * roll it once the new file has settled for `settleMs` (an install by
13
+ * atomic rename settles instantly; a slow copy must not be exec'd mid-write);
14
+ * - a stdio body cannot be restarted by anyone but its client, so it stops at
15
+ * the banner — "do everything you can, then ask for help".
16
+ *
17
+ * Measured need (2026-08-28): the managed HTTP body ran a deleted inode for
18
+ * 8h45m after a release install until a health-check kill replaced it by
19
+ * accident. This turns that accident into a design.
20
+ *
21
+ * Measured failure (2026-09-05): an http body from a retired worktree binary
22
+ * (ppid 1, alive 46h) still carried the VIBES_PM_MANAGED=mcp-server-dev stamp
23
+ * PM had given its ancestor. Its own graph was stale forever, so every retry
24
+ * window it asked PM to roll `mcp-server-dev` — and PM rolled the healthy
25
+ * shared host: 552 of 586 restarts that day, each one failing every in-flight
26
+ * relay call. A stamp is inherited by descendants and orphans; it is not proof
27
+ * of identity. So before asking, the watch proves that PM tracks THIS pid
28
+ * under that id, disables itself for good on a mismatch, and gives up after a
29
+ * bounded number of requests. The daemon enforces the same proof on its side
30
+ * (`expectedPid` on the restart RPC).
31
+ */
32
+ import { startLifecycleRepeat } from "../lifecycle-repeat.js";
33
+ import { settle, valueFreeFailure } from '@vibesdotdev/kernel';
34
+ import { getStaleBodyVerdict } from "../adapters/mcp/stale-body.consumer.js";
35
+ /** The PM daemon of this serve host's own workspace, on the host's runtime; never auto-started. */
36
+ async function managedPmClient(runtime, workspaceRoot) {
37
+ const { PMClient } = await import('@vibesdotdev/pm/client');
38
+ return new PMClient(undefined, { runtime, workspaceRoot, autoStartDaemon: false });
39
+ }
40
+ function defaultRequestRestart(runtime, workspaceRoot) {
41
+ return async (processId, guard) => {
42
+ const pm = await managedPmClient(runtime, workspaceRoot);
43
+ await pm.restart(processId, undefined, guard);
44
+ };
45
+ }
46
+ function defaultResolveManagedPid(runtime, workspaceRoot) {
47
+ return async (processId) => {
48
+ const pm = await managedPmClient(runtime, workspaceRoot);
49
+ const state = await pm.getStatus(processId);
50
+ return state?.pid ?? null;
51
+ };
52
+ }
53
+ export function startExecutableFreshnessWatch(options) {
54
+ const intervalMs = options.intervalMs ?? 30_000;
55
+ const settleMs = options.settleMs ?? 30_000;
56
+ const retryMs = options.retryMs ?? 5 * 60_000;
57
+ const maxRestartRequests = options.maxRestartRequests ?? 3;
58
+ const now = options.now ?? (() => Date.now());
59
+ const requestRestart = options.requestRestart ?? defaultRequestRestart(options.runtime, options.workspaceRoot);
60
+ const resolveManagedPid = options.resolveManagedPid ?? defaultResolveManagedPid(options.runtime, options.workspaceRoot);
61
+ const selfPid = options.selfPid ?? options.identity.currentPid();
62
+ const managedProcessId = options.managedProcessId?.trim() || null;
63
+ let announced = false;
64
+ let restartRequestedAt = null;
65
+ let publishAttemptedAt = null;
66
+ /** Set once publication reports that only a kernel restart can serve the new graph. */
67
+ let maintenanceRequired = false;
68
+ let restartRequests = 0;
69
+ let stopped = false;
70
+ /** Stops the tick: the runtime lifecycle's interval disposer (RC07). */
71
+ let stopTick = null;
72
+ /**
73
+ * Every report goes through here: once the watch is stopped (its service is
74
+ * disposing, its logger may already refuse entries) an in-flight tick that
75
+ * resumes from an await reports nothing.
76
+ */
77
+ const report = (level, message, details) => {
78
+ if (stopped)
79
+ return;
80
+ options.logger[level](message, details);
81
+ };
82
+ /** Permanent: this body must never ask again. The banner stays on every result. */
83
+ const disable = (message, details) => {
84
+ if (stopped)
85
+ return;
86
+ stopped = true;
87
+ stopTick?.();
88
+ options.logger.error(message, { ...details, processId: managedProcessId, selfPid });
89
+ };
90
+ const tick = async () => {
91
+ if (stopped)
92
+ return;
93
+ const verdict = getStaleBodyVerdict(options.runtime, options.identity, now());
94
+ if (verdict.replaced !== true)
95
+ return;
96
+ if (!announced) {
97
+ announced = true;
98
+ report('error', verdict.nerve === 'graph-replaced'
99
+ ? 'STALE BODY — the module graph under this server\'s resolution root was replaced after it started'
100
+ : 'STALE BODY — the vibes executable was replaced after this server started', {
101
+ reason: verdict.reason,
102
+ nerve: verdict.nerve,
103
+ mode: options.mode,
104
+ managedProcessId,
105
+ banner: verdict.banner
106
+ });
107
+ }
108
+ if (options.mode !== 'http' || !managedProcessId)
109
+ return; // stdio: the client owns the respawn
110
+ // Settle on whichever artifact actually moved: a half-written lockfile is
111
+ // as bad to boot against as a half-copied binary.
112
+ const settleMtime = verdict.nerve === 'graph-replaced'
113
+ ? (options.identity.graphFreshness(options.identity.hostRoot()).current?.mtimeMs ?? null)
114
+ : (options.identity.checkExecutableFreshness().current?.mtimeMs ?? null);
115
+ if (settleMtime !== null && now() - settleMtime < settleMs) {
116
+ report('info', 'replaced build has not settled yet; deferring managed restart', {
117
+ settleMs,
118
+ nerve: verdict.nerve
119
+ });
120
+ return;
121
+ }
122
+ // A host may provide a generation-aware publisher that swaps in the
123
+ // verified artifact while retaining live transports. Try it first. When it
124
+ // answers that only a kernel restart can serve the new graph, fall through
125
+ // to the guarded PM restart below. Measured 2026-09-26: without that
126
+ // fall-through the shared host logged "kernel maintenance required" every
127
+ // retry for hours, served stale code, and re-ran publication each time
128
+ // while new clients connected.
129
+ if (options.publishUpdate && !maintenanceRequired) {
130
+ if (publishAttemptedAt !== null && now() - publishAttemptedAt < retryMs)
131
+ return;
132
+ publishAttemptedAt = now();
133
+ report('info', 'checking whether the changed artifact can be published in this host', {
134
+ processId: managedProcessId,
135
+ nerve: verdict.nerve
136
+ });
137
+ const published = await settle(() => options.publishUpdate?.() ?? false);
138
+ if (!published.ok) {
139
+ if (stopped)
140
+ return;
141
+ report('error', 'artifact publication failed; serving generation and transports retained', {
142
+ processId: managedProcessId,
143
+ error: valueFreeFailure(published.cause),
144
+ retryInMs: retryMs
145
+ });
146
+ return;
147
+ }
148
+ if (published.value)
149
+ return;
150
+ if (stopped)
151
+ return;
152
+ maintenanceRequired = true;
153
+ report('warn', 'kernel maintenance required; asking the PM daemon to roll this host', {
154
+ processId: managedProcessId,
155
+ nerve: verdict.nerve
156
+ });
157
+ }
158
+ if (restartRequestedAt !== null && now() - restartRequestedAt < retryMs)
159
+ return;
160
+ if (restartRequests >= maxRestartRequests) {
161
+ disable('managed restart was requested repeatedly and this body is still running; it stops asking', { restartRequests, maxRestartRequests });
162
+ return;
163
+ }
164
+ // A VIBES_PM_MANAGED stamp is inherited by every descendant and survives
165
+ // the parent. Only the pid PM tracks under that id may ask to be rolled.
166
+ const managed = await settle(() => resolveManagedPid(managedProcessId));
167
+ if (!managed.ok) {
168
+ if (stopped)
169
+ return;
170
+ restartRequestedAt = now();
171
+ report('warn', 'could not verify this body against the PM daemon; not requesting a roll', {
172
+ processId: managedProcessId,
173
+ error: valueFreeFailure(managed.cause),
174
+ retryInMs: retryMs
175
+ });
176
+ return;
177
+ }
178
+ const managedPid = managed.value;
179
+ // Stopped while the daemon answered: a disposing body never asks to be rolled.
180
+ if (stopped)
181
+ return;
182
+ if (managedPid !== selfPid) {
183
+ disable('VIBES_PM_MANAGED names a process this body is not (inherited stamp); never asking PM to roll it', { managedPid });
184
+ return;
185
+ }
186
+ restartRequestedAt = now();
187
+ restartRequests += 1;
188
+ report('warn', 'asking the PM daemon to roll this managed body onto the new executable', {
189
+ processId: managedProcessId,
190
+ selfPid,
191
+ attempt: restartRequests,
192
+ maxRestartRequests
193
+ });
194
+ const restarted = await settle(() => requestRestart(managedProcessId, { expectedPid: selfPid }));
195
+ if (!restarted.ok) {
196
+ report('error', 'managed restart request failed; the banner stays on every result', {
197
+ processId: managedProcessId,
198
+ error: valueFreeFailure(restarted.cause),
199
+ retryInMs: retryMs
200
+ });
201
+ }
202
+ };
203
+ // A persistent host's tick. A finite host refuses background intervals; the
204
+ // refusal is honoured: no background watch, `tick()` stays callable on demand.
205
+ const repeat = startLifecycleRepeat(options.runtime.lifecycle, intervalMs, () => {
206
+ void (async () => {
207
+ const read = await settle(() => tick());
208
+ if (read.ok || stopped)
209
+ return;
210
+ report('warn', 'executable freshness tick failed', { error: valueFreeFailure(read.cause) });
211
+ })();
212
+ });
213
+ if (repeat.kind === 'repeating')
214
+ stopTick = repeat.stop;
215
+ else
216
+ report('info', 'finite host: no background executable freshness watch', { reason: repeat.refusal.reason });
217
+ return {
218
+ stop() {
219
+ stopped = true;
220
+ stopTick?.();
221
+ },
222
+ tick
223
+ };
224
+ }
225
+ //# sourceMappingURL=executable-freshness-watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executable-freshness-watch.js","sourceRoot":"","sources":["../../src/surface-mcp/executable-freshness-watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The thin host's provenance line, printed once on stderr when `dev mcp serve`
3
+ * starts.
4
+ *
5
+ * WHY IT EXISTS. Before the flip, "what code is this body running?" was answered
6
+ * by the executable alone, and `build-provenance.ts` answered it by comparing
7
+ * the source checkout's git ref against the opened workspace's. Under the thin
8
+ * host that comparison is meaningless — the source root is a package under
9
+ * `node_modules` and the workspace is whatever project the agent opened — so
10
+ * WU-11 deleted the `sourceWorkspaceDiverged` verdict. This line is what
11
+ * replaces it: the three facts that DO identify a thin-host body, each read
12
+ * from the thing that actually varies.
13
+ *
14
+ * shim@<sha> the compiled binary's own source sha (`VIBES_SHIM_SOURCE_SHA`,
15
+ * published by the shim). Changes only on a rebuild.
16
+ * host <name>@<version> the on-disk host package the shim imported, read
17
+ * from the manifest beside `VIBES_HOST_ENTRY` — the SAME FILE
18
+ * `vibes --version` reads, so the two can never disagree.
19
+ * lock@<digest> the graph nerve: sha256/12 of `<R>/bun.lock`, R being the
20
+ * host identity's declared root. This is the
21
+ * one that moves in ordinary use — `vibes update`, `plugins
22
+ * add`, a linked provider's checkout moving — while the
23
+ * executable stays byte-identical.
24
+ *
25
+ * STDERR, NEVER STDOUT: stdout is the JSON-RPC channel. Written before
26
+ * the stdout capture lease (`acquireStdoutCapture`), so no capture policy can swallow the one line
27
+ * that says which body answered.
28
+ *
29
+ * Read through the runtime (filesystem, paths, host identity) and NEVER throws: a provenance probe must
30
+ * not be able to stop a server from starting. Unknown facts are reported as
31
+ * `unknown`, never omitted — a missing field would read as a shape change,
32
+ * while `unknown` is a fact about the body.
33
+ */
34
+ import { type RuntimeHostIdentity, type VibesRuntime } from '@vibesdotdev/kernel';
35
+ /**
36
+ * `shim@<sha> host <name>@<ver> lock@<digest>` — plan §10 row 11's falsifier
37
+ * shape. A SINGLE COMPILED BODY (the monolith) has no host package and no
38
+ * resolution root on disk, so it honestly reports `host unknown lock@unknown`;
39
+ * that is the shape's answer to "this body cannot name its graph", not a gap.
40
+ * A thin host at a root with no lockfile reports `lock@none`.
41
+ */
42
+ export declare function hostProvenanceBanner(runtime: VibesRuntime, identity: RuntimeHostIdentity | null): Promise<string>;
43
+ /**
44
+ * Write the banner to the runtime's stderr once, when serve starts. Composing
45
+ * the line never throws; a host whose text output refuses fails here, typed,
46
+ * exactly as the serve body that needs that output would.
47
+ */
48
+ export declare function writeHostProvenanceBanner(runtime: VibesRuntime, identity: RuntimeHostIdentity | null): Promise<void>;
49
+ //# sourceMappingURL=host-provenance-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-provenance-banner.d.ts","sourceRoot":"","sources":["../../src/surface-mcp/host-provenance-banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAOH,OAAO,EAA6C,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA2E7H;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAIvH;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1H"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * The thin host's provenance line, printed once on stderr when `dev mcp serve`
3
+ * starts.
4
+ *
5
+ * WHY IT EXISTS. Before the flip, "what code is this body running?" was answered
6
+ * by the executable alone, and `build-provenance.ts` answered it by comparing
7
+ * the source checkout's git ref against the opened workspace's. Under the thin
8
+ * host that comparison is meaningless — the source root is a package under
9
+ * `node_modules` and the workspace is whatever project the agent opened — so
10
+ * WU-11 deleted the `sourceWorkspaceDiverged` verdict. This line is what
11
+ * replaces it: the three facts that DO identify a thin-host body, each read
12
+ * from the thing that actually varies.
13
+ *
14
+ * shim@<sha> the compiled binary's own source sha (`VIBES_SHIM_SOURCE_SHA`,
15
+ * published by the shim). Changes only on a rebuild.
16
+ * host <name>@<version> the on-disk host package the shim imported, read
17
+ * from the manifest beside `VIBES_HOST_ENTRY` — the SAME FILE
18
+ * `vibes --version` reads, so the two can never disagree.
19
+ * lock@<digest> the graph nerve: sha256/12 of `<R>/bun.lock`, R being the
20
+ * host identity's declared root. This is the
21
+ * one that moves in ordinary use — `vibes update`, `plugins
22
+ * add`, a linked provider's checkout moving — while the
23
+ * executable stays byte-identical.
24
+ *
25
+ * STDERR, NEVER STDOUT: stdout is the JSON-RPC channel. Written before
26
+ * the stdout capture lease (`acquireStdoutCapture`), so no capture policy can swallow the one line
27
+ * that says which body answered.
28
+ *
29
+ * Read through the runtime (filesystem, paths, host identity) and NEVER throws: a provenance probe must
30
+ * not be able to stop a server from starting. Unknown facts are reported as
31
+ * `unknown`, never omitted — a missing field would read as a shape change,
32
+ * while `unknown` is a fact about the body.
33
+ */
34
+ import * as z from 'zod/v4';
35
+ import { resolveFileSystemAdapter } from '@vibesdotdev/filesystem/client/resolve-adapter';
36
+ import { getLogger } from '@vibesdotdev/logging';
37
+ import { getRuntimePath } from '@vibesdotdev/paths';
38
+ import { getRuntimeStdio, settle, valueFreeFailure } from '@vibesdotdev/kernel';
39
+ const UNKNOWN = 'unknown';
40
+ /** The host package manifest fields the label uses, each read independently. */
41
+ const ManifestNameSchema = z.string().min(1);
42
+ const ManifestVersionSchema = z.string().min(1);
43
+ const HostPackageManifestSchema = z.object({
44
+ name: z.string().optional(),
45
+ version: z.string().optional()
46
+ });
47
+ function env(runtime, key) {
48
+ const value = runtime.getEnv(key)?.trim() ?? '';
49
+ return value.length > 0 ? value : null;
50
+ }
51
+ function textOf(value) {
52
+ if (value instanceof Uint8Array)
53
+ return new TextDecoder().decode(value);
54
+ return value;
55
+ }
56
+ /** `<name>@<version>` from the host package manifest, or this banner's `unknown`. */
57
+ async function readHostManifestLabel(runtime, hostEntry) {
58
+ const path = await getRuntimePath(runtime);
59
+ // The host package lives outside the workspace: the unbound host adapter reads it.
60
+ const filesystem = await resolveFileSystemAdapter(runtime, { binding: false });
61
+ const manifestPath = path.join(path.dirname(hostEntry), 'package.json');
62
+ if (!(await filesystem.exists(manifestPath)))
63
+ return UNKNOWN;
64
+ const text = textOf(await filesystem.readFile(manifestPath, 'utf8'));
65
+ const parsed = HostPackageManifestSchema.parse(JSON.parse(text));
66
+ const name = ManifestNameSchema.safeParse(parsed.name);
67
+ const version = ManifestVersionSchema.safeParse(parsed.version);
68
+ if (!name.success)
69
+ return UNKNOWN;
70
+ return `${name.data}@${version.success ? version.data : UNKNOWN}`;
71
+ }
72
+ /** `<name>@<version>` of the host package whose entry the shim imported, read through the runtime filesystem. */
73
+ async function hostPackageLabel(runtime) {
74
+ const hostEntry = env(runtime, 'VIBES_HOST_ENTRY');
75
+ if (!hostEntry)
76
+ return UNKNOWN;
77
+ const read = await settle(() => readHostManifestLabel(runtime, hostEntry));
78
+ if (read.ok)
79
+ return read.value;
80
+ // `unknown` is this banner's declared answer for a manifest it cannot read.
81
+ getLogger('mcp', runtime).debug('host provenance: host manifest unreadable', { error: valueFreeFailure(read.cause) });
82
+ return UNKNOWN;
83
+ }
84
+ /**
85
+ * Lock digest of the resolution root R this process was pinned to, through
86
+ * the host's declared process identity.
87
+ *
88
+ * Same vocabulary the shim's `--version` line uses (`lock <digest|none>`): a
89
+ * root that carries NO lockfile is `none` — a fact about the graph — while
90
+ * `unknown` means this process could not name a root, has no host identity,
91
+ * or could not read the lock. Collapsing them would report "no graph nerve"
92
+ * and "I never looked" as the same answer.
93
+ */
94
+ async function lockLabel(runtime, identity) {
95
+ if (!identity)
96
+ return UNKNOWN;
97
+ // R is the host's declared root, never a VIBES_HOST_ROOT the environment carries: an inherited one names a parent's graph.
98
+ const read = await settle(() => {
99
+ const root = identity.hostRoot();
100
+ if (root === null)
101
+ return UNKNOWN;
102
+ const current = identity.graphFreshness(root).current;
103
+ if (current === null)
104
+ return UNKNOWN;
105
+ if (current.lockPath === null)
106
+ return 'none';
107
+ return current.digest ?? UNKNOWN;
108
+ });
109
+ if (read.ok)
110
+ return read.value;
111
+ // `unknown` is this banner's declared answer for a root it cannot digest.
112
+ getLogger('mcp', runtime).debug('host provenance: lock digest unavailable', { error: valueFreeFailure(read.cause) });
113
+ return UNKNOWN;
114
+ }
115
+ /**
116
+ * `shim@<sha> host <name>@<ver> lock@<digest>` — plan §10 row 11's falsifier
117
+ * shape. A SINGLE COMPILED BODY (the monolith) has no host package and no
118
+ * resolution root on disk, so it honestly reports `host unknown lock@unknown`;
119
+ * that is the shape's answer to "this body cannot name its graph", not a gap.
120
+ * A thin host at a root with no lockfile reports `lock@none`.
121
+ */
122
+ export async function hostProvenanceBanner(runtime, identity) {
123
+ const shim = env(runtime, 'VIBES_SHIM_SOURCE_SHA') ?? env(runtime, 'VIBES_SHIM_VERSION') ?? UNKNOWN;
124
+ return `shim@${shim} host ${await hostPackageLabel(runtime)} lock@${await lockLabel(runtime, identity)}`;
125
+ }
126
+ /**
127
+ * Write the banner to the runtime's stderr once, when serve starts. Composing
128
+ * the line never throws; a host whose text output refuses fails here, typed,
129
+ * exactly as the serve body that needs that output would.
130
+ */
131
+ export async function writeHostProvenanceBanner(runtime, identity) {
132
+ const line = `[mcp] ${await hostProvenanceBanner(runtime, identity)}`;
133
+ (await getRuntimeStdio(runtime)).write('stderr', `${line}\n`);
134
+ }
135
+ //# sourceMappingURL=host-provenance-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-provenance-banner.js","sourceRoot":"","sources":["../../src/surface-mcp/host-provenance-banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Runtime Surface — MCP
3
+ *
4
+ * The MCP surface boots nothing of its own (rc02-rc03 §2.3).
5
+ *
6
+ * - `vibes dev mcp serve` is a serve command. Its descriptor declares
7
+ * `effects.serve`, so the CLI disposes its un-activated runtime and boots the
8
+ * serve host through the one entry (`bootstrapVibesRuntime`) before the
9
+ * action runs: surface and purpose `mcp`, an `ipc-worker` venue, request
10
+ * principals, `sharedHost`, `qualifiers.serve: 'dev.mcp.serve'`, and the
11
+ * CLI's `--finite ? finite : persistent` lifecycle. That boot composes the
12
+ * workspace's plugins, discovers, activates and wires; its workspace is the
13
+ * kernel's one binding (`--workspace-root`, else the nearest workspace above
14
+ * the cwd).
15
+ * - A hosted MCP endpoint boots through the same entry behind its isolate
16
+ * `prepare`, with the environment its integration registers and a literal
17
+ * composition of its cloud tool plugins, and serves through
18
+ * `./adapters/mcp/web-handler`.
19
+ *
20
+ * What stays here is the work the serve action does on that ready host.
21
+ */
22
+ import { type VibesRuntime } from '@vibesdotdev/kernel';
23
+ /** The serve command whose host this surface prepares (its `qualifiers.serve`). */
24
+ export declare const MCP_SERVE_COMMAND_ID: "dev.mcp.serve";
25
+ /**
26
+ * The workspace-health signal for a serve host bound to its launch directory
27
+ * because nothing above it marks a workspace (rc02-rc03 C5), or null when the
28
+ * binding is explicit or a marked workspace. A client that launches the server
29
+ * from an arbitrary directory lands here; agent-facing tools surface it.
30
+ */
31
+ export declare function mcpServeWorkspaceWarning(runtime: Pick<VibesRuntime, 'declaredScope' | 'localEnvironment'>): string | null;
32
+ /**
33
+ * Prepare the MCP serve host the CLI booted for `dev mcp serve`: the serve
34
+ * action's own work on an already-activated runtime. It never bootstraps,
35
+ * patches the declared scope, or re-registers kernel plugins.
36
+ *
37
+ * - `projectRefPlugin` when the composition carries no `workspace` plugin, so
38
+ * ProjectRef authority exists either way (a plugin registered on a ready
39
+ * host activates at registration).
40
+ * - The `mcp/workspace-warning` context.
41
+ * - On consumer hardware, the workspace environment bound to `workspaceRoot`;
42
+ * the serve host is nobody's session until one binds (the session registry).
43
+ *
44
+ * `workspaceRoot` is the host's bound workspace, read by the caller from
45
+ * `runtime/workspace-path` (an unbound host fails there, `workspace-unbound`).
46
+ */
47
+ export declare function prepareMcpServeHost(runtime: VibesRuntime, workspaceRoot: string): Promise<void>;
48
+ export { MCP_WORKSPACE_WARNING_CONTEXT_ID, readMcpWorkspaceWarning } from './workspace-warning.ts';
49
+ export type { McpProjectRootResolution } from './project-config.ts';
50
+ export { ensureConsumerBackgroundServices, rebindWorkspaceEnvironmentForActiveSession, rebindWorkspaceEnvironmentForSession, triggerProgressiveIndexingInBackground } from './serve-lifecycle.ts';
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/surface-mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMzE,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAG,eAAwB,CAAC;AAE7D;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,kBAAkB,CAAC,GAC/D,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED,OAAO,EACN,gCAAgC,EAChC,uBAAuB,EACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EACN,gCAAgC,EAChC,0CAA0C,EAC1C,oCAAoC,EACpC,sCAAsC,EACtC,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Runtime Surface — MCP
3
+ *
4
+ * The MCP surface boots nothing of its own (rc02-rc03 §2.3).
5
+ *
6
+ * - `vibes dev mcp serve` is a serve command. Its descriptor declares
7
+ * `effects.serve`, so the CLI disposes its un-activated runtime and boots the
8
+ * serve host through the one entry (`bootstrapVibesRuntime`) before the
9
+ * action runs: surface and purpose `mcp`, an `ipc-worker` venue, request
10
+ * principals, `sharedHost`, `qualifiers.serve: 'dev.mcp.serve'`, and the
11
+ * CLI's `--finite ? finite : persistent` lifecycle. That boot composes the
12
+ * workspace's plugins, discovers, activates and wires; its workspace is the
13
+ * kernel's one binding (`--workspace-root`, else the nearest workspace above
14
+ * the cwd).
15
+ * - A hosted MCP endpoint boots through the same entry behind its isolate
16
+ * `prepare`, with the environment its integration registers and a literal
17
+ * composition of its cloud tool plugins, and serves through
18
+ * `./adapters/mcp/web-handler`.
19
+ *
20
+ * What stays here is the work the serve action does on that ready host.
21
+ */
22
+ import { CapabilityError } from '@vibesdotdev/kernel';
23
+ import { projectRefPlugin, resolveProjectRefContext } from '@vibesdotdev/workspace/project-ref';
24
+ import { tryResolveWorkspaceEnvironment, workspaceEnvironmentKind } from '@vibesdotdev/workspace/environment';
25
+ import { publishMcpWorkspaceWarning } from "./workspace-warning.js";
26
+ /** The serve command whose host this surface prepares (its `qualifiers.serve`). */
27
+ export const MCP_SERVE_COMMAND_ID = 'dev.mcp.serve';
28
+ /**
29
+ * The workspace-health signal for a serve host bound to its launch directory
30
+ * because nothing above it marks a workspace (rc02-rc03 C5), or null when the
31
+ * binding is explicit or a marked workspace. A client that launches the server
32
+ * from an arbitrary directory lands here; agent-facing tools surface it.
33
+ */
34
+ export function mcpServeWorkspaceWarning(runtime) {
35
+ if (runtime.declaredScope.workspace?.root)
36
+ return null;
37
+ const binding = runtime.localEnvironment.workspaceBinding?.() ?? null;
38
+ if (binding?.source !== 'cwd')
39
+ return null;
40
+ return (`vibes MCP found no workspace marker (.git, or a package.json declaring workspaces) ` +
41
+ `above its launch directory, so it bound that directory itself: ${binding.root}. ` +
42
+ `Tools may read the wrong project. Fix: pass --workspace-root <dir> in the MCP client ` +
43
+ `config, or launch the server with its cwd inside the repository.`);
44
+ }
45
+ /**
46
+ * Prepare the MCP serve host the CLI booted for `dev mcp serve`: the serve
47
+ * action's own work on an already-activated runtime. It never bootstraps,
48
+ * patches the declared scope, or re-registers kernel plugins.
49
+ *
50
+ * - `projectRefPlugin` when the composition carries no `workspace` plugin, so
51
+ * ProjectRef authority exists either way (a plugin registered on a ready
52
+ * host activates at registration).
53
+ * - The `mcp/workspace-warning` context.
54
+ * - On consumer hardware, the workspace environment bound to `workspaceRoot`;
55
+ * the serve host is nobody's session until one binds (the session registry).
56
+ *
57
+ * `workspaceRoot` is the host's bound workspace, read by the caller from
58
+ * `runtime/workspace-path` (an unbound host fails there, `workspace-unbound`).
59
+ */
60
+ export async function prepareMcpServeHost(runtime, workspaceRoot) {
61
+ const serve = runtime.declaredScope.qualifiers.serve;
62
+ if (serve !== MCP_SERVE_COMMAND_ID) {
63
+ throw new CapabilityError(`The MCP serve surface runs on the '${MCP_SERVE_COMMAND_ID}' serve host; this host declared ${serve ? `'${serve}'` : 'no serve command'}.`, 'CONFLICT', { reason: 'scope-conflict', details: { origin: 'prepareMcpServeHost', serve: serve ?? null } });
64
+ }
65
+ if (!runtime.hasPlugin('workspace') && !runtime.hasPlugin(projectRefPlugin.id)) {
66
+ await runtime.registerPlugin(projectRefPlugin);
67
+ }
68
+ publishMcpWorkspaceWarning(runtime, mcpServeWorkspaceWarning(runtime));
69
+ if (runtime.declaredScope.hardware === 'consumer') {
70
+ const { default: workspaceStatePlugin } = await import('@vibesdotdev/workspace/state.plugin');
71
+ if (!runtime.hasPlugin(workspaceStatePlugin.id))
72
+ await runtime.registerPlugin(workspaceStatePlugin);
73
+ const projectRef = (await resolveProjectRefContext(runtime)).resolve({ cwd: workspaceRoot });
74
+ const { bindWorkspaceEnvironment } = await import('@vibesdotdev/workspace/environment/node');
75
+ await bindWorkspaceEnvironment(runtime, {
76
+ // The serve host is nobody's session until one binds (the session
77
+ // registry, Q4); a workspace already bound keeps its session, which
78
+ // lives in the workspace environment, never the declared scope.
79
+ sessionId: (runtime.hasKind(workspaceEnvironmentKind.id)
80
+ ? (await tryResolveWorkspaceEnvironment(runtime))?.sessionId
81
+ : undefined) ?? 'mcp-session',
82
+ target: 'local',
83
+ root: workspaceRoot,
84
+ projectId: projectRef?.projectId
85
+ });
86
+ // The stored login is not bound into the environment: tools resolve the
87
+ // caller's bearer through auth's resolveCallerBearer (rc05 §2.2).
88
+ }
89
+ }
90
+ export { MCP_WORKSPACE_WARNING_CONTEXT_ID, readMcpWorkspaceWarning } from "./workspace-warning.js";
91
+ export { ensureConsumerBackgroundServices, rebindWorkspaceEnvironmentForActiveSession, rebindWorkspaceEnvironmentForSession, triggerProgressiveIndexingInBackground } from "./serve-lifecycle.js";
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/surface-mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MCP serve reports the project-local `.vibes/tools` the boot's discovery pass
3
+ * registered (rc02-rc03 §2.5), before tool selection / buildServer — the same
4
+ * catalog CLI list/run/inspect see. Nothing here scans: a discovery failure
5
+ * already failed (or, under repair argv, reported) the boot.
6
+ *
7
+ * `vibes tools scan --load` remains the explicit re-scan after edits
8
+ * mid-serve and for CI.
9
+ */
10
+ /**
11
+ * Surface package (runtime-surface-mcp) consumes the tools *feature* via its
12
+ * public export — never sibling `tools/src/**` imports.
13
+ */
14
+ import { type VibesRuntime } from '@vibesdotdev/kernel';
15
+ import { type LocalToolsReport } from '@vibesdotdev/tools/local/node/ensure-local-tools';
16
+ export type LocalToolsBootstrapDeps = {
17
+ /** Where notices go (default stderr). */
18
+ writeNotice?: (line: string) => void;
19
+ /** Structured log sink (optional). The meta is the loaded-tool report. */
20
+ logInfo?: (message: string, meta?: {
21
+ readonly toolIds: readonly string[];
22
+ readonly scannedPaths: readonly string[];
23
+ }) => void;
24
+ };
25
+ /**
26
+ * Report this serve host's project-local tools once. Call on the ready serve
27
+ * host, before selectMcpTools / createMcpAdapter.
28
+ */
29
+ export declare function reportLocalToolsForMcpServe(runtime: Pick<VibesRuntime, 'discovered'>, deps?: LocalToolsBootstrapDeps): LocalToolsReport;
30
+ /**
31
+ * Explicit localToolIds for createMcpAdapter / buildServer. Always pass the
32
+ * report — even when empty — so the adapter tags exactly what this host
33
+ * discovered. Empty means "this host has no local tools".
34
+ */
35
+ export declare function localToolIdsForMcpAdapter(report: Pick<LocalToolsReport, 'toolIds'>): readonly string[];
36
+ //# sourceMappingURL=local-tools-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-tools-bootstrap.d.ts","sourceRoot":"","sources":["../../src/surface-mcp/local-tools-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAEvG,MAAM,MAAM,uBAAuB,GAAG;IACrC,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CACT,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KACpF,IAAI,CAAC;CACV,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACzC,IAAI,GAAE,uBAA4B,GAChC,gBAAgB,CAiBlB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG,SAAS,MAAM,EAAE,CAEtG"}