{
    "$id": "https://schemas.cute.engineering/stable/cutekit.manifest.component.v1",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "description": "A representation of a component manifest for CuteKit",
    "type": "object",
    "required": [
        "id",
        "type"
    ],
    "additionalProperties": false,
    "properties": {
        "$schema": {
            "description": "The schema that this manifest conforms to",
            "type": "string"
        },
        "id": {
            "description": "The unique identifier for this manifest",
            "type": "string"
        },
        "type": {
            "description": "The type of this manifest",
            "type": "string"
        },
        "description": {
            "description": "A description of this manifest",
            "type": "string"
        },
        "props": {
            "type": "object",
            "description": "An array of properties that this component provides",
            "patternProperties": {
                ".*": {}
            }
        },
        "tools": {
            "type": "object",
            "description": "An array of tools that this component provides",
            "patternProperties": {
                ".*": {
                    "type": "object",
                    "properties": {
                        "additionalProperties": false,
                        "cmd": {
                            "description": "Command to run the tool",
                            "type": "string"
                        },
                        "args": {
                            "description": "Arguments to pass to the tool",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "files": {
                            "description": "Files used by the tool",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "enableIf": {
            "type": "object",
            "description": "An array of conditions that must be met for this component to be enabled",
            "patternProperties": {
                ".*": {
                    "type": "array",
                    "items": {}
                }
            }
        },
        "requires": {
            "type": "array",
            "description": "An array of features that this component requires",
            "items": {
                "type": "string"
            }
        },
        "provides": {
            "type": "array",
            "description": "An array of features that this component provides (note: by default all components provides they own id as a feature)",
            "items": {
                "type": "string"
            }
        },
        "injects": {
            "type": "array",
            "$comment": "@since(0.7)",
            "description": "An array of features that this component will inject itself into",
            "items": {
                "type": "string"
            }
        },
        "subdirs": {
            "type": "array",
            "description": "An array of subdirectories that contains source files for this component",
            "items": {
                "type": "string"
            }
        }
    }
}
