termisations

Терминальный XMPP-клиент для инженеров, которые обслуживают сервер, а не только переписываются.

attributes

role
автор
repo
https://github.com/tzx1z/termisations

Решение

Рядом с лентой беседы идет панель сырого XMPP-потока, перехват стоит на уровне сокета, а у каждого сообщения видны метки задействованных расширений. Секреты маскируются по умолчанию: SASL, ключи и тела OMEMO, бандлы PEP, подписи в ссылках загрузки.

Вся работа идет слэш-командами, причем реестр команд - это данные, из которых автоматически строятся справка, автодополнение и палитра. Клиент подключается к настоящему серверу и умеет работать на эмулированном потоке: интерфейс в обоих режимах один и тот же.

  • Панель RAW XML: кольцевой буфер на 2000 строф, батч-рендер, подсветка, фильтр по типу строфы, адресу и пространству имен, бюджет 500 строф в секунду
  • Протокол: XEP-0198 с возобновлением потока, 0280 Carbons, 0313 MAM с постраничным обходом, 0359, 0384 OMEMO, 0045 MUC, 0363 upload, 0424, 0444, 0461
  • Безопасность: маскирование секретов в логе, каталоги 0700 и файлы 0600, отдельный профиль на учетную запись, пароль вне конфига - keyring или внешняя команда
  • Пакетный режим для cron и конвейеров: отправка сообщения или файла без интерфейса, с тем же шифрованием беседы

Стек

Python 3.12+, Textual, slixmpp, SQLite в режиме WAL, asyncio, uv. Лицензия AGPL-3.0-only, выбрана по зависимостям OMEMO.

Результат

mypy --strict, ruff, 930 тестов, живой набор против настоящего ejabberd, контракт модулей отдельным документом.

Все проекты