{
  "id": "com.lattice.weather",
  "name": "Weather",
  "icon": "🌤️",
  "color": "#f97316",
  "description": "View current weather, forecasts and history for saved locations.",
  "requested_permissions": {
    "storage": [
      "kv",
      "sql"
    ],
    "network": {
      "allowlist": [
        "https://api.open-meteo.com/*"
      ]
    },
    "notifications": true,
    "events": {
      "weather-updated": {
        "description": "Current weather was refreshed for a saved location.",
        "schema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "Saved location name."
            },
            "temperature_c": {
              "type": "number",
              "description": "Air temperature at 2 meters, degrees Celsius."
            },
            "feels_like_c": {
              "type": [
                "number",
                "null"
              ],
              "description": "Apparent temperature, degrees Celsius; absent or null means unavailable."
            },
            "humidity_pct": {
              "type": "number",
              "description": "Relative humidity at 2 meters, percent (0–100)."
            },
            "wind_speed_kmh": {
              "type": "number",
              "description": "Wind speed at 10 meters, kilometers per hour."
            },
            "condition": {
              "type": "string",
              "description": "English weather condition; Unknown means unrecognized weather code.",
              "enum": [
                "Clear",
                "Partly cloudy",
                "Fog",
                "Drizzle",
                "Freezing drizzle",
                "Rain",
                "Freezing rain",
                "Snow",
                "Showers",
                "Snow showers",
                "Thunderstorm",
                "Unknown"
              ]
            },
            "uv_index": {
              "type": [
                "number",
                "null"
              ],
              "description": "Dimensionless UV index; absent or null means unavailable."
            },
            "fetched_at": {
              "type": "string",
              "description": "Fetch time, UTC ISO 8601 timestamp."
            }
          },
          "required": [
            "location",
            "temperature_c",
            "humidity_pct",
            "wind_speed_kmh",
            "condition",
            "fetched_at"
          ]
        }
      },
      "weather-alert": {
        "description": "A refresh reported rain, snow, showers or thunderstorms (weather code ≥65).",
        "schema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "Saved location name."
            },
            "alert_type": {
              "type": "string",
              "description": "English weather condition, same as condition.",
              "enum": [
                "Rain",
                "Freezing rain",
                "Snow",
                "Showers",
                "Snow showers",
                "Thunderstorm",
                "Unknown"
              ]
            },
            "message": {
              "type": "string",
              "description": "Alert text with location, rounded Celsius temperature and km/h wind speed."
            },
            "temperature_c": {
              "type": "number",
              "description": "Air temperature at 2 meters, degrees Celsius."
            },
            "condition": {
              "type": "string",
              "description": "English weather condition; Unknown means unrecognized weather code.",
              "enum": [
                "Rain",
                "Freezing rain",
                "Snow",
                "Showers",
                "Snow showers",
                "Thunderstorm",
                "Unknown"
              ]
            },
            "triggered_at": {
              "type": "string",
              "description": "Alert time, UTC ISO 8601 timestamp; equals corresponding fetched_at."
            }
          },
          "required": [
            "location",
            "alert_type",
            "message",
            "temperature_c",
            "condition",
            "triggered_at"
          ]
        }
      }
    },
    "listeners": {}
  },
  "source": {
    "assets": [
      "index.html",
      "app.js",
      "app.css",
      "ui.css",
      "emits.js",
      "listens.js"
    ]
  }
}