Представляем плагин Enterprise для Simmetric Chat
SSO с SAML 2.0 и OIDC, провижининг SCIM, неизменяемый журнал аудита, white-label, зашифрованные бэкапы и air-gap-лицензирование для регулируемых команд.
Enterprise — это плагин, а не форк
Самый распространённый способ, которым open-source-проекты поставляют enterprise-уровень, — форк: приватная ветка, которая отдаляется от кодовой базы сообщества, пока обновление не превращается в миграционный проект. Simmetric Chat выбрал другой путь. Enterprise-уровень поставляется как опциональный пакет-плагин — @simmetric-chat/enterprise — загружаемый сервером сообщества при загрузке через загрузчик плагинов. Сервер сообщества зондирует пакет при старте:
- Найден и валиден → плагин регистрирует свои маршруты, и enterprise-функции включаются.
- Не установлен → строка журнала уровня info отмечает сборку сообщества, и сервер продолжает без изменений.
- Найден, но сломан → сервер завершается громко. Сломанная enterprise-установка никогда не деградирует молча до сообщества — наполовину работающий стек SSO хуже, чем никакой.
Та же лицензия управляет уровнем. Кодовая база сообщества — AGPL-3.0; enterprise-плагин — отдельно лицензируемый коммерческий пакет, и лицензионный JWT (LICENSE_KEY) разблокирует функции. Без валидной лицензии enterprise-маршруты всё равно монтируются, но каждая гейтованная функция отвечает 402 с явным JSON-полезной нагрузкой, называющей функцию и уровень, — ваш интеграционный код может ветвиться по состоянию лицензии вместо догадок.
Идентичность: SSO и SCIM из коробки
Единый вход поддерживает два протокола, которые предприятия действительно используют: SAML 2.0 (с login, callback и metadata-эндпоинтами для потоков, инициированных IdP) и OIDC (login и callback для потока перенаправления браузера, построенного на актуальной клиентской библиотеке OpenID Connect). Оба привязаны к одной настраиваемой админом панели SSO.
Конфигурация гибка там, где это важно. OIDC можно настроить полностью из панели SSO админа (хранится зашифрованным в покое в базе данных), полностью из переменных окружения или из обоих — env имеет приоритет, когда задан, поэтому развёртывания infrastructure-as-code могут зафиксировать настройки провайдера, а панель остаётся источником истины в остальных случаях. Встроенные провайдеры покрывают Google, GitHub и Microsoft Entra, а универсальный провайдер принимает любой discovery-документ.
SCIM 2.0 замыкает цикл жизненного цикла: провижининг пользователей и групп по стандартному протоколу SCIM с эндпоинтом, защищённым Bearer-токеном. Когда HR деактивирует пользователя в вашем identity-провайдере, его аккаунт Simmetric Chat деактивируется тем же потоком — никаких осиротевших аккаунтов, никакого депровижининга по электронным таблицам. Вместе SSO и SCIM означают, что ваш IdP остаётся единственной авторитетной инстанцией для того, кто существует и кто может войти.
Журнал аудита, который нельзя переписать
У журналов аудита неудобное свойство: чем они ценнее, тем ценнее их изменить. Enterprise-журнал аудита Simmetric Chat обеспечивает неизменяемость на уровне базы данных, а не на уровне приложения.
Выделенная роль Postgres — simmetric_audit_writer — держит только привилегию INSERT на таблице аудита. Enterprise-плагин пишет события аудита через отдельный пул соединений, аутентифицирующийся как эта роль, поэтому UPDATE и DELETE падают на уровне базы данных, а не по соглашению приложения. Читатели идут сознательно отдельным путём через стандартное соединение приложения, которое имеет SELECT, но является совершенно другой ролью — писатель не может читать, читатель не может писать.
Гарантия честна насчёт собственной конфигурации: когда задан пароль писателя, журнал загрузки подтверждает, что гарантия неизменяемости активна; когда он отсутствует, журнал аудита всё равно записывает события, но предупреждение загрузки сообщает, что неизменяемость на уровне базы не применяется. Отказоустойчивые значения по умолчанию плюс правдивый журнал загрузки — паттерн, который эта платформа использует везде.
Журнал аудита открыт админам через просмотрщик журнала событий, гейтованный лицензионным флагом audit_log_immutable. События аутентификации, операции с документами, изменения настроек, обходы DLP, изменения хранения — след есть ответ на «что фактически произошло?», и он сочетается с историей RBAC сообщества: доступ к самому журналу — это право.
White-label и зашифрованные бэкапы
Две функции нацелены на команды, которые поставляют Simmetric Chat собственным клиентам или запускают его как внутреннюю инфраструктуру со строгими политиками данных:
White-label убирает продуктовый chrome с поверхностей, обращённых к клиенту, — встроенный виджет, стандарты брендинга, кастомизацию на уровне UI — под выделенным лицензионным флагом. Консалтинг, разворачивающий ассистента знаний для клиента, может представить ассистента как собственного клиенту; платформа остаётся на заднем плане.
Бэкапы идут дальше дампов базы: плановые и по запросу задания производят зашифрованные архивы бэкапов, политики хранения решают, что держать и как долго, а разделение прав отделяет тех, кто может настроить назначение, от тех, кто может запустить задание, просматривать журналы или восстанавливать. Последнее различие важно — запустить бэкап и восстановить производственные данные в произвольное пространство — разные уровни доверия, и модель прав трактует их именно так.
Air-gap-лицензирование для регулируемых сред
Среды, которым нужны SSO, неизменяемый аудит и контролируемые бэкапы, часто являются теми же средами без доступа в интернет. Enterprise-лицензирование построено для этого: лицензия — это JWT, подписанный RS256, чей встроенный публичный ключ поставляется вместе с сервером сообщества. Проверка происходит локально — сервер сверяет подпись со встроенным ключом, поэтому никакой лицензионный сервер не должен быть достижим. Задайте LICENSE_KEY в окружении сервера, перезапустите — и функции разблокируются; удалите его — и они закрываются обратно в сообщество с явными ответами 402.
Такая конструкция означает, что enterprise-развёртывание работает целиком внутри дата-центра: локальные LLM через Ollama, локальные векторные хранилища, локальные эмбеддинги, локальный OCR и теперь локальная валидация лицензии. Air-gap — не прикрученный позже деградированный режим; это форма развёртывания, вокруг которой спроектирован этот продукт.
Что это значит для линии v0.22
Линии сообщества и enterprise движутся вместе. Сервер сообщества объявляет enterprise-плагин как опциональную peer-зависимость; загрузчик разрешает его при старте, а общий контекст плагина инжектирует ключевые компоненты (auth, crypto, база данных, логгер), поэтому плагин может зависеть только от общего контракта и никогда — от внутренностей сообщества. Релизы сообщества и enterprise собираются против одной общей версии, и несовпадение версий громко падает при старте, а не ведёт себя неправильно в рантайме.
Для операторов практическое резюме: установите пакет-плагин, задайте валидный LICENSE_KEY, настройте SSO в админ-панели, задайте пароль писателя аудита и перезапустите. Журнал загрузки скажет вам точно, какие из этих шагов удались. Уровень сообщества остаётся AGPL-3.0 и полностью функциональным — SSO, аудит и бэкапы аддитивны поверх него, гейтованы лицензией, а не форком кода.


