{
  "comment": "KA Guardian — identité des agents, politique et correspondance service → app. L'EMPLACEMENT des apps (nœud, IP LAN, répertoire, port, process PM2) vient du registre mld (M1M32:~/dispatch/registry.json, copie ~/ka-guardian-spool/registry.json) : orchestrator/registry.py l'applique au démarrage et à chaque tick. Les champs node/dir/web_port/pm2 ci-dessous ne sont qu'un REPLI si le registre n'a jamais été reçu (valeurs du 2026-09-04) — ne pas les considérer comme vrais.",
  "apika_monitoring_url": "https://www.api-ka.com/api/v1/monitoring/connectors",
  "runner_port": 7791,
  "registry": {
    "source": "M1M32:~/dispatch/registry.json",
    "local_copy": "~/ka-guardian-spool/registry.json",
    "runners_probe": "~/ka-guardian-spool/runners.json",
    "sync_service": "com.ka.registry-sync (deploy/registry-sync.sh, tick 120 s) + push mld (abonné ka2)"
  },
  "agents": {
    "ka2": {
      "port": 8799,
      "domain": "www.ka2.bot",
      "accent": "#a9d1f7",
      "accent2": "#1e4fa3",
      "accent_soft": "#e3effc",
      "tagline": "Gardien immobilier & local",
      "model": "claude-fable-5",
      "services": [
        "louka",
        "immoka"
      ]
    },
    "ka4": {
      "port": 8899,
      "domain": "www.ka4.bot",
      "accent": "#ffc36b",
      "accent2": "#a35c00",
      "accent_soft": "#ffefd9",
      "tagline": "Gardien mobilité & quotidien",
      "model": "claude-fable-5",
      "services": [
        "autoka",
        "foodka",
        "sortika"
      ]
    },
    "ka6": {
      "port": 8999,
      "domain": "www.ka6.bot",
      "accent": "#cdb4f9",
      "accent2": "#5b21b6",
      "accent_soft": "#f0e8fc",
      "tagline": "Gardien flagship — gros volumes",
      "model": "claude-fable-5",
      "services": [
        "fabrika",
        "jobka",
        "vraiprix"
      ],
      "default_for_unknown_services": true
    }
  },
  "nodes": {
    "m3u96a": {
      "lan_ip": "192.168.2.87",
      "alias": "M3U96a"
    },
    "m3u96b": {
      "lan_ip": "192.168.2.82",
      "alias": "M3U96b"
    },
    "m2u64": {
      "lan_ip": "192.168.2.107",
      "alias": "M2U64"
    },
    "m4m64a": {
      "lan_ip": "192.168.2.83",
      "alias": "M4M64a"
    },
    "m4m64b": {
      "lan_ip": "192.168.2.78",
      "alias": "M4M64b"
    },
    "m4m36": {
      "lan_ip": "192.168.2.69",
      "alias": "M4M36"
    },
    "m2m32": {
      "lan_ip": "192.168.2.90",
      "alias": "M2M32"
    }
  },
  "services": {
    "louka": {
      "app": "Lou·Ka",
      "registry_app": "lou-ka",
      "node": "m4m64a",
      "dir": "~/apps/lou-ka",
      "pm2": [
        "lou-ka-web",
        "lou-ka-sync"
      ],
      "web_port": 8095,
      "site": "https://www.lou-ka.com"
    },
    "immoka": {
      "app": "Immo·Ka",
      "registry_app": "immo-ka",
      "node": "m4m64b",
      "dir": "~/apps/immo-ka",
      "pm2": [
        "immo-ka-web",
        "immo-ka-sync"
      ],
      "web_port": 8096,
      "site": "https://www.immo-ka.com"
    },
    "fabrika": {
      "app": "Fabri·Ka",
      "registry_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",
      "registry_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",
      "registry_app": "food-ka",
      "node": "m2u64",
      "dir": "~/apps/food-ka",
      "pm2": [
        "food-ka-web",
        "food-ka-sync"
      ],
      "web_port": 8097,
      "site": "https://www.food-ka.com"
    },
    "sortika": {
      "app": "Sorti·Ka",
      "registry_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",
      "registry_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",
      "registry_app": "vrai-prix",
      "node": "m3u96a",
      "dir": "~/apps/vrai-prix",
      "pm2": [
        "vrai-prix"
      ],
      "pm2_exclude": [
        "vrai-prix-ingest"
      ],
      "web_port": 8090,
      "site": "https://www.vrai-prix.com",
      "comment": "Pas de connecteurs sous supervision api-ka (vrai-prix-ingest tourne à la demande — exclu des restarts via pm2_exclude) : surveillance du SITE seulement. Les tunnels *-ngrok sont toujours exclus automatiquement."
    }
  },
  "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
  }
}
