Claude: refresh OAuth proactif + erreurs fatales distinctes (fini les reconnexions manuelles)

Le refresh token est rotatif : la chaîne se régénère seule indéfiniment tant que
le nouveau token est persisté. La reconnexion manuelle n'était requise que lorsque
cet invariant cassait. Trois correctifs :

- Refresh PROACTIF : on rafraîchit dès qu'il reste < 2h sur le token (~8h de vie)
  au lieu des 2 dernières minutes. Un échec transitoire a des heures de marge avant
  que l'access token meure ; la fenêtre où un kill/timeout perd le token rotatif
  fraîchement rotaté passe de ~8h à quelques ms. Réglable via
  MONITORINK_CLAUDE_REFRESH_LEAD_MIN (défaut 120).
- Distinction FATAL vs TRANSITOIRE : 400 invalid_grant / 401 sur l'endpoint token
  -> _RefreshFatal, sans backoff ni re-soumission en boucle (évite la reuse-detection
  qui révoque toute la famille). 429/5xx/réseau gardent le backoff exponentiel.
- Visibilité + auto-réparation : le cas fatal affiche "Reconnexion Claude requise"
  (pas de repli cache silencieux) et l'alerte se referme seule dès qu'un token frais
  réapparaît sur disque (re-login isolé), sans redémarrer le conteneur.

Timeout du POST de refresh porté à 45s (réglable, MONITORINK_CLAUDE_REFRESH_TIMEOUT)
pour réduire la fenêtre de perte du token après rotation serveur.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-18 10:46:21 +02:00
parent 2c5acc1e36
commit 53fefd4654
3 changed files with 113 additions and 14 deletions

View File

@@ -9,6 +9,12 @@ MONITORINK_CLAUDE_CREDS=/creds/.credentials.json
MONITORINK_CLAUDE_UA=claude-code/2.1.172
# Burn rate via ccusage (nécessite ccusage installé + ~/.claude/projects monté). 0/1
MONITORINK_CCUSAGE=0
# Marge proactive de refresh OAuth (minutes) : rafraîchit le token bien avant son expiration
# (~8 h) pour laisser des heures de marge en cas d'échec transitoire (429/réseau). Défaut 120.
MONITORINK_CLAUDE_REFRESH_LEAD_MIN=120
# Timeout du POST de refresh (secondes). Généreux pour ne pas couper après que le serveur a
# rotaté le refresh token, ce qui le perdrait et forcerait un re-login manuel. Défaut 45.
MONITORINK_CLAUDE_REFRESH_TIMEOUT=45
# Affichage — canevas de rendu en PAYSAGE ; le PNG est pivoté de 90° pour la Kobo.
MONITORINK_TZ=Europe/Paris