Newer
Older
TelosDB / docs / specification / 02_architecture_design.md

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

1. 全体構成

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

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. バックエンド構成(リファクタ後)

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

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