{
  "id": "com.lattice.calendar",
  "name": "Calendar",
  "icon": "📅",
  "color": "#ec4899",
  "description": "Plan one-off and recurring calendar events.",
  "requested_permissions": {
    "storage": [
      "kv",
      "sql"
    ],
    "network": {
      "allowlist": []
    },
    "notifications": true,
    "events": {
      "event-created": {
        "description": "A one-off event or recurring series was created.",
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "Event or recurring-series ID."
            },
            "title": {
              "type": "string",
              "description": "Event or series title."
            },
            "date": {
              "type": "string",
              "description": "Local YYYY-MM-DD event date; series start date for recurring events."
            },
            "time": {
              "type": "string",
              "description": "Local HH:MM; empty means no time."
            },
            "location": {
              "type": "string",
              "description": "Venue or address; empty means none."
            },
            "description": {
              "type": "string",
              "description": "Event details; empty means none."
            },
            "recurrence": {
              "type": "object",
              "properties": {
                "frequency": {
                  "type": "string",
                  "enum": [
                    "daily",
                    "weekly",
                    "monthly",
                    "yearly"
                  ],
                  "description": "Repeat frequency."
                },
                "interval": {
                  "type": "integer",
                  "description": "Number of frequency units between repetitions."
                },
                "daysOfWeek": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "description": "Weekday number, 0=Sunday through 6=Saturday."
                  },
                  "description": "Weekly weekdays; empty uses startDate’s weekday; ignored for other frequencies."
                },
                "startDate": {
                  "type": "string",
                  "description": "First eligible local date, YYYY-MM-DD."
                },
                "endDate": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Inclusive final local date, YYYY-MM-DD; null means no end date."
                }
              },
              "required": [
                "frequency",
                "interval",
                "daysOfWeek",
                "startDate",
                "endDate"
              ],
              "description": "Recurrence pattern; omitted for one-off events."
            }
          },
          "required": [
            "id",
            "title",
            "date",
            "time",
            "location",
            "description"
          ]
        }
      },
      "event-updated": {
        "description": "A one-off event or recurring series was updated.",
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "Event or recurring-series ID."
            },
            "title": {
              "type": "string",
              "description": "Event or series title."
            },
            "date": {
              "type": "string",
              "description": "Local YYYY-MM-DD event date; series start date for recurring events."
            },
            "time": {
              "type": "string",
              "description": "Local HH:MM; empty means no time."
            },
            "location": {
              "type": "string",
              "description": "Venue or address; empty means none."
            },
            "description": {
              "type": "string",
              "description": "Event details; empty means none."
            },
            "recurrence": {
              "type": "object",
              "properties": {
                "frequency": {
                  "type": "string",
                  "enum": [
                    "daily",
                    "weekly",
                    "monthly",
                    "yearly"
                  ],
                  "description": "Repeat frequency."
                },
                "interval": {
                  "type": "integer",
                  "description": "Number of frequency units between repetitions."
                },
                "daysOfWeek": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "description": "Weekday number, 0=Sunday through 6=Saturday."
                  },
                  "description": "Weekly weekdays; empty uses startDate’s weekday; ignored for other frequencies."
                },
                "startDate": {
                  "type": "string",
                  "description": "First eligible local date, YYYY-MM-DD."
                },
                "endDate": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Inclusive final local date, YYYY-MM-DD; null means no end date."
                }
              },
              "required": [
                "frequency",
                "interval",
                "daysOfWeek",
                "startDate",
                "endDate"
              ],
              "description": "Recurrence pattern; omitted for one-off events."
            }
          },
          "required": [
            "id",
            "title",
            "date",
            "time",
            "location",
            "description"
          ]
        }
      },
      "event-removed": {
        "description": "A one-off event or recurring series was removed.",
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "Event or recurring-series ID."
            },
            "title": {
              "type": "string",
              "description": "Event or series title."
            }
          },
          "required": [
            "id",
            "title"
          ]
        }
      }
    },
    "listeners": {
      "add-event": {
        "description": "Create a one-off event or recurring series.",
        "schema": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "Nonempty event title."
            },
            "date": {
              "type": "string",
              "description": "Local YYYY-MM-DD; required for one-off events, ignored for recurring series."
            },
            "time": {
              "type": "string",
              "description": "Local HH:MM; omitted or empty means no time."
            },
            "location": {
              "type": "string",
              "description": "Venue or address; omitted or empty means none."
            },
            "description": {
              "type": "string",
              "description": "Event details; omitted or empty means none."
            },
            "recurrence": {
              "type": "object",
              "description": "Series pattern; omitted creates a one-off event using date.",
              "properties": {
                "frequency": {
                  "type": "string",
                  "enum": [
                    "daily",
                    "weekly",
                    "monthly",
                    "yearly"
                  ],
                  "description": "Repeat frequency; omitted creates a one-off event using date."
                },
                "interval": {
                  "type": "integer",
                  "description": "Frequency units between repetitions; omitted or zero defaults to 1."
                },
                "daysOfWeek": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "description": "Weekday number, 0=Sunday through 6=Saturday."
                  },
                  "description": "Weekly weekdays; omitted/empty uses startDate’s weekday; ignored for other frequencies."
                },
                "startDate": {
                  "type": "string",
                  "description": "First eligible local YYYY-MM-DD; omitted or empty defaults to local today."
                },
                "endDate": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Inclusive final local YYYY-MM-DD; omitted, empty or null means no end date."
                }
              },
              "required": []
            },
            "color": {
              "type": "string",
              "description": "Display color; omitted or empty defaults to #4f46e5."
            }
          },
          "required": [
            "title"
          ]
        }
      }
    }
  },
  "source": {
    "assets": [
      "index.html",
      "app.js",
      "app.css",
      "ui.css",
      "emits.js",
      "listens.js"
    ]
  }
}