{
  "schemaVersion": "huejoy/agent-interface/1",
  "name": "Huejoy agent interface",
  "rootSelector": "#app[data-huejoy-agent-contract='huejoy/agent/1']",
  "configSelector": "#huejoy-agent-config",
  "updateEvent": "huejoy:agent-state",
  "actions": [
    { "id": "reroll", "selector": "[data-agent-action='reroll']" },
    { "id": "cycle-gradient-order", "selector": "[data-agent-action='cycle-gradient-order']" },
    { "id": "cycle-pattern", "selector": "[data-agent-action='cycle-pattern']" },
    { "id": "set-pattern", "selector": "[data-agent-action='set-pattern']" },
    { "id": "set-direction", "selector": "[data-agent-action='set-direction']" },
    { "id": "select-saved", "selector": "[data-agent-action='select-saved'][data-agent-index]" },
    { "id": "select-history", "selector": "[data-agent-action='select-history'][data-agent-index]" }
  ],
  "exportSchema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "additionalProperties": false,
    "required": [
      "schemaVersion",
      "seed",
      "manifestId",
      "colors",
      "gradientOrder",
      "pattern",
      "direction",
      "gradientCss",
      "cssText"
    ],
    "properties": {
      "schemaVersion": {
        "const": "huejoy/agent-export/1"
      },
      "seed": {
        "type": "string"
      },
      "manifestId": {
        "type": "string"
      },
      "colors": {
        "type": "array",
        "minItems": 3,
        "maxItems": 3,
        "items": {
          "type": "object",
          "additionalProperties": false,
          "required": ["role", "name", "hex", "locked"],
          "properties": {
            "role": {
              "enum": ["glow", "anchor", "bridge"]
            },
            "name": {
              "type": "string"
            },
            "hex": {
              "type": "string",
              "pattern": "^#[0-9A-F]{6}$"
            },
            "locked": {
              "type": "boolean"
            }
          }
        },
        "allOf": [
          {
            "contains": {
              "type": "object",
              "properties": {
                "role": {
                  "const": "glow"
                }
              },
              "required": ["role"]
            },
            "minContains": 1,
            "maxContains": 1
          },
          {
            "contains": {
              "type": "object",
              "properties": {
                "role": {
                  "const": "anchor"
                }
              },
              "required": ["role"]
            },
            "minContains": 1,
            "maxContains": 1
          },
          {
            "contains": {
              "type": "object",
              "properties": {
                "role": {
                  "const": "bridge"
                }
              },
              "required": ["role"]
            },
            "minContains": 1,
            "maxContains": 1
          }
        ]
      },
      "gradientOrder": {
        "type": "array",
        "minItems": 3,
        "maxItems": 3,
        "items": {
          "enum": ["glow", "anchor", "bridge"]
        },
        "allOf": [
          {
            "contains": {
              "const": "glow"
            },
            "minContains": 1,
            "maxContains": 1
          },
          {
            "contains": {
              "const": "anchor"
            },
            "minContains": 1,
            "maxContains": 1
          },
          {
            "contains": {
              "const": "bridge"
            },
            "minContains": 1,
            "maxContains": 1
          }
        ]
      },
      "pattern": {
        "enum": ["linear", "radial", "conic", "repeating-linear"]
      },
      "direction": {
        "enum": ["down", "diagonal", "across", "up"]
      },
      "gradientCss": {
        "type": "string"
      },
      "cssText": {
        "type": "string"
      }
    }
  }
}
