{
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "debounceTime": {
      "type": "number",
      "minimum": 0,
      "default": 2000,
      "description": "The time in milliseconds to wait before running the command after a file change."
    },
    "defaultIgnoredFiles": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "File path or glob"
      },
      "default": [".git", "**/node_modules"],
      "description": "Default ignored files when watching files"
    },
    "plugins": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-rake"
              },
              "options": {
                "type": "object",
                "properties": {},
                "additionalProperties": false
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-local-cache"
              },
              "options": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string",
                    "default": "/tmp/shadowdog/cache"
                  },
                  "read": {
                    "type": "boolean",
                    "default": true
                  },
                  "write": {
                    "type": "boolean",
                    "default": true
                  }
                },
                "additionalProperties": false,
                "default": {}
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-remote-aws-s3-cache"
              },
              "options": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string",
                    "default": "shadowdog/cache"
                  },
                  "bucketName": {
                    "type": "string"
                  },
                  "read": {
                    "type": "boolean",
                    "default": true
                  },
                  "write": {
                    "type": "boolean",
                    "default": true
                  }
                },
                "required": ["bucketName"],
                "additionalProperties": false
              }
            },
            "required": ["name", "options"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-tag"
              },
              "options": {
                "type": "object",
                "properties": {},
                "additionalProperties": false
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-tree"
              },
              "options": {
                "type": "object",
                "properties": {},
                "additionalProperties": false
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-socket"
              },
              "options": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string",
                    "default": "/tmp/shadowdog/socket"
                  }
                },
                "additionalProperties": false,
                "default": {}
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-git"
              },
              "options": {
                "type": "object",
                "properties": {},
                "additionalProperties": false
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-lock"
              },
              "options": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string",
                    "default": "/tmp/shadowdog/lock"
                  }
                },
                "additionalProperties": false,
                "default": {}
              }
            },
            "required": ["name"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "shadowdog-mcp"
              },
              "options": {
                "type": "object",
                "properties": {},
                "additionalProperties": false,
                "default": {}
              }
            },
            "required": ["name"],
            "additionalProperties": false
          }
        ]
      },
      "default": [],
      "description": "List of plugins to use"
    },
    "watchers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "default": true,
            "description": "Whether the watcher is enabled or not"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "File path"
            },
            "default": [],
            "description": "List of files to watch"
          },
          "environment": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Environment variable name"
            },
            "default": [],
            "description": "List of environment variables that invalidate the cache when they change."
          },
          "ignored": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "File path"
            },
            "default": [],
            "description": "List of files to ignore when they change"
          },
          "label": {
            "type": "string"
          },
          "commands": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "command": {
                  "type": "string",
                  "description": "The command to run when a file changes"
                },
                "workingDirectory": {
                  "type": "string",
                  "default": "",
                  "description": "The directory where the command should run."
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "default": [],
                  "description": "A list of tags to associate with the command. Used with the `generate` command to filter commands by tag."
                },
                "artifacts": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "output": {
                        "type": "string",
                        "description": "Path to the output file or folder"
                      },
                      "description": {
                        "type": "string",
                        "description": "A description of the artifact"
                      },
                      "ignore": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "A list of files to ignore before saving the folder artifacts"
                      }
                    },
                    "required": ["output"],
                    "additionalProperties": false,
                    "description": "An artifact produced by the command"
                  },
                  "default": [],
                  "description": "List of artifacts produced by the command"
                }
              },
              "required": ["command"],
              "additionalProperties": false,
              "description": "Command configuration when a file changes"
            },
            "description": "List of commands to run when a file changes"
          }
        },
        "required": ["commands"],
        "additionalProperties": false,
        "description": "Watcher configuration"
      },
      "description": "List of watchers to run"
    }
  },
  "required": ["watchers"],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
