Kanály
Kanály přinášejí týmové konverzace do Libre WebUI: veřejné a soukromé místnosti i
přímé zprávy s vlákny, reakcemi, připnutím, sledováním nepřečtených, přílohami a
odpověďmi @model — vše na stejných trvalých a šifrovaných základech jako chat.
Typy kanálů a členství
| Typ | Kdo ho vidí | Kdo se připojuje |
|---|---|---|
public | Procházet může každý | Každý se připojí sám |
private | Jen členové | Vlastník zve členy |
dm | Jen dva účastníci | Otevře se automaticky; vždy přesně dva |
Členství je jediným oprávněním k obsahu kanálu. Každé čtení i zápis, včetně stahování příloh a živého doručování událostí, nejprve ověří členství volajícího. Nečlenové obdrží nevyjmenovávající 404. Globální role správce záměrně neposkytuje k obsahu kanálů přístup.
Tvůrce veřejného nebo soukromého kanálu je jeho vlastník. Vlastníci mohou přejmenovat, archivovat, zvát (u soukromého), odebírat členy, moderovat zprávy a kanál smazat. Vlastník odchází smazáním kanálu, nikdy jeho opuštěním. Pro každou dvojici existuje jen jeden kanál přímých zpráv: otevření DM se stejnou osobou vede vždy do stejné konverzace.
Časová osa
Zprávy tvoří trvalou seřazenou časovou osu čtenou oběma směry pomocí kurzorů podle
klíče (created_at plus ID zprávy), takže stránkování položky nikdy nevynechá ani nezdvojí.
- Idempotentní příspěvky. Identitu zprávy dodává klient; opakovaný požadavek dopadne na stejnou položku časové osy právě jednou.
- Odstranění s náhrobkem. Smazání zprávy vymaže obsah, ale zachová položku časové osy, takže vlákna nezůstanou viset a pořadí se neposune. Autoři mažou vlastní zprávy, vlastníci kanálu mohou moderovat všechny.
- Úpravy smí provádět jen autor a nesou značku
editedAt. - Vlákna mají jednu úroveň. Kořenová zpráva může hostit vlákno; odpověď na odpověď se odmítne. Kořenové zprávy zobrazují aktuální počet odpovědí.
- Reakce se vedou pro uživatele a emoji a počítají se bez duplicit.
- Připnutí spravují členové a uvádějí se pro každý kanál.
Názvy, popisy a obsah zpráv kanálů se při uložení šifrují se stejnou hranicí jako zprávy chatu.
Stav nepřečtených
Každé členství má monotónní kurzor čtení. Počet nepřečtených se počítá na serveru pro
jednotlivé kanály (vlastní zprávy nikdy nejsou nepřečtené) a
POST /api/channels/:channelId/read posouvá kurzor jen dopředu. Zastaralý klient proto
nemůže znovu označit přečtené zprávy jako nepřečtené.
Doručování v reálném čase
Každá změna časové osy se přidá do trvalého proudu channel:<id> a rozšíří přes
GET /api/channels/:channelId/events (SSE). Před každým doručením se znovu ověří
členství, takže odebrání člena jeho živý proud bezpečně ukončí. Časová osa SQL zůstává
zdrojem pravdy; odběratel, který zmeškal události, ji jednoduše znovu načte.
Přílohy
Soubory se nejprve nahrají (POST /api/channels/:channelId/attachments), krátce se
odloží do sdílené mezipaměti nároků a připojí se při zveřejnění zprávy. Nárok na nahrání
lze použít jednou a bez uplatnění vyprší za 15 minut. Data blob patří nahrávajícímu
(jeho kvótě) a při každém stažení se znovu ověří členství v kanálu.
Odpovědi @model
Editor může zprávu směrovat modelu. Odpověď se okamžitě zobrazí jako čekající zpráva od modelu a dokončí ji trvalá úloha běžící výhradně pod identitou vyvolávajícího člena: jeho přístup k modelu, přihlašovací údaje poskytovatele a směrování, nikdy údaje vlastníka kanálu nebo jiného člena. Člen odebraný během čekání zmínky ji nemůže udržet při životě. Úloha před generováním znovu ověří členství a místo toho zaznamená viditelné selhání. Chyby modelu se zobrazí přímo na odpovědi.
Odpovědi modelu používají jako kontext nedávnou konverzaci kanálu (nejvýše 30 zpráv). Běží jako jednorázová dokončení. Nástroje chatu, načítání znalostí a webové vyhledávání zatím nejsou do zmínek v kanálu zapojeny.
Limity
| Limit | Hodnota |
|---|---|
| Kanálů vytvořených uživatelem | 50 |
| Členů v kanálu | 200 |
| Zpráv v kanálu | 50,000 |
| Délka zprávy | 8,000 znaků |
| Příloh ke zprávě | 5 × 10 MB |
| Reakcí na zprávu | 200 |
Omezení
- Indikátory přítomnosti a stav psaní nejsou implementovány.
- Export obsahu kanálu a zásady uchovávání následují způsob záloh instance. Export jednotlivých kanálů zatím neexistuje.
- Zmínky oznamuje služba oznámení v aplikaci. Mimo opuštění kanálu zatím neexistuje předvolba oznámení pro jednotlivé kanály.