Files
opencode-greenpt-usage/README.md
Stéphan Sainléger c44187f613 new: [opencode-greenpt-usage] add GreenPT credit balance plugin
Show the remaining GreenPT API credit balance in the OpenCode TUI
sidebar. The key is resolved from the ``apiKey`` option, the
``GREENPT_API_KEY`` environment variable, or the active OpenCode
``auth.json`` (provider ``greenpt``); the section is hidden when no key
is present, so the plugin stays portable across machines and profiles.

The balance is read from the ``x-credits-remaining`` header returned by
a free ``HEAD /v1/chat/completions`` probe (HTTP 400 before any credit
is consumed), which avoids a billable call per refresh. Tests cover the
credential resolution, the header parsing and the live API.

Distribute via git clone; there is no npm publish.
2026-09-29 21:54:23 +02:00

105 lines
4.0 KiB
Markdown

# opencode-greenpt-usage
Plugin TUI [OpenCode](https://opencode.ai) qui affiche dans la barre latérale
le **solde de crédits API GreenPT** restant.
```
▼ GreenPT
Solde 5.31 € maj 21:35
```
## Fonctionnement
- La clé API est résolue dans cet ordre :
1. l'option `apiKey` du plugin ;
2. la variable d'environnement `GREENPT_API_KEY` ;
3. le store d'authentification **actif** d'OpenCode (`auth.json`,
provider `greenpt`, entrée `type: "api"`), c'est-à-dire ce que produit
un simple `opencode auth login`.
- Le solde est lu via une sonde **gratuite** `HEAD /v1/chat/completions` :
l'API répond `400 Bad Request` avant toute facturation, mais la réponse
porte quand même l'en-tête `x-credits-remaining`. Aucun crédit n'est
consommé et aucune génération n'est lancée.
- La section est **masquée tant qu'aucune clé GreenPT n'est détectée**.
- Rafraîchissement : au démarrage, à la fin d'une session, à la
reconnexion du serveur, par minuteur (300 s par défaut) et à la demande
via la commande `greenpt.refresh`.
Aucune dépendance à un profil ou à une commande locale : le plugin se base
uniquement sur la présence d'une clé.
## Prérequis
- OpenCode `>= 1.18.0` (système de plugins TUI).
- Un compte GreenPT et une clé API.
## Installation
1. **Cloner ce dépôt** à l'emplacement de votre choix.
2. **Connecter GreenPT à OpenCode** :
```bash
opencode auth login
```
Choisir **GreenPT** dans la liste, puis coller la clé API.
(Alternative : exporter `GREENPT_API_KEY` dans votre environnement.)
3. **Enregistrer le plugin** dans `~/.config/opencode/tui.json`, en
renseignant le **chemin absolu vers votre clone** :
```jsonc
{
"$schema": "https://opencode.ai/tui.json",
"plugin": [
["file:///CHEMIN/ABSOLU/VERS/opencode-greenpt-usage/src/index.tsx", { "order": 700 }]
]
}
```
> Utiliser une URL `file://` pointant vers le fichier source
> `src/index.tsx` (OpenCode compile le TSX lui-même). Ne pas pointer vers
> un bundle : cela embarquerait une seconde copie de `solid-js` et la
> section resterait vide.
4. **Quitter complètement OpenCode et le relancer** (les plugins ne sont pas
rechargés à chaud).
## Configuration
Toutes les options sont facultatives et se placent dans l'entrée du plugin
de `tui.json` :
| Option | Type | Défaut | Description |
| -------------------- | ------- | --------------------------- | -------------------------------------------------------- |
| `apiKey` | string | résolu automatiquement | Clé GreenPT explicite. |
| `baseUrl` | string | `https://api.greenpt.ai/v1` | URL de base de l'API GreenPT. |
| `refreshInterval` | number | `300` | Intervalle de rafraîchissement en secondes (`0` = aucun).|
| `order` | number | `700` | Position de la section dans la barre latérale. |
| `showWhenUnavailable`| boolean | `false` | Afficher un indice quand aucune clé GreenPT n'existe. |
| `unit` | string | `€` | Unité affichée après le montant. |
## Dépannage
- **La section n'apparaît pas** : vérifier que `opencode auth login` a bien
enregistré une clé `greenpt` (ou que `GREENPT_API_KEY` est définie), et que
l'URL `file://` de `tui.json` pointe vers le bon chemin.
- **« clé GreenPT invalide »** : la clé API a été refusée (HTTP 401).
- **« solde indisponible »** : GreenPT n'a pas renvoyé l'en-tête de solde ;
réessayer plus tard.
## Développement
```bash
npm install
npm test # tests unitaires
npm run typecheck # vérification de types
GREENPT_API_KEY=... npm run test:integration # test contre l'API réelle
```
## Licence
AGPL-3.0-or-later. Voir [LICENSE](LICENSE).