todo: Maria — profil de client si reset de fire (gata)

Doua functionalitati noi in maria-whatsapp-bridge/discord-bridge
(cod in romfastsql, commits 610638a si 32ff462): profil de client
per firma, asociat cu mai multe numere de telefon, injectat in
promptul RAG; si o sectiune in dashboard pentru resetarea firelor
de discutie active. Precizare adaugata in CLAUDE.md — profilurile
de client sunt permise in granita Mariei, dar fara date tehnice.

Co-Authored-By: Claude Agent <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-09-08 11:44:10 +00:00
parent 1c516a64dd
commit a345b6b39e
2 changed files with 55 additions and 0 deletions

View File

@@ -100,6 +100,11 @@ poate rupe doar dacă **tu** pui acolo ce nu trebuie. Deci:
cu acest filtru. Dacă e material de infrastructură, refuză și spune de ce.
- Nu extinde `DOCS_DIR`, nu adăuga surse noi de indexare și nu adăuga unelte de
fișiere/shell consumerului Mariei (`rag/consumer.py`) fără cerere explicită.
- **Profilurile de client** (`rag/client.py`, `~/.maria-bridge/clients.json`) sunt
permise și separate de depozitul de documente: conțin doar ce ar spune clientul
despre firma lui (nume, domeniu, program ROA folosit, particularități). **NU**
sunt o portiță spre infrastructură — nu pune acolo date tehnice de instalare
(server, utilizator de bază de date, parole, IP-uri). Același filtru ca mai sus.
Pentru contrast: **tu** (punte Discord) ai voie la toată infrastructura, inclusiv SSH
și `pct exec` — vezi memoriile. Maria, nu.

50
TODO.md
View File

@@ -52,6 +52,54 @@ Stări: `🔵 planificat` · `🟡 în lucru` · `⛔ blocat` · `✅ gata` · `
## ✅ Gata
### Maria — reset fire de discuție din dashboard
- **De unde a pornit:** un test manual în grupul „Maria Test" a rămas legat de
un fir vechi (Maria trata mesajele ca „firul are eroare X", ancorat pe o
discuție anterioară) și nu exista nicio cale să-l resetezi fără intervenție
directă pe server — nici comandă de chat, nici buton.
- **Ce s-a făcut:** secțiune nouă „Fire de discuție active" în dashboard,
între „Trimise la suport" și „Clienți cunoscuți": listă cu JID, subiect
scurtat, ultima activitate, buton de ștergere cu confirmare. Rutele
`GET /api/maria/fire` și `POST /api/maria/fire/delete` citesc/șterg direct
fișierele din `~/.maria-bridge/conversations/`, cu aceeași sanitizare de
nume de fișier ca `rag/fir.py` (oglindă, nu import — coliziune de modul
`config` între cele două proiecte).
- **De ce listă și nu un buton fix pe grupul de test:** nu există în cod nicio
constantă pentru JID-ul grupului de test — apare doar în README. O listă
acoperă orice fir activ, nu doar unul hardcodat.
- **Verificat:** 6 teste noi (`test_maria_fire.py`), 11/11 cu cele de clienți;
fără regresii pe `test_dashboard.py`.
- **Terminat:** 2026-09-08
### Maria — profil de client (firmă), asociat cu mai multe numere
- **De unde a pornit:** clienții contactează suportul cu întrebări generice
("am o problemă cu factura") fără context — Maria nu știa că un anumit
client e, de exemplu, un service auto care lucrează în RoAuto, deci nu
putea interpreta întrebarea în lumina programului lui.
- **Ce s-a făcut:** un fișier nou (`rag/client.py` + `~/.maria-bridge/clients.json`)
ține profiluri de client (nume, notiță text liberă, listă de numere de
telefon). Un client poate avea mai mulți angajați care scriu de pe numere
diferite — toți găsesc același profil. La fiecare mesaj, profilul se
citește de pe disc (stateless, ca restul Mariei) și intră într-o secțiune
`DESPRE CLIENT` în prompt, înaintea contextului RAG. Administrare prin
dashboard (`discord-bridge/dashboard`, secțiunea „Clienți cunoscuți"),
nu prin comandă în chat — canalul de scriere trebuie autentificat.
- **De ce profilul nu intră în căutare:** pragurile de acoperire din
`rag/rank.py` sunt calibrate pe textul întrebării; a adăuga cuvinte fixe
de profil la fiecare interogare ar strica raportul de termeni distincți
și ar agrava firul deja deschis mai jos ("termenii distinctivi pe
interogarea combinată"). Profilul filtrează interpretarea răspunsului,
nu participă la decizia „am/nu am informația".
- **Mesaje de grup:** dacă cineva scrie într-un grup WhatsApp, se identifică
persoana din `participant`, nu grupul — altfel grupul s-ar putea potrivi
accidental cu primul client găsit.
- **Granița infra:** profilul e strict business (nume firmă, domeniu, program
ROA folosit) — niciodată date tehnice de instalare (server, parole).
Precizare adăugată în `CLAUDE.md`, secțiunea „Maria — GRANIȚĂ OBLIGATORIE".
- **Verificat:** 117 teste (110 existente + 7 noi) în `maria-whatsapp-bridge`,
plus teste noi pentru rutele de dashboard (`test_maria_clients.py`).
- **Terminat:** 2026-09-08
### Maria — rank hibrid, escaladare la suport, dicționar Oracle
- **De unde a pornit:** o captură cu o eroare Oracle a primit un răspuns generic — corect
gramatical, dar despre altă eroare. Nu se putea nici măcar afla ce citise OCR-ul.
@@ -176,6 +224,8 @@ Stări: `🔵 planificat` · `🟡 în lucru` · `⛔ blocat` · `✅ gata` · `
Cea mai recentă intrare prima. O linie per schimbare de stare.
- 2026-09-08 — ✅ Maria: buton de reset pentru firele de discuție active, din dashboard
- 2026-09-08 — ✅ Maria: profil de client (firmă) asociat cu mai multe numere, injectat în prompt
- 2026-09-01 — ✅ Maria: mesajul și captura sunt același lucru; cosinusul singur nu mai e dovadă
- 2026-09-01 — ✅ Maria: „am trimis la suport" doar când puntea chiar a trimis
- 2026-09-01 — 🔵 Maria: termenii distinctivi pe interogarea combinată (planificat)