{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AgentCard",
  "description": "A2A 표준 기반 이종 에이전트 및 물리 장치 발견용 Agent Card 스키마 템플릿",
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "description": "에이전트 또는 물리 노드의 고유 UUID 또는 식별자"
    },
    "name": {
      "type": "string",
      "description": "에이전트/장치 명칭 (예: smart-farm-sprinkler-01)"
    },
    "role": {
      "type": "string",
      "description": "시스템 내에서의 역할 (예: sensing-layer, control-layer, planner, developer, reviewer)"
    },
    "version": {
      "type": "string",
      "description": "에이전트 모듈 소프트웨어 버전"
    },
    "endpoint": {
      "type": "object",
      "description": "연동 엔드포인트 정보",
      "properties": {
        "uri": {
          "type": "string",
          "description": "접속 Endpoint URI (예: dns:///edge-gateway.local:50051 또는 mqtt://broker.local:1883)"
        },
        "protocol": {
          "type": "string",
          "enum": ["grpc", "grpc-over-quic", "mqtt-v5", "coap", "http2"],
          "description": "통신 전송 프로토콜 규격"
        },
        "transport_fallback": {
          "type": "string",
          "enum": ["grpc-over-http2", "mqtt-v3.1.1", "none"],
          "description": "네트워크 제한 시 fallback할 전송 계층"
        }
      },
      "required": ["uri", "protocol"]
    },
    "security": {
      "type": "object",
      "description": "보안 및 신원 정보",
      "properties": {
        "auth_type": {
          "type": "string",
          "enum": ["spiffe-svid", "hmac-sha256", "mtls", "none"],
          "description": "인증/인가 보안 프로토콜"
        },
        "spiffe_id": {
          "type": "string",
          "description": "SPIFFE 신원 식별자 (예: spiffe://example.org/ns/smartfarm/sa/sprinkler)"
        },
        "hmac_token_ref": {
          "type": "string",
          "description": "HMAC 토큰 서명을 위한 환경변수명"
        }
      },
      "required": ["auth_type"]
    },
    "capabilities": {
      "type": "array",
      "description": "에이전트가 제공하는 과업/제어 기능 및 RPC 메소드 매핑",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "기능/명령 이름 (예: spray_pesticide)"
          },
          "grpc_method": {
            "type": "string",
            "description": "gRPC 패키지/메서드 매핑 경로 (예: /smartfarm.ControlService/SprayPesticide)"
          },
          "mqtt_topic": {
            "type": "string",
            "description": "하부 센싱/제어 매핑 MQTT 토픽 (예: farm/device/sprinkler/control)"
          },
          "idempotency": {
            "type": "string",
            "enum": ["idempotent", "non-idempotent"],
            "description": "제어 명령의 멱등성 여부 분류 (비멱등 시 CIK 적용 필수)"
          },
          "input_schema": {
            "type": "object",
            "description": "입력 파라미터 Protobuf/JSON 스키마 정의"
          }
        },
        "required": ["name", "idempotency"]
      }
    }
  },
  "required": ["agent_id", "name", "role", "endpoint", "security", "capabilities"]
}
