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

モノレポ概要

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 つの責任を持ち、依存関係は下方向のみを向きます: serverweb はパッケージに依存し、パッケージはせいぜい sharedcontracts に依存します。完全な内訳はパッケージ を参照してください。

データフロー

典型的なリクエストは次のレイヤーを流れます:

  1. フロントエンドが TanStack Query を通じて /api/v2/* エンドポイントを呼び出します。
  2. Fastify が TypeBox スキーマに対して入力を検証し、{ code, params, traceId } エンベロープでエラーを返します。
  3. @neotavern/db のリポジトリがカーソルページネーションと FTS5 検索で SQLite を読み書きします。
  4. 生成は POST /api/v2/chats/:id/generate で実行されます: プロンプトパイプラインがコンテキストを組み立て、プロバイダーアダプターがリクエストをシリアライズし、応答が SSE でストリーミングされ、メッセージが保存されます。

Web アプリは単一ページです: ルートがチャットワークスペースを変更し、キャラクター、設定、プロバイダー、テーマ、プラグインは、保持されたチャット位置の上にダイアログサーフェスでレンダリングされます。

ローカルファーストの原則

すべてがあなたのマシン上で実行されます:

  • バックエンドはデフォルトで 127.0.0.1 にバインドします。リモートアクセスは、境界付きセッションと HTTPS 要件を備えた明示的なオプトインです。
  • すべてのデータは 1 つのローカルデータディレクトリに存在します: 単一の SQLite データベースとコンテンツアドレス型のファイルストア。PostgreSQL、Redis、Docker はありません。
  • アプリはオフラインで動作します。プロバイダー呼び出しだけが唯一のネットワークトラフィックで、組み込みの echo アダプターを使えばプロバイダーなしでパイプライン全体をテストできます。
  • バックアップ、エクスポート、SillyTavern インポートはすべて、同じ SQLite とファイル API を通じてローカルで行われます。

ストレージレイヤーはデータとストレージ、生成経路はプロンプトパイプライン を参照してください。