@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,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build provenance: capture the source git ref + dist freshness at serve
|
|
3
|
+
* startup so a stale body is wire-detectable. The fan-out phantom saga's
|
|
4
|
+
* root cause was invisible staleness — a long-lived stdio child spawned from
|
|
5
|
+
* source at one ref, source moved under it (87→104 registry), and nothing
|
|
6
|
+
* on the wire said the body was behind. This string rides the MCP
|
|
7
|
+
* `instructions` field so the connected agent can see and surface it.
|
|
8
|
+
*
|
|
9
|
+
* Filesystem and path reads go through the handed runtime. This module does
|
|
10
|
+
* not import `node:fs`, `node:path`, or `node:url`.
|
|
11
|
+
*/
|
|
12
|
+
import * as z from 'zod/v4';
|
|
13
|
+
import { realpathChecked, resolveFileSystemAdapter } from '@vibesdotdev/filesystem';
|
|
14
|
+
import { getRuntimePath } from '@vibesdotdev/paths';
|
|
15
|
+
import { composeHostEnv, settle, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
16
|
+
import { runCapture } from '@vibesdotdev/kernel/execution';
|
|
17
|
+
import { resolveMcpExecutableSourceRoot } from "./project-config.js";
|
|
18
|
+
function quoteShellArgument(value) {
|
|
19
|
+
return `'${value.replaceAll("'", "'\"'\"'")}'`;
|
|
20
|
+
}
|
|
21
|
+
function normalizeGitRef(value) {
|
|
22
|
+
if (value === null || value === undefined)
|
|
23
|
+
return null;
|
|
24
|
+
const normalized = value.trim().toLowerCase();
|
|
25
|
+
return /^[0-9a-f]{40,64}$/.test(normalized) ? normalized : null;
|
|
26
|
+
}
|
|
27
|
+
function textOf(value) {
|
|
28
|
+
if (value instanceof Uint8Array)
|
|
29
|
+
return new TextDecoder().decode(value);
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
const ExecutablePackageNameSchema = z.object({ name: z.string() });
|
|
33
|
+
const ExecutablePackageGitHeadSchema = z.object({ gitHead: z.string().nullish() });
|
|
34
|
+
async function findExecutablePackage(runtime, moduleDir) {
|
|
35
|
+
const path = await getRuntimePath(runtime);
|
|
36
|
+
const filesystem = await resolveFileSystemAdapter(runtime, { binding: false });
|
|
37
|
+
let current = path.resolve(moduleDir);
|
|
38
|
+
for (let depth = 0; depth < 16; depth++) {
|
|
39
|
+
const manifestPath = path.join(current, 'package.json');
|
|
40
|
+
if (await filesystem.exists(manifestPath)) {
|
|
41
|
+
const text = textOf(await filesystem.readFile(manifestPath, 'utf8'));
|
|
42
|
+
const parsed = await settle(() => JSON.parse(text));
|
|
43
|
+
// A manifest that is not JSON names no package. A read failure throws before this parse.
|
|
44
|
+
if (!parsed.ok) {
|
|
45
|
+
if (valueFreeFailure(parsed.cause).name === 'SyntaxError')
|
|
46
|
+
return null;
|
|
47
|
+
throw parsed.cause;
|
|
48
|
+
}
|
|
49
|
+
const named = ExecutablePackageNameSchema.safeParse(parsed.value);
|
|
50
|
+
if (named.success && named.data.name.startsWith('@vibesdotdev/')) {
|
|
51
|
+
const head = ExecutablePackageGitHeadSchema.safeParse(parsed.value);
|
|
52
|
+
return { root: current, gitHead: normalizeGitRef(head.success ? head.data.gitHead : null) };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (path.basename(current) === 'node_modules')
|
|
56
|
+
break;
|
|
57
|
+
const parent = path.dirname(current);
|
|
58
|
+
if (parent === current)
|
|
59
|
+
break;
|
|
60
|
+
current = parent;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
function resolveExecutableDistPath(path, executableModulePath, packageRoot) {
|
|
65
|
+
if (!packageRoot)
|
|
66
|
+
return null;
|
|
67
|
+
const modulePathFromPackage = path.relative(packageRoot, executableModulePath).replaceAll('\\', '/');
|
|
68
|
+
if (modulePathFromPackage === 'dist' || modulePathFromPackage.startsWith('dist/')) {
|
|
69
|
+
return path.join(packageRoot, 'dist');
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/** Compose provenance for the MCP body that owns this module graph. */
|
|
74
|
+
export async function getMcpBuildProvenance(runtime, workspaceRoot, executableModulePath) {
|
|
75
|
+
const path = await getRuntimePath(runtime);
|
|
76
|
+
const modulePath = executableModulePath ?? path.fileURLToPath(import.meta.url);
|
|
77
|
+
const moduleDir = path.dirname(modulePath);
|
|
78
|
+
const sourceResolution = await resolveMcpExecutableSourceRoot(runtime, moduleDir);
|
|
79
|
+
const executablePackage = await findExecutablePackage(runtime, moduleDir);
|
|
80
|
+
const sourceCheckout = sourceResolution.confident && path.extname(modulePath) === '.ts';
|
|
81
|
+
const executableDistPath = sourceCheckout
|
|
82
|
+
? null
|
|
83
|
+
: resolveExecutableDistPath(path, modulePath, executablePackage?.root);
|
|
84
|
+
const sourceRoot = sourceCheckout
|
|
85
|
+
? sourceResolution.root
|
|
86
|
+
: executableDistPath
|
|
87
|
+
? (executablePackage?.root ?? moduleDir)
|
|
88
|
+
: moduleDir;
|
|
89
|
+
const packageGitRef = sourceCheckout
|
|
90
|
+
? undefined
|
|
91
|
+
: executableDistPath
|
|
92
|
+
? (executablePackage?.gitHead ?? null)
|
|
93
|
+
: null;
|
|
94
|
+
// A compiled standalone body cannot be certified by git probes (/$bunfs) or
|
|
95
|
+
// npm's package gitHead (never written by a local compile). Its build bakes
|
|
96
|
+
// the exact source SHA (cli-bin scripts/build.ts, fail-closed) and the
|
|
97
|
+
// entrypoint republishes it as VIBES_SOURCE_SHA — the same variable the
|
|
98
|
+
// build itself honors. Consuming it here is what retires the permanent
|
|
99
|
+
// "EXECUTABLE SOURCE UNKNOWN" banner on locally built binaries.
|
|
100
|
+
const envBakedGitRef = sourceCheckout
|
|
101
|
+
? null
|
|
102
|
+
: normalizeGitRef(runtime.getEnv('VIBES_SOURCE_SHA'));
|
|
103
|
+
const bakedGitRef = packageGitRef ?? envBakedGitRef ?? (sourceCheckout ? undefined : null);
|
|
104
|
+
const sourceDirtyFlag = sourceCheckout ? undefined : runtime.getEnv('VIBES_SOURCE_DIRTY');
|
|
105
|
+
const bakedDirty = sourceCheckout
|
|
106
|
+
? undefined
|
|
107
|
+
: sourceDirtyFlag === '1'
|
|
108
|
+
? true
|
|
109
|
+
: sourceDirtyFlag === '0'
|
|
110
|
+
? false
|
|
111
|
+
: null;
|
|
112
|
+
return getBuildProvenance(runtime, {
|
|
113
|
+
sourceRoot,
|
|
114
|
+
sourceGitRef: bakedGitRef,
|
|
115
|
+
sourceRefKind: sourceCheckout
|
|
116
|
+
? 'git-checkout'
|
|
117
|
+
: packageGitRef
|
|
118
|
+
? 'package-gitHead'
|
|
119
|
+
: envBakedGitRef
|
|
120
|
+
? 'baked-source-sha'
|
|
121
|
+
: 'unknown',
|
|
122
|
+
sourceDirty: bakedDirty,
|
|
123
|
+
workspaceRoot,
|
|
124
|
+
executableDistPath,
|
|
125
|
+
executionKind: sourceCheckout ? 'source' : executableDistPath ? 'dist' : 'unknown'
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* One git probe through the runtime's execution provider, on the host's
|
|
130
|
+
* composed environment only (`replace`). A host with no execution provider (a
|
|
131
|
+
* cloud Worker) cannot probe, so the ref is unknown; a git that answers
|
|
132
|
+
* non-zero (not a repository) is unknown too. Any other failure propagates.
|
|
133
|
+
*/
|
|
134
|
+
async function runGit(runtime, args, cwd) {
|
|
135
|
+
if (!runtime.hasKind('runtime/execution'))
|
|
136
|
+
return null;
|
|
137
|
+
const proc = await runCapture(runtime, 'git', ['--no-optional-locks', ...args], {
|
|
138
|
+
cwd,
|
|
139
|
+
env: composeHostEnv(runtime),
|
|
140
|
+
envMode: 'replace'
|
|
141
|
+
});
|
|
142
|
+
if (proc.exitCode !== 0)
|
|
143
|
+
return null;
|
|
144
|
+
return proc.stdout.trim() || null;
|
|
145
|
+
}
|
|
146
|
+
async function sameRealPath(filesystem, left, right) {
|
|
147
|
+
if (!(await filesystem.exists(left)) || !(await filesystem.exists(right)))
|
|
148
|
+
return false;
|
|
149
|
+
const [resolvedLeft, resolvedRight] = await Promise.all([
|
|
150
|
+
realpathChecked(filesystem, left),
|
|
151
|
+
realpathChecked(filesystem, right)
|
|
152
|
+
]);
|
|
153
|
+
return resolvedLeft === resolvedRight;
|
|
154
|
+
}
|
|
155
|
+
async function runGitAtRoot(runtime, filesystem, args, root) {
|
|
156
|
+
const topLevel = await runGit(runtime, ['rev-parse', '--show-toplevel'], root);
|
|
157
|
+
if (!topLevel)
|
|
158
|
+
return null;
|
|
159
|
+
if (!(await sameRealPath(filesystem, topLevel, root)))
|
|
160
|
+
return null;
|
|
161
|
+
return runGit(runtime, args, root);
|
|
162
|
+
}
|
|
163
|
+
async function getNewestDistMtime(filesystem, distPath) {
|
|
164
|
+
if (!(await filesystem.exists(distPath)))
|
|
165
|
+
return null;
|
|
166
|
+
const entries = await filesystem.list(distPath);
|
|
167
|
+
let newest = 0;
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
if (entry.kind !== 'file' || entry.modifiedAt === undefined)
|
|
170
|
+
continue;
|
|
171
|
+
const modified = Date.parse(entry.modifiedAt);
|
|
172
|
+
if (Number.isFinite(modified) && modified > newest)
|
|
173
|
+
newest = modified;
|
|
174
|
+
}
|
|
175
|
+
return newest > 0 ? newest : null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Compute build provenance for the MCP serve instructions.
|
|
179
|
+
*
|
|
180
|
+
* sourceRoot and workspaceRoot are intentionally separate. A client commonly
|
|
181
|
+
* executes MCP from a pinned source checkout while VIBES_WORKSPACE_PATH points
|
|
182
|
+
* at the user's active project.
|
|
183
|
+
*/
|
|
184
|
+
export async function getBuildProvenance(runtime, input) {
|
|
185
|
+
const filesystem = await resolveFileSystemAdapter(runtime, { binding: false });
|
|
186
|
+
const sourceRoot = input.sourceRoot;
|
|
187
|
+
const workspaceRoot = input.workspaceRoot;
|
|
188
|
+
const probedSourceGitRef = input.sourceGitRef === undefined ? await runGitAtRoot(runtime, filesystem, ['rev-parse', 'HEAD'], sourceRoot) : null;
|
|
189
|
+
const sourceGitRef = input.sourceGitRef === undefined ? probedSourceGitRef : normalizeGitRef(input.sourceGitRef);
|
|
190
|
+
const sourceRefKind = input.sourceRefKind ??
|
|
191
|
+
(sourceGitRef && sourceGitRef === probedSourceGitRef ? 'git-checkout' : 'unknown');
|
|
192
|
+
const sourceStatus = input.sourceDirty === undefined && sourceRefKind === 'git-checkout'
|
|
193
|
+
? await runGitAtRoot(runtime, filesystem, ['status', '--porcelain'], sourceRoot)
|
|
194
|
+
: null;
|
|
195
|
+
const sourceDirty = input.sourceDirty !== undefined
|
|
196
|
+
? input.sourceDirty
|
|
197
|
+
: sourceStatus === null
|
|
198
|
+
? null
|
|
199
|
+
: sourceStatus.length > 0;
|
|
200
|
+
const workspaceGitRef = await runGitAtRoot(runtime, filesystem, ['rev-parse', 'HEAD'], workspaceRoot);
|
|
201
|
+
const commitTime = sourceRefKind === 'git-checkout'
|
|
202
|
+
? await runGitAtRoot(runtime, filesystem, ['log', '-1', '--format=%cI', 'HEAD'], sourceRoot)
|
|
203
|
+
: null;
|
|
204
|
+
// Execution kind comes from the loaded module path, not the JS runtime:
|
|
205
|
+
// Bun can execute either workspace .ts source or packaged/bundled dist.
|
|
206
|
+
const servingFromSource = input.executionKind === 'source';
|
|
207
|
+
const executableDistPath = input.executableDistPath ?? null;
|
|
208
|
+
let distStale = null;
|
|
209
|
+
if (executableDistPath) {
|
|
210
|
+
const distMtime = await getNewestDistMtime(filesystem, executableDistPath);
|
|
211
|
+
if (distMtime !== null && commitTime) {
|
|
212
|
+
const commitMs = new Date(commitTime).getTime();
|
|
213
|
+
distStale = distMtime < commitMs;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const sourceRefLabel = sourceGitRef?.slice(0, 10) ?? 'unknown';
|
|
217
|
+
const workspaceRefLabel = workspaceGitRef?.slice(0, 10) ?? 'unknown';
|
|
218
|
+
const parts = [];
|
|
219
|
+
const sourceLabel = sourceRefKind === 'package-gitHead'
|
|
220
|
+
? 'baked package source'
|
|
221
|
+
: sourceRefKind === 'baked-source-sha'
|
|
222
|
+
? 'baked executable source'
|
|
223
|
+
: 'executable source';
|
|
224
|
+
parts.push(`${sourceLabel}@${sourceRefLabel} (${sourceRoot})`);
|
|
225
|
+
if (commitTime) {
|
|
226
|
+
parts.push(`(${commitTime})`);
|
|
227
|
+
}
|
|
228
|
+
parts.push(`· user workspace@${workspaceRefLabel} (${workspaceRoot})`);
|
|
229
|
+
if (sourceDirty) {
|
|
230
|
+
parts.push('· source snapshot: DIRTY (SHA is the base commit, not complete byte identity)');
|
|
231
|
+
}
|
|
232
|
+
if (distStale === true) {
|
|
233
|
+
if (servingFromSource) {
|
|
234
|
+
parts.push('· dist: STALE (serving from source — dist not used)');
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
parts.push('· dist: STALE');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else if (distStale === false) {
|
|
241
|
+
parts.push('· dist: fresh');
|
|
242
|
+
}
|
|
243
|
+
const hasStale = distStale === true && !servingFromSource;
|
|
244
|
+
const sourceUnknown = sourceGitRef === null;
|
|
245
|
+
const prefix = sourceUnknown
|
|
246
|
+
? '⚠ EXECUTABLE SOURCE UNKNOWN: '
|
|
247
|
+
: sourceDirty
|
|
248
|
+
? '⚠ DIRTY BUILD: '
|
|
249
|
+
: hasStale
|
|
250
|
+
? '⚠ STALE BUILD: '
|
|
251
|
+
: 'Build provenance: ';
|
|
252
|
+
// DRIFT IS INVISIBLE FROM INSIDE. This string is built once, at spawn, when the
|
|
253
|
+
// body is BY DEFINITION at HEAD — so it can never report drift itself. The gap
|
|
254
|
+
// opens afterwards, as main moves and a long-lived stdio body keeps serving the
|
|
255
|
+
// code it started with. Measured 2026-07-25: 22 live bodies on one machine, the
|
|
256
|
+
// oldest 1d5h, all 114 commits behind, silently answering with retired tool
|
|
257
|
+
// schemas and missing actions that had landed hours earlier.
|
|
258
|
+
//
|
|
259
|
+
// An agent cannot notice this by working harder; nothing in a tool response says
|
|
260
|
+
// "you are old". So hand it the falsifier alongside the SHA it was born at.
|
|
261
|
+
const driftHint = sourceRefKind === 'git-checkout' && sourceGitRef
|
|
262
|
+
? ` To check whether the executable source moved underneath this body, run \`git -C ${quoteShellArgument(sourceRoot)} rev-parse HEAD\`; it must still equal \`${sourceGitRef}\`. A stdio body cannot heal itself and \`vibes dev mcp restart\` restarts the managed daemon, a different process; reconnect through the owning client or start a new session.`
|
|
263
|
+
: sourceRefKind === 'package-gitHead' && sourceGitRef
|
|
264
|
+
? ` The source ref is baked into this package as \`gitHead=${sourceGitRef}\`; packaged code cannot be checked for mutable-worktree drift.`
|
|
265
|
+
: sourceRefKind === 'baked-source-sha' && sourceGitRef && sourceDirty
|
|
266
|
+
? ` The executable includes uncommitted source bytes; \`${sourceGitRef}\` names only their base commit. Rebuild from a clean, versioned composition before treating this artifact as reproducible.`
|
|
267
|
+
: sourceRefKind === 'baked-source-sha' && sourceGitRef
|
|
268
|
+
? ` The source ref is baked into this standalone executable as \`VIBES_SOURCE_SHA=${sourceGitRef}\`; compiled code cannot be checked for mutable-worktree drift.`
|
|
269
|
+
: ' This body cannot certify which source it executes; rebuild it with baked source provenance or reconnect it from an immutable, versioned source checkout before trusting live behavior.';
|
|
270
|
+
const suffix = (hasStale
|
|
271
|
+
? ' This server may serve code that no longer matches the current source. If tools are missing or behaving unexpectedly, respawn the MCP server.'
|
|
272
|
+
: '') + driftHint;
|
|
273
|
+
const provenanceString = prefix + parts.join(' ') + suffix;
|
|
274
|
+
return {
|
|
275
|
+
sourceRoot,
|
|
276
|
+
sourceGitRef,
|
|
277
|
+
sourceRefKind,
|
|
278
|
+
sourceDirty,
|
|
279
|
+
workspaceRoot,
|
|
280
|
+
workspaceGitRef,
|
|
281
|
+
executableDistPath,
|
|
282
|
+
commitTime,
|
|
283
|
+
distStale,
|
|
284
|
+
provenanceString
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=build-provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-provenance.js","sourceRoot":"","sources":["../../src/surface-mcp/build-provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { valueFreeFailure, type RuntimeFatalKind, type RuntimeRef, type ValueFreeFailure } from '@vibesdotdev/kernel';
|
|
2
|
+
/** What reports go to: the serving runtime's logger. */
|
|
3
|
+
export interface CrashReportLogger {
|
|
4
|
+
error(message: string, context: {
|
|
5
|
+
kind: RuntimeFatalKind;
|
|
6
|
+
failure: ReturnType<typeof valueFreeFailure>;
|
|
7
|
+
}): void;
|
|
8
|
+
debug(message: string, context: {
|
|
9
|
+
reason: string;
|
|
10
|
+
}): void;
|
|
11
|
+
}
|
|
12
|
+
/** Why a host offered no fatal subscription: confirmed absence, reported at debug. */
|
|
13
|
+
export type CrashReportingAbsence = 'host-signals-unavailable' | 'fatal-subscription-unsupported';
|
|
14
|
+
export type CrashReporting = {
|
|
15
|
+
readonly kind: 'subscribed';
|
|
16
|
+
readonly stop: () => void;
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'absent';
|
|
19
|
+
readonly reason: CrashReportingAbsence;
|
|
20
|
+
/** Present when the host's signal capability itself failed. Value-free: name, code, reason. */
|
|
21
|
+
readonly failure?: ValueFreeFailure;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Subscribe `logger` to the host's fatal failures for `runtime`. Each report is
|
|
25
|
+
* value-free (the failure's name and code, never its message or stack).
|
|
26
|
+
*/
|
|
27
|
+
export declare function subscribeServeCrashReports(runtime: Pick<RuntimeRef, 'hasKind' | 'query'>, logger: CrashReportLogger): Promise<CrashReporting>;
|
|
28
|
+
//# sourceMappingURL=crash-reporting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-reporting.d.ts","sourceRoot":"","sources":["../../src/surface-mcp/crash-reporting.ts"],"names":[],"mappings":"AAYA,OAAO,EAGN,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,MAAM,qBAAqB,CAAC;AAE7B,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAChH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC1D;AAKD,sFAAsF;AACtF,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,GAAG,gCAAgC,CAAC;AAElG,MAAM,MAAM,cAAc,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,GAC1D;IACA,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEL;;;GAGG;AACH,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,EAC9C,MAAM,EAAE,iBAAiB,GACvB,OAAO,CAAC,cAAc,CAAC,CAoBzB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fatal-failure reporting for an MCP serve body, through the runtime host's
|
|
3
|
+
* declared capability (`runtime/host-signals` `subscribeFatal`).
|
|
4
|
+
*
|
|
5
|
+
* Report-only and scoped to the serving runtime: it never marks a crash
|
|
6
|
+
* handled (the host's default fatal behaviour still runs), and another runtime
|
|
7
|
+
* in the same process keeps its own subscription. A host that declares no
|
|
8
|
+
* fatal subscription is confirmed absence: nothing is installed, and no
|
|
9
|
+
* process-wide handler ever stands in for it.
|
|
10
|
+
*/
|
|
11
|
+
import * as z from 'zod/v4';
|
|
12
|
+
import { CaughtFailureSchema, getRuntimeHostSignals, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
13
|
+
/** The host's optional fatal subscription, read by shape only. */
|
|
14
|
+
const FatalSubscriptionSchema = z.object({ subscribeFatal: z.function() });
|
|
15
|
+
/**
|
|
16
|
+
* Subscribe `logger` to the host's fatal failures for `runtime`. Each report is
|
|
17
|
+
* value-free (the failure's name and code, never its message or stack).
|
|
18
|
+
*/
|
|
19
|
+
export async function subscribeServeCrashReports(runtime, logger) {
|
|
20
|
+
let signals;
|
|
21
|
+
try {
|
|
22
|
+
signals = await getRuntimeHostSignals(runtime);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
const failure = valueFreeFailure(CaughtFailureSchema.parse(error));
|
|
26
|
+
if (failure.reason === 'host-signals-unavailable') {
|
|
27
|
+
logger.debug('MCP serve: the host declares no signal capability; no fatal-failure reports', { reason: failure.reason });
|
|
28
|
+
return { kind: 'absent', reason: 'host-signals-unavailable', failure };
|
|
29
|
+
}
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
if (!FatalSubscriptionSchema.safeParse(signals).success || !signals.subscribeFatal) {
|
|
33
|
+
logger.debug('MCP serve: the host offers no fatal subscription; no fatal-failure reports', { reason: 'fatal-subscription-unsupported' });
|
|
34
|
+
return { kind: 'absent', reason: 'fatal-subscription-unsupported' };
|
|
35
|
+
}
|
|
36
|
+
const stop = signals.subscribeFatal((kind, error) => {
|
|
37
|
+
logger.error('MCP serve fatal failure', { kind, failure: valueFreeFailure(error) });
|
|
38
|
+
});
|
|
39
|
+
return { kind: 'subscribed', stop };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=crash-reporting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-reporting.js","sourceRoot":"","sources":["../../src/surface-mcp/crash-reporting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAIhB,MAAM,qBAAqB,CAAC;AAQ7B,kEAAkE;AAClE,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAc3E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC/C,OAA8C,EAC9C,MAAyB;IAEzB,IAAI,OAA0D,CAAC;IAC/D,IAAI,CAAC;QACJ,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,MAAM,KAAK,0BAA0B,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,6EAA6E,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACxH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC;QACxE,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,4EAA4E,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;QACzI,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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 type { LoggerImplementation } from '@vibesdotdev/logging';
|
|
33
|
+
import { type RuntimeHostIdentity } from '@vibesdotdev/kernel';
|
|
34
|
+
export interface ExecutableFreshnessWatch {
|
|
35
|
+
stop(): void;
|
|
36
|
+
/** One tick, exposed for tests. */
|
|
37
|
+
tick(): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export interface ExecutableFreshnessWatchOptions {
|
|
40
|
+
mode: 'stdio' | 'http';
|
|
41
|
+
/**
|
|
42
|
+
* This serve host's own bound workspace: the PM daemon it asks for a
|
|
43
|
+
* managed restart is the one that workspace's socket names.
|
|
44
|
+
*/
|
|
45
|
+
workspaceRoot: string;
|
|
46
|
+
/**
|
|
47
|
+
* The serve host's runtime: the PM client for a managed restart reads its
|
|
48
|
+
* path roots and path mechanics. Nothing here reads an ambient runtime.
|
|
49
|
+
*/
|
|
50
|
+
runtime: import('@vibesdotdev/pm/client').PMClientRuntime & Pick<import('@vibesdotdev/kernel').VibesRuntime, 'localEnvironment' | 'getEnv' | 'getEnvSnapshot' | 'lifecycle'>;
|
|
51
|
+
/**
|
|
52
|
+
* The PM process id this body was launched as (PM's `VIBES_PM_MANAGED`
|
|
53
|
+
* spawn stamp, read by the caller from its host's captured environment),
|
|
54
|
+
* or null for a body PM did not launch.
|
|
55
|
+
*/
|
|
56
|
+
managedProcessId: string | null;
|
|
57
|
+
/** The serve host's declared process identity (`getRuntimeHostIdentity`): executable/graph freshness and its pid. */
|
|
58
|
+
identity: RuntimeHostIdentity;
|
|
59
|
+
logger: Pick<LoggerImplementation, 'error' | 'info' | 'warn'>;
|
|
60
|
+
/** Poll interval (default 30s). */
|
|
61
|
+
intervalMs?: number;
|
|
62
|
+
/** How long the new file must be unchanged before a managed restart (default 30s). */
|
|
63
|
+
settleMs?: number;
|
|
64
|
+
/** Back-off after a failed restart request (default 5 min). */
|
|
65
|
+
retryMs?: number;
|
|
66
|
+
/** Give up (and stop the watch) after this many restart requests (default 3). */
|
|
67
|
+
maxRestartRequests?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Override the restart request (tests). Default:
|
|
70
|
+
* PMClient.restart(VIBES_PM_MANAGED, undefined, { expectedPid }).
|
|
71
|
+
*/
|
|
72
|
+
requestRestart?: (processId: string, guard: ManagedRestartGuard) => Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Resolve the pid the PM daemon currently tracks under a managed process id
|
|
75
|
+
* (tests). Default: PMClient.getStatus(processId).pid. `null` = untracked.
|
|
76
|
+
*/
|
|
77
|
+
resolveManagedPid?: (processId: string) => Promise<number | null>;
|
|
78
|
+
/** This body's pid (tests). Default: the host identity's `currentPid()`. */
|
|
79
|
+
selfPid?: number;
|
|
80
|
+
/** Publish a verified implementation artifact without closing transports. */
|
|
81
|
+
publishUpdate?: () => Promise<boolean>;
|
|
82
|
+
now?: () => number;
|
|
83
|
+
}
|
|
84
|
+
/** Proof the requester is the tracked process; the daemon refuses a mismatch. */
|
|
85
|
+
export interface ManagedRestartGuard {
|
|
86
|
+
expectedPid: number;
|
|
87
|
+
}
|
|
88
|
+
export declare function startExecutableFreshnessWatch(options: ExecutableFreshnessWatchOptions): ExecutableFreshnessWatch;
|
|
89
|
+
//# sourceMappingURL=executable-freshness-watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executable-freshness-watch.d.ts","sourceRoot":"","sources":["../../src/surface-mcp/executable-freshness-watch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGzF,MAAM,WAAW,wBAAwB;IACxC,IAAI,IAAI,IAAI,CAAC;IACb,mCAAmC;IACnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC/C,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,OAAO,EAAE,OAAO,wBAAwB,EAAE,eAAe,GACxD,IAAI,CAAC,OAAO,qBAAqB,EAAE,YAAY,EAAE,kBAAkB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAAC;IAClH;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qHAAqH;IACrH,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IAC9D,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,MAAM,CAAC;CACpB;AAyBD,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,+BAA+B,GACtC,wBAAwB,CA6L1B"}
|