Hoppa till huvudinnehåll

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​

TypVem kan se denVem går med
publicAlla kan bläddra i denVem som helst går med själv
privateEndast medlemmarÄgaren bjuder in medlemmar
dmEndast 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änsVärde
Kanaler skapade per användare50
Medlemmar per kanal200
Meddelanden per kanal50,000
Meddelandelängd8,000 tecken
Bilagor per meddelande5 × 10 MB
Reaktioner per meddelande200

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.