Kanaler
Kanaler för in teamkonversationer i Libre WebUI: publika och privata rum samt
direktmeddelanden, med trådar, reaktioner, fästa meddelanden, spårning av olästa,
filbilagor och @model-svar — allt på samma beständiga, krypterade grund som chatt.
Kanaltyper och medlemskap
| Typ | Vem kan se den | Vem går med |
|---|---|---|
public | Alla kan bläddra i den | Vem som helst går med själv |
private | Endast medlemmar | Ägaren bjuder in medlemmar |
dm | Endast de två deltagarna | Öppnas automatiskt; alltid exakt två personer |
Medlemskap är den enda behörigheten för kanalinnehåll. Varje läsning och skrivning — inklusive hämtning av bilagor och leverans av direkthändelser — kontrollerar först anroparens medlemskap. Icke-medlemmar får ett 404-svar som inte avslöjar om resursen finns. Den globala administratörsrollen ger avsiktligt ingen åtkomst till kanalinnehåll.
Skaparen av en publik eller privat kanal är dess ägare. Ägare kan byta namn, arkivera, bjuda in (privat), ta bort medlemmar, moderera meddelanden och radera kanalen. En ägare lämnar genom att radera kanalen, aldrig genom att överge den. Det finns bara en direktmeddelandekanal per deltagarpar: om du öppnar ett DM med samma person hamnar du alltid i samma konversation.
Tidslinjen
Meddelanden bildar en beständig, ordnad tidslinje som läses med nyckelbaserade
markörer (created_at plus meddelande-ID) i båda riktningarna, så sidindelning
aldrig hoppar över eller duplicerar poster.
- Idempotenta inlägg. Klienten anger meddelandets identitet. En förfrågan som görs om hamnar exakt en gång på samma tidslinjepost.
- Borttagning med gravsten. När ett meddelande tas bort rensas innehållet men tidslinjeposten behålls, så trådar aldrig blir lösa och ordningen inte ändras. Författare raderar egna meddelanden, och kanalägare kan moderera alla.
- Redigeringar är endast för författaren och har markören
editedAt. - Trådar har ett djup. Alla rotmeddelanden kan ha en tråd, men svar på svar avvisas. Rotmeddelanden visar aktuellt antal svar.
- Reaktioner är per användare och emoji och räknas utan dubbletter.
- Fästa meddelanden hanteras av medlemmar och listas per kanal.
Kanalnamn, beskrivningar och meddelandeinnehåll krypteras vid lagring med samma gräns som chattmeddelanden.
Oläst status
Varje medlemskap har en monotont ökande läsmarkör. Antalet olästa beräknas på
serversidan per kanal (dina egna meddelanden är aldrig olästa), och
POST /api/channels/:channelId/read flyttar markören framåt — aldrig bakåt — så
en inaktuell klient kan inte göra lästa meddelanden olästa igen.
Realtidsleverans
Varje ändring i tidslinjen läggs till i den beständiga händelseströmmen
channel:<id> och sprids över GET /api/channels/:channelId/events (SSE).
Medlemskapet kontrolleras före varje leverans, så borttagning av en medlem stänger
dess direktsändning säkert. SQL-tidslinjen förblir sanningskällan. En prenumerant
som missat händelser läser bara tidslinjen igen — liggaren används för leverans,
inte som sanning.
Bilagor
Filer laddas upp först (POST /api/channels/:channelId/attachments), placeras kort
i en gemensam anspråkscache och bifogas när meddelandet publiceras. Ett uppladdningsanspråk
kan användas en gång och löper ut efter 15 minuter om det inte tas i anspråk. Blobdata tillhör
uppladdaren (dess kvot), och medlemskap kontrolleras på nytt vid varje hämtning.
@model-svar
Redigeraren kan rikta ett meddelande till en modell. Svaret visas omedelbart som ett väntande modellförfattat meddelande och slutförs genom ett beständigt jobb som körs strikt under den anropande medlemmens identitet: dess modellåtkomst, leverantörsuppgifter och dirigering — aldrig kanalägarens eller en annan medlems. En medlem som tas bort medan ett omnämnande väntar kan inte hålla det vid liv. Jobbet kontrollerar medlemskapet igen före generering och registrerar ett synligt fel i stället. Modellfel visas på själva svaret i stället för att försvinna i en kö.
Modellsvar använder den senaste kanalkonversationen (upp till 30 meddelanden) som kontext. De körs som engångskompletteringar. Chattverktyg, kunskapshämtning och webbsökning är ännu inte anslutna till kanalomnämnanden.
Gränser
| Gräns | Värde |
|---|---|
| Kanaler skapade per användare | 50 |
| Medlemmar per kanal | 200 |
| Meddelanden per kanal | 50,000 |
| Meddelandelängd | 8,000 tecken |
| Bilagor per meddelande | 5 × 10 MB |
| Reaktioner per meddelande | 200 |
Avgränsningar
- Närvaroindikatorer och skrivstatus är inte implementerade.
- Export av kanalinnehåll och lagringspolicyer följer instansens säkerhetskopieringsmodell. Export per kanal finns ännu inte.
- Omnämnanden aviseras genom aviseringstjänsten i appen. Det finns ännu ingen aviseringsinställning per kanal utöver att lämna kanalen.