{
  "comment": "KA Guardian — topologie des agents, services et nœuds. Source de vérité partagée orchestrateurs/runners.",
  "apika_monitoring_url": "https://www.api-ka.com/api/v1/monitoring/connectors",
  "runner_port": 7791,
  "agents": {
    "ka2": {
      "port": 8799,
      "domain": "www.ka2.bot",
      "accent": "#a9d1f7",
      "accent2": "#1e4fa3",
      "tagline": "Gardien immobilier & local",
      "model": "claude-fable-5",
      "services": [
        "louka",
        "immoka",
        "restoka"
      ],
      "accent_soft": "#e3effc"
    },
    "ka4": {
      "port": 8899,
      "domain": "www.ka4.bot",
      "accent": "#ffc36b",
      "accent2": "#a35c00",
      "tagline": "Gardien mobilité & quotidien",
      "model": "claude-fable-5",
      "services": [
        "autoka",
        "foodka",
        "sortika"
      ],
      "accent_soft": "#ffefd9"
    },
    "ka6": {
      "port": 8999,
      "domain": "www.ka6.bot",
      "accent": "#cdb4f9",
      "accent2": "#5b21b6",
      "tagline": "Gardien flagship — gros volumes",
      "model": "claude-fable-5",
      "services": [
        "fabrika",
        "jobka",
        "creaka",
        "vraiprix"
      ],
      "default_for_unknown_services": true,
      "accent_soft": "#f0e8fc"
    }
  },
  "nodes": {
    "m3u96a": {
      "lan_ip": "192.168.2.87",
      "alias": "M3U96a"
    },
    "m3u96b": {
      "lan_ip": "192.168.2.82",
      "alias": "M3U96b"
    },
    "m4m64a": {
      "lan_ip": "192.168.2.83",
      "alias": "M4M64a"
    },
    "m4m64b": {
      "lan_ip": "192.168.2.78",
      "alias": "M4M64b"
    }
  },
  "services": {
    "louka": {
      "app": "Lou·Ka",
      "node": "m3u96b",
      "dir": "~/apps/lou-ka",
      "pm2": [
        "lou-ka-web",
        "lou-ka-sync"
      ],
      "web_port": 8095,
      "site": "https://www.lou-ka.com"
    },
    "restoka": {
      "app": "Resto·Ka",
      "node": "m3u96b",
      "dir": "~/apps/resto-ka",
      "pm2": [
        "resto-ka",
        "resto-ka-sync"
      ],
      "web_port": 8115,
      "site": "https://www.resto-ka.com"
    },
    "creaka": {
      "app": "Créa·Ka",
      "node": "m3u96b",
      "dir": "~/apps/crea-ka",
      "pm2": [
        "crea-ka-web",
        "crea-ka-sync"
      ],
      "web_port": 8160,
      "site": "https://www.crea-ka.com"
    },
    "immoka": {
      "app": "Immo·Ka",
      "node": "m4m64a",
      "dir": "~/apps/immo-ka",
      "pm2": [
        "immo-ka-web",
        "immo-ka-sync"
      ],
      "web_port": 8096,
      "site": "https://www.immo-ka.com"
    },
    "fabrika": {
      "app": "Fabri·Ka",
      "node": "m4m64a",
      "dir": "~/fabri-ka",
      "pm2": [
        "fabri-ka-web",
        "fabri-ka-sync"
      ],
      "web_port": 8097,
      "site": "https://www.fabri-ka.com"
    },
    "autoka": {
      "app": "Auto·Ka",
      "node": "m4m64b",
      "dir": "~/auto-ka",
      "pm2": [
        "auto-ka-web",
        "auto-ka-sync"
      ],
      "web_port": 8095,
      "site": "https://www.auto-ka.com"
    },
    "foodka": {
      "app": "Food·Ka",
      "node": "m4m64b",
      "dir": "~/apps/food-ka",
      "pm2": [
        "food-ka-web",
        "food-ka-sync"
      ],
      "web_port": 8097,
      "site": "https://www.food-ka.com"
    },
    "sortika": {
      "app": "Sorti·Ka",
      "node": "m3u96a",
      "dir": "~/apps/sorti-ka",
      "pm2": [
        "sorti-ka-web",
        "sorti-ka-sync"
      ],
      "web_port": 8120,
      "site": "https://www.sorti-ka.com"
    },
    "jobka": {
      "app": "Job·Ka",
      "node": "m3u96a",
      "dir": "~/apps/job-ka",
      "pm2": [
        "job-ka-web",
        "job-ka-sync"
      ],
      "web_port": 8096,
      "site": "https://www.job-ka.com"
    },
    "vraiprix": {
      "app": "Vrai·Prix",
      "node": "m3u96a",
      "dir": "~/apps/vrai-prix",
      "pm2": [
        "vrai-prix"
      ],
      "web_port": 8090,
      "site": "https://www.vrai-prix.com",
      "comment": "Pas de connecteurs sous supervision api-ka (vrai-prix-ingest tourne à la demande): surveillance du SITE seulement. vrai-prix-ngrok exclu de pm2[] pour ne pas relancer le tunnel à chaque restart."
    }
  },
  "policy": {
    "poll_interval_seconds": 300,
    "trigger_statuses": [
      "broken",
      "stale"
    ],
    "max_concurrent_missions": 1,
    "max_attempts_per_incident": 3,
    "attempt_cooldown_hours": 6,
    "watch_window_hours": 8,
    "mission_max_turns": 70,
    "mission_timeout_seconds": 3600,
    "effort_max_turns": 150,
    "effort_timeout_seconds": 7200,
    "abandoned_retry_hours": 168,
    "mass_incident_threshold": 20,
    "site_check_interval_seconds": 120,
    "site_check_fails": 2,
    "site_restart_throttle_seconds": 600,
    "site_restart_wait_seconds": 20,
    "site_watch_window_hours": 1,
    "site_cooldown_hours": 1,
    "site_abandoned_retry_hours": 24
  }
}
