{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "gentle-ai.telemetry-runtime-aggregate/v1",
  "description": "Sanitized stdin for gentle-ai telemetry runtime send --json. Maximum UTF-8 input 16384 bytes. One best-effort send attempt, no client persistence or retry. Rows are independent observations, not a session composition. No caller identity is accepted.",
  "type": "object", "additionalProperties": false,
  "required": ["schema", "registry", "host", "rows"],
  "properties": {
    "schema": {"const": "gentle-ai.telemetry-runtime-aggregate/v1"},
    "registry": {"const": 1},
    "host": {"enum": ["claude-code", "opencode", "codex", "pi"]},
    "rows": {"type": "array", "minItems": 1, "maxItems": 32, "items": {"$ref": "#/$defs/row"}}
  },
  "$defs": {
    "metric": {"oneOf": [{"type": "integer", "minimum": 0, "maximum": 999999999999}, {"type": "null"}, {"const": "unsupported"}]},
    "count": {"type": "integer", "minimum": 0, "maximum": 999999999999},
    "token": {
      "type": "object", "additionalProperties": false,
      "required": ["reported", "unavailable", "unsupported", "sum"],
      "properties": {
        "reported": {"$ref": "#/$defs/count"}, "unavailable": {"$ref": "#/$defs/count"},
        "unsupported": {"$ref": "#/$defs/count"}, "sum": {"$ref": "#/$defs/count"}
      },
      "if": {"properties": {"reported": {"const": 0}}},
      "then": {"properties": {"sum": {"const": 0}}}
    },
    "duration": {
      "type": "object", "additionalProperties": false, "required": ["kind", "measured_count", "sum_ms"],
      "properties": {"kind": {}, "measured_count": {}, "sum_ms": {}},
      "oneOf": [
        {"properties": {"kind": {"const": "unavailable"}, "measured_count": {"const": 0}, "sum_ms": {"type": "null"}}},
        {"properties": {"kind": {"enum": ["request", "message"]}, "measured_count": {"type": "integer", "minimum": 1, "maximum": 999999999999}, "sum_ms": {"type": "number", "minimum": 0, "maximum": 999999999999}}}
      ]
    },
    "effort": {"enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max", "not_selected", "unknown", "custom", "unavailable", "unsupported"]},
    "model": {
      "type": "object", "additionalProperties": false, "required": ["provider", "id"],
      "properties": {
        "provider": {"type": "string", "maxLength": 32},
        "id": {"type": "string", "maxLength": 64}
      },
      "anyOf": [
        {"properties": {"provider": {"pattern": "^[a-z0-9][a-z0-9-]{0,31}$"}, "id": {"pattern": "^(claude|gpt|o[1-9]|codex|gemini|gemma|deepseek|glm|qwen|qwq|kimi|moonshot|llama|codellama|mistral|mixtral|codestral|devstral|magistral|ministral|minimax|grok|phi|nemotron|jamba|hunyuan|doubao|ernie|mimo|granite|olmo|smollm|starcoder|titan)[a-z0-9]*([-_.:][a-z0-9]+){0,8}$"}}},
        {"properties": {"provider": {"const": "unknown"}, "id": {"const": "unknown"}}},
        {"properties": {"provider": {"const": "custom"}, "id": {"const": "custom"}}},
        {"properties": {"provider": {"const": "opencode"}, "id": {"const": "custom"}}}
      ]
    },
    "row": {
      "type": "object", "additionalProperties": false,
      "required": ["model", "model_evidence", "agent_kind", "agent_class", "selected_effort", "effective_effort", "launches", "responses", "input_tokens", "output_tokens", "cache_read_tokens", "cache_creation_tokens", "reasoning_tokens", "total_tokens", "error_category", "duration"],
      "properties": {
        "reasoning_tokens": {"$ref": "#/$defs/token"},
        "total_tokens": {"$ref": "#/$defs/token"},
        "agent_class": {"enum": ["orchestrator", "worker", "explore", "verify", "unknown", "sdd-init", "sdd-explore", "sdd-research", "sdd-propose", "sdd-spec", "sdd-design", "sdd-tasks", "sdd-apply", "sdd-verify", "sdd-archive", "sdd-onboard", "sdd-status", "sdd-sync", "jd-judge-a", "jd-judge-b", "jd-fix-agent", "review-risk", "review-readability", "review-reliability", "review-resilience", "review-refuter", "review-validator"]},
        "error_category": {"enum": ["none", "unknown", "auth", "output_length", "aborted", "api", "rate_limit", "server"]},
        "duration": {"$ref": "#/$defs/duration"},
        "model": {"$ref": "#/$defs/model"},
        "model_evidence": {"enum": ["selected", "response", "unknown"]},
        "agent_kind": {"enum": ["orchestrator", "built_in", "custom", "unknown"]},
        "selected_effort": {"$ref": "#/$defs/effort"}, "effective_effort": {"$ref": "#/$defs/effort"},
        "launches": {"$ref": "#/$defs/metric", "description": "Source-observed event count only; null when not observed. Never reconstructed from sessions."}, "responses": {"$ref": "#/$defs/metric", "description": "Source-observed response occurrence count, independent of token coverage and success."},
        "input_tokens": {"$ref": "#/$defs/token"}, "output_tokens": {"$ref": "#/$defs/token"},
        "cache_read_tokens": {"$ref": "#/$defs/token"}, "cache_creation_tokens": {"$ref": "#/$defs/token"}
      }
    }
  }
}
