レガシー互換
NeoTavern は、既存の SillyTavern 時代の拡張機能向けに文書化されたコントラクトのセットを保持しています。これにより、ネイティブの Plugin SDK が前進する道である一方、それらの API に対して書かれたプラグインは引き続き動作できます。
ウィンドウグローバル
@neotavern/legacy-compat パッケージは、古い拡張機能が期待する文書化されたウィンドウグローバルをインストールします:
window.SillyTavern—getContext()、eventSource、event_types付き。window.eventSource— レガシーイベントソース。window.event_types— イベント名の定数。window.extension_settings— 共有の拡張機能設定オブジェクト。window.$とwindow.jQuery— 同梱の jQuery インスタンス。
これらのグローバルは冪等にインストールされ、ブリッジを通じてホストに接続されるため、レガシーコードはネイティブコードと同じコンテキストとイベントを読み取れます。
管理外の DOM アイランド
レガシーフロントエンド拡張機能は、ページの一部を所有することを期待します。ホストはこの目的のために管理外の DOM アイランドを提供します: レガシーコードが React ツリーの外で直接接続して操作できる安定したコンテナです。拡張機能はコンテナを取得し、ホストはその周りのアプリケーションの残りを処理します。
レガシーサーバープラグイン
レガシーサーバープラグインは Express 互換ホストを通じて実行されます。それらのルートは /api/plugins/{pluginId}/... の下にプロキシされ、ネイティブのバックエンドプラグインと同じ名前空間に一致します。@fastify/express 統合はこの互換レイヤー内でのみ使用されます — 新しいコアは Fastify ネイティブであり、Express 経由でルーティングしません。
信頼された境界
レガシーエントリポイントはサンドボックス回避ではなく、信頼されたモードです。それらを使用するパッケージは、マニフェストで legacy.frontend または legacy.backend を宣言し、legacy.trusted 権限を要求する必要があります。同意 UI はこれを強化された警告付きで表示します。レガシーフロントエンドコードはメインウィンドウで実行され、レガシーバックエンドコードは自身のプラグイン名前空間にスコープされた Express ルーターを取得します。セーフモードはレガシーエントリポイントを一切読み込みません。詳細はプラグインのサンドボックス化 とプラグインマニフェスト を参照してください。
サポートされないもの
互換性は文書化されたコントラクトであり、万能の動作の約束ではありません。次のいずれかに依存するプラグインはサポートされません:
- ランダムな内部 CSS クラス名。
- アプリケーション内部のモンキーパッチ。
- 所有していないパッケージからのプライベートインポート。
これらは実装の詳細であり、リリース間で変更されます。レガシー API が変更される場合、その変更にはマイグレーションガイドと互換性テストが付属します。
前進するための移行
新しい機能には、ネイティブのプラグイン SDK がサポートされる経路です: バージョン管理され、権限チェックされ、サンドボックス化され、ホストによってクリーンアップされます。レガシー互換は既存の拡張機能を生かし続けるためのものであり、成長のためのものではありません。完全なセキュリティとライフサイクルの保証を得るには、拡張機能を SDK に移植してください。