Canali
I canali portano le conversazioni del team in Libre WebUI: stanze pubbliche e private e messaggi diretti, con thread, reazioni, elementi fissati, monitoraggio dei messaggi non letti, allegati e risposte di @model, il tutto sulle stesse fondamenta persistenti e crittografate delle chat.
Tipi di canale e appartenenza
| Tipo | Chi può vederlo | Chi partecipa |
|---|---|---|
public | Tutti possono esplorarlo | Chiunque può iscriversi autonomamente |
private | Soltanto i membri | Il proprietario invita i membri |
dm | Soltanto i due partecipanti | Aperto automaticamente; sempre esattamente due |
L'appartenenza è l'unica autorità sui contenuti del canale: ogni lettura e scrittura, compresi i download degli allegati e la distribuzione degli eventi in tempo reale, verifica prima che il chiamante sia un membro; chi non lo è riceve un errore 404 che non rivela l'esistenza della risorsa. Il ruolo di amministratore globale non concede intenzionalmente alcun accesso ai contenuti dei canali.
Il creatore di un canale pubblico o privato ne è il proprietario. I proprietari possono rinominare e archiviare il canale, invitare persone nei canali privati, rimuovere membri, moderare messaggi ed eliminare il canale; un proprietario esce eliminando il canale, mai abbandonandolo. I messaggi diretti sono deduplicati per coppia: aprire un DM con la stessa persona conduce sempre alla stessa conversazione.
Timeline
I messaggi formano una timeline permanente e ordinata, letta in entrambe le direzioni tramite cursori keyset (created_at più l'ID del messaggio), così la paginazione non salta né duplica mai le voci.
- Pubblicazioni idempotenti. Il client fornisce l'identità del messaggio; una richiesta ripetuta raggiunge esattamente una volta la stessa voce della timeline.
- Eliminazione con tombstone. Eliminare un messaggio ne cancella il contenuto ma conserva la voce nella timeline, così i thread non restano senza riferimento e l'ordine non cambia. Gli autori eliminano i propri messaggi; i proprietari del canale possono moderarli tutti.
- Le modifiche sono riservate all'autore e riportano un indicatore
editedAt. - I thread hanno un solo livello. Qualsiasi messaggio radice può ospitare un thread; le risposte alle risposte vengono rifiutate. I messaggi radice riportano il conteggio delle risposte in tempo reale.
- Le reazioni sono univoche per utente e per emoji e vengono contate senza duplicati.
- Gli elementi fissati sono gestiti dai membri ed elencati per canale.
Nomi e descrizioni dei canali e contenuto dei messaggi vengono crittografati quando sono archiviati, con lo stesso confine applicato ai messaggi delle chat.
Stato di lettura
Ogni appartenenza include un cursore di lettura monotono. I conteggi dei messaggi non letti vengono calcolati lato server per ciascun canale (i tuoi messaggi non risultano mai non letti) e POST /api/channels/:channelId/read fa avanzare il cursore senza mai arretrarlo, così un client obsoleto non può far riapparire messaggi già letti.
Distribuzione in tempo reale
Ogni modifica della timeline viene aggiunta al flusso di eventi permanente channel:<id> e distribuita tramite GET /api/channels/:channelId/events (SSE). L'appartenenza viene ricontrollata prima di ogni distribuzione, quindi la rimozione di un membro chiude in modo sicuro il suo flusso in tempo reale. La timeline SQL resta autorevole: un abbonato che perde eventi rilegge semplicemente la timeline; il registro serve alla distribuzione, non rappresenta la verità.
Allegati
I file vengono prima caricati (POST /api/channels/:channelId/attachments), rimangono brevemente in una cache condivisa delle rivendicazioni e vengono allegati quando si pubblica il messaggio; una rivendicazione di caricamento può essere usata una sola volta e scade dopo 15 minuti se non viene usata. I byte dei blob appartengono all'utente che li carica e consumano la sua quota; ogni richiesta di download verifica di nuovo l'appartenenza al canale.
Risposte di @model
Il compositore può indirizzare un messaggio a un modello. La risposta appare immediatamente come messaggio in sospeso scritto dal modello e viene completata tramite un processo permanente eseguito rigorosamente con l'identità del membro che lo ha invocato: accesso ai modelli, credenziali dei provider e routing sono quelli di tale membro, mai quelli del proprietario del canale o di un altro membro. Se un membro viene rimosso mentre una menzione è in coda, non può mantenerla attiva: il processo ricontrolla l'appartenenza prima della generazione e registra invece un errore visibile. Gli errori del modello appaiono direttamente sulla risposta anziché scomparire in una coda.
Una menzione raggiunge anche il membro menzionato via email quando ha attivato Menzioni nei canali in Impostazioni → Notifiche e un amministratore ha configurato il server di posta in uscita (vedi Notifiche).
Le risposte dei modelli usano come contesto la conversazione recente del canale, fino a 30 messaggi.
Gli strumenti di chat sono collegati: quando il membro che menziona supera il gate della funzionalità strumenti e ha un catalogo non vuoto, la risposta esegue lo stesso loop multi-round di strumenti di un turno di chat, sui server di strumenti e sugli strumenti integrati visibili a quel membro. Un canale non associa alcun personaggio, quindi nessun'associazione di strumenti di un personaggio restringe il catalogo.
Nessuno sta osservando una menzione come si osserva una chat, quindi una chiamata a uno strumento con effetti collaterali viene rifiutata direttamente a meno che il membro non possieda già un'approvazione duratura per quello strumento. La risposta lo segnala, e al modello viene detto di eseguirlo invece da una chat. Gli strumenti in sola lettura eseguono senza chiedere, esattamente come in chat. Le approvazioni durature sono limitate per canale: una decisione «consenti per questa chat» non si estende mai a un canale, e un'approvazione per canale non si propaga mai a un altro canale né alla chat. Poiché solo il lavoro in sola lettura può eseguire senza sorveglianza, un job di menzione ripetuto è sicuro da rieseguire.
La risposta porta un riepilogo limitato delle chiamate effettuate (al massimo 12, con argomenti e anteprime dei risultati troncati), mostrato come riquadro a scomparsa «Strumenti usati» sotto il messaggio. Il recupero delle conoscenze e la ricerca web non sono ancora collegati alle menzioni nei canali.
Limiti
| Limite | Valore |
|---|---|
| Canali creati per utente | 50 |
| Membri per canale | 200 |
| Messaggi per canale | 50,000 |
| Lunghezza del messaggio | 8,000 caratteri |
| Allegati per messaggio | 5 × 10 MB |
| Reazioni per messaggio | 200 |
Confini
- Gli indicatori di presenza e lo stato di digitazione non sono implementati.
- L'esportazione dei contenuti dei canali e i criteri di conservazione seguono la strategia di backup dell'istanza; non esiste ancora un'esportazione per singolo canale.
- Le menzioni generano notifiche tramite il servizio di notifiche interno all'app; non esiste ancora una preferenza di notifica per canale, se non l'uscita dal canale.