Kanalen
Kanalen brengen teamgesprekken naar Libre WebUI: openbare en privéruimten plus privéberichten, met threads, reacties, vastgezette berichten, bijhouden van ongelezen berichten, bestandsbijlagen en antwoorden van @model — allemaal op dezelfde duurzame, versleutelde basis als chat.
Kanaaltypen en lidmaatschap
| Type | Wie het kan zien | Wie deelneemt |
|---|---|---|
public | Iedereen kan bladeren | Iedereen kan zichzelf aanmelden |
private | Alleen leden | De eigenaar nodigt leden uit |
dm | Alleen beide deelnemers | Automatisch geopend; altijd precies twee |
Lidmaatschap is de enige autoriteit over kanaalinhoud: elke lees- en schrijfbewerking — inclusief downloads van bijlagen en live levering van gebeurtenissen — controleert eerst het lidmaatschap van de aanroeper. Niet-leden krijgen een 404 die het bestaan niet onthult. De globale beheerdersrol geeft bewust geen toegang tot kanaalinhoud.
De maker van een openbaar of privékanaal is de eigenaar. Eigenaren kunnen het kanaal hernoemen en archiveren, mensen uitnodigen voor een privékanaal, leden verwijderen, berichten modereren en het kanaal verwijderen. Een eigenaar vertrekt door het kanaal te verwijderen, nooit door het achter te laten. Privéberichten worden per paar ontdubbeld: een DM met dezelfde persoon openen leidt altijd naar hetzelfde gesprek.
De tijdlijn
Berichten vormen een duurzame, geordende tijdlijn die met keyset-cursors (created_at plus bericht-ID) in beide richtingen wordt gelezen, zodat paginering nooit vermeldingen overslaat of verdubbelt.
- Idempotente berichten. De client levert de berichtidentiteit; een herhaald verzoek komt precies één keer bij dezelfde tijdlijnvermelding terecht.
- Verwijderen met tombstone. Een bericht verwijderen wist de inhoud maar behoudt de tijdlijnvermelding, zodat threads nooit los komen te hangen en de volgorde niet verschuift. Auteurs verwijderen hun eigen berichten; kanaaleigenaren mogen elk bericht modereren.
- Bewerkingen zijn alleen voor de auteur en krijgen een markering
editedAt. - Threads zijn één niveau diep. Elk hoofdbericht kan een thread bevatten; antwoorden op antwoorden worden geweigerd. Hoofdberichten tonen live aantallen antwoorden.
- Reacties zijn per gebruiker en emoji en worden zonder dubbelen geteld.
- Vastgezette berichten worden door leden beheerd en per kanaal vermeld.
Kanaalnamen, beschrijvingen en berichtinhoud worden bij opslag versleuteld binnen dezelfde grens als chatberichten.
Ongelezen status
Elk lidmaatschap bevat een monotone leescursor. Ongelezen aantallen worden server-side per kanaal berekend (je eigen berichten zijn nooit ongelezen) en POST /api/channels/:channelId/read verplaatst de cursor vooruit, nooit achteruit. Zo kan een verouderde client gelezen berichten niet opnieuw als ongelezen laten verschijnen.
Realtimelevering
Elke wijziging van de tijdlijn wordt aan de duurzame gebeurtenissenstroom channel:<id> toegevoegd en via GET /api/channels/:channelId/events (SSE) verspreid. Voor elke levering wordt het lidmaatschap opnieuw gecontroleerd, zodat de livestream van een verwijderd lid veilig wordt gesloten. De SQL-tijdlijn blijft gezaghebbend: een abonnee die gebeurtenissen heeft gemist leest simpelweg de tijdlijn opnieuw. Het logboek dient voor levering, niet als waarheid.
Bijlagen
Bestanden worden eerst geüpload (POST /api/channels/:channelId/attachments), kort in een gedeelde claimcache geparkeerd en gekoppeld wanneer het bericht wordt geplaatst. Een uploadclaim kan één keer worden gebruikt en vervalt na 15 minuten als deze niet is opgeëist. Blobbytes behoren tot de uploader en tellen mee voor diens quotum; bij elk downloadverzoek wordt het kanaallidmaatschap opnieuw gecontroleerd.
Antwoorden van @model
De opsteller kan een bericht aan een model richten. Het antwoord verschijnt onmiddellijk als een openstaand, door het model geschreven bericht en wordt voltooid via een duurzame taak die strikt onder de identiteit van het aanroepende lid wordt uitgevoerd: diens modeltoegang, providerreferenties en routering — nooit die van de kanaaleigenaar of een ander lid. Een lid dat wordt verwijderd terwijl een vermelding in de wachtrij staat, kan die niet actief houden: de taak controleert het lidmaatschap vóór het genereren opnieuw en legt in plaats daarvan een zichtbare fout vast. Modelfouten verschijnen op het antwoord zelf in plaats van in een wachtrij te verdwijnen.
Een vermelding bereikt het vermelde lid ook per e-mail wanneer die Vermeldingen in kanalen heeft ingeschakeld onder Instellingen → Meldingen en een beheerder de uitgaande mailserver heeft ingesteld (zie Meldingen).
Modelantwoorden gebruiken het recente kanaalgesprek (maximaal 30 berichten) als context.
Chattools zijn gekoppeld: wanneer het vermeldende lid door de toolsfunctiepoort komt en een niet-lege catalogus heeft, doorloopt het antwoord dezelfde meerrondige toollus als een chatbeurt, tegen de eigen zichtbare toolservers en ingebouwde tools van dat lid. Een kanaal is aan geen persona gebonden, dus geen persona-toolkoppeling beperkt de catalogus.
Niemand houdt een vermelding in de gaten zoals iemand een chat volgt, dus een effecttoolaanroep wordt zonder meer geweigerd tenzij het lid al een staande goedkeuring ervoor heeft. Het antwoord meldt dit en zegt dat het model dit vanuit een chat moet uitvoeren. Leestools draaien zonder te vragen, precies zoals in chat. Staande goedkeuringen gelden per kanaal: een "toestaan voor deze chat"-beslissing werkt nooit door in een kanaal, en een goedkeuring per kanaal lekt nooit naar een ander kanaal of naar chat. Omdat alleen leeswerk onbewaakt kan draaien, is een herhaalde vermeldingstaak veilig om te herhalen.
Het antwoord draagt een begrensde samenvatting van de gedane aanroepen (maximaal 12, met ingekorte argumenten en resultaatvoorbeelden), getoond als een onthulling "Gebruikte gereedschappen" onder het bericht. Kennisophaling en zoeken op het web zijn nog steeds niet aan kanaalvermeldingen gekoppeld.
Limieten
| Limiet | Waarde |
|---|---|
| Kanalen gemaakt per gebruiker | 50 |
| Leden per kanaal | 200 |
| Berichten per kanaal | 50,000 |
| Berichtlengte | 8,000 tekens |
| Bijlagen per bericht | 5 × 10 MB |
| Reacties per bericht | 200 |
Grenzen
- Aanwezigheidsindicatoren en typestatus zijn niet geïmplementeerd.
- Export en bewaarbeleid voor kanaalinhoud volgen het back-upverhaal van de instantie; export per kanaal bestaat nog niet.
- Vermeldingen sturen meldingen via de meldingsservice in de app; buiten het verlaten van het kanaal bestaat nog geen meldingsvoorkeur per kanaal.