Legacy-Kompatibilität
NeoTavern bewahrt eine Reihe dokumentierter Verträge für bestehende Erweiterungen aus der SillyTavern-Ära, damit Plugins, die gegen diese APIs geschrieben wurden, weiter funktionieren können, während das native Plugin SDK der Weg nach vorn ist.
Window-Globals
Das Paket @neotavern/legacy-compat installiert die dokumentierten
Window-Globals, die ältere Erweiterungen erwarten:
window.SillyTavern— mitgetContext(),eventSourceundevent_types.window.eventSource— die Legacy-Ereignisquelle.window.event_types— die Konstanten der Ereignisnamen.window.extension_settings— das gemeinsame Erweiterungseinstellungs-Objekt.window.$undwindow.jQuery— die gebündelte jQuery-Instanz.
Diese Globals werden idempotent installiert und über eine Brücke mit dem Host verbunden, sodass Legacy-Code denselben Kontext und dieselben Ereignisse lesen kann wie nativer Code.
Nicht verwaltete DOM-Inseln
Legacy-Frontend-Erweiterungen erwarten, ein Stück der Seite zu besitzen. Der Host stellt dafür nicht verwaltete DOM-Inseln bereit: einen stabilen Container, an den sich Legacy-Code direkt anbinden und den er direkt manipulieren kann, außerhalb des React-Baums. Erweiterungen erhalten den Container, und der Host verwaltet den Rest der Anwendung darum herum.
Legacy-Server-Plugins
Legacy-Server-Plugins laufen über einen Express-kompatiblen Host. Ihre
Routen werden unter /api/plugins/{pluginId}/... geproxt, also im selben
Namensraum, den native Backend-Plugins verwenden. Die
@fastify/express-Integration wird nur innerhalb dieser
Kompatibilitätsebene verwendet — der neue Kern ist Fastify-nativ und
leitet nicht über Express.
Die Vertrauensgrenze
Legacy-Einstiegspunkte sind ein vertrauter Modus, keine Sandbox-Umgehung.
Ein Paket, das sie verwendet, muss legacy.frontend oder legacy.backend
in seinem Manifest deklarieren und die Berechtigung legacy.trusted
anfordern, die die Einwilligungsoberfläche mit einer verstärkten Warnung
anzeigt. Legacy-Frontend-Code wird im Hauptfenster ausgeführt, und
Legacy-Backend-Code erhält einen Express-Router, der auf seinen eigenen
Plugin-Namensraum beschränkt ist. Der Sichere Modus lädt Legacy-Einstiegs-
punkte überhaupt nicht. Details finden Sie unter
Plugin-Sandboxing und
Plugin-Manifest.
Was nicht unterstützt wird
Kompatibilität ist ein dokumentierter Vertrag, kein Versprechen universellen Verhaltens. Plugins, die von einem der folgenden Punkte abhängen, werden nicht unterstützt:
- Beliebige interne CSS-Klassennamen.
- Monkey-Patching von Anwendungs-Interna.
- Private Importe aus Paketen, die sie nicht besitzen.
Das sind Implementierungsdetails, die sich zwischen Versionen ändern. Wenn sich eine Legacy-API ändert, wird die Änderung mit einem Migrationsleitfaden und einem Kompatibilitätstest ausgeliefert.
Migration nach vorn
Für neue Funktionen ist das native Plugin SDK der unterstützte Weg: versioniert, berechtigungsgeprüft, sandboxed und vom Host bereinigt. Legacy-Kompatibilität existiert, um bestehende Erweiterungen am Leben zu halten, nicht um zu wachsen. Portieren Sie Erweiterungen auf das SDK, um die vollen Sicherheits- und Lebenszyklusgarantien zu erhalten.