メインコンテンツまでスキップ

プラグイン権限

権限は、ユーザーがプラグインに何を許可するかを決めるメカニズムです。チャット履歴の読み取りからネットワークリクエストまでを対象とします。

権限モデル

権限はケイパビリティに名前を付ける文字列です。マニフェストでの宣言はリクエストであり、自動アクセスではありません: プラグインがアクティブになる前に、ユーザーは要求されたすべての権限を確認する必要があり、ホストは使用のたびに付与を強制します。

組み込みセットは安定したバージョン管理されたコントラクトです:

権限付与されるもの
chat.readチャットメッセージとそのメタデータを読む
chat.writeチャットメッセージを作成または変更する
characters.readキャラクターとキャラクターカードを読む
characters.writeキャラクターを作成または変更する
lorebook.readロアブックエントリを読む
lorebook.writeロアブックエントリを作成または変更する
prompt.inspect組み立てられたプロンプトを検査する
prompt.modifyプロンプトを変更するか、生成出力を後処理する
providers.registerプロバイダーアダプターとトークナイザーを登録する
ui.toolbarツールバーアクションを追加する
ui.sidebarサイドバーパネルを追加する
ui.messageActionsメッセージアクションを追加する
ui.shellシェルスロットにコンテンツを追加する
clipboard.readクリップボードを読む
clipboard.writeクリップボードに書き込む
notifications通知を表示する
server.routesバックエンドルートをマウントする
legacy.trusted信頼されたコンテキストで文書化された SillyTavern レガシーコードを実行する

スコープ付き権限

一部の権限は kind:scope として書かれるスコープを持ちます:

  • network:<hostname> — 特定のホストからの取得権限。例: network:api.example.com。付与されていないホストへのリクエストは拒否されます。
  • network:* — 任意のホストからの取得を許可するワイルドカード。ホストはこれを完全なネットワークアクセスとして扱い、同意 UI は強化された警告付きで表示します。具体的なホストを列挙することを推奨し、ワイルドカードを要求するプラグインの公開は推奨されません。
  • files:plugin — プラグイン自身のデータディレクトリ内での読み書き。
  • files:user-selected — ユーザーが明示的に選択したファイルへのアクセス。

hasPermission は付与されたセットを必須権限に対してチェックし、parsePermissionkind:scope 文字列を部分に分割します。validatePermissions 関数は空、重複、未知の権限などの不正な文字列を拒否します。

付与の強制方法

権限の宣言だけでは不十分で、ホストは強制ポイントで付与を適用します:

  • UI 登録はマウント前に ui.* 権限をチェックします。
  • ルートは server.routes をチェックします。
  • 権限チェック付きの fetchnetwork:<host> をチェックします。
  • 仮想ファイルシステムは files:* をチェックします。
  • プロバイダーとコンテキスト API は providers.registerprompt.modify をチェックします。

ケイパビリティカーネル(@neotavern/plugin-sdkkernel 名前空間)は、Web ホストとサーバーの両方で付与をチェックする共有レイヤーです。ブラウザとバックエンドは常に同じ実効権限を見ることになります。付与は単調増加のリビジョンで保存され、ブートストラップハンドシェイク中にサンドボックスへ配信され、実行時に取り消せます。実行中の操作は CAPABILITY_REVOKED エラーで完了し、開いているハンドルはホストが閉じます。

インストール時の同意とアップデート時の再同意

インストールは要求された権限の完全な一覧を表示します。プラグインはすべての権限を確認するまで needs-consent 状態のままで、パッケージが npm 依存関係を同梱する場合、UI は依存関係の一覧を表示します。

プラグインのアップデートは権限チェックにとって新しいインストールです: ホストは diffPermissions で前のマニフェストと新しいマニフェストの差を計算します。アップデートが権限を追加する場合:

  • プラグインのランタイムは即座に無効化されます;
  • ユーザーに新しい権限への同意が求められます;
  • 同意が得られるまでプラグインは無効のままです。

権限の削除に同意は不要です。一般則: 付与された権限のセットは、明示的なユーザーの決定なしには決して拡大しません。権限定数とヘルパーの完全な一覧は、生成されたプラグイン SDK リファレンス を参照してください。