モノレポ概要
NeoTavern はローカルファーストのアプリケーションです: 単一の Fastify プロセスが API とオプションのビルド済みフロントエンドを提供し、外部データベース、キュー、コンテナは不要です。
モノレポの構成
ワークスペースは pnpm モノレポで、apps/ と packages/ の 2 つのトップレベルグループがあります:
apps/
server/ # Fastify バックエンド: API、プロンプトパイプライン、SSE、レガシーホスト
web/ # React SPA
plugin-runtime/ # バックエンドプラグイン用の制限された Node.js プロセス
desktop/ # Tauri 2 シェル; サーバーをサイドカープロセスとして実行
packages/
shared/ # UUIDv7 ID、Result、エラー、ロガー、非同期ユーティリティ
contracts/ # TypeBox API スキーマ — 唯一の情報源
db/ # SQLite: スキーマ、マイグレーション、リポジトリ、FTS5
ui/ # Radix プリミティブ上のヘッドレスコンポーネント
i18n/ # i18next のセットアップと言語リソース
plugin-sdk/ # プラグインマニフェスト、権限、API コントラクト
theme-sdk/ # テーマのトークン、レベル、継承
provider-sdk/ # プロバイダーアダプターのコントラクトとアダプター
legacy-compat/ # ウィンドウグローバルと DOM 互換アイランド
gestures/ # フレームワーク非依存の行ジェスチャー
plugin-build/ # プラグインのビルドと公開パイプライン
アプリ
apps/server— Fastify バックエンド。/api/v2/*API を公開し、プロンプトパイプラインを実行し、SSE で生成をストリーミングし、Express 互換のレガシーサーフェスをホストします。各モジュールは分離された Fastify プラグインです。apps/web— React SPA。HTTP でサーバーと通信し、チャットワークスペースと、キャラクター、設定、プロバイダー、テーマ、プラグインのサーフェスをレンダリングします。apps/plugin-runtime— 信頼できないバックエンドプラグインが実行される権限制限付き Node.js プロセス。メインのサーバープロセスから分離されています。apps/desktop— Tauri 2 シェル。コンパイル済みサーバーを自己完結型 Node.js サイドカーとして起動し、ローカル API の準備ができた後にのみウェブビューを開きます。
パッケージ
共有コードは packages/ の下の、スコープが狭いパッケージに存在します。各パッケージは 1 つの責任を持ち、依存関係は下方向のみを向きます: server と web はパッケージに依存し、パッケージはせいぜい shared と contracts に依存します。完全な内訳はパッケージ を参照してください。
データフロー
典型的なリクエストは次のレイヤーを流れます:
- フロントエンドが TanStack Query を通じて
/api/v2/*エンドポイントを呼び出します。 - Fastify が TypeBox スキーマに対して入力を検証し、
{ code, params, traceId }エンベロープでエラーを返します。 @neotavern/dbのリポジトリがカーソルページネーションと FTS5 検索で SQLite を読み書きします。- 生成は
POST /api/v2/chats/:id/generateで実行されます: プロンプトパイプラインがコンテキストを組み立て、プロバイダーアダプターがリクエストをシリアライズし、応答が SSE でストリーミングされ、メッセージが保存されます。
Web アプリは単一ページです: ルートがチャットワークスペースを変更し、キャラクター、設定、プロバイダー、テーマ、プラグインは、保持されたチャット位置の上にダイアログサーフェスでレンダリングされます。
ローカルファーストの原則
すべてがあなたのマシン上で実行されます:
- バックエンドはデフォルトで
127.0.0.1にバインドします。リモートアクセスは、境界付きセッションと HTTPS 要件を備えた明示的なオプトインです。 - すべてのデータは 1 つのローカルデータディレクトリに存在します: 単一の SQLite データベースとコンテンツアドレス型のファイルストア。PostgreSQL、Redis、Docker はありません。
- アプリはオフラインで動作します。プロバイダー呼び出しだけが唯一のネットワークトラフィックで、組み込みの
echoアダプターを使えばプロバイダーなしでパイプライン全体をテストできます。 - バックアップ、エクスポート、SillyTavern インポートはすべて、同じ SQLite とファイル API を通じてローカルで行われます。
ストレージレイヤーはデータとストレージ、生成経路はプロンプトパイプライン を参照してください。