Przejdź do głównej zawartości

Kanały

Kanały przenoszą rozmowy zespołowe do Libre WebUI: publiczne i prywatne pokoje oraz wiadomości bezpośrednie z wątkami, reakcjami, przypięciami, śledzeniem nieprzeczytanych, załącznikami i odpowiedziami @model — na tej samej trwałej, szyfrowanej podstawie co czat.

Typy kanałów i członkostwo

TypKto widziKto dołącza
publicKażdy może przeglądaćKażdy dołącza samodzielnie
privateTylko członkowieWłaściciel zaprasza członków
dmTylko dwie osobyOtwierany automatycznie; zawsze dokładnie dwie

Członkostwo jest jedyną podstawą dostępu do treści kanału: każdy odczyt i zapis — w tym pobieranie załączników i dostarczanie zdarzeń na żywo — najpierw sprawdza członkostwo wywołującego. Osoby z zewnątrz otrzymują nieujawniający 404. Globalna rola administratora celowo nie daje dostępu do treści kanałów.

Twórca kanału publicznego lub prywatnego jest jego właścicielem. Właściciel zmienia nazwę, archiwizuje, zaprasza do kanału prywatnego, usuwa członków, moderuje wiadomości i usuwa kanał; opuszcza go przez usunięcie, nie porzucenie. Wiadomości bezpośrednie są deduplikowane dla pary: otwarcie DM z tą samą osobą zawsze prowadzi do tej samej rozmowy.

Oś czasu

Wiadomości tworzą trwałą, uporządkowaną oś czasu odczytywaną w obu kierunkach kursorami keyset (created_at i identyfikator wiadomości), więc stronicowanie niczego nie pomija ani nie powiela.

  • Idempotentne publikowanie. Klient podaje tożsamość wiadomości; ponowione żądanie trafia dokładnie raz do tej samej pozycji.
  • Usunięcie z nagrobkiem. Usunięcie czyści treść, ale zachowuje pozycję, więc wątki nie tracą korzenia i kolejność się nie przesuwa. Autorzy usuwają własne wiadomości, właściciel może moderować wszystkie.
  • Edycja jest tylko dla autora i dodaje znacznik editedAt.
  • Wątki mają jeden poziom. Każda wiadomość główna może mieć wątek; odpowiedzi na odpowiedzi są odrzucane. Główna wiadomość pokazuje bieżącą liczbę odpowiedzi.
  • Reakcje są liczone per użytkownik i emoji, bez duplikatów.
  • Przypięcia są zarządzane przez członków i wyświetlane dla kanału.

Nazwy, opisy i treści wiadomości są szyfrowane w spoczynku w tej samej granicy co wiadomości czatu.

Stan nieprzeczytanych

Każde członkostwo ma monotoniczny kursor odczytu. Liczba nieprzeczytanych jest obliczana po stronie serwera per kanał (własne wiadomości nigdy nie są nieprzeczytane), a POST /api/channels/:channelId/read przesuwa kursor tylko naprzód, więc stary klient nie przywróci przeczytanych wiadomości.

Dostarczanie w czasie rzeczywistym

Każda zmiana osi trafia do trwałego strumienia channel:<id> i jest rozsyłana przez GET /api/channels/:channelId/events (SSE). Członkostwo jest ponownie sprawdzane przed każdym dostarczeniem, więc usunięcie członka bezpiecznie zamyka jego strumień. Oś SQL pozostaje źródłem prawdy: brakujące zdarzenia odzyskuje się przez ponowny odczyt. Rejestr służy do dostarczania, nie jako prawda.

Załączniki

Pliki są najpierw przesyłane (POST /api/channels/:channelId/attachments), krótko czekają we wspólnej pamięci roszczeń i są dołączane przy publikacji. Roszczenie jest jednorazowe i wygasa po 15 minutach. Bajty blobu należą do przesyłającego i obciążają jego limit; pobieranie za każdym razem sprawdza członkostwo.

Odpowiedzi @model

Kompozytor może skierować wiadomość do modelu. Odpowiedź natychmiast pojawia się jako oczekująca wiadomość modelu i jest kończona trwałym zadaniem wykonywanym ściśle z tożsamością wywołującego członka: jego dostępem do modeli, poświadczeniami i routingiem — nigdy właściciela kanału lub innej osoby. Członek usunięty podczas oczekiwania nie utrzyma wzmianki: zadanie ponownie sprawdzi członkostwo i zapisze widoczny błąd. Błędy modelu pojawiają się na odpowiedzi, nie znikają w kolejce.

Odpowiedzi używają ostatnich maksymalnie 30 wiadomości jako kontekstu. Są pojedynczymi uzupełnieniami: narzędzia czatu, pobieranie wiedzy i wyszukiwanie internetowe nie są jeszcze podłączone do wzmianek.

Limity

LimitWartość
Kanały utworzone na użytkownika50
Członkowie na kanał200
Wiadomości na kanał50,000
Długość wiadomości8,000 znaków
Załączniki na wiadomość5 × 10 MB
Reakcje na wiadomość200

Granice

  • Wskaźniki obecności i pisania nie są zaimplementowane.
  • Eksport treści i retencja wynikają z kopii zapasowych instancji; nie ma eksportu per kanał.
  • Wzmianki powiadamiają przez usługę w aplikacji; poza opuszczeniem kanału nie ma jeszcze preferencji per kanał.