# アーキテクチャ設計 (Architecture Design)

## 1. 全体構成

本システムは **1 プロセス（Tauri 2）** 内で、GUI・MCP サーバー・ベクトル解析を完結させます。開発時も本番も Node は使わず、Tauri が静的配信（8474）と MCP API（3001）の両方を担当します。

```mermaid
graph TD
    subgraph "Presentation (WebView2)"
        UI["UI (Vanilla JS)"]
        SSE_Monitor["Activity Log (SSE)"]
    end

    subgraph "Application (Rust / Tauri 2)"
        Tauri["Tauri Core"]
        Tray["System Tray"]
        Static["Axum: 静的配信 :8474"]
        MCP["Axum: MCP API :3001"]
        LSA["LSA Engine (Community)"]
        Embed["Embedding Model (Pro)"]
    end

    subgraph "Data"
        DB["SQLite + vec0 + FTS5"]
    end

    UI --> Tauri
    Tauri --> Static
    Tauri --> MCP
    MCP --> LSA
    MCP --> Embed
    LSA --> DB
    Embed --> DB
    MCP --> DB
```

## 2. プロセス・ポート

| 役割 | プロセス | ポート | 備考 |
|------|----------|--------|------|
| フロント配信 | Tauri 内 Axum | **8474** | 開発時: `src/frontend` を静的配信。本番: 同梱済み資材。 |
| MCP API | Tauri 内 Axum | **3001** | SSE + JSON-RPC。LSA/埋め込みの準備完了後に listen。 |
| WebView | Tauri | — | devUrl = http://127.0.0.1:8474 |

- **モノリシック**: beforeDevCommand は使わない。`tauri dev` は Cargo ビルドのみ。同一プロセスで 8474 と 3001 を listen。

## 3. エディション別のベクトル経路

| エディション | ベクトル生成 | インデックス | 検索 |
|--------------|--------------|-------------|------|
| **Community** | LSA（Vibrato 分かち書き → SVD、50 次元） | `vec_items`（50 次元）, `items_lsa` | HNSW + FTS5 ハイブリッド |
| **Pro** | 埋め込みモデル（ONNX、768 次元） | `vec_items`（768 次元） | HNSW + FTS5。モデル未ロード時は FTS のみ |

- **共通**: 全文検索は FTS5（trigram）。テキストと FTS/ベクトルの同期は起動時・`GET /heal` で実施。

## 4. レイヤーと責務

| レイヤー | 主なコンポーネント | 役割 |
|----------|-------------------|------|
| **Presentation** | `src/frontend`（Vanilla JS/CSS） | 検索・文書管理・設定・アクティビティログ。Tauri invoke / listen。 |
| **Application** | `src/backend`（Rust） | MCP ハンドラ、LSA/埋め込み、DB オーケストレーション、トレイ。 |
| **Infrastructure** | SQLite（`telos.db`）, vec0, FTS5 | 永続化・ベクトル検索・全文検索。 |

## 5. バックエンド構成（リファクタ後）

- **MCP**（`src/backend/src/mcp/`）  
  - **ルーティング**: `create_mcp_app(state)` で Axum Router を組み立て。  
  - **状態構築**: `build_app_state(...)` で AppState を生成。トークナイザ・ブロードキャスト・エディション別のモデル（LSA / 埋め込み）を保持。  
  - **起動オーケストレーション**: `run_server` が状態構築 → LSA/HNSW 同期完了待ち → listen の順で実行。  
  - **ツール一覧**: `tools/registry.rs` の `tool_list()` で MCP ツール定義を一覧管理。ツール呼び出しは `tools::dispatch_tool` でディスパッチ。  
- **検索**: クエリ文字列のベクトル化は `mcp/tools/search.rs` の `get_query_vector(state, text)` に集約。Community は LSA、Pro は埋め込みモデルで 1 箇所で切り替え。  
- **DB アクセス**: `db/mod.rs` に `get_document_count`・`get_item_content_with_doc`・`get_document_id_by_path`・`heal_items_fts` 等のラップ関数を用意。呼び出し側は SQL を直接書かずこれらを利用。

詳細な開発時モノリシック化の経緯・KPI は **10_monolithic_dev.md** を参照。
