{
  "bridgeBaseUrlPolicy": {
    "mustReachExactRuntimeContact": true,
    "reject": [
      "127.0.0.1",
      "localhost",
      "E:Voice account website",
      "setup-code issuer URL",
      "general Emergence website/build server URL",
      "URLs for another runtime/contact"
    ]
  },
  "channelModel": "current-only",
  "connectionDoctrine": {
    "advancedAlternative": "user-owned public HTTPS reverse proxy",
    "emergenceRelayAvailable": false,
    "localTestOnly": "same Wi-Fi/LAN",
    "normalTraffic": "direct phone-to-runtime through the user's chosen connection path",
    "recommendedDefault": "Tailscale/private network",
    "stopBeforeConsumeWhen": "no verified bridgeBaseUrl reaches this exact runtime/contact from the user's phone"
  },
  "consume": {
    "errorCodes": {
      "account_runtime_unsupported": "The adapter's preflight refused to send the code. It was never spent.",
      "expired_setup_code": "The code passed its expiry. Request a fresh code.",
      "invalid_setup_code": "The code does not exist, was revoked, or was already used. Request a fresh code.",
      "unsupported_runtime_kind": "The account service cannot pair this runtime. The setup code was NOT consumed and stays valid; do not request a new one."
    },
    "jsonFields": [
      "setupCode",
      "bridgeBaseUrl"
    ],
    "method": "POST",
    "url": "https://www.emergencerising.com/api/v1/evoice/bridge/bootstrap/consume"
  },
  "current": {
    "manifestUrl": "https://www.emergencerising.com/evoice/plugins/cursor/evoice-bridge-plugin/current.json",
    "packageSha256": "16ef1758bae47bc5528babd661cc7121f7c75645f631b3bcd1ae366edfbc1dc4",
    "packageSizeBytes": 59381,
    "packageUrl": "https://www.emergencerising.com/evoice/plugins/cursor/evoice-bridge-plugin/v0.2.4/evoice-cursor-bridge-plugin-v0.2.4.zip",
    "version": "0.2.4"
  },
  "currentManifestUrl": "https://www.emergencerising.com/evoice/plugins/cursor/evoice-bridge-plugin/current.json",
  "expectedHealth": {
    "authReadyContract": "authReady is false unless the Cursor Agent CLI reports an authenticated status. authDetail carries the reason. Pair only after `agent login`, or turns fail after a clean pair.",
    "compatibilityPath": "/plugins/evoice-gateway/health",
    "method": "GET",
    "path": "/plugins/evoice-bridge/health",
    "type": "http"
  },
  "installDocs": {
    "source": "README.md inside the package archive",
    "steps": [
      "Fetch currentManifestUrl first and treat its version, packageUrl, and packageSha256 as authoritative.",
      "Download packageUrl, verify packageSha256, extract it, and run python scripts/install.py (or scripts/install-local.ps1 / scripts/install-local.sh).",
      "The installer installs or locates the Cursor Agent CLI (native or WSL on Windows), detects the Tailscale URL, starts the bridge in account pairing mode, and links the Cursor plugin.",
      "Preserve runtime configuration, pairing state, bridge tokens, Cursor session continuity, and workspace state during repair.",
      "Keep Cursor authentication in the owner-controlled process environment; never copy credentials into the package or pairing report.",
      "Verify GET /plugins/evoice-bridge/health on the phone-reachable bridge URL before consuming the setup code. Account-issued evs_ codes are consumed against the E:Voice account service with runtimeKind CURSOR."
    ]
  },
  "installedVersionCheck": {
    "compareInstalledVersionTo": "currentManifestUrl.version",
    "inspect": [
      "evoice_cursor_bridge_adapter.py",
      "SOURCE_PROVENANCE.md",
      ".cursor-plugin/plugin.json",
      "runtime health/status/version output when available"
    ],
    "repairWhen": [
      "installed version missing",
      "installed version unknown",
      "installed version older than current manifest version",
      "source provenance differs from the current manifest package"
    ],
    "requiredBeforeSetupCodeConsume": true
  },
  "latestManifestAliasUrl": "https://www.emergencerising.com/evoice/plugins/cursor/evoice-bridge-plugin/latest.json",
  "manifestUrl": "https://www.emergencerising.com/evoice/plugins/cursor/evoice-bridge-plugin/current.json",
  "missingPackageFiles": [],
  "packageSha256": "16ef1758bae47bc5528babd661cc7121f7c75645f631b3bcd1ae366edfbc1dc4",
  "packageSizeBytes": 59381,
  "packageUrl": "https://www.emergencerising.com/evoice/plugins/cursor/evoice-bridge-plugin/v0.2.4/evoice-cursor-bridge-plugin-v0.2.4.zip",
  "pairingContractSha256": "144a94b4d990d69bafe6392a7f2dbcd15d3c128f72989c8ae1ad5cb0f145b0ec",
  "pairingContractUrl": "https://www.emergencerising.com/evoice/plugins/contracts/pairing/cursor/current.json",
  "pairingContractVersion": "1.0.5",
  "pairingContractVersionedUrl": "https://www.emergencerising.com/evoice/plugins/contracts/pairing/v1.0.5/cursor.json",
  "previousPublicVersion": "0.2.3",
  "privatePathLeakCount": 0,
  "privatePathLeaks": [],
  "releaseChannel": "current",
  "requiredArchiveMembers": [
    ".cursor-plugin/plugin.json",
    "LICENSE",
    "README.md",
    "SOURCE_PROVENANCE.md",
    "agents/evoice-pairing.md",
    "assets/logo.svg",
    "commands/evoice-status.md",
    "commands/pair-evoice.md",
    "evoice_cursor_bridge_adapter.py",
    "evoice_cursor_runtime.py",
    "mcp.json",
    "rules/evoice-pairing.mdc",
    "scripts/evoice_cursor_mcp.py",
    "scripts/install-local.ps1",
    "scripts/install-local.sh",
    "scripts/install.py",
    "skills/pair-evoice-agent/SKILL.md",
    "tools/__init__.py",
    "tools/evoice_plugin_autoupdate.py",
    "tools/evoice_plugin_update.py"
  ],
  "runtime": "cursor",
  "runtimeDisplayName": "Cursor",
  "runtimeKind": "CURSOR",
  "runtimePreflight": {
    "adapterPath": "/plugins/evoice-bridge/preflight",
    "expectRuntimeKind": "CURSOR",
    "mcpTool": "evoice_bridge_preflight",
    "method": "GET",
    "onMissingRoute": "treat as unknown and consume anyway",
    "requiredBeforeSetupCodeConsume": true,
    "schema": "com.emergencerising.evoice.bridge-runtimes.v1",
    "url": "https://www.emergencerising.com/api/v1/evoice/bridge/runtimes"
  },
  "schema": "com.emergencerising.evoice.external-runtime-plugin.v1",
  "setupCodeGate": {
    "downloadRequiresAccountLogin": false,
    "pairingRequiresSetupCode": true,
    "setupCodeProperties": [
      "expiring",
      "single-use",
      "high-entropy",
      "hashed-at-rest"
    ]
  },
  "statePreservation": [
    "pairing state",
    "bridge tokens",
    "device/session state",
    "user runtime config",
    "Cursor plugin local install"
  ],
  "status": "ready",
  "version": "0.2.4",
  "versionBumpRequired": true,
  "versionMetadata": {
    "files": [
      {
        "file": "evoice_cursor_bridge_adapter.py",
        "status": "ready",
        "version": "0.2.4"
      },
      {
        "file": ".cursor-plugin/plugin.json",
        "status": "ready",
        "version": "0.2.4"
      }
    ],
    "status": "ready"
  }
}
