@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.
- 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,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"}
|