Совместимость с наследием
NeoTavern сохраняет набор документированных контрактов для существующих расширений эпохи SillyTavern, чтобы плагины, написанные под эти API, могли продолжать работать, пока нативный Plugin SDK остаётся путём в будущее.
Глобальные объекты окна
Пакет @neotavern/legacy-compat устанавливает документированные глобальные
объекты окна, которые ожидают старые расширения:
window.SillyTavern— сgetContext(),eventSourceиevent_types.window.eventSource— устаревший источник событий.window.event_types— константы имён событий.window.extension_settings— общий объект настроек расширений.window.$иwindow.jQuery— встроенный экземпляр jQuery.
Эти глобальные объекты устанавливаются идемпотентно и подключаются к хосту через мост, поэтому устаревший код читает те же контекст и события, что и нативный код.
Неуправляемые DOM-островки
Устаревшие frontend-расширения ожидают владения частью страницы. Для этого хост предоставляет неуправляемые DOM-островки: стабильный контейнер, к которому устаревший код может подключаться и которым может управлять напрямую, вне дерева React. Расширения получают контейнер, а хост обрабатывает остальную часть приложения вокруг него.
Устаревшие серверные плагины
Устаревшие серверные плагины работают через совместимый с Express хост. Их
маршруты проксируются в /api/plugins/{pluginId}/..., в том же пространстве
имён, которое используют нативные backend-плагины. Интеграция
@fastify/express используется только внутри этого слоя совместимости —
новое ядро нативно для Fastify и не маршрутизирует через Express.
Доверенная граница
Устаревшие точки входа — это доверенный режим, а не обход песочницы. Пакет,
который их использует, должен объявить legacy.frontend или legacy.backend
в своём манифесте и запросить разрешение legacy.trusted, которое экран
согласия показывает с усиленным предупреждением. Устаревший frontend-код
выполняется в главном окне, а устаревший backend-код получает роутер Express,
ограниченный собственным пространством имён плагина. Безопасный режим вообще
не загружает устаревшие точки входа. Подробности см. в
Песочнице плагинов и
Манифесте плагина.
Что не поддерживается
Совместимость — это документированный контракт, а не обещание универсального поведения. Плагины, зависящие от любого из перечисленного, не поддерживаются:
- Случайные внутренние имена CSS-классов.
- Монки-патчинг внутренностей приложения.
- Приватные импорты из пакетов, которыми они не владеют.
Это детали реализации, которые меняются между релизами. Когда устаревший API всё же меняется, изменение сопровождается руководством по миграции и тестом совместимости.
Миграция вперёд
Для новой функциональности нативный Plugin SDK — поддерживаемый путь: версионируемый, проверяемый на разрешения, изолированный в песочнице и очищаемый хостом. Совместимость с наследием существует, чтобы поддерживать жизнь существующих расширений, а не для роста. Переносите расширения на SDK, чтобы получить полные гарантии безопасности и жизненного цикла.