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

@@ -41,6 +41,7 @@ for _p in (str(_BRIDGE), str(_DASH)):
sys.path.insert(0, _p)
import config # noqa: E402
from limits import parse_cap # noqa: E402
# ── constante ───────────────────────────────────────────────────────────
SERVICE = "claude-discord.service"
@@ -288,12 +289,13 @@ def doctor() -> list[dict]:
"detail": f'{len(st.get("threads") or {})} fire' if st else "ilizibil sau gol",
})
cap = float(config.get("COST_CAP_USD_DAY") or 0)
cap = parse_cap(config.get("COST_CAP_USD_DAY"), 0.0)
spent = float((st.get("cost") or {}).get("usd") or 0)
checks.append({
"name": "Plafon de cost pe zi",
"pass": cap <= 0 or spent < cap,
"detail": f"{spent:.2f} / {cap:.2f} USD",
"detail": f"{spent:.2f} / {cap:.2f} USD" if cap > 0
else f"{spent:.2f} USD cheltuiti, fara plafon (abonament)",
})
try:
@@ -500,7 +502,7 @@ class Handler(SimpleHTTPRequestHandler):
"dashboard": unit_info(SELF_SERVICE),
"threads": threads_view(state),
"cost": state.get("cost") or {},
"cost_cap": float(config.get("COST_CAP_USD_DAY") or 0),
"cost_cap": parse_cap(config.get("COST_CAP_USD_DAY"), 0.0),
"pending_approvals": len(pending_approvals()),
"auth": not auth_disabled(),
"user": tailnet_user(self.headers),