{
  "title": "A2UI (Agent to UI) Client-to-Server Event Schema",
  "description": "Describes a JSON payload for a client-to-server event message.",
  "type": "object",
  "minProperties": 1,
  "maxProperties": 1,
  "properties": {
    "userAction": {
      "type": "object",
      "description": "Reports a user-initiated action from a component.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the action, taken from the component's action.name property."
        },
        "surfaceId": {
          "type": "string",
          "description": "The id of the surface where the event originated."
        },
        "sourceComponentId": {
          "type": "string",
          "description": "The id of the component that triggered the event."
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "An ISO 8601 timestamp of when the event occurred."
        },
        "context": {
          "type": "object",
          "description": "A JSON object containing the key-value pairs from the component's action.context, after resolving all data bindings.",
          "additionalProperties": true
        }
      },
      "required": [
        "name",
        "surfaceId",
        "sourceComponentId",
        "timestamp",
        "context"
      ]
    },
    "error": {
      "description": "Reports a client-side error.",
      "oneOf": [
        {
          "type": "object",
          "title": "Validation Failed Error",
          "properties": {
            "code": {
              "const": "VALIDATION_FAILED"
            },
            "surfaceId": {
              "type": "string",
              "description": "The id of the surface where the error occurred."
            },
            "path": {
              "type": "string",
              "description": "The JSON pointer to the field that failed validation (e.g. '/components/0/text')."
            },
            "message": {
              "type": "string",
              "description": "A short one-sentence description of why validation failed."
            }
          },
          "required": ["code", "path", "message", "surfaceId"]
        },
        {
          "type": "object",
          "title": "Generic Error",
          "properties": {
            "code": {
              "not": {
                "const": "VALIDATION_FAILED"
              }
            },
            "message": {
              "type": "string",
              "description": "A short one-sentence description of why the error occurred."
            },
            "surfaceId": {
              "type": "string",
              "description": "The id of the surface where the error occurred."
            }
          },
          "required": ["code", "surfaceId", "message"],
          "additionalProperties": true
        }
      ]
    }
  },
  "oneOf": [
    { "required": ["userAction"] },
    { "required": ["clientUiCapabilities"] },
    { "required": ["error"] }
  ]
}
