From a345b6b39e5ded5592d9716e3dca30eab33eb4fd Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Tue, 8 Sep 2026 11:44:10 +0000 Subject: [PATCH] =?UTF-8?q?todo:=20Maria=20=E2=80=94=20profil=20de=20clien?= =?UTF-8?q?t=20si=20reset=20de=20fire=20(gata)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CLAUDE.md | 5 +++++ TODO.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 195e9a1..d68f6ca 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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. diff --git a/TODO.md b/TODO.md index 5dec397..12ef5d4 100644 --- a/TODO.md +++ b/TODO.md @@ -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)