feat(maria): asociere prin cod de telefon si citirea capturilor cu erori

Doua lucruri cerute de utilizator, ambele pe acelasi drum: sa poti lega
puntea fara sa ai un ecran de scanat, si sa poti trimite Mariei o poza cu
eroarea in loc sa transcrii mesajul.

Asociere prin cod de 8 caractere (alternativa la QR):
- endpoint-ul /pair exista, dar nu era folosibil: fara `browser` explicit
  WhatsApp refuza codul, iar dupa introducerea lui corecta serverul cere un
  restart (515) care consuma din bugetul de reincercari si putea opri puntea.
  Acum descriptorul e Browsers.ubuntu('Chrome') si restartRequired reconecteaza
  imediat, fara sa numere.
- codul are TTL de 3 minute, iar /status il da doar cat timp e valabil —
  un cod expirat afisat in dashboard trimite omul sa tasteze degeaba.
- dashboard: camp pentru numar + buton, in acelasi card cu QR-ul.

Imagini cu erori (capturi de ecran):
- puntea descarca imaginile in ~/.maria-bridge/media/ (imageMessage sau
  document cu mimetype image/*, si prin ambalajele efemer/"vezi o data" —
  fara despachetare pareau mesaje fara continut si se aruncau tacut).
- rag/ocr.py: tesseract ron+eng. Modelul de raspuns e strict text, deci OCR
  nu e o optiune de calitate, e singura cale.
- cautarea in index merge DOAR pe liniile care arata a eroare; o fereastra
  intreaga de meniuri si totaluri dilueaza embedding-ul si scoate chunk-uri
  fara legatura. Modelul primeste captura intreaga, marcata ca text OCR.
- capturile se sterg imediat dupa citire (pot contine date de client).
- cand nu se citeste nimic si nu exista legenda, Maria cere textul erorii
  in loc sa raspunda in gol.

16 teste noi (42 in total). install.sh verifica tesseract; README documenteaza
ambele metode de asociere si drumul unei capturi.

Separat, in docs/chatboti-si-punti.md: chatul "Eu" e vazut de AMBELE punti de pe
numar. Puntea lui Echo (LXC 110) e asociata ca dispozitiv :11 al aceluiasi cont,
momentan nelegata dar pornita — daca se reasociaza, raspunde in "Eu" langa Maria.
Notat si ca serviciile lui Echo sunt unitati de UTILIZATOR: `systemctl is-active`
ca root raspunde "inactive" desi botul ruleaza.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
Claude Agent
2026-08-31 21:22:28 +00:00
parent f5c8df7adf
commit 7a1d2a2073
12 changed files with 733 additions and 36 deletions

View File

@@ -141,10 +141,33 @@ tail -20 ~/.maria-bridge/logs/rag.log
curl -s http://10.0.20.161:8091/v1/models
```
**Regula:** WhatsApp-ul lui Echo (LXC 110) și cel al Mariei (LXC 104) sunt legate la
**Regula:** WhatsApp-ul lui Echo (LXC 110) și cel al Mariei (LXC 171) sunt legate la
**același număr**, `+40723197939`, ca dispozitive diferite ale aceluiași cont. Un mesaj
poate ajunge la ambele. Dacă primești două răspunsuri, două punți sunt active simultan.
### Chatul „Eu" (self-chat) le vede amândouă
Ambele punți sunt *dispozitive conectate* ale aceluiași cont, deci **amândouă primesc și
mesajele din chatul cu tine însuți**. Nu există o setare care să dea self-chat-ul doar
uneia — separarea trebuie făcută oprind una din punți.
Starea la 2026-08-31, verificată: puntea lui Echo era asociată ca dispozitiv `:11` al
numărului (`auth/creds.json` → `me.id = 40723197939:11`) și a răspuns în „Eu" până
dimineața, când sesiunea i-a căzut (`registered: false`, `connected: false`). Serviciul
rulează în continuare și `echo-core` îi cere mesajele la câteva minute — dacă cineva îl
reasociază, Echo revine în „Eu" lângă Maria, fără niciun avertisment.
Pentru a-l scoate definitiv din WhatsApp (Telegram și Discord rămân neatinse):
```bash
ssh root@10.0.20.200 "pct exec 110 -- sudo -u moltbot XDG_RUNTIME_DIR=/run/user/1000 \
systemctl --user disable --now echo-whatsapp-bridge"
```
**Atenție la scope-ul systemd pe LXC 110:** serviciile lui Echo sunt unități de
**utilizator** (`moltbot`, uid 1000). Un `systemctl is-active echo-core` rulat ca root
răspunde `inactive` deși botul rulează — exact genul de răspuns care trimite diagnosticul
pe pistă falsă. Folosește forma de mai sus, cu `--user` și `XDG_RUNTIME_DIR`.
---
## Capcane