{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://agentcall.smartycode.com/schemas/agentcall-object-passport-0.1.schema.json",
  "title": "AgentCall portable object passport (0.1) - public NFC/photo profile",
  "description": "Public AgentCall 0.1 NFC/photo profile generated from canonical contracts. Only the reviewed dependency closure is published; see the release manifest and /ext/agentcall-agui/0.1 for negotiation and semantic validation duties.",
  "type": "object",
  "required": [
    "schemaVersion",
    "objectRef",
    "displayName",
    "updatedAt",
    "actions"
  ],
  "properties": {
    "schemaVersion": {
      "const": "0.1"
    },
    "objectRef": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "pattern": "^(urn:agentcall:object:[A-Za-z0-9][A-Za-z0-9._~-]{0,127}|https://[^\\u0000-\\u0020\\u007F]+)$"
    },
    "displayName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^\\u0000-\\u001F\\u007F]+$"
    },
    "summary": {
      "type": "string",
      "maxLength": 2048,
      "pattern": "^[^\\u0000-\\u001F\\u007F]*$"
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "maxLength": 64
    },
    "actions": {
      "type": "array",
      "maxItems": 8,
      "items": {
        "type": "object",
        "required": [
          "id",
          "label",
          "kind",
          "requiresConfirmation"
        ],
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "^[A-Za-z0-9._:-]+$"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "^[^\\u0000-\\u001F\\u007F]+$"
          },
          "kind": {
            "enum": [
              "inspect",
              "history",
              "maintenance",
              "reorder",
              "custom"
            ]
          },
          "requiresConfirmation": {
            "const": true,
            "description": "A portable action is only a discoverable recipe. The executing agent must obtain fresh user confirmation."
          }
        }
      }
    }
  }
}
