fix(discord-bridge): plafonul de cost e optional (COST_CAP_USD_DAY=off)

Costul raportat de CLI e pretul echivalent la API; pe abonament nu se
factureaza, deci plafonul zilnic oprea puntea fara motiv (5.71 / 5.00 USD).

- limits.parse_cap(): `off`/`none`/`nelimitat`/`0`/gol/gunoi => fara plafon
- stopped()/record_cost() nu mai opresc si nu mai alerteaza cand e dezactivat
- implicit devine `off`; /status arata „(fara plafon)"
- dashboard: /api/status si doctor nu mai crapa pe valoare ne-numerica
- README + ops/env.example explica de ce ramane off pe abonament

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
This commit is contained in:
Claude Agent
2026-08-30 21:02:43 +00:00
parent b14e7bc50a
commit feb31eaabe
7 changed files with 76 additions and 15 deletions

View File

@@ -170,7 +170,9 @@ Nu se poate automatiza: cere un om logat in Discord.
**Allowlist gol = nimic permis** (fail-closed). Mesajele de la webhook-uri si de la
alti boti sunt ignorate din principiu.
7. **Pune destinatarul alertelor**: `ALERT_RECIPIENT=` in acelasi env.
8. **Verifica plafonul de cost**: `COST_CAP_USD_DAY=` (implicit `5.00`).
8. **Verifica plafonul de cost**: `COST_CAP_USD_DAY=` (implicit `off`). Pe abonament
(Pro/Max) lasa `off`: costul raportat de CLI e doar pretul echivalent la API, nu o
factura. Pune un numar (ex. `5.00`) doar daca platesti per token.
9. Abia acum: `./ops/install.sh --start`.
---
@@ -212,9 +214,13 @@ Fara Tailscale: `ssh -L 18790:127.0.0.1:18790 -N claude@10.0.20.171`.
### Cost
Costul se vede in trei locuri: in subsolul fiecarui raspuns (turul curent + cumulat pe
fir), in `/status`, si in `state.json` la cheia `cost`. La atingerea plafonului zilnic
(`COST_CAP_USD_DAY`) botul nu mai accepta tururi noi si trimite email. Plafonul se
reseteaza la schimbarea zilei.
fir), in `/status`, si in `state.json` la cheia `cost`. E pretul echivalent la API
raportat de CLI: pe abonament nu se factureaza, deci ramane doar o masura de consum.
Plafonul zilnic e optional. `COST_CAP_USD_DAY=off` (implicit, si `0` sau gol) inseamna
fara plafon: cheltuiala se contorizeaza mai departe, dar nimic nu se opreste. Cu un
numar pozitiv, la atingerea lui botul nu mai accepta tururi noi si trimite email;
plafonul se reseteaza la schimbarea zilei.
### Alerte pe email
@@ -265,7 +271,7 @@ tail -2 ~/.claude-discord/logs/alerts.log
| Unitul se invarte in restart | Dupa 5 porniri esuate in 300s systemd renunta si lasa unitul `failed` (e voit). Repara, apoi `systemctl --user reset-failed claude-discord && systemctl --user start claude-discord`. |
| Firul e blocat pe hourglass | Botul a fost restartat la mijlocul unui tur. Turul **nu** se reia automat (risc de dubla executie sub `bypassPermissions`); sweep-ul de la pornire pune un avertisment in fir. Trimite mesajul din nou. |
| Memoria containerului creste | `/cleanup` (sec), apoi `/cleanup force:True`. Vezi si `systemctl --user show claude-discord -p MemoryCurrent`. |
| „Plafon de cost atins" | E limita zilnica, nu o eroare. Ridica `COST_CAP_USD_DAY` in env si reporneste, sau asteapta ziua urmatoare. |
| „Plafon de cost atins" | E limita zilnica, nu o eroare. Pe abonament pune `COST_CAP_USD_DAY=off` in env si reporneste; altfel ridica valoarea sau asteapta ziua urmatoare. |
| Nu vin emailuri de alerta | `command -v mail`; `mailq`; `tail ~/.claude-discord/logs/alerts.log`. Un `NESENT` in log iti spune exact de ce. |
| Dupa reboot serviciul nu porneste | `loginctl show-user claude -p Linger` trebuie sa fie `yes`. Daca nu: `sudo loginctl enable-linger claude`. |