{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bkptlabs.com/viewalyzer/query-schemas-v2.json",
  "title": "ViewAlyzer CLI query responses (schema_version 2)",
  "description": "A catalog with one named schema per query verb. Resolve a verb through #/$defs/<verb>.",
  "oneOf": [
    { "$ref": "#/$defs/summary" },
    { "$ref": "#/$defs/timeline" },
    { "$ref": "#/$defs/events" },
    { "$ref": "#/$defs/user-traces" },
    { "$ref": "#/$defs/inversions" },
    { "$ref": "#/$defs/verdicts" },
    { "$ref": "#/$defs/cpu" },
    { "$ref": "#/$defs/series" },
    { "$ref": "#/$defs/timers" },
    { "$ref": "#/$defs/comms" },
    { "$ref": "#/$defs/sql" },
    { "$ref": "#/$defs/fingerprint" },
    { "$ref": "#/$defs/compare" },
    { "$ref": "#/$defs/slices" },
    { "$ref": "#/$defs/slice-details" },
    { "$ref": "#/$defs/events-all" },
    { "$ref": "#/$defs/user-traces-all" },
    { "$ref": "#/$defs/profile" },
    { "$ref": "#/$defs/etm" },
    { "$ref": "#/$defs/itm-console" },
    { "$ref": "#/$defs/dwt-data" },
    { "$ref": "#/$defs/dwt-exc" },
    { "$ref": "#/$defs/dwt-counters" },
    { "$ref": "#/$defs/swo-load" }
  ],
  "$defs": {
    "envelope": {
      "type": "object",
      "required": ["schema_version", "recording_id", "query"],
      "properties": {
        "schema_version": { "const": 2 },
        "recording_id": { "type": "string" },
        "path": { "type": "string" },
        "query": { "type": "string" },
        "budget": { "enum": ["low", "med", "high"] }
      }
    },
    "summary": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["duration_us", "total_events", "lost_events", "corrupt_bytes", "pre_sync", "execution_ended_abnormally", "ended_abnormally", "execution_end"],
          "properties": {
            "query": { "const": "summary" },
            "duration_us": { "type": "integer" },
            "total_events": { "type": "integer" },
            "lost_events": { "type": "integer" },
            "corrupt_bytes": { "type": "integer" },
            "pre_sync": { "$ref": "#/$defs/healthCounters" },
            "execution_ended_abnormally": { "type": "boolean" },
            "ended_abnormally": { "type": ["object", "null"] },
            "execution_end": { "type": "object" }
          }
        }
      ]
    },
    "timeline": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["tier"],
          "properties": { "query": { "const": "timeline" }, "tier": { "enum": ["summary", "bucketed", "raw"] } },
          "anyOf": [{ "required": ["tasks"] }, { "required": ["buckets"] }, { "required": ["slices"] }]
        }
      ]
    },
    "events": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "properties": { "query": { "const": "events" } },
          "anyOf": [{ "required": ["by_kind"] }, { "required": ["buckets"] }, { "required": ["events"] }]
        }
      ]
    },
    "user-traces": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "properties": { "query": { "enum": ["user-traces", "user_traces", "traces"] } },
          "anyOf": [{ "required": ["channels"] }, { "required": ["samples"] }]
        }
      ]
    },
    "inversions": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["scope", "resource_types", "priority_rule", "inversion_count", "contention_count", "inversions"],
          "properties": {
            "query": { "const": "inversions" },
            "scope": { "const": "mutexes_only" },
            "resource_types": { "const": ["mutex"] },
            "inversions": { "type": "array", "items": { "type": "object", "required": ["type", "t_us", "mutex_name", "waiter_name", "holder_name"] } }
          }
        }
      ]
    },
    "verdicts": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["detectors", "count", "verdicts"],
          "properties": {
            "query": { "const": "verdicts" },
            "detectors": {
              "type": "object",
              "required": ["native", "trace_domains"],
              "properties": {
                "native": { "$ref": "#/$defs/detectorStatus" },
                "trace_domains": { "$ref": "#/$defs/detectorStatus" }
              }
            },
            "count": { "type": "integer" },
            "verdicts": { "type": "array", "items": { "$ref": "#/$defs/verdict" } }
          }
        }
      ]
    },
    "cpu": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["window", "busy_pct", "idle_pct", "context_switches", "preemptions", "tasks", "findings"],
          "properties": {
            "query": { "const": "cpu" },
            "window": { "type": "object" },
            "tasks": { "type": "array", "items": { "type": "object" } },
            "findings": { "type": "array", "items": { "type": "object" } }
          }
        }
      ]
    },
    "series": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["kind"],
          "properties": {
            "query": { "const": "series" },
            "kind": { "enum": ["cpu-load", "event-rate", "stack", "heap", "task-timing", "interval"] },
            "fields": { "type": "array", "items": { "type": "string" } },
            "values": { "$ref": "#/$defs/compactPoints" },
            "stack": {
              "type": "array",
              "items": { "type": "object", "required": ["t_us", "total_stack_used_bytes"] }
            }
          },
          "if": { "properties": { "kind": { "const": "stack" } } },
          "then": { "required": ["stack", "fields", "values"] }
        }
      ]
    },
    "timers": {
      "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["tier", "timers", "work"], "properties": { "query": { "const": "timers" }, "timers": { "type": "array" }, "work": { "type": "array" } } }]
    },
    "comms": {
      "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["window", "paths", "resources"], "properties": { "query": { "const": "comms" }, "paths": { "type": "array" }, "resources": { "type": "array" } } }]
    },
    "sql": {
      "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["columns", "rows", "row_count", "truncated"], "properties": { "query": { "const": "sql" }, "columns": { "type": "array" }, "rows": { "type": "array" } } }]
    },
    "fingerprint": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        { "properties": { "query": { "const": "fingerprint" } }, "anyOf": [{ "required": ["fingerprint"] }, { "required": ["out", "runs", "sections"] }] }
      ]
    },
    "compare": {
      "allOf": [
        { "$ref": "#/$defs/envelope" },
        {
          "required": ["baseline", "verdict", "counts", "results"],
          "properties": {
            "query": { "const": "compare" },
            "verdict": { "enum": ["pass", "warn", "fail"] },
            "results": { "type": "array", "items": { "$ref": "#/$defs/compareResult" } }
          }
        }
      ]
    },
    "slices": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["slices"], "properties": { "query": { "const": "slices" }, "slices": { "type": "array" } } }] },
    "slice-details": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["slices"], "properties": { "query": { "const": "slice-details" }, "slices": { "type": "array", "items": { "type": "object" } } } }] },
    "events-all": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["events"], "properties": { "query": { "const": "events-all" }, "events": { "type": "array", "items": { "type": "object" } } } }] },
    "user-traces-all": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["samples"], "properties": { "query": { "const": "user-traces-all" }, "samples": { "type": "array" } } }] },
    "profile": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["data"], "properties": { "query": { "const": "profile" }, "data": { "type": "object", "required": ["total_samples", "hotspots"] } } }] },
    "etm": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "properties": { "query": { "const": "etm" } } }] },
    "itm-console": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["data"], "properties": { "query": { "const": "itm-console" }, "data": { "type": "object", "required": ["ports"] } } }] },
    "dwt-data": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["data"], "properties": { "query": { "const": "dwt-data" }, "data": { "type": "object", "required": ["watches"] } } }] },
    "dwt-exc": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["data"], "properties": { "query": { "const": "dwt-exc" }, "data": { "type": "object", "required": ["total", "exceptions", "events"] } } }] },
    "dwt-counters": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["data"], "properties": { "query": { "const": "dwt-counters" }, "data": { "type": "object", "required": ["counters"] } } }] },
    "swo-load": { "allOf": [{ "$ref": "#/$defs/envelope" }, { "required": ["data"], "properties": { "query": { "const": "swo-load" }, "data": { "type": "object", "required": ["bytes", "seconds", "bytes_per_s", "swo_hz", "share_pct", "overflows"] } } }] },
    "healthCounters": {
      "type": "object",
      "required": ["lost_events", "corrupt_bytes", "corrupt_runs", "seq_gaps"],
      "properties": {
        "lost_events": { "type": "integer" },
        "corrupt_bytes": { "type": "integer" },
        "corrupt_runs": { "type": "integer" },
        "seq_gaps": { "type": "integer" }
      }
    },
    "detectorStatus": {
      "type": "object",
      "required": ["status", "finding_count"],
      "properties": {
        "status": { "enum": ["ready", "no_descriptors", "all_disabled", "no_rules"] },
        "finding_count": { "type": "integer" }
      }
    },
    "verdict": {
      "type": "object",
      "required": ["source", "id", "name", "severity", "t_start_us", "t_end_us", "explain", "evidence"],
      "properties": {
        "source": { "enum": ["native", "trace_domain"] },
        "id": { "type": "string" },
        "name": { "type": "string" },
        "severity": { "type": "string" },
        "t_start_us": { "type": "integer" },
        "t_end_us": { "type": "integer" },
        "explain": { "type": "string" },
        "evidence": { "type": "array" }
      }
    },
    "compactPoints": {
      "type": "array",
      "items": { "type": "array", "prefixItems": [{ "type": "integer" }, { "type": "number" }], "minItems": 2, "maxItems": 2 }
    },
    "compareResult": {
      "type": "object",
      "required": ["section", "item", "metric", "status"],
      "properties": {
        "status": { "enum": ["pass", "warn", "fail", "missing", "new"] },
        "current": { "type": "number" },
        "baseline": { "type": "number" }
      },
      "if": { "properties": { "status": { "enum": ["pass", "warn", "fail"] } } },
      "then": { "required": ["current", "baseline"] }
    }
  }
}
