{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://swl-ses.dev/schemas/agent-message.json",
  "title": "SWL Agent Message",
  "description": "Schema de validacion para mensajes entre agentes SWL",
  "type": "object",
  "required": ["id", "type", "from", "to", "timestamp", "status"],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^msg-[a-z0-9]+-[a-z0-9]+$",
      "description": "Identificador unico del mensaje generado por generarMessageId()"
    },
    "type": {
      "type": "string",
      "enum": ["task_handoff", "query", "response", "completed", "conflict"],
      "description": "Tipo de mensaje segun el protocolo SWL inter-agent"
    },
    "from": {
      "type": "string",
      "description": "Nombre del agente emisor"
    },
    "to": {
      "type": "string",
      "description": "Nombre del agente destinatario o 'broadcast' para todos"
    },
    "payload": {
      "type": "object",
      "description": "Datos del mensaje, estructura libre segun type"
    },
    "contextFiles": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Rutas de archivos relevantes al mensaje, usadas para deteccion de conflictos"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time",
      "description": "Fecha y hora de creacion del mensaje en formato ISO 8601"
    },
    "status": {
      "type": "string",
      "enum": ["pending", "processed", "expired"],
      "description": "Estado actual del mensaje en el ciclo de vida del protocolo"
    },
    "processedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Fecha y hora en que el mensaje fue marcado como procesado"
    }
  },
  "additionalProperties": false
}
