{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://vclaw.dev/schemas/video/artifacts/cinema-capability-snapshot.schema.json",
  "title": "CinemaProviderCapabilitySnapshotArtifact",
  "type": "object",
  "required": ["schemaVersion", "snapshotId", "projectSlug", "routeId", "transportId", "accountClass", "discoveredAt", "expiresAt", "discovery", "capabilities", "contentHash"],
  "additionalProperties": false,
  "properties": {
    "schemaVersion": { "const": 1 },
    "snapshotId": { "type": "string", "minLength": 1 },
    "projectSlug": { "type": "string", "minLength": 1 },
    "routeId": { "type": "string", "minLength": 1 },
    "transportId": { "type": "string", "minLength": 1 },
    "accountClass": { "enum": ["subscription-unlimited", "provider-credits", "api-credits", "free", "local"] },
    "discoveredAt": { "type": "string", "format": "date-time" },
    "expiresAt": { "type": "string", "format": "date-time" },
    "discovery": {
      "type": "object",
      "required": ["kind", "version", "authenticated", "sourceEvidenceIds"],
      "additionalProperties": false,
      "properties": {
        "kind": { "enum": ["static-registry", "official-cli", "transport-probe", "fake-transport"] },
        "version": { "type": "string", "minLength": 1 },
        "authenticated": { "type": "boolean" },
        "sourceEvidenceIds": { "type": "array", "items": { "type": "string", "minLength": 1 } }
      }
    },
    "capabilities": {
      "type": "object",
      "required": ["mediaKinds", "operations", "models", "workflows", "maximumReferenceImages", "maximumConcurrentJobs", "parameterSchema"],
      "additionalProperties": false,
      "properties": {
        "mediaKinds": { "type": "array", "minItems": 1, "items": { "enum": ["image", "video", "audio"] } },
        "operations": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
        "models": { "type": "array", "items": { "type": "string", "minLength": 1 } },
        "workflows": { "type": "array", "items": { "type": "string", "minLength": 1 } },
        "maximumReferenceImages": { "type": "integer", "minimum": 0 },
        "maximumReferenceVideos": { "type": "integer", "minimum": 0 },
        "maximumReferenceAudio": { "type": "integer", "minimum": 0 },
        "maximumConcurrentJobs": { "type": ["integer", "null"], "minimum": 1 },
        "parameterSchema": { "type": "object", "additionalProperties": true }
      }
    },
    "contentHash": { "$ref": "#/definitions/Sha256" }
  },
  "definitions": { "Sha256": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" } }
}
