Kanäle
Kanäle bringen Teamunterhaltungen in Libre WebUI: öffentliche und private Räume
sowie Direktnachrichten mit Threads, Reaktionen, angehefteten Nachrichten,
Ungelesen-Status, Dateianhängen und Antworten von @model – alles auf denselben
dauerhaften, verschlüsselten Grundlagen wie Chats.
Kanaltypen und Mitgliedschaft
| Typ | Sichtbarkeit | Beitritt |
|---|---|---|
public | Für alle durchsuchbar | Jeder kann selbst beitreten |
private | Nur für Mitglieder | Der Eigentümer lädt Mitglieder ein |
dm | Nur für beide Teilnehmer | Automatisch geöffnet; immer genau zwei |
Die Mitgliedschaft ist die einzige Berechtigung für Kanalinhalte: Jeder Lese- und Schreibzugriff – auch Download von Anhängen und Live-Ereignisse – prüft zuerst die Mitgliedschaft. Nichtmitglieder erhalten einen nicht auflistenden 404-Fehler. Die globale Administratorrolle gewährt bewusst keinen Zugriff auf Kanalinhalte.
Der Ersteller eines öffentlichen oder privaten Kanals ist sein Eigentümer. Eigentümer können umbenennen, archivieren, einladen (privat), Mitglieder entfernen, Nachrichten moderieren und den Kanal löschen. Sie verlassen ihn durch Löschen, nicht durch Aufgeben. Direktnachrichten werden pro Paar dedupliziert: Ein DM mit derselben Person führt immer zur selben Unterhaltung.
Zeitleiste
Nachrichten bilden eine dauerhafte, geordnete Zeitleiste, die mit Keyset-Cursorn
(created_at plus Nachrichten-ID) in beide Richtungen gelesen wird. Seiten lassen
dadurch keine Einträge aus und verdoppeln sie nicht.
- Idempotente Beiträge. Der Client liefert die Nachrichtenidentität; eine wiederholte Anfrage landet genau einmal beim selben Eintrag.
- Löschen mit Markierung. Beim Löschen wird der Inhalt entfernt, der Eintrag bleibt jedoch bestehen. Threads hängen dadurch nicht frei und die Reihenfolge verschiebt sich nicht. Autoren löschen eigene Nachrichten, Eigentümer können alle moderieren.
- Bearbeitungen sind nur durch den Autor möglich und tragen
editedAt. - Threads sind eine Ebene tief. Jede Stammnachricht kann einen Thread enthalten; Antworten auf Antworten werden abgelehnt. Stammnachrichten zeigen Live-Zahlen.
- Reaktionen gelten je Benutzer und Emoji und werden ohne Duplikate gezählt.
- Angeheftete Nachrichten werden von Mitgliedern gepflegt und je Kanal gelistet.
Namen, Beschreibungen und Nachrichteninhalte werden im Ruhezustand mit derselben Grenze wie Chatnachrichten verschlüsselt.
Ungelesen-Status
Jede Mitgliedschaft besitzt einen monotonen Lesecursor. Ungelesene Nachrichten
werden serverseitig je Kanal berechnet (eigene Nachrichten sind nie ungelesen), und
POST /api/channels/:channelId/read bewegt den Cursor nur vorwärts. Ein veralteter
Client kann gelesene Nachrichten nicht wiederbeleben.
Echtzeitübertragung
Jede Änderung wird an den dauerhaften Ereignisstrom channel:<id> angehängt und über
GET /api/channels/:channelId/events (SSE) verteilt. Vor jeder Übertragung wird die
Mitgliedschaft erneut geprüft, sodass das Entfernen eines Mitglieds seinen Stream
sicher schließt. Die SQL-Zeitleiste bleibt maßgeblich: Ein Abonnent mit verpassten
Ereignissen liest sie erneut – das Ledger dient der Übertragung, nicht der Wahrheit.
Anhänge
Dateien werden zuerst hochgeladen (POST /api/channels/:channelId/attachments),
kurz in einem gemeinsamen Claim-Cache geparkt und beim Veröffentlichen angehängt.
Ein Upload-Claim ist einmalig und verfällt nach 15 Minuten ungenutzt. Blob-Bytes
gehören dem Uploader (und zählen zu seinem Kontingent); jeder Download prüft die
Mitgliedschaft erneut.
Antworten von @model
Der Editor kann eine Nachricht an ein Modell richten. Die Antwort erscheint sofort als ausstehende, vom Modell verfasste Nachricht und wird durch einen dauerhaften Job streng unter der Identität des aufrufenden Mitglieds abgeschlossen: dessen Modellzugriff, Anmeldedaten und Routing, niemals die des Eigentümers oder eines anderen Mitglieds. Wird das Mitglied während der Warteschlange entfernt, prüft der Job vor der Erzeugung erneut und vermerkt sichtbar einen Fehler. Modellfehler stehen an der Antwort, statt in einer Warteschlange zu verschwinden.
Antworten verwenden die jüngste Kanalunterhaltung (bis zu 30 Nachrichten) als Kontext und laufen als einmalige Vervollständigungen. Chat-Werkzeuge, Wissensabruf und Websuche sind noch nicht mit Kanalerwähnungen verbunden.
Grenzwerte
| Limit | Wert |
|---|---|
| Erstellte Kanäle pro Benutzer | 50 |
| Mitglieder pro Kanal | 200 |
| Nachrichten pro Kanal | 50,000 |
| Nachrichtenlänge | 8,000 Zeichen |
| Anhänge pro Nachricht | 5 × 10 MB |
| Reaktionen pro Nachricht | 200 |
Grenzen
- Anwesenheitsanzeigen und Tippstatus sind nicht implementiert.
- Export und Aufbewahrung folgen dem Sicherungskonzept der Instanz; einen Export pro Kanal gibt es noch nicht.
- Erwähnungen benachrichtigen über den integrierten Dienst. Abgesehen vom Verlassen eines Kanals gibt es noch keine kanalspezifischen Einstellungen.