{
    "$id": "https://github.com/open-voice-interoperability/docs/tree/main/schemas/assistant-manifest/1.0.0/assistant-manifest-schema.json",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "description": "A representation of an 'assistant manifest’ - a standard format for publishing the identity and capability of an Open-Floor agent.",
    "type": "object",
    "required":  [ "identification","capabilities" ],
    "properties": {
      "identification": {
        "required":  ["serviceUrl" , "organization", "conversationalName" ],
        "properties": {
          "speakerUri": {
            "$ref": "#/$defs/uri",
            "description": "The unique identity of the agent."
          },
          "serviceUrl": {
            "$ref": "#/$defs/url",
            "description": "The endpoint of the conversational assistant."
          },
          "organization": {
            "type": "string",
            "description": "The name of the organization administering this assistant."
          },
          "conversationalName": {
            "type": "string",
            "description": "The 'given name' of the conversational agent."
          },
          "department": {
            "type": "string",
            "description": "The department within the organization."
          },
          "role": {
            "type": "string",
            "description": "The 'job title', or 'role' of the assistant."
          },
          "synopsis": {
            "type": "string",
            "description": "A sentence signposting the who the assistant is and their area of expertise."
          }
        }
      },
      "capabilities": {
        "type": "array",
        "description": "A list of capabilities supported by this endpoint.",
        "items" : {
          "type" : "object",
          "description": "One of the capabilities supported by this endpoint.",
          "required":  ["keyphrases" , "descriptions" ],
          "properties" : {
            "keyphrases": {
              "type": "array",
              "description": "A list of searchable key phrases.",
              "items" : {
                "type": "string",
                "description": "A searchable key phrase"
              }
            },
            "languages": {
              "type": "array",
              "description": "A list of the languages supported by this capability.",
              "items" : {
                "type": "string",
                "description": "A language supported by this capability"
              }
            },
            "descriptions": {
              "type": "array",
              "description": "A set of searchable texts, in no particular order, describing the services and capabilities of the assistant.",
              "items" : {
                "type": "string",
                "description": "A searchable text describing one of the services or capabilities of the assistant."
              }
            },
            "supportedLayers": {
              "type" : "object",
              "description": "The input and output capabilities supported by this endpoint.",
              "required":  ["input" , "output" ],
              "properties" : {
                "input": {
                  "type": "array",
                  "description": "A list of the dialogEvent layers supported as input for this capability.",
                  "items" : {
                    "type": "string",
                    "description": "A dialogEvent input layer supported by this capability"
                  }
                },
                "output": {
                  "type": "array",
                  "description": "A list of the dialogEvent layers supported as output for this capability.",
                  "items" : {
                    "type": "string",
                    "description": "A dialogEvent output layer supported by this capability"
                  }
                }
              }
            }
          }
        }
      }
    },
  
    "$defs": {
      "url": {
        "type": "string",
        "description": "Any valid URL"
      },
      "uri": {
        "type": "string",
        "description": "Any valid URI"
      }
    }
}