diff --git a/document/01_system_overview.md b/document/01_system_overview.md index 75be892..66e7a30 100644 --- a/document/01_system_overview.md +++ b/document/01_system_overview.md @@ -2,7 +2,7 @@ ## 1. 概要 -本システム「TelosDB」は、SQLite Vector 拡張機能を活用したローカル完結型のセマンティック検索基盤です。Tauri 2 を基盤とし、Model Context Protocol (MCP) を通じて外部エージェントに高度なデータ抽出能力を提供します。 +本システム「TelosDB」は、**sqlite-vec** 拡張機能を活用したローカル完結型のセマンティック検索基盤です。Tauri 2 を基盤とし、Model Context Protocol (MCP) を通じて外部エージェントに高度なデータ抽出能力を提供します。 ## 2. 目的 @@ -14,23 +14,24 @@ | 機能種別 | 機能名称 | 概要 | | :--- | :--- | :--- | -| **データ登録** | 文章自動ベクトル化 | 文章とメタデータを入力すると、内部 LLM がベクトルを生成し、保存。 | -| **検索** | セマンティック検索 | 自然言語による類似度検索。意味的に近い文書を距離順に抽出。 | -| **インターフェース** | MCP Server | SSE プロトコルを用いた JSON-RPC 2.0 インターフェースの提供。 | +| **データ登録** | 文章自動ベクトル化 | 文章とメタデータを入力すると、内蔵 LLM がベクトルを生成し、保存。 | +| **検索** | セマンティック検索 | 自然言語による類似度検索。**sqlite-vec** を用いた高速な近傍探索。 | +| **インターフェース** | MCP Server (SSE) | SSE プロトコルを用いた JSON-RPC 2.0 インターフェースの提供。 | +| **自動復旧** | セルフヒーリング | モデル変更によるベクトル次元数の不一致を自動検知し、バックグラウンドで補完。 | | **常駐モード** | システムトレイ | ウィンドウを閉じてもバックグラウンドで MCP サーバーが稼働を継続。 | -| **可視化** | アクティビティログ | MCP 経由のツール呼び出しを UI 上でリアルタイムに表示。 | -| **GUI** | 管理コンソール | データベースの閲覧、検索、システムステータスの監視。 | +| **GUI** | 管理コンソール | ガラスモーフィズムを採用した UI でのデータ閲覧、検索、ログ監視。 | ## 4. システム特性 -- **ゼロインストール**: ポータブルなバイナリ構成(Windows)。 -- **ハードウェア加速**: Vulkan による GPU 支援を利用した高速な Embedding 生成。 -- **省メモリ**: Rust による効率的なプロセス管理。 +- **Hermetic Build**: `build.rs` により依存する DLL (**sqlite-vec**) を自動管理。 +- **マルチプロセス**: Tauri コア、MCP サーバー (Axum)、推論サイドカーの協調動作。 +- **省メモリ**: Rust による効率的なプロセス管理と軽量な Gemma-3 モデルの採用。 ## 5. 動作環境要件 - **OS**: Windows 10/11 (x64) -- **GPU**: Vulkan 1.2+ 対応(推奨) +- **CPU/GPU**: Vulkan 1.2+ 対応(推奨)または CPU 推論。 +- **Model**: Gemma-3 270m it (Q4_K_M) - 640次元。 - **Storage**: ~500MB (モデルファイル含む) ## 6. ユースケース diff --git a/document/02_architecture_design.md b/document/02_architecture_design.md index ada0fc3..74c8bfe 100644 --- a/document/02_architecture_design.md +++ b/document/02_architecture_design.md @@ -7,66 +7,66 @@ ```mermaid graph TD subgraph "Presentation Layer (Webview2)" - UI[Glassmorphism UI] - SSE_Monitor[Activity Log / SSE] + UI["Glassmorphism UI (Vanilla JS)"] + SSE_Monitor["Activity Log / SSE Update"] end - subgraph "Application Layer (Rust / Tauri Core)" - Tauri[Tauri Backend] - Tray[System Tray / Resident Mode] - Axum[Axum MCP Server] - Llama[Llama Client / HTTP] + subgraph "Application Layer (Rust / Tauri 2)" + Tauri["Tauri Core & Command Handlers"] + Tray["System Tray / Resident Mode"] + Axum["Axum (MCP SSE Server)"] + Broadcast["Tokio Broadcast (Internal Bus)"] end - subgraph "Infrastruture Layer" - DB[(SQLite / sqlite-vec)] - LS[Sidecar: llama-server] - M[Gemma-3 GGUF] + subgraph "Infrastructure Layer" + DB[("SQLite + sqlite-vec")] + LS["Sidecar: llama-server"] + M["Gemma-3 GGUF (640d)"] end - UI <-->|IPC: Invoke/Events| Tauri - Tauri <--> Axum + UI <-->|IPC: Invoke| Tauri + UI <--|SSE: Update Events| Axum + Axum <-->|Broadcast Bus| Broadcast Tauri <--> DB Axum <--> DB - Tauri <--> Llama - Llama <-->|HTTP| LS - App([Windows App]) -->|Resident| Tray - Tray -->|Show/Hide| UI + Tauri -- "reqwest" --> LS + Axum -- "reqwest" --> LS LS -->|Inference| M + Tray -->|Control| UI ``` ## 2. 各層の定義 ### 2.1 Presentation Layer -- **技術**: Vanilla HTML, CSS, JavaScript (Vite ベース) -- **役割**: システムステータスの可視化、データベース閲覧機能の提供。 -- **通信**: `invoke` コマンドによる非同期通信。 +- **技術**: Vanilla HTML, CSS, JavaScript (Vite 5+) +- **役割**: システムステータスの可視化、セマンティック検索 GUI、MCP アクティビティ監視。 +- **通信**: `invoke` コマンドおよび `EventSource` (SSE) によるリアルタイム同期。 ### 2.2 Application Layer -- **Tauri Core**: アプリのライフサイクル、システムトレイ、ウィンドウ制御、環境変数の管理。 -- **Axum (MCP Server)**: Model Context Protocol (MCP) に準拠した SSE (Server-Sent Events) サーバー。 -- **Llama Client**: `reqwest` を使用した API 通信。Sidecar との疎通とリトライを制御。 -- **Sidecar Manager**: `llama-server` プロセスの起動(`bin` フォルダ内)、DLL パスの解決、子プロセスの死活監視。 +- **Tauri Core**: プロセスのライフサイクル管理、システムトレイ、サイドカー制御。 +- **Axum (MCP Server)**: ポート 3001 で稼働する MCP SSE サーバー。セッション管理と JSON-RPC ディスパッチを担当。 +- **Data Bus**: `tokio::sync::broadcast` を使用し、データ変更やツール呼び出しを UI へリアルタイム通知。 ### 2.3 Infrastructure Layer -- **SQLite**: `sqlx` を使用した非同期リレーショナルデータ管理。 -- **sqlite-vec**: `vec0` 仮想テーブルによるベクトル検索エンジン(DLL 拡張)。 -- **Sidecar (llama-server)**: `llama.cpp` ベースの推論エンジン。 +- **SQLite**: メタデータ(`items`)の管理。 +- **sqlite-vec (vec0)**: 仮想テーブルによるベクトル検索。動的な次元検知(640次元)に対応。 +- **Sidecar (llama-server)**: `llama.cpp` ベースの推論サーバー。埋め込み生成 API を提供。 ## 3. プロセス同期モデル | 処理 | 同期/非同期 | 説明 | | :--- | :--- | :--- | -| **UI 更新** | 非同期 (Event) | バックエンドからの非同期メッセージ受信により更新。 | -| **API リクエスト** | 非同期 (Async/Await) | `tokio` ランタイム上でのノンブロッキング I/O。 | -| **DB トランザクション** | 原子性 (Atomic) | `items` と `vec_items` の一貫性は Rust 側トランザクションで保証。 | +| **データ更新通知** | 非同期 (SSE) | DB 変更時にブロードキャストし、UI を自動リロード。 | +| **埋め込み生成** | 非同期 (HTTP) | llama-server への POST リクエストによるベクトル取得。 | +| **一貫性制御** | 原子性 (Transaction) | `items` と `vec_items` を同一トランザクション内でコミット。 | ## 4. ライフサイクル管理 -1. **Setup**: Tauri 起動時に `bin` フォルダを特定し、DLL パスを補強。 -2. **Spawn**: `llama-server` プロセスの起動とヘルスチェック待機。 -3. **Running**: MCP サーバーと UI が連携。ウィンドウを閉じてもトレイに常駐。 -4. **Shutdown**: トレイメニューからの「終了」時に子プロセス (Sidecar) を確実にシグナル通知ののち Kill。 +1. **Setup**: 起動時にモデル・DLL・DB パスを確定。 +2. **Spawn**: `llama-server` を Sidecar として起動し、`/health` で準備完了を確認。 +3. **Sync**: DB のベクトル不整合(欠落や次元違い)をチェックし、必要に応じて自動修復。 +4. **Running**: MCP サーバーが外部接続を待機。トレイ常駐によるバックグラウンド動作。 +5. **Shutdown**: トレイメニューからの終了時、全子プロセスをクリーンに停止。 diff --git a/document/03_database_specification.md b/document/03_database_specification.md index 441d193..c4018e0 100644 --- a/document/03_database_specification.md +++ b/document/03_database_specification.md @@ -2,7 +2,7 @@ ## 1. 物理構造 -データベースは単一の SQLite ファイルとして管理されます。メタデータ管理用の標準テーブルと、ベクトル演算用の仮想テーブルの 2 つで構成されます。 +データベースは単一の SQLite ファイル (`telos.db`) として管理されます。メタデータ管理用の標準テーブルと、**sqlite-vec** によるベクトル演算用の仮想テーブルの 2 つで構成されます。 ## 2. エンティティ関係定義 (ERD) @@ -13,14 +13,14 @@ items { integer id PK "Primary Key (Autoincrement)" text content "文書本文" - text path "ファイルパス / 識別子" - datetime created_at "作成日時 (Default: localtime)" + text path "ファイルパス / 出典識別子" + datetime created_at "作成日時" datetime updated_at "更新日時 (Auto-trigger)" } vec_items { integer id PK "items.id と同一" - blob embedding "640-dim Vector (f32 LE)" + blob embedding "640-dim Vector (f32)" } ``` @@ -33,44 +33,39 @@ | `id` | INTEGER | NO | AUTOINC | 保存文書のユニーク ID | | `content` | TEXT | NO | - | 元のテキストデータ | | `path` | TEXT | YES | - | ドキュメントの出典メタデータ | -| `created_at` | DATETIME | NO | CURRENT | 登録時のタイムスタンプ | -| `updated_at` | DATETIME | NO | CURRENT | 更新時のタイムスタンプ | ### 3.2 `vec_items` (Virtual Table) -SQLite 拡張 `sqlite-vec` (vec0) モジュールを使用した仮想テーブルです。 +**sqlite-vec** (vec0) モジュールを使用した仮想テーブルです。 - **ID**: `items.id` と同期。 - **ベクトル構成**: - - **次元数**: 640次元 (Gemma 3 270M モデル等、使用モデルから自動検知) - - **データ型**: `FLOAT[640]` (内部的には BLOB 表現) - - **保存形式**: IEEE 754 32bit Float (Little Endian) バイト列 + - **次元数**: **640次元** (Gemma-3 270m モデルの仕様)。 + - **データ型**: `FLOAT[640]` (内部的には BLOB) + - **L2距離**: `MATCH` 演算子による高速な近傍探索。 ## 4. 検索仕様 -### 4.1 演算アルゴリズム - -`sqlite-vec` は、近似最近傍探索 (ANN) において以下の距離関数をサポートし、本システムでは `MATCH` 演算子による高速検索を実施します。 - -- **デフォルト距離計算**: L2 (Euclidean) 距離。 -- **インデックス**: シャドウテーブルを介したベクトル専用インデックス。 - -### 4.2 標準検索クエリ +### 4.1 セマンティック探索クエリ ```sql SELECT i.id, i.content, v.distance -FROM vec_items v -JOIN items i ON v.id = i.id -WHERE embedding MATCH :query_vector -ORDER BY distance -LIMIT :limit; +FROM items i +JOIN vec_items v ON i.id = v.id +WHERE v.embedding MATCH :query_vector -- ベクトル近傍マッチング + AND k = :k -- 返却件数 (LIMIT とは別に必要) +ORDER BY distance; ``` -## 5. 整合性制御 +### 4.2 フォールバック検索 -- **トランザクション**: アイテム登録時、`items` への登録が成功した後にのみ、関連付けられた ID で `vec_items` への書き込みが行われます。 -- **動的次元検知 & 再作成**: 起動時にモデルの次元数と `vec_items` の定義を比較し、不整合があれば自動で再作成(ヒーリング)を行います。 -- **トリガー**: `items` テーブルに `updated_at` 自動更新用の SQLite トリガーを実装。 +LLM サーバーが停止している場合、`sqlite-vec` による検索が不可能なため、`content LIKE %?%` による全文検索へ自動的にフォールバックします。 + +## 5. 動的維持管理 (Self-Healing) + +1. **次元検知**: 起動時に内蔵 LLM サーバーからダミー埋め込みを取得し、期待される次元(640)を確認。 +2. **テーブル整合性**: `vec_items` 側のデータが不足している、または次元が異なる場合、バックグラウンドで `items` からベクトルを再生成し修復します(`db::sync_vectors`)。 +3. **トランザクション**: `items` と `vec_items` への登録はアトミックに行われ、片方のみの登録が残らないよう制御されています。 diff --git a/document/04_mcp_api_specification.md b/document/04_mcp_api_specification.md index 6991739..a4e6a65 100644 --- a/document/04_mcp_api_specification.md +++ b/document/04_mcp_api_specification.md @@ -4,68 +4,81 @@ 本システムは Model Context Protocol (MCP) に準拠し、外部エージェントに対してデータベース操作インターフェースを公開します。 -- **プロトコルバージョン**: 2024-11-05 (最新安定版) - **トランスポート**: SSE (Server-Sent Events) +- **ポート**: 3001 - **エンドポイント**: - - Connection: `GET /sse` - - Message: `POST /messages?session_id={uuid}` - - `GET /sse` 接続時にサーバーから送られる `endpoint` イベント内のパスを使用すること。 + - **Connection**: `GET /sse` + - **Message**: `POST /messages?session_id={uuid}` + - 接続時にサーバーから通知される `endpoint` イベント内のパスを使用。 ## 2. 提供ツール定義 (Tools) -> [!NOTE] -> 検索 (`search_text`) に加え、登録・更新・削除の全 CRUD ツールが実装・公開されています。 - ### 2.1 `add_item_text` (登録) 文章を自動ベクトル化して登録します。 -- **引数**: - - `content` (string): 本文 (必須) - - `path` (string): メタデータ (任意) -- **戻り値**: 成功メッセージと ID +- **引数**: `content` (string, 必須), `path` (string, 任意) +- **戻り値**: 成功通知と生成された ID。 ### 2.2 `search_text` (意味検索) -自然言語による検索を実行します。 +**sqlite-vec** を用いた自然言語検索。 -- **引数**: - - `content` (string): 検索クエリ (必須) - - `limit` (number): 取得件数 (デフォルト: 10) -- **戻り値**: 類似度順の結果リスト(テキスト形式) +- **引数**: `content` (string, 必須), `limit` (number, デフォルト 10) +- **戻り値**: 距離(Distance)順の検索結果リスト。 ### 2.3 `update_item` (更新) -既存のアイテムとベクトルを最新の内容で書き換えます。 +既存データのテキストとベクトルを再生成して更新。 -- **引数**: - - `id` (integer): 更新対象の文章番号(ID) (必須) - - `content` (string): 新しい本文 (必須) - - `path` (string): 新しいメタデータ (任意) -- **戻り値**: 更新完了通知 +- **引数**: `id` (integer, 必須), `content` (string, 必須), `path` (string, 任意) ### 2.4 `delete_item` (削除) -指定された文章番号(ID)のデータを削除します。 +指定 ID のデータを物理削除。 -- **引数**: - - `id` (integer): 削除対象の文章番号(ID) (必須) -- **戻り値**: 削除完了通知 +- **引数**: `id` (integer, 必須) -## 3. レスポンスフロー (SSE) +### 2.5 `get_item_by_id` (取得) -MCP SSE 規格に基づき、リクエストとレスポンスは以下のフローで行われます。 +ID 指定により、メタデータを含む生データを取得。 -1. **接続**: クライアントが `GET /sse` を開始。 -2. **通知**: サーバーが `event: endpoint` でメッセージ送信先パスを返却。 -3. **送信**: クライアントが `POST /messages?session_id=...` で命令を送信。 -4. **応答**: サーバーが SSE ストリーム上で `event: message` として結果を返却。HTTP 自体は `202 Accepted` を返却する。 +- **引数**: `id` (integer, 必須) + +## 3. データ形式 (JSON-RPC) + +### 3.1 ツール呼び出し例 (Request) + +```json +{ + "jsonrpc": "2.0", + "method": "tools/call", + "params": { + "name": "search_text", + "arguments": { "content": "量子コンピュータについて" } + }, + "id": "123" +} +``` + +### 3.2 応答形式 (Response) + +MCP 規格に従い、ツールの戻り値は `content` 配列内にラップされます。 + +```json +{ + "jsonrpc": "2.0", + "result": { + "content": [ + { "type": "text", "text": "[ID: 1, Distance: 0.12]\n検索結果の内容..." } + ] + }, + "id": "123" +} +``` ## 4. エラー定義 -| コード | 分類 | 原因例 | -| :--- | :--- | :--- | -| `-32700` | Parse error | 不正な JSON フォーマット | -| `-32601` | Method not found | 未定義ツールの呼び出し | -| `-32000` | Internal error | Sidecar 不通, DB 権限エラー等 | -| `422` | Unprocessable Entity | 必須パラメータの欠落 | +- `-32601`: `Method not found` (未定義ツールの呼び出し) +- `-32000`: `Internal error` (モデルサーバー不通、DB エラー) +- `422`: パラメータ不足、または形式エラー。 diff --git a/document/05_sidecar_integration.md b/document/05_sidecar_integration.md index 3095fa8..92e9206 100644 --- a/document/05_sidecar_integration.md +++ b/document/05_sidecar_integration.md @@ -8,36 +8,36 @@ ### 2.1 実行バイナリ -- **名称**: `llama-server` -- **アーキテクチャ**: `x86_64-pc-windows-msvc` (Windows 環境時) -- **モデル**: Gemma-3-270m-it (Q4_K_M.gguf) - 640次元 +- **名称**: `llama-server` (Windows x64 用サイドカー) +- **モデル**: `Gemma-3-270m-it-Q4_K_M.gguf` +- **依存拡張**: **sqlite-vec** (`vec0.dll`) -### 2.2 DLL 依存解決 (Windows) +### 2.2 DLL 供給体制 (Hermetic Build) -Windows 環境での DLL 地獄(Dependency Hell)を回避するため、`build.rs` による自動供給システムを導入しています。 +Windows 環境での実行を確実にするため、以下の自動化を行っています。 -1. **自動コピー**: ビルド時に `sqlite-vec` 等の依存 DLL を `node_modules` から抽出し、ターゲットディレクトリ(`target/release` およびその `deps`)へ自動配置します。 -2. **ランタイム解決**: `lib.rs` 内で実行ファイルの親ディレクトリにある `bin` フォルダを特定し、`vec0.dll` を動的に読み込みます。 +1. **自動コピー**: ビルド時 (`build.rs`) に、`sqlite-vec` の DLL を開発ノードから抽出し、実行ディレクトリ(および `bin`)へ自動配置します。 +2. **位置解決**: Tauri の `resource_dir` 基点に、`bin/` フォルダ内のモデルと、実行ルート直下の `vec0.dll` を動的にバインドします。 -## 3. 推論エンジン設定 +## 3. 推論エンジン設定 (llama-server) 起動時に以下のパラメータを指定します。 | 引数 | 値 | 説明 | | :--- | :--- | :--- | -| `--model` | {path} | `gemma-3-270m-it-Q4_K_M.gguf` へのパス。 | -| `--port` | 8080 | 内部通信用ポート。 | -| `--embedding` | (flag) | 埋め込み (Vector) 生成モードを有効化。 | -| `--parallel` | 1 | 同時実行数。リソース消費を抑えるため 1 に制限。 | +| `--model` | {path} | モデルファイルへの絶対パス。 | +| `--port` | 8080 | 内部通信用。 | +| `--embedding` | (flag) | 埋め込み生成 API を有効化。 | +| `--pooling` | `mean` | ベクトル集約方式の指定(推奨設定)。 | ## 4. ライフサイクル -1. **初期化**: App 起動時に `Sidecar` API を用いて非同期に起動。 -2. **ヘルスチェック**: `mcp.rs` 内のモニタースレッドが `/health` に対し 2 秒間隔でポーリング。 -3. **モニタリング**: `tauri-plugin-shell` のストリームを `tauri-plugin-log` に転送し、一元管理。 -4. **終了処理**: アプリ終了時にチャイルドプロセスを確実に Kill。 +1. **Spawn**: `lib.rs` 内でアプリ起動時に `sidecar("llama-server")` を呼び出し。 +2. **Health Check**: `/health` エンドポイントが `running` を返すまで待機。 +3. **Inbound Notification**: `llama-server` の Stdout/Stderr を Rust 側のロガーへパイプし、一元管理。 +4. **Cleanup**: アプリ終了時にチャイルドプロセスを Kill 処理。 -## 5. 推論エンジン最適化 +## 5. 推論最適化 -- **Vulkan/CPU**: 環境に応じて `ggml-vulkan.dll` または `ggml-cpu.dll` が自動的にロードされます。 -- **ログ管理**: `logs/telos.log` に `llama-server` の起動シーケンスと推論ログが詳細に出力されます。 +- **Vulkan 支援**: 互換 DLL が存在する場合、自動的にハードウェア加速が適用されます。 +- **ログ隔離**: 生成時の一時的なノイズ(`post_embedding` 等)は、Rust 側でフィルタリングしてログの視認性を確保。 diff --git a/document/06_development_guide.md b/document/06_development_guide.md index 790fca5..1bfaec2 100644 --- a/document/06_development_guide.md +++ b/document/06_development_guide.md @@ -8,8 +8,8 @@ ### プログラミング言語・ランタイム -- **Rust**: [rustup](https://rustup.rs/) を通じて最新の安定版をインストールしてください。 -- **Bun**: フロントエンドの管理と外部テストの実行に使用します。 +- **Rust**: 最新の Stable 版。`tauri-cli` を使用。 +- **Bun**: フロントエンドのパッケージ管理、およびテストランナー。 ### 依存関係のインストール @@ -17,99 +17,65 @@ bun install ``` -### Sidecar とモデルの準備 - -開発実行には `llama-server` と学習済みモデルが必要です。`scripts/` 内のスクリプトを使用してください。 - --- ## 📁 主要なディレクトリ構成と責務 -- `bin/`: サイドカーバイナリ (`llama-server`) の格納場所。 -- `data/`: データベースファイル (`vector.db`) の永続化レイヤー。 -- `logs/`: 開発・診断用のログ出力。 -- `resources/`: バンドルされる静的リソース(アイコン等)。 -- `src-tauri/src/mcp.rs`: MCP の全ツールロジック。 -- `src-tauri/src/db.rs`: スキーマ管理・非同期 SQLx ロジック。 -- `src-tauri/src/lib.rs`: ライフサイクル・常駐・トレイ制御。 -- `test/`: 統合テスト一式。 +- `src/`: フロントエンド (Vanilla JS / CSS) +- `src-tauri/src/mcp.rs`: **MCP サーバー実装 & ツールロジック**。 +- `src-tauri/src/db.rs`: **sqlite-vec** スキーマ管理・データアクセス。 +- `src-tauri/src/lib.rs`: Tauri エントリポイント・サイドカー起動・トレイ制御。 +- `src-tauri/bin/`: 推論バイナリとモデルファイル。 +- `document/`: 設計書・仕様書。 +- `journals/`: Rule 13 に基づく集約された作業記録。 --- ## ➕ 新しい MCP ツールの追加手順 -新しい機能を MCP ツールとして公開する場合、以下の手順を踏みます。 +### 1. ツール定義の追加 -### 1. ツール名の定義 +`src-tauri/src/mcp.rs` 内の `tools/list` ハンドラ内に、新しいツールの名称、説明、パラメータスキーマを追加します。 -`src/backend/src/mcp.rs` 内で、JSON-RPC でやり取りするメソッド名(例: `tools/list`)を確認し、新しいツール用の定義を追加します。 +### 2. ハンドラの実装 -### 2. ハンドラーの実装 +`mcp_messages_handler` 内の `match actual_method` 文に新しい `case` を追加し、DB 操作や LLM 連携ロジックを記述します。 -`handle_search_vector` などの既存の関数を参考に、新しい非同期関数を実装します。 +### 3. UI 通知の統合 -### 3. リクエストのディスパッチ - -`message_handler` 関数の `match` 文にツール名を追加し、実装したハンドラーを呼び出すように設定します。 - -### 4. 単体テストの追加 - -`src/backend/src/mcp.rs` の末尾にある `mod tests` に、新しいツールの入出力を検証するテストを追加してください。 +必要に応じて `state.tx.send` を使用し、ツール呼び出しを UI のアクティビティログに通知するように設定します。 --- -## 🧪 テストの実行方法 +## 🧪 テストの実行 -### Rust 単体テスト (推奨) - -コアロジック(DB・MCP・LLM連係)のテストです。 +### バックエンド (Rust) ```bash +cd src-tauri cargo test ``` -### Bun E2E テスト - -実際の HTTP/SSE 通信を介したテスト(開発環境が整っている場合)。 +### フロントエンド / API ```bash -bun test +bun run dev # 開発サーバー起動 ``` --- ## 🚀 リリース手順 -本プロジェクトでは、リリースのポータビリティを確保するため、特定のプラットフォームに依存しない自動化スクリプトを採用しています。 +1. **バージョン更新**: `package.json`, `tauri.conf.json`, `Cargo.toml` のバージョンを同期。 +2. **ビルド**: -### 1. リリースブランチの作成とバージョン更新 + ```bash + bun run tauri build + ``` -以下のコマンドを実行すると、新しいリリースブランチ(`release/vX.Y.Z`)が作成され、`package.json`, `tauri.conf.json`, `Cargo.toml` のバージョンが一括更新・コミットされます。 - -バージョンバンプとタグ付けを手動またはツール(今回の v0.2.5 のように)で実施します。 - -### 2. インストーラーのビルド - -作成されたリリースブランチで、以下のコマンドを実行して最終的なパッケージ(MSI/EXE)を確認します。 - -```bash -bun run build -``` - -### 3. マージとタグ打ち - -ビルドに問題がなければ、マスターブランチにマージし、タグを打ってリリースを確定させます。 - -```bash -git checkout master -git merge release/v0.2.0 -git tag -a v0.2.0 -m "Release v0.2.0" -``` - ---- +3. **成果物**: `src-tauri/target/release/bundle/` 配下にインストーラーが生成されます。 ## 📝 コーディング規約 -- **Rust**: `cargo fmt` および `cargo clippy` を遵守してください。 -- **Commit**: 分かりやすいメッセージを心がけ、必要に応じてジャーナルファイルを更新してください。 -- **Documentation**: ユーザーに影響する変更を加えた場合は、`README.md` や `document/` 内の該当ドキュメントを必ず更新してください。 +- **名称統一**: ベクトル検索エンジンは **「sqlite-vec」** と呼びます。 +- **ジャーナル記録**: 作業完了後は必ず `journals/` に Rule 9 形式で記録を残してください。 diff --git a/document/07_ui_design_spec.md b/document/07_ui_design_spec.md index 05dea10..03d9803 100644 --- a/document/07_ui_design_spec.md +++ b/document/07_ui_design_spec.md @@ -1,165 +1,42 @@ -# 07 UIデザイン仕様書(TelosDB クリーンベンチ版) +# 07 UIデザイン仕様書 -## 1. 基本方針 +## 1. デザインコンセプト -- **ビジュアルコンセプト**: ガラスモーフィズム(Glassmorphism)を採用した、透過感と光沢のあるプレミアムなデスクトップ体験。 -- **技術スタック**: フレームワーク非依存(Vanilla JS + HTML + CSS)。 -- **UXの方針**: リアルタイムな応答性、常駐による即時利用、AIの挙動の可視化。 +- **Glassmorphism**: 透過、ブラー(backdrop-filter)、および淡いボーダーによる奥行きのある質感。 +- **Color Palette**: ダークネイビーを基調とした、深みのあるプレミアムな配色。 +- **Interaction**: Hover 効果やフェードアニメーションによる生き生きとした応答性。 ---- +## 2. レイアウト構造 (Grid System) -## 2. デザイン・機能仕様 +1. **Header**: ブランドロゴ、モデル名、システムステータス(dot + text)、ドキュメント件数。 +2. **Search Center**: インデックス検索入力、および検索実行ボタン。 +3. **Main Content**: カード形式で展開される検索結果リスト。 +4. **Activity Sidebar**: MCP 経由のツール呼び出しをリアルタイム表示するサイドログ領域。 +5. **Action Bar**: MCP 設定、スキーマコピー等の機能ボタン一式。 -### 2.1 llama_server 動作状態・モデル表示 +## 3. 技術仕様 (Frontend Stack) -- ヘッダー部に「モデル名」と「動作ステータス(カラーインジケーター付)」を表示。 -- ステータス: ● 起動中 (Green), ● 待機中 (Blue), ● 停止中 (Gray/Red)。 +- **Engine**: Tauri 2 (Webview2) +- **Style**: カスタム CSS 変数による一元管理(`styles.css`)。 +- **Data Sync**: + - **SSE (Server-Sent Events)**: サーバー側からの `update` イベントを購読し、UI を自動リフレッシュ。 + - **JSON-RPC Over HTTP**: 検索や CRUD 操作のディスパッチ。 -### 2.2 セマンティック検索インターフェース +## 4. 特筆すべきデザイン要素 -- 入力欄と検索ボタンを中央に配置し、検索結果はカード形式で透過背景で表示。 +- **Status Dot**: 起動(緑)、待機(橙)、停止(赤)のカラーインジケーター。 +- **Glass Panel**: -### 2.3 MCP Activity Log (New) + ```css + background: rgba(255, 255, 255, 0.05); + backdrop-filter: blur(15px); + border: 1px solid rgba(255, 255, 255, 0.1); + ``` -- 画面右側にスライドインする「アクティビティログ」パネル。 -- MCP経由でAIエージェントが実行したツール呼び出しをリアルタイムに表示。 +- **Log Animation**: 新しいログが上部からスライドインしてフェードインするアニメーション。 -### 2.4 Resident Mode UI +## 5. UI フロー -- ウィンドウを閉じてもシステムトレイに格納。 -- トレイアイコンのクリックで表示/非表示を切り替え。 -- 右クリックメニューで明示的なアプリケーション終了を提供。 - ---- - -```mermaid -graph TD - subgraph "Main Window" - Header[Header: Status Hub] - Search[Body: Search Interface] - Log[Slide Panel: Activity Log] - end - - Header -->|Status| Dot[Status Dot] - Header -->|Info| Count[Doc Count] - Header -->|Actions| Config[MCP Config Modal] - - Search -->|Input| Input[Search Bar] - Search -->|Output| Results[Result Cards] - - Log -->|Real-time| SSE[Tool Invocation Log] -``` - ---- - -## 4. UI要素仕様 - -### 4.1 llama_server状態表示 - -- id="llama-status" などで状態を表示 -- 状態に応じて色分け(例: 緑=起動中, 赤=停止, 黄=エラー) -- 状態取得はAPI/SSE/ポーリング等で実装(今後拡張) - -### 4.2 ドキュメント件数表示 - -- id="doc-count" などで件数を表示 -- 件数取得はAPIで実装(今後拡張) - -### 4.3 mcp.json内容表示・コピー - -- id="mcp-json" で内容表示、ボタンで表示/非表示切替・コピー - -### 4.4 入力欄 - -- type="text"、id="query" -- placeholder="検索ワード" - -### 4.5 ボタン - -- type="button"(またはbuttonタグ) -- onclick="search()" など - -### 4.6 検索結果表示 - -- preタグ(id="result")でJSONを整形表示 -- エラー時はエラーメッセージを表示(今後拡張) - -### 5.1 背景と質感 (Glassmorphism) - -- **背景**: `linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)` -- **パネル/カード**: 背景に `rgba(255, 255, 255, 0.05)`、ブラー効果 `backdrop-filter: blur(10px)`。 -- **ボーダー**: `1px solid rgba(255, 255, 255, 0.1)` で光沢感を表現。 - -### 5.2 タイポグラフィ - -- **フォントファミリー**: `'Inter', 'Roboto', 'Outfit', sans-serif` -- **強調色**: `#4facfe`, `#00f2fe` (アクティブ/リンク) - -### 5.3 アニメーション - -- フェードイン: 全体的な要素の登場時。 -- スライドイン: アクティビティログの表示。 -- ホバー変形: 検索ボタンやカードへのマウスオーバー時 (`scale: 1.02`)。 - ---- - -## 6. サンプルHTML(実装例) - -以下は、UI仕様を満たす最小構成のサンプルHTMLです。 - -```html - - -
- -