termisations
Терминальный XMPP-клиент для инженеров, которые обслуживают сервер, а не только переписываются.
attributes
- role
- автор
Решение
Рядом с лентой беседы идет панель сырого 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, контракт модулей отдельным документом.