@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.
- package/LICENSE +18 -0
- package/README.md +96 -2
- package/dist/adapters/auth-middleware.d.ts +68 -0
- package/dist/adapters/auth-middleware.d.ts.map +1 -0
- package/dist/adapters/auth-middleware.js +161 -0
- package/dist/adapters/auth-middleware.js.map +1 -0
- package/dist/adapters/compatibility.d.ts +20 -0
- package/dist/adapters/compatibility.d.ts.map +1 -0
- package/dist/adapters/compatibility.js +57 -0
- package/dist/adapters/compatibility.js.map +1 -0
- package/dist/adapters/host-context.consumer.d.ts +12 -0
- package/dist/adapters/host-context.consumer.d.ts.map +1 -0
- package/dist/adapters/host-context.consumer.js +10 -0
- package/dist/adapters/host-context.consumer.js.map +1 -0
- package/dist/adapters/host-context.d.ts +32 -0
- package/dist/adapters/host-context.d.ts.map +1 -0
- package/dist/adapters/host-context.js +17 -0
- package/dist/adapters/host-context.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +13 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mcp/ambient-envelope.d.ts +26 -0
- package/dist/adapters/mcp/ambient-envelope.d.ts.map +1 -0
- package/dist/adapters/mcp/ambient-envelope.js +70 -0
- package/dist/adapters/mcp/ambient-envelope.js.map +1 -0
- package/dist/adapters/mcp/catalog.d.ts +15 -0
- package/dist/adapters/mcp/catalog.d.ts.map +1 -0
- package/dist/adapters/mcp/catalog.js +26 -0
- package/dist/adapters/mcp/catalog.js.map +1 -0
- package/dist/adapters/mcp/connection-identity.d.ts +81 -0
- package/dist/adapters/mcp/connection-identity.d.ts.map +1 -0
- package/dist/adapters/mcp/connection-identity.js +114 -0
- package/dist/adapters/mcp/connection-identity.js.map +1 -0
- package/dist/adapters/mcp/context.d.ts +137 -0
- package/dist/adapters/mcp/context.d.ts.map +1 -0
- package/dist/adapters/mcp/context.js +230 -0
- package/dist/adapters/mcp/context.js.map +1 -0
- package/dist/adapters/mcp/formatters.d.ts +41 -0
- package/dist/adapters/mcp/formatters.d.ts.map +1 -0
- package/dist/adapters/mcp/formatters.js +102 -0
- package/dist/adapters/mcp/formatters.js.map +1 -0
- package/dist/adapters/mcp/from-api-endpoint.d.ts +59 -0
- package/dist/adapters/mcp/from-api-endpoint.d.ts.map +1 -0
- package/dist/adapters/mcp/from-api-endpoint.js +206 -0
- package/dist/adapters/mcp/from-api-endpoint.js.map +1 -0
- package/dist/adapters/mcp/generation-contract.d.ts +5 -0
- package/dist/adapters/mcp/generation-contract.d.ts.map +1 -0
- package/dist/adapters/mcp/generation-contract.js +34 -0
- package/dist/adapters/mcp/generation-contract.js.map +1 -0
- package/dist/adapters/mcp/host-registry.d.ts +159 -0
- package/dist/adapters/mcp/host-registry.d.ts.map +1 -0
- package/dist/adapters/mcp/host-registry.js +237 -0
- package/dist/adapters/mcp/host-registry.js.map +1 -0
- package/dist/adapters/mcp/index.d.ts +12 -0
- package/dist/adapters/mcp/index.d.ts.map +1 -0
- package/dist/adapters/mcp/index.js +17 -0
- package/dist/adapters/mcp/index.js.map +1 -0
- package/dist/adapters/mcp/isolated-notice.d.ts +111 -0
- package/dist/adapters/mcp/isolated-notice.d.ts.map +1 -0
- package/dist/adapters/mcp/isolated-notice.js +217 -0
- package/dist/adapters/mcp/isolated-notice.js.map +1 -0
- package/dist/adapters/mcp/json-rpc.d.ts +16 -0
- package/dist/adapters/mcp/json-rpc.d.ts.map +1 -0
- package/dist/adapters/mcp/json-rpc.js +32 -0
- package/dist/adapters/mcp/json-rpc.js.map +1 -0
- package/dist/adapters/mcp/local-origin.d.ts +18 -0
- package/dist/adapters/mcp/local-origin.d.ts.map +1 -0
- package/dist/adapters/mcp/local-origin.js +37 -0
- package/dist/adapters/mcp/local-origin.js.map +1 -0
- package/dist/adapters/mcp/logging/mcp-cloud.descriptor.d.ts +11 -0
- package/dist/adapters/mcp/logging/mcp-cloud.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/logging/mcp-cloud.descriptor.js +21 -0
- package/dist/adapters/mcp/logging/mcp-cloud.descriptor.js.map +1 -0
- package/dist/adapters/mcp/logging/mcp-http.descriptor.d.ts +10 -0
- package/dist/adapters/mcp/logging/mcp-http.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/logging/mcp-http.descriptor.js +20 -0
- package/dist/adapters/mcp/logging/mcp-http.descriptor.js.map +1 -0
- package/dist/adapters/mcp/logging/mcp-server.descriptor.d.ts +9 -0
- package/dist/adapters/mcp/logging/mcp-server.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/logging/mcp-server.descriptor.js +25 -0
- package/dist/adapters/mcp/logging/mcp-server.descriptor.js.map +1 -0
- package/dist/adapters/mcp/logging/mcp-stdio.descriptor.d.ts +10 -0
- package/dist/adapters/mcp/logging/mcp-stdio.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/logging/mcp-stdio.descriptor.js +20 -0
- package/dist/adapters/mcp/logging/mcp-stdio.descriptor.js.map +1 -0
- package/dist/adapters/mcp/mcp-http-session.d.ts +140 -0
- package/dist/adapters/mcp/mcp-http-session.d.ts.map +1 -0
- package/dist/adapters/mcp/mcp-http-session.js +797 -0
- package/dist/adapters/mcp/mcp-http-session.js.map +1 -0
- package/dist/adapters/mcp/mcp-wire-name.d.ts +9 -0
- package/dist/adapters/mcp/mcp-wire-name.d.ts.map +1 -0
- package/dist/adapters/mcp/mcp-wire-name.js +52 -0
- package/dist/adapters/mcp/mcp-wire-name.js.map +1 -0
- package/dist/adapters/mcp/projection-doctor.d.ts +101 -0
- package/dist/adapters/mcp/projection-doctor.d.ts.map +1 -0
- package/dist/adapters/mcp/projection-doctor.js +285 -0
- package/dist/adapters/mcp/projection-doctor.js.map +1 -0
- package/dist/adapters/mcp/projection.d.ts +36 -0
- package/dist/adapters/mcp/projection.d.ts.map +1 -0
- package/dist/adapters/mcp/projection.js +136 -0
- package/dist/adapters/mcp/projection.js.map +1 -0
- package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.js +15 -0
- package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.js +18 -0
- package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/index.d.ts +113 -0
- package/dist/adapters/mcp/prompts/index.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/index.js +24 -0
- package/dist/adapters/mcp/prompts/index.js.map +1 -0
- package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.d.ts +114 -0
- package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.js +37 -0
- package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.js +20 -0
- package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.js +20 -0
- package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.d.ts +114 -0
- package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.js +21 -0
- package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.js +19 -0
- package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.js +18 -0
- package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.js +19 -0
- package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.d.ts +113 -0
- package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.d.ts.map +1 -0
- package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.js +18 -0
- package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.js.map +1 -0
- package/dist/adapters/mcp/request-context.d.ts +28 -0
- package/dist/adapters/mcp/request-context.d.ts.map +1 -0
- package/dist/adapters/mcp/request-context.js +49 -0
- package/dist/adapters/mcp/request-context.js.map +1 -0
- package/dist/adapters/mcp/roster-announcer.d.ts +3 -0
- package/dist/adapters/mcp/roster-announcer.d.ts.map +1 -0
- package/dist/adapters/mcp/roster-announcer.js +22 -0
- package/dist/adapters/mcp/roster-announcer.js.map +1 -0
- package/dist/adapters/mcp/sampling-context.d.ts +12 -0
- package/dist/adapters/mcp/sampling-context.d.ts.map +1 -0
- package/dist/adapters/mcp/sampling-context.js +30 -0
- package/dist/adapters/mcp/sampling-context.js.map +1 -0
- package/dist/adapters/mcp/sampling.d.ts +17 -0
- package/dist/adapters/mcp/sampling.d.ts.map +1 -0
- package/dist/adapters/mcp/sampling.js +43 -0
- package/dist/adapters/mcp/sampling.js.map +1 -0
- package/dist/adapters/mcp/schemas/index.d.ts +37 -0
- package/dist/adapters/mcp/schemas/index.d.ts.map +1 -0
- package/dist/adapters/mcp/schemas/index.js +5 -0
- package/dist/adapters/mcp/schemas/index.js.map +1 -0
- package/dist/adapters/mcp/schemas/tool-selection.d.ts +12 -0
- package/dist/adapters/mcp/schemas/tool-selection.d.ts.map +1 -0
- package/dist/adapters/mcp/schemas/tool-selection.js +2 -0
- package/dist/adapters/mcp/schemas/tool-selection.js.map +1 -0
- package/dist/adapters/mcp/serve-identity.d.ts +64 -0
- package/dist/adapters/mcp/serve-identity.d.ts.map +1 -0
- package/dist/adapters/mcp/serve-identity.js +220 -0
- package/dist/adapters/mcp/serve-identity.js.map +1 -0
- package/dist/adapters/mcp/server.consumer.d.ts +5 -0
- package/dist/adapters/mcp/server.consumer.d.ts.map +1 -0
- package/dist/adapters/mcp/server.consumer.js +300 -0
- package/dist/adapters/mcp/server.consumer.js.map +1 -0
- package/dist/adapters/mcp/server.d.ts +56 -0
- package/dist/adapters/mcp/server.d.ts.map +1 -0
- package/dist/adapters/mcp/server.js +1423 -0
- package/dist/adapters/mcp/server.js.map +1 -0
- package/dist/adapters/mcp/stale-body.consumer.d.ts +85 -0
- package/dist/adapters/mcp/stale-body.consumer.d.ts.map +1 -0
- package/dist/adapters/mcp/stale-body.consumer.js +183 -0
- package/dist/adapters/mcp/stale-body.consumer.js.map +1 -0
- package/dist/adapters/mcp/startup-refusal.d.ts +8 -0
- package/dist/adapters/mcp/startup-refusal.d.ts.map +1 -0
- package/dist/adapters/mcp/startup-refusal.js +141 -0
- package/dist/adapters/mcp/startup-refusal.js.map +1 -0
- package/dist/adapters/mcp/stdio-relay.d.ts +232 -0
- package/dist/adapters/mcp/stdio-relay.d.ts.map +1 -0
- package/dist/adapters/mcp/stdio-relay.js +1169 -0
- package/dist/adapters/mcp/stdio-relay.js.map +1 -0
- package/dist/adapters/mcp/tool-audit-live.d.ts +109 -0
- package/dist/adapters/mcp/tool-audit-live.d.ts.map +1 -0
- package/dist/adapters/mcp/tool-audit-live.js +538 -0
- package/dist/adapters/mcp/tool-audit-live.js.map +1 -0
- package/dist/adapters/mcp/tool-audit.d.ts +44 -0
- package/dist/adapters/mcp/tool-audit.d.ts.map +1 -0
- package/dist/adapters/mcp/tool-audit.js +168 -0
- package/dist/adapters/mcp/tool-audit.js.map +1 -0
- package/dist/adapters/mcp/tool-catalog.d.ts +179 -0
- package/dist/adapters/mcp/tool-catalog.d.ts.map +1 -0
- package/dist/adapters/mcp/tool-catalog.js +330 -0
- package/dist/adapters/mcp/tool-catalog.js.map +1 -0
- package/dist/adapters/mcp/tool-selection.d.ts +77 -0
- package/dist/adapters/mcp/tool-selection.d.ts.map +1 -0
- package/dist/adapters/mcp/tool-selection.js +266 -0
- package/dist/adapters/mcp/tool-selection.js.map +1 -0
- package/dist/adapters/mcp/transport-registry.d.ts +5 -0
- package/dist/adapters/mcp/transport-registry.d.ts.map +1 -0
- package/dist/adapters/mcp/transport-registry.js +13 -0
- package/dist/adapters/mcp/transport-registry.js.map +1 -0
- package/dist/adapters/mcp/trust-tag.d.ts +69 -0
- package/dist/adapters/mcp/trust-tag.d.ts.map +1 -0
- package/dist/adapters/mcp/trust-tag.js +120 -0
- package/dist/adapters/mcp/trust-tag.js.map +1 -0
- package/dist/adapters/mcp/vibes-types.d.ts +115 -0
- package/dist/adapters/mcp/vibes-types.d.ts.map +1 -0
- package/dist/adapters/mcp/vibes-types.js +7 -0
- package/dist/adapters/mcp/vibes-types.js.map +1 -0
- package/dist/adapters/mcp/web-handler.d.ts +49 -0
- package/dist/adapters/mcp/web-handler.d.ts.map +1 -0
- package/dist/adapters/mcp/web-handler.js +129 -0
- package/dist/adapters/mcp/web-handler.js.map +1 -0
- package/dist/adapters/session-id.d.ts +3 -0
- package/dist/adapters/session-id.d.ts.map +1 -0
- package/dist/adapters/session-id.js +42 -0
- package/dist/adapters/session-id.js.map +1 -0
- package/dist/adapters/transport-bun-http.d.ts +39 -0
- package/dist/adapters/transport-bun-http.d.ts.map +1 -0
- package/dist/adapters/transport-bun-http.js +42 -0
- package/dist/adapters/transport-bun-http.js.map +1 -0
- package/dist/adapters/types.d.ts +135 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/web-compatibility.d.ts +6 -0
- package/dist/adapters/web-compatibility.d.ts.map +1 -0
- package/dist/adapters/web-compatibility.js +13 -0
- package/dist/adapters/web-compatibility.js.map +1 -0
- package/dist/adapters/zod-mcp.d.ts +139 -0
- package/dist/adapters/zod-mcp.d.ts.map +1 -0
- package/dist/adapters/zod-mcp.js +617 -0
- package/dist/adapters/zod-mcp.js.map +1 -0
- package/dist/cli/mcp/audit/dev.audit.tools.descriptor.d.ts +15 -0
- package/dist/cli/mcp/audit/dev.audit.tools.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/audit/dev.audit.tools.descriptor.js +58 -0
- package/dist/cli/mcp/audit/dev.audit.tools.descriptor.js.map +1 -0
- package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts +6 -0
- package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js +180 -0
- package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.d.ts +22 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.js +19 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.d.ts +23 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.js +41 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.d.ts +75 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.js +84 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.d.ts +35 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.js +28 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.d.ts +11 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.js +47 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.d.ts +18 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.js +18 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.js.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.d.ts +12 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.js +17 -0
- package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.install.descriptor.d.ts +41 -0
- package/dist/cli/mcp/management/dev.mcp.install.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.install.descriptor.js +49 -0
- package/dist/cli/mcp/management/dev.mcp.install.descriptor.js.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.d.ts +16 -0
- package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.js +244 -0
- package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.list.descriptor.d.ts +22 -0
- package/dist/cli/mcp/management/dev.mcp.list.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.list.descriptor.js +24 -0
- package/dist/cli/mcp/management/dev.mcp.list.descriptor.js.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.d.ts +29 -0
- package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.js +127 -0
- package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.status.descriptor.d.ts +48 -0
- package/dist/cli/mcp/management/dev.mcp.status.descriptor.d.ts.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.status.descriptor.js +56 -0
- package/dist/cli/mcp/management/dev.mcp.status.descriptor.js.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.d.ts +9 -0
- package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.js +253 -0
- package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/management/install-helpers.d.ts +26 -0
- package/dist/cli/mcp/management/install-helpers.d.ts.map +1 -0
- package/dist/cli/mcp/management/install-helpers.js +95 -0
- package/dist/cli/mcp/management/install-helpers.js.map +1 -0
- package/dist/cli/mcp/management/process-audit.impl.consumer.d.ts +38 -0
- package/dist/cli/mcp/management/process-audit.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/management/process-audit.impl.consumer.js +145 -0
- package/dist/cli/mcp/management/process-audit.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.d.ts +21 -0
- package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.js +82 -0
- package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/management/status-doctor.d.ts +22 -0
- package/dist/cli/mcp/management/status-doctor.d.ts.map +1 -0
- package/dist/cli/mcp/management/status-doctor.js +153 -0
- package/dist/cli/mcp/management/status-doctor.js.map +1 -0
- package/dist/cli/mcp/schemas/status-doctor.d.ts +75 -0
- package/dist/cli/mcp/schemas/status-doctor.d.ts.map +1 -0
- package/dist/cli/mcp/schemas/status-doctor.js +2 -0
- package/dist/cli/mcp/schemas/status-doctor.js.map +1 -0
- package/dist/cli/mcp/support/host-port.d.ts +31 -0
- package/dist/cli/mcp/support/host-port.d.ts.map +1 -0
- package/dist/cli/mcp/support/host-port.js +31 -0
- package/dist/cli/mcp/support/host-port.js.map +1 -0
- package/dist/cli/mcp/support/server-process.impl.consumer.d.ts +24 -0
- package/dist/cli/mcp/support/server-process.impl.consumer.d.ts.map +1 -0
- package/dist/cli/mcp/support/server-process.impl.consumer.js +86 -0
- package/dist/cli/mcp/support/server-process.impl.consumer.js.map +1 -0
- package/dist/cli/mcp/support/status-doctor.d.ts +33 -0
- package/dist/cli/mcp/support/status-doctor.d.ts.map +1 -0
- package/dist/cli/mcp/support/status-doctor.js +104 -0
- package/dist/cli/mcp/support/status-doctor.js.map +1 -0
- package/dist/cli/print.d.ts +12 -0
- package/dist/cli/print.d.ts.map +1 -0
- package/dist/cli/print.js +25 -0
- package/dist/cli/print.js.map +1 -0
- package/dist/cli/surface-mcp/client-connection-identity.consumer.d.ts +19 -0
- package/dist/cli/surface-mcp/client-connection-identity.consumer.d.ts.map +1 -0
- package/dist/cli/surface-mcp/client-connection-identity.consumer.js +53 -0
- package/dist/cli/surface-mcp/client-connection-identity.consumer.js.map +1 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.d.ts +7 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.d.ts.map +1 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.js +345 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.js.map +1 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts +12 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts.map +1 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js +657 -0
- package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js.map +1 -0
- package/dist/cli/surface-mcp/local-dev-flag.d.ts +24 -0
- package/dist/cli/surface-mcp/local-dev-flag.d.ts.map +1 -0
- package/dist/cli/surface-mcp/local-dev-flag.js +37 -0
- package/dist/cli/surface-mcp/local-dev-flag.js.map +1 -0
- package/dist/cli/surface-mcp/shared-host-startup.d.ts +14 -0
- package/dist/cli/surface-mcp/shared-host-startup.d.ts.map +1 -0
- package/dist/cli/surface-mcp/shared-host-startup.js +46 -0
- package/dist/cli/surface-mcp/shared-host-startup.js.map +1 -0
- package/dist/cli/surface-mcp/stdio-relay-transport.d.ts +2 -0
- package/dist/cli/surface-mcp/stdio-relay-transport.d.ts.map +1 -0
- package/dist/cli/surface-mcp/stdio-relay-transport.js +21 -0
- package/dist/cli/surface-mcp/stdio-relay-transport.js.map +1 -0
- package/dist/cli/surface-mcp/teardown.d.ts +17 -0
- package/dist/cli/surface-mcp/teardown.d.ts.map +1 -0
- package/dist/cli/surface-mcp/teardown.js +28 -0
- package/dist/cli/surface-mcp/teardown.js.map +1 -0
- package/dist/client.d.ts +49 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +131 -0
- package/dist/client.js.map +1 -0
- package/dist/config/load.d.ts +6 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +18 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/mcp.config.descriptor.d.ts +108 -0
- package/dist/config/mcp.config.descriptor.d.ts.map +1 -0
- package/dist/config/mcp.config.descriptor.js +63 -0
- package/dist/config/mcp.config.descriptor.js.map +1 -0
- package/dist/docs/mcp.docs.descriptor.d.ts +4 -0
- package/dist/docs/mcp.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/mcp.docs.descriptor.js +44 -0
- package/dist/docs/mcp.docs.descriptor.js.map +1 -0
- package/dist/docs/prompts.docs.descriptor.d.ts +4 -0
- package/dist/docs/prompts.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/prompts.docs.descriptor.js +130 -0
- package/dist/docs/prompts.docs.descriptor.js.map +1 -0
- package/dist/docs/resources.docs.descriptor.d.ts +4 -0
- package/dist/docs/resources.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/resources.docs.descriptor.js +390 -0
- package/dist/docs/resources.docs.descriptor.js.map +1 -0
- package/dist/docs/server.docs.descriptor.d.ts +4 -0
- package/dist/docs/server.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/server.docs.descriptor.js +383 -0
- package/dist/docs/server.docs.descriptor.js.map +1 -0
- package/dist/docs/tools.docs.descriptor.d.ts +4 -0
- package/dist/docs/tools.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/tools.docs.descriptor.js +316 -0
- package/dist/docs/tools.docs.descriptor.js.map +1 -0
- package/dist/harness-identity.descriptors.d.ts +11 -0
- package/dist/harness-identity.descriptors.d.ts.map +1 -0
- package/dist/harness-identity.descriptors.js +41 -0
- package/dist/harness-identity.descriptors.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/kinds/harness-identity.kind.d.ts +3 -0
- package/dist/kinds/harness-identity.kind.d.ts.map +1 -0
- package/dist/kinds/harness-identity.kind.js +16 -0
- package/dist/kinds/harness-identity.kind.js.map +1 -0
- package/dist/kinds/sampling.kind.d.ts +15 -0
- package/dist/kinds/sampling.kind.d.ts.map +1 -0
- package/dist/kinds/sampling.kind.js +24 -0
- package/dist/kinds/sampling.kind.js.map +1 -0
- package/dist/lifecycle-repeat.d.ts +23 -0
- package/dist/lifecycle-repeat.d.ts.map +1 -0
- package/dist/lifecycle-repeat.js +21 -0
- package/dist/lifecycle-repeat.js.map +1 -0
- package/dist/mcp/dev.mcp.descriptor.d.ts +18 -0
- package/dist/mcp/dev.mcp.descriptor.d.ts.map +1 -0
- package/dist/mcp/dev.mcp.descriptor.js +18 -0
- package/dist/mcp/dev.mcp.descriptor.js.map +1 -0
- package/dist/mcp/index.d.ts +20 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp.plugin.d.ts +9 -0
- package/dist/mcp/mcp.plugin.d.ts.map +1 -0
- package/dist/mcp/mcp.plugin.js +59 -0
- package/dist/mcp/mcp.plugin.js.map +1 -0
- package/dist/mcp-client.plugin.d.ts +4 -0
- package/dist/mcp-client.plugin.d.ts.map +1 -0
- package/dist/mcp-client.plugin.js +13 -0
- package/dist/mcp-client.plugin.js.map +1 -0
- package/dist/mcp.client.descriptor.d.ts +27 -0
- package/dist/mcp.client.descriptor.d.ts.map +1 -0
- package/dist/mcp.client.descriptor.js +7 -0
- package/dist/mcp.client.descriptor.js.map +1 -0
- package/dist/mcp.consumer.plugin.d.ts +4 -0
- package/dist/mcp.consumer.plugin.d.ts.map +1 -0
- package/dist/mcp.consumer.plugin.js +19 -0
- package/dist/mcp.consumer.plugin.js.map +1 -0
- package/dist/mcp.runtime.plugin.d.ts +10 -0
- package/dist/mcp.runtime.plugin.d.ts.map +1 -0
- package/dist/mcp.runtime.plugin.js +40 -0
- package/dist/mcp.runtime.plugin.js.map +1 -0
- package/dist/root-state.d.ts +3 -0
- package/dist/root-state.d.ts.map +1 -0
- package/dist/root-state.js +3 -0
- package/dist/root-state.js.map +1 -0
- package/dist/schemas/api-endpoint.d.ts +12 -0
- package/dist/schemas/api-endpoint.d.ts.map +1 -0
- package/dist/schemas/api-endpoint.js +11 -0
- package/dist/schemas/api-endpoint.js.map +1 -0
- package/dist/schemas/audit.d.ts +172 -0
- package/dist/schemas/audit.d.ts.map +1 -0
- package/dist/schemas/audit.js +82 -0
- package/dist/schemas/audit.js.map +1 -0
- package/dist/schemas/harness-identity.d.ts +41 -0
- package/dist/schemas/harness-identity.d.ts.map +1 -0
- package/dist/schemas/harness-identity.js +19 -0
- package/dist/schemas/harness-identity.js.map +1 -0
- package/dist/schemas/host-adapters.d.ts +14 -0
- package/dist/schemas/host-adapters.d.ts.map +1 -0
- package/dist/schemas/host-adapters.js +7 -0
- package/dist/schemas/host-adapters.js.map +1 -0
- package/dist/schemas/projection.d.ts +10 -0
- package/dist/schemas/projection.d.ts.map +1 -0
- package/dist/schemas/projection.js +9 -0
- package/dist/schemas/projection.js.map +1 -0
- package/dist/schemas/tool.d.ts +8 -0
- package/dist/schemas/tool.d.ts.map +1 -0
- package/dist/schemas/tool.js +8 -0
- package/dist/schemas/tool.js.map +1 -0
- package/dist/surface-mcp/build-provenance.d.ts +67 -0
- package/dist/surface-mcp/build-provenance.d.ts.map +1 -0
- package/dist/surface-mcp/build-provenance.js +287 -0
- package/dist/surface-mcp/build-provenance.js.map +1 -0
- package/dist/surface-mcp/crash-reporting.d.ts +28 -0
- package/dist/surface-mcp/crash-reporting.d.ts.map +1 -0
- package/dist/surface-mcp/crash-reporting.js +41 -0
- package/dist/surface-mcp/crash-reporting.js.map +1 -0
- package/dist/surface-mcp/executable-freshness-watch.d.ts +89 -0
- package/dist/surface-mcp/executable-freshness-watch.d.ts.map +1 -0
- package/dist/surface-mcp/executable-freshness-watch.js +225 -0
- package/dist/surface-mcp/executable-freshness-watch.js.map +1 -0
- package/dist/surface-mcp/host-provenance-banner.d.ts +49 -0
- package/dist/surface-mcp/host-provenance-banner.d.ts.map +1 -0
- package/dist/surface-mcp/host-provenance-banner.js +135 -0
- package/dist/surface-mcp/host-provenance-banner.js.map +1 -0
- package/dist/surface-mcp/index.d.ts +51 -0
- package/dist/surface-mcp/index.d.ts.map +1 -0
- package/dist/surface-mcp/index.js +92 -0
- package/dist/surface-mcp/index.js.map +1 -0
- package/dist/surface-mcp/local-tools-bootstrap.d.ts +36 -0
- package/dist/surface-mcp/local-tools-bootstrap.d.ts.map +1 -0
- package/dist/surface-mcp/local-tools-bootstrap.js +43 -0
- package/dist/surface-mcp/local-tools-bootstrap.js.map +1 -0
- package/dist/surface-mcp/mcp-serve.plugin.d.ts +9 -0
- package/dist/surface-mcp/mcp-serve.plugin.d.ts.map +1 -0
- package/dist/surface-mcp/mcp-serve.plugin.js +24 -0
- package/dist/surface-mcp/mcp-serve.plugin.js.map +1 -0
- package/dist/surface-mcp/project-config.d.ts +35 -0
- package/dist/surface-mcp/project-config.d.ts.map +1 -0
- package/dist/surface-mcp/project-config.js +74 -0
- package/dist/surface-mcp/project-config.js.map +1 -0
- package/dist/surface-mcp/serve-lifecycle.d.ts +102 -0
- package/dist/surface-mcp/serve-lifecycle.d.ts.map +1 -0
- package/dist/surface-mcp/serve-lifecycle.js +343 -0
- package/dist/surface-mcp/serve-lifecycle.js.map +1 -0
- package/dist/surface-mcp/session-bridge.d.ts +18 -0
- package/dist/surface-mcp/session-bridge.d.ts.map +1 -0
- package/dist/surface-mcp/session-bridge.js +26 -0
- package/dist/surface-mcp/session-bridge.js.map +1 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.d.ts +13 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.d.ts.map +1 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.js +13 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.js.map +1 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.d.ts +11 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.d.ts.map +1 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.js +36 -0
- package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.js.map +1 -0
- package/dist/surface-mcp/workspace-warning.d.ts +16 -0
- package/dist/surface-mcp/workspace-warning.d.ts.map +1 -0
- package/dist/surface-mcp/workspace-warning.js +44 -0
- package/dist/surface-mcp/workspace-warning.js.map +1 -0
- package/dist/svelte/index.d.ts +12 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +11 -0
- package/dist/svelte/mcp-svelte.plugin.d.ts +10 -0
- package/dist/svelte/mcp-svelte.plugin.d.ts.map +1 -0
- package/dist/svelte/mcp-svelte.plugin.js +24 -0
- package/dist/svelte/tool-widgets/VibesContextToolCard.svelte +91 -0
- package/dist/svelte/tool-widgets/VibesContextToolCard.svelte.d.ts +9 -0
- package/dist/svelte/tool-widgets/VibesContextToolCard.svelte.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/index.d.ts +3 -0
- package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/index.js +2 -0
- package/dist/svelte/tool-widgets/summary.d.ts +48 -0
- package/dist/svelte/tool-widgets/summary.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/summary.js +117 -0
- package/dist/tools/vibes-context/schemas.d.ts +85 -0
- package/dist/tools/vibes-context/schemas.d.ts.map +1 -0
- package/dist/tools/vibes-context/schemas.js +76 -0
- package/dist/tools/vibes-context/schemas.js.map +1 -0
- package/dist/tools/vibes-context/vibes-context.descriptor.d.ts +4 -0
- package/dist/tools/vibes-context/vibes-context.descriptor.d.ts.map +1 -0
- package/dist/tools/vibes-context/vibes-context.descriptor.js +30 -0
- package/dist/tools/vibes-context/vibes-context.descriptor.js.map +1 -0
- package/dist/tools/vibes-context/vibes-context.impl.d.ts +34 -0
- package/dist/tools/vibes-context/vibes-context.impl.d.ts.map +1 -0
- package/dist/tools/vibes-context/vibes-context.impl.js +207 -0
- package/dist/tools/vibes-context/vibes-context.impl.js.map +1 -0
- package/dist/tui/index.d.ts +4 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +4 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/mcp-health.d.ts +7 -0
- package/dist/tui/mcp-health.d.ts.map +1 -0
- package/dist/tui/mcp-health.js +16 -0
- package/dist/tui/mcp-health.js.map +1 -0
- package/dist/tui/mcp-tui.plugin.d.ts +3 -0
- package/dist/tui/mcp-tui.plugin.d.ts.map +1 -0
- package/dist/tui/mcp-tui.plugin.js +18 -0
- package/dist/tui/mcp-tui.plugin.js.map +1 -0
- package/dist/tui/mcp.tui-app.descriptor.d.ts +4 -0
- package/dist/tui/mcp.tui-app.descriptor.d.ts.map +1 -0
- package/dist/tui/mcp.tui-app.descriptor.js +19 -0
- package/dist/tui/mcp.tui-app.descriptor.js.map +1 -0
- package/dist/tui/mcp.tui-app.impl.consumer.d.ts +4 -0
- package/dist/tui/mcp.tui-app.impl.consumer.d.ts.map +1 -0
- package/dist/tui/mcp.tui-app.impl.consumer.js +48 -0
- package/dist/tui/mcp.tui-app.impl.consumer.js.map +1 -0
- package/dist/tui/mcp.tui-state.descriptor.d.ts +8 -0
- package/dist/tui/mcp.tui-state.descriptor.d.ts.map +1 -0
- package/dist/tui/mcp.tui-state.descriptor.js +37 -0
- package/dist/tui/mcp.tui-state.descriptor.js.map +1 -0
- package/dist/tui/mcp.tui-state.impl.consumer.d.ts +5 -0
- package/dist/tui/mcp.tui-state.impl.consumer.d.ts.map +1 -0
- package/dist/tui/mcp.tui-state.impl.consumer.js +97 -0
- package/dist/tui/mcp.tui-state.impl.consumer.js.map +1 -0
- package/dist/tui/mcp.tui-state.key.d.ts +45 -0
- package/dist/tui/mcp.tui-state.key.d.ts.map +1 -0
- package/dist/tui/mcp.tui-state.key.js +25 -0
- package/dist/tui/mcp.tui-state.key.js.map +1 -0
- package/dist/types.core.d.ts +25 -0
- package/dist/types.core.d.ts.map +1 -0
- package/dist/types.core.js +8 -0
- package/dist/types.core.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/types.registry.d.ts +93 -0
- package/dist/types.registry.d.ts.map +1 -0
- package/dist/types.registry.js +32 -0
- package/dist/types.registry.js.map +1 -0
- 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
|