80 lines
2.8 KiB
Bash
80 lines
2.8 KiB
Bash
|
|
#!/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"
|