{
  "title": "Telegram Public Channel Posts & Change Monitor",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "channels": {
      "title": "Public Telegram channels",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "prefill": [
        "telegram"
      ],
      "description": "Up to three channel usernames, @usernames or plain https://t.me/channel URLs. Empty uses telegram."
    },
    "recordsPerSource": {
      "title": "Recent records per source",
      "type": "integer",
      "default": 5,
      "minimum": 1,
      "maximum": 25,
      "description": "Select this many recent records from each public source window. If the source exposes fewer records, coverage reports the actual count."
    },
    "keywords": {
      "title": "Literal keyword filter",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "description": "Optional case-insensitive literal phrases matched inside the selected recent window. Any phrase matches; each match carries evidence. Does not search outside the selected channels or feeds."
    },
    "maxResults": {
      "title": "Maximum saved records",
      "type": "integer",
      "default": 15,
      "minimum": 1,
      "maximum": 75,
      "description": "Maximum saved billable observations across sources. Partial windows do not advance comparison history."
    },
    "comparePrevious": {
      "title": "Compare with previous complete run",
      "type": "boolean",
      "default": false,
      "description": "Store source observations only after the entire selected window succeeds. New, changed and unchanged records include previous values. Missing records are never inferred closed or deleted."
    },
    "onlyChanges": {
      "title": "Save only new or changed records",
      "type": "boolean",
      "default": false,
      "description": "Enables comparison. Unchanged repeats can correctly save zero rows and incur no dataset-item charges."
    },
    "snapshotName": {
      "title": "Comparison snapshot",
      "type": "string",
      "editor": "textfield",
      "default": "default",
      "description": "1-80 letters, numbers, underscores or hyphens. Separate history for the source list, selected window and filters. Use a new name for an independent workflow."
    },
    "maxRunSeconds": {
      "title": "Run budget in seconds",
      "type": "integer",
      "default": 90,
      "minimum": 30,
      "maximum": 120,
      "description": "Shared deadline with bounded public requests. Access refusals and rate limits stop further requests without a bypass."
    }
  }
}
