{
  "title": "AI Toolchain Release Monitor - GitHub Release Changes",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "repositories": {
      "title": "GitHub owner/repository",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "prefill": [
        "ollama/ollama"
      ],
      "description": "Up to ten values. Blank uses ollama/ollama."
    },
    "keywords": {
      "title": "Filter returned titles",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "description": "Optional case-insensitive OR filter on titles within the returned source window; this is not a source-wide search."
    },
    "maxResults": {
      "title": "Maximum saved observations",
      "type": "integer",
      "default": 5,
      "minimum": 1,
      "maximum": 500,
      "description": "Global saved-row cap across this run. Does not promise complete source coverage."
    },
    "itemsPerQuery": {
      "title": "Results requested per query",
      "type": "integer",
      "default": 5,
      "minimum": 1,
      "maximum": 50,
      "description": "Maximum emitted records per input, from one source page or document. No pagination or complete coverage promise."
    },
    "comparePrevious": {
      "title": "Compare with saved observations",
      "type": "boolean",
      "default": false,
      "description": "First comparison run establishes a baseline. Reuse the same inputs and snapshot name. One writer per snapshot."
    },
    "onlyChanges": {
      "title": "Save only new or changed observations",
      "type": "boolean",
      "default": false,
      "description": "Enables comparison. An unchanged run can correctly return zero rows."
    },
    "snapshotName": {
      "title": "Snapshot name",
      "type": "string",
      "editor": "textfield",
      "default": "default",
      "description": "1–80 letters, numbers, underscores or hyphens. Use a distinct name for independent workflows."
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "default": 60,
      "minimum": 30,
      "maximum": 180,
      "description": "Requests share the remaining time budget. The platform timeout may stop work earlier."
    }
  }
}
