#!/usr/bin/env bash # Some terminals encourage invoking scripts with `sh script.sh`, which makes # POSIX sh ignore the Bash shebang. Re-enter Bash before any Bash-only syntax # is parsed so that invocation remains safe and predictable. if [ -z "${BASH_VERSION:-}" ]; then exec bash "$0" "$@" fi set -Eeuo pipefail BASE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" usage() { cat <<'EOF' Usage: ./repair-rpi-with-codex.sh Lance une session Codex interactive et isolée pour diagnostiquer le Raspberry Pi et préparer une correction. Les modifications de code sont réalisées dans un worktree Git dédié. Toute action sur le système, Docker, les montages, le réseau ou les services doit rester soumise à une approbation humaine. EOF } case "${1:-}" in "") ;; -h|--help) usage; exit 0 ;; *) usage >&2; exit 2 ;; esac if [[ "${EUID:-$(id -u)}" -eq 0 ]]; then echo "Ne lancez pas ce script avec sudo." >&2 exit 2 fi command -v codex >/dev/null 2>&1 || { echo "Codex CLI est introuvable dans PATH." >&2 exit 127 } command -v git >/dev/null 2>&1 || { echo "Git est requis pour créer le worktree isolé." >&2 exit 127 } git -C "$BASE" rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "Le dossier CodexPi n’est pas un dépôt Git." >&2 exit 2 } read -r -d '' PROMPT <<'EOF' || true Tu es l’agent Pi Doctor chargé de diagnostiquer un Raspberry Pi 5 sous DietPi. Commence uniquement par des contrôles en lecture seule : état systemd, erreurs récentes du journal, mémoire, disque, température, montages CIFS, réseau et conteneurs Docker. Utilise aussi ./scripts/repair.sh --check pour CodexPi quand il est pertinent. Ne copie jamais de cookie, jeton, clé, mot de passe, contenu de .env ou autre secret dans la conversation ou les journaux. Tu travailles dans un worktree Git isolé. Tu peux corriger les fichiers de CodexPi dans ce worktree et exécuter leurs tests. Ne modifie pas la production, les données persistantes, NASFLIX, Jellyfin, le reverse proxy QNAP, SSH, le pare-feu, les montages ou les services sans présenter d’abord : le diagnostic, les preuves, le niveau de confiance, les commandes exactes, les risques, la sauvegarde et le retour arrière. Attends ensuite une approbation explicite dans la session avant chaque intervention système. N’utilise jamais sudo automatiquement, ne redémarre pas la machine et ne lance aucune commande destructive. Si une intervention dépasse le sandbox, demande l’approbation au lieu de contourner la protection. Termine par un rapport qui distingue clairement diagnostic, corrections de code testées, actions système approuvées et problèmes encore bloqués. EOF exec codex \ -C "$BASE" \ --enable worktrees \ --worktree \ --sandbox workspace-write \ --ask-for-approval on-request \ --no-alt-screen \ "$PROMPT"