codex-reset-alerts/README.md

262 lines
5.5 KiB
Markdown

# Codex Reset Alerts 🚀
Petit watcher Node.js qui surveille ton quota global **OpenAI Codex** et envoie des notifications **ntfy** au lancement, puis dès que ce quota global est de nouveau disponible.
L'idée est simple : lorsque Codex indique que ton quota global est épuisé, tu lances le watcher et tu peux passer à autre chose. Il surveille le quota global en arrière-plan, t'envoie une notification lors du reset réel, puis s'arrête automatiquement.
## Fonctionnement
```text
Quota global Codex épuisé 🔴
│
▼
npm start
│
▼
Codex App Server
│
├── account/rateLimits/read
│
└── account/rateLimits/updated
│
▼
Surveillance du quota global
│
▼
Quota global disponible 🟢
│
▼
ntfy
│
▼
📱 Notification
│
▼
Arrêt du watcher
```
Le watcher utilise deux mécanismes :
* les événements `account/rateLimits/updated` envoyés par Codex ;
* un polling périodique comme filet de sécurité.
Codex expose deux fenêtres de quota : `primary` sur 300 minutes, soit 5h, et `secondary` sur 10080 minutes, soit 7 jours. Le watcher ignore la fenêtre 5h et utilise uniquement la fenêtre globale.
Le timestamp `resetsAt` global fourni par Codex est également surveillé, mais il n'est **pas considéré comme une garantie** : le quota global peut être réinitialisé avant la date annoncée.
Une notification de démarrage est envoyée dès le lancement. La notification de reset n'est envoyée que lorsqu'un passage réel de **quota global épuisé → quota global disponible** est détecté.
## Prérequis
* Linux / WSL
* Node.js 20+
* OpenAI Codex CLI
* un compte ChatGPT connecté dans Codex
* l'application ntfy sur ton téléphone
## Installation
Clone le dépôt :
```bash
git clone ssh://git@git.shinuwa.fr:2222/shinuwa/codex-reset-alerts.git
cd codex-reset-alerts
```
Installe Codex CLI si nécessaire :
```bash
npm install -g @openai/codex
```
Vérifie l'installation :
```bash
codex --version
```
Puis lance une première fois Codex pour t'authentifier :
```bash
codex
```
## Configuration
Crée un fichier `.env` à la racine :
```env
NTFY_URL=https://ntfy.sh
NTFY_TOPIC=mon-topic-secret
NTFY_TOKEN=
POLL_INTERVAL_SECONDS=60
```
### `NTFY_URL`
Adresse du serveur ntfy.
Par défaut :
```text
https://ntfy.sh
```
Tu peux également utiliser une instance ntfy auto-hébergée.
### `NTFY_TOKEN`
Token d'accès pour un serveur ntfy privé.
Laisse vide si ton topic ne demande pas d'authentification.
### `NTFY_TOPIC`
Topic sur lequel la notification sera envoyée.
Abonne ton téléphone au même topic dans l'application ntfy.
> Sur un serveur ntfy public, utilise de préférence un nom de topic long et difficile à deviner.
### `POLL_INTERVAL_SECONDS`
Intervalle entre deux vérifications du quota.
Par défaut :
```text
60 secondes
```
Les événements envoyés directement par Codex permettent généralement de détecter les changements plus rapidement ; le polling sert principalement de sécurité.
## Utilisation
Lorsque ton quota global Codex est épuisé :
```bash
npm start
```
Si le quota est effectivement épuisé :
```text
📱 Notification ntfy de démarrage envoyée.
🔌 Connexion à Codex App Server...
✅ Connecté.
🔎 Source : démarrage
📊 Global utilisé : 100%
📊 Fenêtre 300min ignorée : 100%
🔴 État : quota global épuisé
🕒 Reset global annoncé : jeudi 20 août 2026 à 13:58:03
⏳ Temps théorique global : 3j 1h 55min
🔴 Quota global épuisé.
👀 Surveillance du reset global activée.
👀 Polling toutes les 60s.
```
Tu peux alors laisser le watcher tourner.
Lorsqu'un reset global est détecté :
```text
🎉 RESET GLOBAL RÉEL DÉTECTÉ !
📉 100% → 0%
📱 Notification ntfy envoyée.
✅ Mission terminée.
👋 Arrêt du watcher.
```
Tu recevras en parallèle une notification sur ton téléphone :
```text
🚀 Ton quota global Codex est de nouveau disponible !
Avant : 100% utilisé
Maintenant : 0% utilisé
```
Le watcher s'arrête ensuite automatiquement.
## Si le quota global n'est pas épuisé
Tu peux lancer le programme sans risque :
```bash
npm start
```
S'il reste du quota global, le watcher ne reste pas inutilement actif :
```text
📊 Global utilisé : 42%
📊 Fenêtre 300min ignorée : 100%
🟢 État : quota global disponible
✅ Ton quota global Codex est encore disponible.
👋 Rien à surveiller, arrêt.
```
## Tester ntfy
Tu peux vérifier manuellement que ton téléphone reçoit bien les notifications :
```bash
curl \
-H "Title: Test Codex" \
-H "Tags: robot" \
-H "Authorization: Bearer TON_TOKEN" \
-d "Hello depuis Codex Reset Alerts 🚀" \
https://ntfy.shinuwa.fr/TON_TOPIC
```
## Lancer le watcher en arrière-plan
Pour éviter de garder ton terminal ouvert, tu peux par exemple utiliser `tmux` :
```bash
tmux new -s codex-reset
npm start
```
Puis détache la session avec :
```text
Ctrl+B puis D
```
Pour y retourner :
```bash
tmux attach -t codex-reset
```
## Sécurité
Le fichier `.env` ne doit pas être versionné.
Vérifie que `.gitignore` contient :
```gitignore
.env
node_modules/
```
Évite également d'utiliser un nom de topic ntfy facilement devinable si tu utilises le serveur public.
## Pourquoi ?
Parce qu'appuyer sur `/usage` toutes les 20 minutes pour voir si Codex a décidé de rendre du quota, c'est moins amusant que de recevoir :
> 🚀 Codex disponible
et retourner coder.
## Licence
MIT