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ö.
Ett omnämnande når också den omnämnda medlemmen via e-post när de har slagit på Omnämnanden i kanaler under Inställningar → Aviseringar och en administratör har konfigurerat en server för utgående e-post (se Aviseringar).
Modellsvar använder den senaste kanalkonversationen (upp till 30 meddelanden) som kontext.
Chattverktyg är inkopplade: när den omnämnande medlemmen klarar funktionsgrinden för verktyg och har en icke-tom katalog kör svaret samma verktygsloop med flera rundor som en chattur kör, mot den medlemmens egna synliga verktygsservrar och inbyggda verktyg. En kanal binder ingen persona, så ingen personabindning för verktyg begränsar katalogen.
Ingen övervakar ett omnämnande på det sätt någon övervakar en chatt, så ett verktygsanrop med sidoeffekt avvisas direkt om inte medlemmen redan har ett stående godkännande för det. Svaret säger det, och modellen uppmanas att köra det från en chatt i stället. Skrivskyddade verktyg körs utan att fråga, precis som i chatten. Stående godkännanden avgränsas per kanal: ett "tillåt för den här chatten"-beslut förs aldrig över till en kanal, och ett godkännande per kanal läcker aldrig till en annan kanal eller till chatten. Eftersom bara skrivskyddat arbete kan köras obevakat är ett omprövat omnämnandejobb säkert att köra igen.
Svaret bär en begränsad sammanfattning av de anrop det gjorde (högst 12, med trunkerade argument och resultatförhandsvisningar), visad som en utfällbar ruta "Tools used" under meddelandet. Kunskapshämtning och webbsökning är fortfarande 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.