Zum Hauptinhalt springen

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

TypSichtbarkeitBeitritt
publicFür alle durchsuchbarJeder kann selbst beitreten
privateNur für MitgliederDer Eigentümer lädt Mitglieder ein
dmNur für beide TeilnehmerAutomatisch 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

LimitWert
Erstellte Kanäle pro Benutzer50
Mitglieder pro Kanal200
Nachrichten pro Kanal50,000
Nachrichtenlänge8,000 Zeichen
Anhänge pro Nachricht5 × 10 MB
Reaktionen pro Nachricht200

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.