Canale
Canalele aduc conversații de echipă în Libre WebUI: camere publice/private și mesaje
directe, cu fire, reacții, pins, necitite, atașamente și răspunsuri @model, pe aceeași
bază persistentă criptată ca chat-ul.
Tipuri și membri
| Tip | Cine vede | Cine intră |
|---|---|---|
public | Toți pot naviga | Oricine se înscrie |
private | Numai membrii | Proprietarul invită |
dm | Cei doi participanți | Automat; exact doi |
Calitatea de membru este singura autoritate: orice citire/scriere, download și eveniment o verifică. Non-membrii primesc 404 neenumerabil. Rolul global admin nu acordă acces.
Creatorul este proprietar și poate redenumi, arhiva, invita, elimina, modera și șterge. Proprietarul pleacă ștergând canalul. Există un singur DM per pereche.
Cronologie
Mesajele formează cronologie persistentă ordonată, citită în ambele direcții cu cursoare
(created_at + ID), fără omisiuni sau duplicate.
- Postări idempotente. Clientul dă identitatea; retry ajunge o singură dată.
- Ștergere tombstone. Conținutul dispare, rândul rămâne, păstrând firele și ordinea. Autorii șterg proprii, proprietarii moderează toate.
- Editări doar autor cu
editedAt. - Fire de un nivel. Root poate avea răspunsuri, răspunsurile la răspuns se refuză.
- Reacții per utilizator/emoji fără duplicate.
- Pins administrate de membri.
Numele, descrierile și mesajele sunt criptate în repaus.
Necitite
Fiecare membru are cursor monoton. Backendul calculează per canal (propriile mesaje nu
sunt necitite), iar POST /api/channels/:channelId/read avansează doar înainte.
Livrare live
Orice mutație intră în channel:<id> și se distribuie prin
GET /api/channels/:channelId/events (SSE). Calitatea de membru se recontrolează la
livrare, deci eliminarea închide fluxul. Cronologia SQL rămâne adevărul.
Atașamente
Fișierele se încarcă întâi prin POST /api/channels/:channelId/attachments, stau scurt
în cache de claim și se atașează la postare. Claim-ul este de unică folosință și expiră
în 15 minute. Blobul aparține uploaderului și downloadul reverifică membrul.
Răspunsuri @model
Composerul poate ținti modelul. Răspunsul apare pending și este finalizat de job persistent strict sub identitatea membrului apelant: acces, credentiale și routing proprii, niciodată ale altuia. Membrul eliminat din coadă nu îl păstrează; jobul verifică din nou și afișează eșec. Erorile apar pe răspuns.
Se folosesc până la 30 mesaje ca context. Sunt completări one-shot; unelte, knowledge și web search nu sunt încă integrate.
Limite
| Limită | Valoare |
|---|---|
| Canale per utilizator | 50 |
| Membri per canal | 200 |
| Mesaje per canal | 50,000 |
| Lungime mesaj | 8,000 caractere |
| Atașamente per mesaj | 5 × 10 MB |
| Reacții per mesaj | 200 |
Granițe
- Prezența și typing nu sunt implementate.
- Exportul și retention urmează backupul instanței; nu există export per canal.
- Mențiunile folosesc serviciul de notificare; fără preferință per canal în afară de ieșire.