{
  "unknownCommand": "Commande inconnue : {{command}}\nExécutez `{{cli}} help`",
  "usagePrefix": "Utilisation :",
  "security": {
    "help": "Utilisation : ysk-server security status\n       ysk-server security sessions list|revoke|revoke-others [--user U]\n       ysk-server security api-keys list|create|delete …",
    "sessionsHelp": "Utilisation : ysk-server security sessions list [--user U]\n       ysk-server security sessions revoke --id PREFIX [--user U]\n       ysk-server security sessions revoke-others [--user U] [--keep-token T]",
    "apiKeysHelp": "Utilisation : ysk-server security api-keys list\n       ysk-server security api-keys create --name N [--user U] [--scope full|read]\n       ysk-server security api-keys delete --id KEY_ID",
    "noUser": "Aucun utilisateur trouvé. Créez d'abord un admin ou passez --user <name|id>",
    "tokenOnce": "jeton affiché une seule fois — stockez-le en sécurité",
    "sessionRevokeUsage": "Utilisation : ysk-server security sessions revoke --id <sessionIdPrefix> [--user U]",
    "apiKeyDeleteUsage": "Utilisation : ysk-server security api-keys delete --id KEY_ID"
  },
  "help": {
    "blurb": "CLI du plan de contrôle — préférez --json pour les agents IA.\nDocs : docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json",
    "main": "{{product}} ({{cli}}) v{{version}}\n\nCLI du plan de contrôle — préférez --json pour les agents IA.\nDocs : docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json\n\nUtilisation :\n  {{cli}} <command> [options]\n\nCommandes :\n  setup                 Init dataDir + admin\n  update                Vérif./appl. auto-mise à jour\n  serve                 API HTTP + interface Web\n  system unit-install   Installer ysk-server.service [--enable]\n  tools                 Lister les outils ; tools run --tool <name> [--dry-run]\n  ask                   NL → plan IA [--execute]\n  projects              list|get|create|deploy|stop|health|backup|template\n  backup                all|list|status|restore|delete|schedule|control-plane|settings|restic\n  templates             Modèles d'applications\n  hosting               aides nginx|dns|db|firewall\n  dns                   zone|zones (alias IA → hosting dns-*)\n  logs                  sources|query|journal|overview\n  host                  overview|metrics (lecture seule)\n  nginx                 status|list|test|sync\n  ssl                   list|get (certificats)\n  db-cluster            list|get|create|plan (HA plan d'abord)\n  ssh-key               list|create|import|public|export|install|delete (coffre d'identités SSH)\n  ssh-2fa               list|enroll|confirm|install|pam|retire (TOTP connexion SSH ≠ 2FA panneau)\n  services              Matrice des services hôte (sondage systemctl)\n  defense | protection  status|ban|unban|whitelist\n  security              status|sessions|api-keys (flags 2FA · révocation session · clés API)\n  cdn                   nodes|sites|render|apply|purge|probe|dashboard|health-loop|from-project\n  agents                runtimes|fleet list|commands|register (panneau + edge)\n  agent run             Sondeur de flotte sortant (expérimental)\n  store                 status|export|import|migrate (backends document json|sqlite|postgres)\n  files                 list|read|write|mkdir|rm|stat|rename|copy|move|chmod|trash|shares (bac à sable)\n  cron                  list|create|update|delete|enable|disable|run|install|status|host\n  email                 domains|mailboxes|deliverability|bootstrap|dns (parité panneau)\n  health                Instantané mode local ou --url http://host:port/health\n  readiness | doctor    Préparation production (honnête)\n  migrate               inventory|host|post|status|resume (migration hôte complète)\n  validators            list|chains|disk|get|checklist (Beta)\n  docker                status|ps|images|compose|prune (engine)\n  version | help\n\nGlobal :\n  --json                stdout JSON (IA)\n  --data-dir PATH\n  --config PATH\n  --help | --version\n\nSortie : 0 ok · 1 erreur · 2 validation · 3 bloqué · 4 introuvable · 5 erreur hôte\n\nSécurité :\n  Les ops dangereuses sont en dry-run par défaut (plan seulement).\n  Passez --execute (alias --apply) + env YSK_EXECUTE=1 pour modifier l'hôte.\n\nExemples :\n  {{cli}} readiness --json\n  {{cli}} host --json\n  {{cli}} nginx status --json\n  {{cli}} ssl list --json\n  {{cli}} projects get --id UUID --json\n  {{cli}} defense ban --ip 1.2.3.4 --json          # plan dry-run\n  {{cli}} projects list --json\n  {{cli}} logs query --source journal: --lines 100 --json\n  {{cli}} tools --json"
  },
  "usage": {
    "tools": {
      "run": {
        "--tool": {
          "name": {
            "--arg": {
              "cd327c": "Utilisation : ysk-server tools run --tool <name> [--arg key=val] [--dry-run]\n"
            }
          }
        }
      }
    },
    "email": {
      "domains": {
        "list": {
          "create": {
            "get": {
              "b94a62": "Utilisation : ysk-server email domains list|create|get …\n"
            }
          }
        },
        "create": {
          "--domain": {
            "example": {
              "bd4036": "Utilisation : ysk-server email domains create --domain example.com --ip A.B.C.D\n"
            }
          }
        }
      },
      "mailboxes": {
        "list": {
          "create": {
            "42b26c": "Utilisation : ysk-server email mailboxes list|create …\n"
          }
        },
        "create": {
          "--domain": {
            "example": {
              "7227f3": "Utilisation : ysk-server email mailboxes create --domain example.com --local user [--password P]\n"
            }
          }
        }
      },
      "dns": {
        "--domain": {
          "example": {
            "com": {
              "26b806": "Utilisation : ysk-server email dns --domain example.com\n"
            }
          }
        }
      },
      "sub": {
        "--data-dir": {
          "path": {
            "--json": {
              "73dad0": "Utilisation : ysk-server email <sub> [--data-dir PATH] [--json]\n  domains list|create|get [--q TEXT]\n    create --domain example.com --ip A.B.C.D\n    get --domain example.com | --id UUID\n  mailboxes list|create [--domain D | --id domainId]\n    create --domain D --local user [--password P]\n  deliverability --domain D | --id UUID\n  deliverability-overview\n  bootstrap --domain D --ip A.B.C.D [--install]\n  dns --domain D | --id UUID     # lot DNS pour le panneau\nAussi : hosting email-apply|email-mailbox|email-deliverability (alias)\n"
            }
          }
        }
      },
      "deliverability": {
        "--domain": {
          "example": {
            "com": {
              "b0dff0": "Utilisation : ysk-server email deliverability --domain example.com\n"
            }
          }
        }
      },
      "bootstrap": {
        "--domain": {
          "example": {
            "com": {
              "affc8d": "Utilisation : ysk-server email bootstrap --domain example.com --ip 1.2.3.4 [--install]\n"
            }
          }
        }
      }
    },
    "cron": {
      "delete": {
        "--id": {
          "job": {
            "id": {
              "f6aafe": "Utilisation : ysk-server cron delete --id JOB_ID\n"
            }
          }
        }
      },
      "sub": {
        "--id": {
          "job": {
            "id": {
              "99cfdf": "Utilisation : ysk-server cron {{sub}} --id JOB_ID\n"
            }
          }
        },
        "--data-dir": {
          "path": {
            "--json": {
              "0349e6": "Utilisation : ysk-server cron <sub> [--data-dir PATH] [--json]\n  list [--project-id ID] [--q TEXT]\n  create --schedule \"0 3 * * *\" --command CMD [--project-id ID] [--user USER]\n  update --id JOB_ID [--schedule S] [--command CMD] [--user USER] [--project-id ID] [--enable|--disable]\n  delete --id JOB_ID\n  enable|disable --id JOB_ID\n  run --id JOB_ID              # run-now (needs YSK_EXECUTE=1)\n  install                     # load managed crontab (needs EXECUTE)\n  status                      # probe managed file vs host crontab\n  host [list] [--user USER] [--jobs-only]\n  host edit --user USER --old-schedule S --old-command C --schedule S --command C --execute\n  host disable|enable|delete|adopt --user USER --old-schedule S --old-command C --execute\n  host run --user USER --command C --execute\nHonnêteté : install / host write blocked without YSK_EXECUTE=1.\n"
            }
          }
        }
      },
      "run": {
        "--id": {
          "job": {
            "id": {
              "a0a97f": "Utilisation : ysk-server cron run --id JOB_ID\n"
            }
          }
        }
      },
      "create": {
        "--schedule": {
          "0": {
            "3": {
              "9a8328": "Utilisation : ysk-server cron create --schedule \"0 3 * * *\" --command CMD [--project-id ID] [--user USER]\n"
            }
          }
        }
      }
    },
    "files": {
      "stat": {
        "--path": {
          "rel": {
            "17c8f2": "Utilisation : ysk-server files stat --path REL\n"
          }
        }
      },
      "read": {
        "--path": {
          "rel": {
            "e35f8d": "Utilisation : ysk-server files read --path REL\n"
          }
        }
      },
      "mkdir": {
        "--path": {
          "rel": {
            "ae0438": "Utilisation : ysk-server files mkdir --path REL\n"
          }
        }
      },
      "rm": {
        "--path": {
          "rel": {
            "--permanent": {
              "fe2051": "Utilisation : ysk-server files rm --path REL [--permanent]\n"
            }
          }
        }
      },
      "rename": {
        "--from": {
          "rel": {
            "--to": {
              "35a260": "Utilisation : ysk-server files rename --from REL --to REL\n"
            }
          }
        }
      },
      "copy": {
        "--from": {
          "rel": {
            "--to": {
              "5337f4": "Utilisation : ysk-server files copy --from REL --to REL\n"
            }
          }
        }
      },
      "move": {
        "--from": {
          "rel": {
            "--to": {
              "75cf5d": "Utilisation : ysk-server files move --from REL --to REL\n"
            }
          }
        }
      },
      "chmod": {
        "--path": {
          "rel": {
            "--mode": {
              "39f983": "Utilisation : ysk-server files chmod --path REL --mode 644\n"
            }
          }
        }
      },
      "trash": {
        "restore": {
          "--id": {
            "trash": {
              "c89ce9": "Utilisation : ysk-server files trash restore --id TRASH_ID\n"
            }
          }
        },
        "list": {
          "restore": {
            "purge": {
              "ef063d": "Utilisation : ysk-server files trash list|restore|purge\n"
            }
          }
        }
      },
      "shares": {
        "list": {
          "ac342c": "Utilisation : ysk-server files shares list\n"
        }
      },
      "webdav": {
        "status": {
          "token": {
            "disable": {
              "f8e94b": "Utilisation : ysk-server files webdav status|token|disable\n"
            }
          }
        }
      },
      "sub": {
        "--root": {
          "public": {
            "project": {
              "42ebd4": "Utilisation : ysk-server files <sub> [--root public|project:ID] [--data-dir PATH] [--json]\n  list   [--path DIR] [--q TEXT] [--sort name|size|mtime] [--order asc|desc]\n  stat   --path REL\n  read   --path REL\n  write  --path REL --content TEXT | --file LOCAL\n  mkdir  --path REL\n  rm     --path REL [--permanent]\n  rename --from REL --to REL\n  copy   --from REL --to REL\n  move   --from REL --to REL\n  chmod  --path REL --mode 644\n  trash  list|restore|purge [--id TRASH_ID]\n  shares list\n  favorites list\n  upload --dir REL --file LOCAL [--file LOCAL2…]\n  webdav status|token|disable\nBac à sable : uniquement la racine des fichiers public ou le home projet (chemins contraints).\n"
            }
          }
        }
      },
      "write": {
        "--path": {
          "rel": {
            "--content": {
              "0addb1": "Utilisation : ysk-server files write --path REL --content TEXT | --file LOCAL\n"
            }
          }
        }
      },
      "upload": {
        "--dir": {
          "rel": {
            "--file": {
              "f8c3bf": "Utilisation : ysk-server files upload --dir REL --file LOCAL [--file LOCAL2…]\n"
            }
          }
        }
      }
    },
    "store": {
      "import": {
        "--in": {
          "file": {
            "json": {
              "5b6fdd": "Utilisation : ysk-server store import --in FILE.json\n"
            }
          }
        }
      },
      "sub": {
        "--data-dir": {
          "path": {
            "--json": {
              "d580e4": "Utilisation : ysk-server store <sub> [--data-dir PATH] [--json]\n  status                         Afficher le type de backend + compteurs\n  export --out FILE.json         Exporter l'instantané document\n  import --in FILE.json          Écraser l'instantané depuis un fichier\n  migrate --to sqlite|json [--out PATH]\n    Copier le store actuel vers un autre fichier backend\nEnv : YSK_STORE=json|sqlite|postgres  YSK_DATABASE_URL=postgres://…\nHonnêteté : backends document-blob (pas encore de schéma relationnel complet).\n"
            }
          }
        }
      },
      "migrate": {
        "--to": {
          "json": {
            "sqlite": {
              "1c52a3": "Utilisation : ysk-server store migrate --to json|sqlite [--out PATH]\n  (postgres : exporter JSON puis importer sous YSK_DATABASE_URL)\n"
            }
          }
        }
      }
    },
    "cdn": {
      "nodes": {
        "delete": {
          "--id": {
            "node": {
              "0c6a1e": "Utilisation : ysk-server cdn nodes delete --id NODE_ID\n"
            }
          }
        },
        "drain": {
          "--id": {
            "node": {
              "a8aa81": "Utilisation : ysk-server cdn nodes drain --id NODE_ID [--off]\n"
            }
          }
        },
        "list": {
          "upsert": {
            "delete": {
              "52549e": "Utilisation : ysk-server cdn nodes list|upsert|delete|probe|drain …\n"
            }
          }
        },
        "upsert": {
          "--name": {
            "name": {
              "8f6f39": "Utilisation : ysk-server cdn nodes upsert --name NAME [--id ID] [--base-url U] [--fleet-agent-id S] [--ssh-host H] [--region R]\n"
            }
          }
        }
      },
      "sites": {
        "get": {
          "--id": {
            "site": {
              "3c3c35": "Utilisation : ysk-server cdn sites get --id SITE_ID\n"
            }
          }
        },
        "delete": {
          "--id": {
            "site": {
              "51ef8f": "Utilisation : ysk-server cdn sites delete --id SITE_ID\n"
            }
          }
        },
        "list": {
          "get": {
            "upsert": {
              "609da6": "Utilisation : ysk-server cdn sites list|get|upsert|delete …\n"
            }
          }
        },
        "upsert": {
          "--name": {
            "n": {
              "6ebb75": "Utilisation : ysk-server cdn sites upsert --name N --domains a.com,b.com [--edge-id ID]… [--origin-url U] [--origin-project ID]\n"
            }
          }
        }
      },
      "render": {
        "--site-id": {
          "id": {
            "--dry-run": {
              "2149eb": "Utilisation : ysk-server cdn render --site-id ID [--dry-run]\n"
            }
          }
        }
      },
      "apply": {
        "--site-id": {
          "id": {
            "--edge-id": {
              "a527b3": "Utilisation : ysk-server cdn apply --site-id ID [--edge-id EDGE]\n"
            }
          }
        }
      },
      "purge": {
        "--site-id": {
          "id": {
            "--edge-id": {
              "bc08ec": "Utilisation : ysk-server cdn purge --site-id ID [--edge-id EDGE]\n"
            }
          }
        }
      },
      "dns-sync": {
        "--site-id": {
          "id": {
            "--apply-zone": {
              "343068": "Utilisation : ysk-server cdn dns-sync --site-id ID [--apply-zone]\n"
            }
          }
        }
      },
      "sub": {
        "--data-dir": {
          "path": {
            "--json": {
              "092842": "Utilisation : ysk-server cdn <sub> [--data-dir PATH] [--json]\n  nodes list|upsert|delete|probe|drain\n  sites list|upsert|delete|get\n  render --site-id ID [--dry-run]\n  apply  --site-id ID [--edge-id ID]   # diffusion (file fleet OK sans EXECUTE)\n  purge  --site-id ID [--edge-id ID]\n  dns-sync --site-id ID [--apply-zone]\n  probe | dashboard | health-loop [--apply-zone]\n  from-project --project-id ID [--edge-id ID…]\nHonnêteté : apply_status written/queued ≠ nginx edge appliqué tant que l'agent n'a pas ack / EXECUTE reload.\n"
            }
          }
        }
      },
      "from-project": {
        "--project-id": {
          "id": {
            "--edge-id": {
              "a96f42": "Utilisation : ysk-server cdn from-project --project-id ID [--edge-id ID]…\n"
            }
          }
        }
      }
    },
    "agents": {
      "fleet": {
        "remove": {
          "--session": {
            "session": {
              "1827fe": "Utilisation : ysk-server agents fleet remove --session SESSION_ID\n"
            }
          }
        },
        "register": {
          "--id": {
            "agent": {
              "209b2d": "Utilisation : ysk-server agents fleet register --id AGENT_ID [--group g] [--edge]\n"
            }
          }
        },
        "commands": {
          "--session": {
            "session": {
              "f8067c": "Utilisation : ysk-server agents fleet commands --session SESSION_ID\n"
            }
          }
        }
      },
      "register": {
        "--id": {
          "agent": {
            "id": {
              "3c4477": "Utilisation : ysk-server agents register --id AGENT_ID [--group g]\n"
            }
          }
        }
      },
      "commands": {
        "--session": {
          "session": {
            "id": {
              "e620d2": "Utilisation : ysk-server agents commands --session SESSION_ID\n"
            }
          }
        }
      },
      "runtimes": {
        "probe": {
          "fleet": {
            "list": {
              "261fa4": "Utilisation : ysk-server agents [runtimes|probe|fleet list|fleet register|fleet commands|register|commands]\n"
            }
          }
        }
      }
    },
    "agent": {
      "run": {
        "--control-plane": {
          "url": {
            "--id": {
              "cfefbe": "Utilisation : ysk-server agent run --control-plane URL --id AGENT_ID [--group g]\n"
            }
          }
        }
      }
    },
    "ask": {
      "check": {
        "system": {
          "info": {
            "b0c781": "Utilisation : ysk-server ask \"check system info\"\n"
          }
        }
      }
    },
    "backup": {
      "delete": {
        "--project-id": {
          "id": {
            "--name": {
              "d66c29": "Utilisation : ysk-server backup delete --project-id ID --name ARCHIVE\n"
            }
          }
        }
      },
      "restic": {
        "list": {
          "run": {
            "restore": {
              "10402b": "Utilisation : ysk-server backup restic list|run|restore …\n"
            }
          }
        },
        "restore": {
          "--project-id": {
            "id": {
              "a8f133": "Utilisation : ysk-server backup restic restore --project-id ID --snapshot SNAP [--dry-run] [--overwrite-home --confirm PHRASE]\n"
            }
          }
        }
      },
      "sub": {
        "--data-dir": {
          "path": {
            "--json": {
              "777243": "Utilisation : ysk-server backup <sub> [--data-dir PATH] [--json]\n  all                         Sauvegarder tous les homes de projets (+ côté remote/restic si configuré)\n  list [--project-id ID] [--q TEXT]\n  status                      Dernière exécution + sonde de planification\n  restore --project-id ID --name ARCHIVE [--mode full|web|dry-run]\n  delete  --project-id ID --name ARCHIVE\n  schedule [--cron \"0 3 * * *\"] [--install]\n  control-plane               Instantané ysk.json + config.json\n  control-plane-restore --name ARCHIVE [--mode dry-run|full] [--confirm RESTORE-CONTROL-PLANE]\n  settings [get|set]          Remote / exclusions / restic\n    set --remote-kind local|sftp|s3 --remote-path P [--remote-host H] …\n    set --exclude a,b,c | --exclusions-file FILE\n    set --restic-enable --restic-password P [--restic-repo PATH]\n    set --from-json FILE      # patch complet {remote?,exclusions?,restic?}\n  restic list|run|restore     Aides restic incrémentales\n"
            }
          }
        }
      },
      "control-plane-restore": {
        "--name": {
          "archive": {
            "--mode": {
              "316a76": "Utilisation : ysk-server backup control-plane-restore --name ARCHIVE [--mode dry-run|full] [--confirm RESTORE-CONTROL-PLANE]\n"
            }
          }
        }
      },
      "restore": {
        "--project-id": {
          "id": {
            "--name": {
              "bc7041": "Utilisation : ysk-server backup restore --project-id ID --name ARCHIVE [--mode full|web|dry-run]\n"
            }
          }
        }
      }
    },
    "packages": {
      "list": {
        "--q": {
          "text": {
            "b8e16b": "Utilisation : ysk-server packages list [--q text]\n"
          }
        }
      }
    },
    "projects": {
      "stop": {
        "--id": {
          "projectid": {
            "b15409": "Utilisation : ysk-server projects stop --id <projectId>\n"
          }
        }
      },
      "backup": {
        "--id": {
          "projectid": {
            "e62846": "Utilisation : ysk-server projects backup --id <projectId>\n"
          }
        }
      },
      "health": {
        "--id": {
          "projectid": {
            "e816ec": "Utilisation : ysk-server projects health --id <projectId>\n"
          }
        }
      },
      "isolation": {
        "provision": {
          "--id": {
            "projectid": {
              "5aff44": "Utilisation : ysk-server projects isolation provision --id <projectId>\n       ysk-server projects isolation provision-all [--limit 20]\n"
            }
          }
        },
        "backfill-owners": {
          "--owner-user-id": {
            "id": {
              "8691da": "Utilisation : ysk-server projects isolation backfill-owners --owner-user-id <id>\n"
            }
          }
        },
        "list": {
          "provision": {
            "provision-all": {
              "8e9da3": "Utilisation : ysk-server projects isolation list|provision|provision-all|backfill-owners\n"
            }
          }
        }
      },
      "get": {
        "--id": {
          "projectid": {
            "name": {
              "b0d532": "Utilisation : ysk-server projects get --id <projectId|name> [--json]\n"
            }
          }
        }
      },
      "create": {
        "--name": {
          "name": {
            "--domain": {
              "66e857": "Utilisation : ysk-server projects create --name <name> [--domain d] [--runtime node|php|static|python|go|rust] [--template id]\n"
            }
          }
        }
      },
      "deploy": {
        "--id": {
          "projectid": {
            "--entry": {
              "339111": "Utilisation : ysk-server projects deploy --id <projectId> [--entry f] [--port N] [--fpm|--builtin] [--reload]\n"
            }
          }
        }
      },
      "git-deploy": {
        "--id": {
          "id": {
            "--git-url": {
              "a513f5": "Utilisation : ysk-server projects git-deploy --id ID [--git-url URL] [--branch main] [--no-redeploy] [--depth 1] [--entry f]\n"
            }
          }
        }
      },
      "template": {
        "--id": {
          "projectid": {
            "--template": {
              "591ce4": "Utilisation : ysk-server projects template --id <projectId> --template <id> [--force]\n"
            }
          }
        }
      },
      "list": {
        "get": {
          "create": {
            "deploy": {
              "253b48": "Utilisation : ysk-server projects list|get|create|deploy|git-deploy|stop|backup|template|health [options]\n  deploy --id UUID [--entry f] [--port N] [--fpm|--builtin] [--reload]\n  git-deploy --id UUID [--git-url URL] [--branch B] [--no-redeploy]\n"
            }
          }
        }
      }
    },
    "cli": {
      "name": {
        "db-cluster": {
          "get": {
            "--id": {
              "00f803": "Utilisation : {{CLI_NAME}} db-cluster get --id UUID [--json]\n"
            }
          },
          "plan": {
            "--id": {
              "483f52": "Utilisation : {{CLI_NAME}} db-cluster plan --id UUID [--json]\n"
            }
          },
          "artifacts": {
            "--id": {
              "6b33c4": "Utilisation : {{CLI_NAME}} db-cluster artifacts --id UUID [--json]\n"
            }
          },
          "bundle": {
            "--id": {
              "94ed27": "Utilisation : {{CLI_NAME}} db-cluster bundle --id UUID [--json]\n"
            }
          },
          "delete": {
            "--id": {
              "3de0e4": "Utilisation : {{CLI_NAME}} db-cluster delete --id UUID [--json]\n"
            }
          },
          "create": {
            "--name": {
              "e3b733": "Utilisation : {{CLI_NAME}} db-cluster create --name N --engine mariadb --kind mariadb-galera --member HOST=role[:access] ...\n"
            }
          },
          "apply": {
            "--id": {
              "4cddb8": "Utilisation : {{CLI_NAME}} db-cluster apply --id UUID [--execute] [--bootstrap] [--json]\n"
            }
          },
          "probe": {
            "--id": {
              "22870c": "Utilisation : {{CLI_NAME}} db-cluster probe --id UUID [--peers] [--json]\n"
            }
          },
          "install-peers": {
            "--id": {
              "600b02": "Utilisation : {{CLI_NAME}} db-cluster install-peers --id UUID [--execute] [--no-restart] [--identity ID] [--json]\n"
            }
          },
          "push": {
            "--id": {
              "697080": "Utilisation : {{CLI_NAME}} db-cluster push --id UUID [--member ID] [--identity ID] [--execute] [--json]\n"
            }
          },
          "fleet": {
            "--id": {
              "239462": "Utilisation : {{CLI_NAME}} db-cluster fleet --id UUID [--op apply|probe|plan] [--execute] [--edge-execute] [--json]\n"
            }
          },
          "list": {
            "get": {
              "3b9cfa": "Utilisation : {{CLI_NAME}} db-cluster list|get|create|plan|apply|probe|install-peers|artifacts|bundle|push|fleet|overview|delete [--peers] [--execute] [--json]\n"
            }
          }
        },
        "ssh-key": {
          "get": {
            "--id": {
              "292716": "Utilisation : {{CLI_NAME}} ssh-key get --id UUID [--json]\n"
            }
          },
          "public": {
            "--id": {
              "525d7d": "Utilisation : {{CLI_NAME}} ssh-key public --id UUID\n"
            }
          },
          "export": {
            "--id": {
              "0a6d81": "Utilisation : {{CLI_NAME}} ssh-key export --id UUID [--out PATH] [--json]\n"
            }
          },
          "delete": {
            "--id": {
              "a6e2f2": "Utilisation : {{CLI_NAME}} ssh-key delete --id UUID [--json]\n"
            }
          },
          "create": {
            "--name": {
              "8b1d79": "Utilisation : {{CLI_NAME}} ssh-key create --name N [--algo ed25519|rsa-4096] [--purpose user|panel|unbound] [--project ID] [--user U] [--home PATH] [--reveal] [--json]\n"
            }
          },
          "import": {
            "--name": {
              "6eb800": "Utilisation : {{CLI_NAME}} ssh-key import --name N --file PATH [--purpose panel|user] [--json]\n"
            }
          },
          "install": {
            "--id": {
              "b99c56": "Utilisation : {{CLI_NAME}} ssh-key install --id UUID [--execute] [--json]\n"
            }
          },
          "test": {
            "--id": {
              "e1aed3": "Utilisation : {{CLI_NAME}} ssh-key test --id UUID --target user@host[:port] [--execute] [--json]\n"
            }
          },
          "rotate": {
            "--id": {
              "9c3224": "Utilisation : {{CLI_NAME}} ssh-key rotate --id UUID [--reveal] [--json]\n"
            }
          },
          "authorize-self": {
            "--id": {
              "b7ea2e": "Utilisation : {{CLI_NAME}} ssh-key authorize-self --id UUID [--json]\n"
            }
          },
          "uninstall": {
            "--id": {
              "afcba0": "Utilisation : {{CLI_NAME}} ssh-key uninstall --id UUID [--execute] [--json]\n"
            }
          },
          "list": {
            "get": {
              "2c92c6": "Utilisation : {{CLI_NAME}} ssh-key list|get|create|import|public|export|install|test|rotate|authorize-self|uninstall|delete [--json]\n"
            }
          }
        },
        "ssh-2fa": {
          "reveal": {
            "--id": {
              "a6c27f": "Utilisation : {{CLI_NAME}} ssh-2fa reveal --id UUID [--json]\n"
            }
          },
          "retire": {
            "--id": {
              "6e1fa3": "Utilisation : {{CLI_NAME}} ssh-2fa retire --id UUID [--json]\n"
            }
          },
          "enroll": {
            "--user": {
              "081432": "Utilisation : {{CLI_NAME}} ssh-2fa enroll --user LINUX|--project ID [--home PATH] [--from-panel] [--json]\n"
            }
          },
          "confirm": {
            "--id": {
              "9ee8a2": "Utilisation : {{CLI_NAME}} ssh-2fa confirm --id UUID --code 123456 [--json]\n"
            }
          },
          "install": {
            "--id": {
              "dace06": "Utilisation : {{CLI_NAME}} ssh-2fa install --id UUID [--execute] [--json]\n"
            }
          },
          "uninstall": {
            "--id": {
              "0bb464": "Utilisation : {{CLI_NAME}} ssh-2fa uninstall --id UUID [--execute] [--json]\n"
            }
          },
          "list": {
            "enroll": {
              "802ed0": "Utilisation : {{CLI_NAME}} ssh-2fa list|enroll|confirm|install|uninstall|pam|reveal|retire [--json]\n"
            }
          }
        },
        "ssl": {
          "list": {
            "get": {
              "79c232": "Utilisation : {{CLI_NAME}} ssl list|get --domain X [--json]\n"
            }
          },
          "get": {
            "--domain": {
              "91c444": "Utilisation : {{CLI_NAME}} ssl get --domain example.com [--json]\n"
            }
          }
        },
        "dns": {
          "zone": {
            "--zone": {
              "ad30fa": "Utilisation : {{CLI_NAME}} dns zone --zone example.com --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n"
            }
          },
          "zones": {
            "zone": {
              "5b8bda": "Utilisation : {{CLI_NAME}} dns zones|zone --zone X --ip A.B.C.D [--ipv6 …] [--json]\n"
            }
          }
        },
        "nginx": {
          "status": {
            "list": {
              "d67a16": "Utilisation : {{CLI_NAME}} nginx status|list|test|sync [--execute] [--json]\n"
            }
          }
        },
        "host": {
          "overview": {
            "metrics": {
              "93c828": "Utilisation : {{CLI_NAME}} host overview|metrics|network [--path /] [--json]\n"
            }
          }
        },
        "logs": {
          "sources": {
            "overview": {
              "79058c": "Utilisation : {{CLI_NAME}} logs sources|overview|units|journal|query [--source id] [--json]\n"
            }
          }
        },
        "services": {
          "sub": {
            "--unit": {
              "4fe3fa": "Utilisation : {{CLI_NAME}} services {{sub}} --unit <systemd-unit> [--execute] [--json]\n"
            }
          },
          "matrix": {
            "start": {
              "4f3a35": "Utilisation : {{CLI_NAME}} services matrix|start|stop|restart|reload --unit NAME [--execute] [--json]\n"
            }
          }
        },
        "defense": {
          "ban": {
            "--ip": {
              "cc22de": "Utilisation : {{CLI_NAME}} defense ban --ip <ip> [--method fail2ban|ufw|both] [--reason t] [--execute]\n"
            }
          },
          "unban": {
            "--ip": {
              "46aa23": "Utilisation : {{CLI_NAME}} defense unban --ip <ip> [--method fail2ban|ufw|both] [--execute]\n"
            }
          },
          "whitelist": {
            "--action": {
              "c1cbdf": "Utilisation : {{CLI_NAME}} defense whitelist --action list|add|remove [--ip IP]\n"
            }
          },
          "status": {
            "bans": {
              "a8d96b": "Utilisation : {{CLI_NAME}} defense status|bans|suspects|ban|unban|whitelist|stack-apply|fail2ban|firewall|timeline|presets [--json]\n  bans [--q text] [--source fail2ban|panel|ufw|auto]\n  suspects [--q text]\n  stack-apply [--execute]   # UFW + fail2ban + preset actuel\n  fail2ban | firewall       # sondes approfondies (honnêtes)\n  timeline [--limit N] [--q text]\n  presets                   # liste + activePreset\n"
            }
          }
        }
      }
    },
    "system": {
      "unit-install": {
        "--enable": {
          "--data-dir": {
            "path": {
              "33daa1": "Utilisation : ysk-server system unit-install [--enable] [--data-dir PATH]\n"
            }
          }
        }
      }
    },
    "users": {
      "create": {
        "--username": {
          "u": {
            "--password": {
              "7145c7": "Utilisation : ysk-server users create --username <u> --password <p> [--role operator|viewer|admin] [--package-id id]\n"
            }
          }
        }
      },
      "list": {
        "--q": {
          "text": {
            "--role": {
              "544685": "Utilisation : ysk-server users list [--q text] [--role admin|operator|viewer]\n       ysk-server users create --username u --password p [--role operator]\n"
            }
          }
        }
      }
    },
    "rbac": {
      "list": {
        "policies": {
          "330ade": "Utilisation : ysk-server rbac list|policies\n       ysk-server rbac show --role operator\n       ysk-server rbac audit   # matrice d’échantillon route→cap\n"
        }
      }
    },
    "hosting": {
      "postgres-provision": {
        "--db": {
          "name": {
            "--user": {
              "2c8889": "Utilisation : ysk-server hosting postgres-provision --db NAME --user U --password P(min8) [--execute]\n  Simulation par défaut (aucun changement hôte). Passez --execute + YSK_EXECUTE=1 pour appliquer.\n"
            }
          }
        }
      },
      "mysql-provision": {
        "--db": {
          "name": {
            "--user": {
              "fc25aa": "Utilisation : ysk-server hosting mysql-provision --db NAME --user U --password P(min8) [--execute]\n  Simulation par défaut (aucun changement hôte). Passez --execute + YSK_EXECUTE=1 pour appliquer.\n"
            }
          }
        }
      },
      "dns-zone": {
        "--zone": {
          "example": {
            "com": {
              "bdaa0d": "Utilisation : ysk-server hosting dns-zone --zone example.com --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n"
            }
          }
        }
      },
      "powerdns-load": {
        "--zone": {
          "example": {
            "com": {
              "dba49c": "Utilisation : ysk-server hosting powerdns-load --zone example.com --ip A.B.C.D [--ipv6 X:X::X] [--load|--execute]\n"
            }
          }
        }
      },
      "email-apply": {
        "--domain": {
          "example": {
            "com": {
              "37d350": "Utilisation : ysk-server hosting email-apply --domain example.com [--install|--execute]\n"
            }
          }
        }
      },
      "email-mailbox": {
        "--domain": {
          "x": {
            "--local": {
              "3d9be3": "Utilisation : ysk-server hosting email-mailbox --domain X --local user [--password P] [--ip A.B.C.D]\n"
            }
          }
        }
      },
      "ftps-apply": {
        "--domain": {
          "files": {
            "example": {
              "284a7c": "Utilisation : ysk-server hosting ftps-apply --domain files.example.com [--install|--execute]\n"
            }
          }
        }
      },
      "webmail-apply": {
        "--domain": {
          "webmail": {
            "example": {
              "2ad5b5": "Utilisation : ysk-server hosting webmail-apply --domain webmail.example.com [--download]\n"
            }
          }
        }
      },
      "public-files": {
        "--domain": {
          "files": {
            "example": {
              "0e9013": "Utilisation : ysk-server hosting public-files --domain files.example.com [--reload]\n"
            }
          }
        }
      },
      "email-deliverability": {
        "--domain": {
          "example": {
            "com": {
              "8774a4": "Utilisation : ysk-server hosting email-deliverability --domain example.com\n       ysk-server hosting email-deliverability --id <domainId>\n"
            }
          }
        }
      },
      "email-bootstrap": {
        "--domain": {
          "example": {
            "com": {
              "796da5": "Utilisation : ysk-server hosting email-bootstrap --domain example.com --ip 1.2.3.4 [--admin postmaster] [--password P] [--install]\n"
            }
          }
        }
      }
    },
    "migrate": {
      "post": {
        "--job": {
          "id": {
            "--data-dir": {
              "6a73cd": "Utilisation : ysk-server migrate post --job <id> --data-dir PATH --execute\n"
            }
          }
        }
      },
      "host": {
        "--target": {
          "root": {
            "new": {
              "3e94a2": "Utilisation : ysk-server migrate host --target root@NEW_IP [--identity-file PATH|--identity-id ID] [--password] --execute --data-dir PATH\n"
            }
          }
        }
      }
    },
    "x": {
      "972912": "Utilisation :\n  ysk-server migrate inventory [--data-dir PATH] --json\n  ysk-server migrate host --target root@IP [--identity-file PATH|--identity-id ID|--password PW] --execute [--maintenance] [--force-wipe-target]\n  ysk-server migrate post --job ID --data-dir PATH --execute   # sur la cible\n  ysk-server migrate status [--job ID]\n  ysk-server migrate resume --job ID --execute\n  ysk-server migrate orphan-homes [--data-dir PATH] --json\n  ysk-server migrate orphan-homes --path /home/ysk-server-UUID --confirm PATH --execute\n"
    },
    "hostingHelp": "Utilisation : ysk-server hosting <sub>\n  Ops dangereuses en simulation par défaut ; ajoutez --execute (+ YSK_EXECUTE=1) pour appliquer\n  nginx | nginx-sync [--execute]\n  redis-provision | postgres-provision | mysql-provision [--execute]\n  dns-zone --zone X --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n  dns-zones | powerdns-status | powerdns-install [--install|--execute]\n  powerdns-load --zone X --ip A.B.C.D [--load|--execute]\n  email-apply --domain X [--install|--execute]\n  email-mailbox --domain X --local user [--password P] [--ip A.B.C.D] [--system]\n  ftps-apply --domain X [--install|--execute]\n  runtimes | runtime-install --kind node|php|python|go|rust --version V [--install|--execute]\n  dovecot-passdb --domain X | --all\n  webmail-apply --domain webmail.example.com [--download]\n  public-files --domain files.example.com [--reload]\n  email-bootstrap --domain example.com --ip A.B.C.D [--install|--execute]\n  email-deliverability --domain example.com   # pack PTR/DNSBL/warmup (honnête)\n  firewall-apply [--smtp] [--execute]\n",
    "logsQuery": "Utilisation : {{CLI_NAME}} logs query --source <id> [--lines N] [--grep G] [--since 1h] [--priority err]\n  exemples de source : journal:  journal:nginx.service  file:syslog  project:<uuid>\n  {{CLI_NAME}} logs sources --json\n  {{CLI_NAME}} logs journal [--unit nginx.service] --json\n"
  },
  "msg": {
    "domain": {
      "missing": {
        "pass": {
          "5be09b": "Domaine manquant — passez --ip pour créer d’abord le domaine\n"
        }
      }
    },
    "--root": {
      "must": {
        "be": {
          "a84834": "--root doit être public ou project:<id>\n"
        }
      }
    },
    "need": {
      "--content": {
        "or": {
          "4d7001": "Il faut --content ou --file\n"
        }
      },
      "at": {
        "least": {
          "7d311a": "Au moins un --member HOST[=role][:access] est requis\n"
        }
      }
    },
    "action": {
      "must": {
        "be": {
          "ba14c1": "l'action doit être list|add|remove\n"
        }
      }
    },
    "use": {
      "ysk-server": {
        "backup": {
          "ca67f4": "Utiliser : ysk-server backup control-plane-restore --name ARCHIVE (pas restore --project-id control-plane)\n"
        }
      }
    },
    "new": {
      "domain": {
        "requires": {
          "986b78": "Un nouveau domaine exige --ip A.B.C.D (pas de valeurs par défaut fictives)\n"
        }
      }
    },
    "import-sync": {
      "prefers": {
        "fleet": {
          "4d7590": "import-sync privilégie le payload clusterSync de la flotte ; ou --file snapshot.json\n"
        }
      }
    },
    "security": {
      "control": {
        "plane": {
          "f59a63": "SÉCURITÉ : plan de contrôle exposé publiquement (0.0.0.0/::). Préférer 127.0.0.1 + reverse proxy / UFW.\n"
        }
      }
    }
  },
  "err": {
    "unknown": {
      "email": {
        "sub": {
          "sub": {
            "e37257": "Sous-commande email inconnue : {{sub}}\nExécuter : ysk-server email help\n"
          }
        }
      },
      "cron": {
        "sub": {
          "sub": {
            "e1a9ed": "Sous-commande cron inconnue : {{sub}}\nExécuter : ysk-server cron help\n"
          }
        }
      },
      "files": {
        "sub": {
          "sub": {
            "07ad7e": "Sous-commande files inconnue : {{sub}}\nExécuter : ysk-server files help\n"
          }
        }
      },
      "store": {
        "sub": {
          "sub": {
            "b7a083": "Sous-commande store inconnue : {{sub}}\nExécuter : ysk-server store help\n"
          }
        }
      },
      "cdn": {
        "subcommand": {
          "sub": {
            "76664f": "Sous-commande cdn inconnue : {{sub}}\nExécuter : ysk-server cdn help\n"
          }
        }
      },
      "backup": {
        "subcommand": {
          "sub": {
            "4092ad": "Sous-commande backup inconnue : {{sub}}\nExécuter : ysk-server backup help\n"
          }
        }
      }
    }
  },
  "setup": {
    "dryRunOk": "Simulation de configuration {{product}} OK",
    "dryRunNext": "Relancer sans --dry-run pour écrire la configuration et initialiser la base de données",
    "weakPassword": "Le mot de passe administrateur est faible ou par défaut. Fournir un --admin-password fort (min. 8, pas « admin »/valeurs courantes), ou définir YSK_ALLOW_INSECURE_DEFAULTS=1 pour le dev local uniquement.",
    "weakPasswordShort": "Mot de passe administrateur faible ou par défaut refusé",
    "nextStart": "Démarrer (API + interface Web) : {{cli}} serve --config {{configPath}}",
    "nextOpen": "Ouvrir http://{{host}}:{{port}}/ et se connecter en tant que {{user}}",
    "nextUnit": "Modèle d'unité systemd : {{unitPath}}",
    "nextInstall": "Installer l'unité (root + YSK_EXECUTE) : {{cli}} system unit-install --enable --data-dir {{dataDir}}",
    "nextExecute": "Les mutations d'hôte en production exigent YSK_EXECUTE=1 et root",
    "nextGolive": "Mise en production : docs/deploy/go-live.md + ysk-server readiness --json",
    "secPassword": "SÉCURITÉ : changer immédiatement le mot de passe administrateur (amorçage avec un mot de passe faible/par défaut)",
    "sec2fa": "SÉCURITÉ : activer la 2FA administrateur sous Sécurité → Compte",
    "secListen": "SÉCURITÉ : écoute sur toutes les interfaces — placer derrière un pare-feu / reverse proxy ; préférer 127.0.0.1 + tunnel SSH pour l'admin",
    "ok": "Configuration {{product}} terminée (base de données initialisée)",
    "okInsecure": "Configuration {{product}} terminée (base de données initialisée) [AMORÇAGE NON SÉCURISÉ — changer le mot de passe]"
  }
}
