diff --git a/.gitignore b/.gitignore index f5de00c..aa773ce 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ dist dist-ssr *.local +target/ # Editor directories and files .vscode/* @@ -24,7 +25,7 @@ *.sw? # Project specific -src-tauri/bin/ -src-tauri/*.txt +src/backend/bin/ +src/backend/*.txt references/ private/ diff --git a/docs/specification/01_system_overview.md b/docs/specification/01_system_overview.md new file mode 100644 index 0000000..15d3cc6 --- /dev/null +++ b/docs/specification/01_system_overview.md @@ -0,0 +1,33 @@ +# システム概要 (System Overview) + +## 1. 開発背景と目的 + +**TelosDB** は、プライバシーを重視したローカル専用の「意味検索(Vector Search)基盤」を提供するために開発されました。 + +現代の AI 活用において、外部クラウド(OpenAI 等)へのデータ送信はセキュリティ上の大きな懸念事項です。本システムは、LLM(Embedding モデル)とベクトルエンジンをすべてユーザーのローカル環境(Windows Desktop)で動作させることにより、以下の価値を提供します。 + +- **絶対的なプライバシー**: 文章データやベクトルデータがネットワークを介して外部に送信されることはありません。 +- **オフライン動作**: サーバーメンテナンスやインターネット接続環境に左右されず、常に高速な検索が可能です。 +- **コストゼロ**: 推論はローカル GPU/CPU で行われるため、月額費用や API トークン費用が発生しません。 + +## 2. 主要機能詳説 + +| 機能 | 解説 | 技術的実装 | +| :--- | :--- | :--- | +| **ローカル・セマンティック検索** | キーワードの一致だけでなく、LSA を用いた数学的な文脈解析に基づいた検索を実現。 | `sqlite-vec` + `LSA` (SVD) | +| **MCP (Model Context Protocol)** | AI エージェント(Cursor, Claude Desktop, IDE 等)が本ツールを「外部知識」として呼び出すための標準規格。 | SSE Transport (Port 3001) | +| **低レイテンシ・省リソース** | モデル推論の代わりに LSA を採用。超軽量かつ高速なインデックス更新・検索を実現。 | `ndarray` + `SVD` | +| **セルフヒーリング (Self-healing)** | DB 内のテキストとベクトルの不一致を検出し、バックグラウンドで自動同期。 | `db::sync_vectors` | +| **常駐・軽量 UI** | システムトレイに常駐し、SSE を使った非同期通信でバックグラウンドログをリアルタイム表示。 | Tauri 2 + HTML/JS/Axum | + +## 3. システム特性 (Technical Highlights) + +- **Hermetic Design**: 必要な DLL 群をパッケージ内に封入し、ユーザー環境のインストール状況に依存せず「置いてすぐ動く」ことを重視しています。 +- **LSA (Latent Semantic Analysis)**: 伝統的かつ強力な LSA 技術を採用。モデルファイルを必要とせず、数千ドキュメント以下であれば LLM を上回る応答速度と、プライバシーの完全な確保(ローカル推論も不要)を実現します。 + +## 4. 動作環境 + +- **OS**: Windows 10/11 (64-bit) +- **CPU**: 一般的な PC で動作可能 +- **GPU**: 不要(CPU のみで高速動作) +- **モデル**: Latent Semantic Analysis (Dimensions configurable) diff --git a/docs/specification/02_architecture_design.md b/docs/specification/02_architecture_design.md new file mode 100644 index 0000000..9944ea3 --- /dev/null +++ b/docs/specification/02_architecture_design.md @@ -0,0 +1,55 @@ +# アーキテクチャ設計仕様書 (Architecture Design Specification) + +## 1. 全体構造図 + +本システムは、OS のシステムトレイに常駐する「ホストプロセス(Tauri 2)」と、推論を担う「サイドカープロセス(llama-server)」、および外部エージェントとの通信を担う「MCP サーバ(Axum)」の 3 つが有機的に連携する構造です。 + +```mermaid +graph TD + subgraph "Presentation Layer (Webview2)" + UI["Minimalist Dark UI (Vanilla JS)"] + SSE_Monitor["Activity Log View (SSE)"] + end + + subgraph "Application Layer (Rust / Tauri 2)" + Tauri["Tauri Core (Main Process)"] + Tray["System Tray Controller"] + Axum["Axum (MCP SSE Server - Port 3001)"] + LSA["LSA Engine (ndarray/SVD)"] + end + + subgraph "Infrastructure Layer" + DB["SQLite + sqlite-vec (telos.db)"] + end + + UI -- "IPC: Invoke" --> Tauri + Tauri -- "IPC: UI Update" --> UI + Axum -- "SSE: Status Events" --> UI + Tauri -- "LSA Analysis" --> LSA + LSA -- "Vectors" --> DB + Tauri -- "SQL" --> DB + Axum -- "SQL" --> DB +``` + +## 2. プロセス間通信とデータフロー + +### 2.1 Tauri Core と Axum (MCP) の連携 + +本システムの最大の特徴は、デスクトップアプリとしての GUI 管理を Tauri が行い、外部通信インターフェース(MCP)を Axum が担当する「デュアルサーバ」構成にあります。 +両者はメモリを共有していますが、非同期なデータ操作通知(例:エージェントが MCP 経由でデータを登録した際に UI の件数を増やす)には **Tokio Broadcast Channel** を使用し、疎結合な連携を実現しています。 + +### 2.2 推論サイドカー (llama-server) の制御 + +Embedding 計算を行う `llama-server` は、Tauri のサイドカー機能によって起動・管理されます。 + +- **起動時**: `lib.rs` の `setup` フックでサイドカーをスポーン。 +- **通信**: Rust バックエンドが `reqwest` を用いてローカルポート 8080 へ HTTP 要求を送信。 +- **終了時**: Tauri のプロセスマネージャにより、アプリ終了と同時にサイドカーも安全にクリーンアップされます。 + +## 3. 各レイヤーの役割分担 + +| レイヤー | 主要コンポーネント | 役割と責務 | +| :--- | :--- | :--- | +| **Presentation** | フロントエンド (index.html) | 設定状況の表示、アクティビティログ(SSE)の可視化、システム操作。 | +| **Application** | Rust コア (`lib.rs`, `mcp.rs`) | ビジネスロジック。MCP 要求のパース、サイドカーとの通信、DB 操作のオーケストレーション。 | +| **Infrastructure** | SQLite, llama-server | データの永続化、ベクトル空間の管理、LLM 推論エンジンの実行。 | diff --git a/docs/specification/03_database_specification.md b/docs/specification/03_database_specification.md new file mode 100644 index 0000000..233d4ff --- /dev/null +++ b/docs/specification/03_database_specification.md @@ -0,0 +1,60 @@ +# データベース・ベクトル検索仕様書 (Database & Search Specification) + +## 1. データベース設計思想 + +本システムでは、SQLite を単なるメタデータストレージとしてだけでなく、**「ベクトル検索エンジン」**としても活用しています。これにより、ACID 特性(データの整合性保証)を維持しながら、高速なセマンティック検索を実現しています。 + +### 1.1 sqlite-vec の役割 + +`sqlite-vec` エクステンションを採用することで、標準的な SQL クエリの中でベクトル間の「距離計算」が可能になります。 + +- **メリット**: 文書(Text)と特徴量(Vector)を別々のデータベースに分けずに済み、トランザクションの一貫性が保たれます。 +- **距離指標**: 本システムでは「L2 距離(二乗和の平方根)」を使用し、値が小さいほど類似度が高いと判断します。 + +## 2. エンティティ関係定義 (ERD) + +```mermaid +erDiagram + items ||--|| vec_items : "Reference by ID (1:1)" + + items { + integer id PK "文書ID (自動採番)" + text content "原文テキスト" + text path "出典・メタデータ" + datetime created_at "作成日" + } + + vec_items { + integer id PK "items.id と紐付け" + blob embedding "640次元ベクトルデータ(f32)" + } +``` + +## 3. ベクトル検索とセルフヒーリング + +### 3.1 `search_text` のロジック + +検索クエリが入力されると、システムは以下の手順を踏みます。 + +1. クエリを `llama-server` に送り、ベクトル化する。 +2. SQLite 上で `vec_items` テーブルをスキャンし、クエリベクトルに近い順(L2距離順)に `items.id` を取得。 +3. `items` テーブルから実際のテキストを取得して結合。 + +### 3.2 セルフヒーリング (Self-healing) の必要性 + +モデルの変更や、インポート時の中断などにより、`items` にテキストはあるが `vec_items` に対応するベクトルが存在しない「不整合状態」が稀に発生し得ます。 +本システムは `db::sync_vectors` ロジックを備えており: + +- 起動時または特定のトリガーで `items` を全走査。 +- ベクトルが欠落している行を自動検出し、サイドカー経由で再生成・補完。 +これにより、常に検索結果の網羅性を保証します。 + +## 4. テーブル詳細 + +### 4.1 `items` (メタデータ管理) + +文書の本体と、それに付随する情報を保持します。`path` カラムは、将来的なローカルパス連携や URL 参照を想定した自由形式の文字列です。 + +### 4.2 `vec_items` (ベクトル演算用仮想テーブル) + +`sqlite-vec` によって定義された仮想テーブルです。`dimensions=640` として設定されており、Gemma-3 の出力層と完全一致させています。 diff --git a/docs/specification/04_mcp_api_specification.md b/docs/specification/04_mcp_api_specification.md new file mode 100644 index 0000000..b3badc5 --- /dev/null +++ b/docs/specification/04_mcp_api_specification.md @@ -0,0 +1,55 @@ +# MCP・APIインターフェース仕様書 (MCP & API Specification) + +## 1. プロトコル設計思想 + +本システムは、Anthropic が提唱する **Model Context Protocol (MCP)** に準拠しています。これにより、IDE(Cursor 等)や外部エージェントが、本システムを単なる「静的なドキュメント」としてではなく、対話可能な「インテリジェントな知識ベース」として認識できるようになります。 + +### 1.1 なぜ SSE (Server-Sent Events) なのか + +MCP には Stdio と SSE の 2 つのトランスポートがありますが、本システムでは **SSE** を採用しています。 + +- **UIとの親和性**: GUI を持つデスクトップアプリでは、Stdio は標準入出力の競合が発生しやすいため、HTTP ベースの SSE が適しています。 +- **多重接続**: 同時に複数のエージェント(例:IDE と ブラウザ拡張)からの要求を並行して処理することが可能です。 + +## 2. インターフェース定義 + +- **ポート**: 3001 (固定) +- **エンドポイント**: + - **Connection**: `GET /sse` (接続維持・通知受取) + - **Message**: `POST /messages?session_id={uuid}` (コマンド送信) + +## 3. 提供ツール (Capabilities) + +本システムのリソースへアクセスするための具体的なコマンド群です。 + +| ツール名 | 役割 | 解説 | +| :--- | :--- | :--- | +| `add_item_text` | 文書の永続化 | テキストを Embedding 化して DB へ保存。 | +| `search_text` | 意味検索 | 記述内容の類似度に基づいたベクトル検索。 | +| `update_item` | 知識の更新 | ID 指定による既存データの書き換え。 | +| `delete_item` | 知識の抹消 | ID 指定による物理削除。 | +| `get_item_by_id` | 生データ取得 | メタデータを含むレコードの直接参照。 | + +## 4. 通信シーケンスとレスポンス形式 + +ツール呼び出しは JSON-RPC 2.0 に準拠しており、結果は常に MCP 規格の `content` 配列形式で返されます。 + +```json +{ + "jsonrpc": "2.0", + "result": { + "content": [ + { + "type": "text", + "text": "[結果メッセージ]" + } + ] + }, + "id": "req-123" +} +``` + +## 5. 開発者向けデバッグ情報 + +- `/status` エンドポイントにアクセスすることで、現在の MCP セッション数やシステム負荷状況を確認できます。 +- エラーコード `-32000` が返された場合は、バックグラウンドの `llama-server` との通信エラー(タイムアウト等)の可能性が高いです。 diff --git a/docs/specification/06_development_guide.md b/docs/specification/06_development_guide.md new file mode 100644 index 0000000..87fa6cc --- /dev/null +++ b/docs/specification/06_development_guide.md @@ -0,0 +1,43 @@ +# 開発者ガイド (Development Guide) + +## 1. 開発の基本コンセプト + +TelosDB の開発においては、**「確信の持てるコード」**と**「自動化された環境」**を重視します。Windows 環境特有の DLL 競合やビルドエラーを避けるため、環境構築手順を簡略化しています。 + +## 2. 環境構築の手順 + +### 2.1 必要なツール + +- **Rust**: 最新の Stable ツールチェーン。 +- **Node.js**: フロントエンド資材の管理用。 +- **VS Code**: 推奨エディタ(Tauri / Rust 拡張機能)。 + +### 2.2 初回セットアップ + +1. リポジトリをクローン。 +2. `npm install` を実行(`sqlite-vec` などのバイナリ等が含まれます)。 +3. `src-tauri/resources/` に指定の推論モデル(Gemma-3 GGUF)を配置。 + +## 3. ビルドと実行 + +```bash +# 開発モード(ホットリロード有効) +npm run tauri dev +``` + +> [!NOTE] +> 開発時に DLL のエラーが出る場合は、一度 `cargo clean` を行い、`build.rs` による DLL 再生成を促してください。 + +## 4. 拡張手順 (MCP ツールの追加) + +新しい機能を MCP 経由で公開する場合は、以下のファイルを修正します。 + +1. **`mcp.rs`**: JSON-RPC ハンドラーに新しいメソッドを追加。 +2. **`document/mcp.json`**: ツールのスキーマ(引数定義)を記述。エージェントがこの定義を読み取ります。 +3. **`04_mcp_api_specification.md`**: 仕様書を更新。 + +## 5. コーディング規約とテスト + +- **非同期処理**: SQLite 操作や通信はすべて `tokio` ランタイム上で行い、UI をブロックしないようにします。 +- **ログ**: `log::info!` / `log::error!` を使用してください。ログは `src-tauri/logs/` に自動出力されます。 +- **テスト**: ロジックの変更後は必ず `scripts/test_mcp_client.mjs` を実行し、既存ツールが壊れていないか確認してください。 diff --git a/docs/specification/07_ui_design_spec.md b/docs/specification/07_ui_design_spec.md new file mode 100644 index 0000000..2462737 --- /dev/null +++ b/docs/specification/07_ui_design_spec.md @@ -0,0 +1,38 @@ +# UI デザイン仕様書 (UI Design Specification) + +## 1. コンセプト: High-Contrast Minimalism + +TelosDB の UI は、装飾を極限まで削ぎ落とし、情報の「明瞭さ」と「速度感」を重視した **「ハイコントラスト・ミニマリズム」** をテーマにしています。 +以前の流行であったガラスモーフィズム(透過・ブラー)を廃し、ソリッドな背景と鋭いエッジ、洗練されたタイポグラフィによって、静謐でプロフェッショナルな道具としての佇まいを目指します。 + +### 1.1 デザインの構成要素 + +- **背景**: 漆黒(`#050505`)に近い深い黒を基調とし、要素を区別するために深いグレーのソリッドな面を使用。 +- **ボーダー**: 透過ブラーではなく、非常に細く(1px)彩度の低いグレースケールの境界線を採用。 +- **タイポグラフィ**: 幾何学的で現代的なサンセリフ体(Outfit)と、情報の視認性に特化したインターフェイスフォント(Inter)。 +- **アクセント**: 機能的な意味(成功、エラー、ステータス)を持つ要素にのみ、厳選されたアクセントカラーを適用。 + +## 2. インタラクティブ・フィードバック + +### 2.1 ステータス・インジケーター + +ヘッダー右側に配置されたバッジは、システムの状態をリアルタイムに示します。 + +- `Running`: LSA エンジンおよび MCP サーバーが待機中または処理中。 +- `Stopped`: 重大な構成エラーまたはプロセス停止。 + +### 2.2 アクティビティ・ログ (SSE Listener) + +検索や登録のアクティビティは、画面下部のログセクションに垂直方向に流れます。 +ソリッドなデザインに合わせ、カードの浮き上がり(Shadow)ではなく、ミニマルなリスト形式で表示されます。 + +## 3. フロントエンド技術スタック + +- **Vanilla JS & CSS**: 高速な起動と低メモリフットプリントを維持。 +- **Desktop First**: Tauri 2 による Windows ネイティブの挙動(システムトレイ、イベントループ)に最適化。 + +## 4. レイアウト構造 + +1. **Header (HUD)**: 常に固定され、モデル名とデータ件数を表示(ヘッドアップディスプレイ)。 +2. **Main Content**: 検索バーと結果リスト。余白(Negative Space)を適切に取り、情報のノイズを排除。 +3. **Footer (Toolbar)**: 設定へのアクセスと再インデックスボタンを集約。 diff --git a/docs/specification/mcp.json b/docs/specification/mcp.json new file mode 100644 index 0000000..6d82804 --- /dev/null +++ b/docs/specification/mcp.json @@ -0,0 +1,50 @@ +{ + "mcpServers": { + "TelosDB": { + "command": "telosdb-app", + "args": [], + "env": {}, + "tools": [ + { + "name": "search_text", + "description": "Semantic search using sqlite-vec (640d).", + "arguments": { + "content": "string", + "limit": "number" + } + }, + { + "name": "add_item_text", + "description": "Add new text with auto-generated embeddings.", + "arguments": { + "content": "string", + "path": "string" + } + }, + { + "name": "update_item", + "description": "Update text and re-generate embedding.", + "arguments": { + "id": "number", + "content": "string", + "path": "string" + } + }, + { + "name": "delete_item", + "description": "Delete item and vector by ID.", + "arguments": { + "id": "number" + } + }, + { + "name": "get_item_by_id", + "description": "Retrieve raw text and metadata by ID.", + "arguments": { + "id": "number" + } + } + ] + } + } +} diff --git a/docs/specification/openapi.yaml b/docs/specification/openapi.yaml new file mode 100644 index 0000000..c799e35 --- /dev/null +++ b/docs/specification/openapi.yaml @@ -0,0 +1,73 @@ +openapi: 3.0.3 +info: + title: SQLite Vector MCP REST API + version: 0.1.0 + description: | + REST API for text-based insert/search backed by sqlite-vec. + Note: Endpoints are planned and documented here. +servers: + - url: http://localhost:3000 +paths: + /api/items: + post: + summary: Add item from text + description: Generates embeddings from text and stores item + vector. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + content: + type: string + required: + - content + responses: + "200": + description: Item created + content: + application/json: + schema: + type: object + properties: + id: + type: integer + content: + type: string + "400": + description: Invalid request + /api/search: + post: + summary: Search by text + description: Generates embeddings from text and returns nearest items. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + content: + type: string + required: + - content + responses: + "200": + description: Search results + content: + application/json: + schema: + type: object + properties: + results: + type: array + items: + type: object + properties: + content: + type: string + distance: + type: number + "400": + description: Invalid request diff --git a/document/01_system_overview.md b/document/01_system_overview.md deleted file mode 100644 index dd2a003..0000000 --- a/document/01_system_overview.md +++ /dev/null @@ -1,33 +0,0 @@ -# システム概要 (System Overview) - -## 1. 開発背景と目的 - -**TelosDB** は、プライバシーを重視したローカル専用の「意味検索(Vector Search)基盤」を提供するために開発されました。 - -現代の AI 活用において、外部クラウド(OpenAI 等)へのデータ送信はセキュリティ上の大きな懸念事項です。本システムは、LLM(Embedding モデル)とベクトルエンジンをすべてユーザーのローカル環境(Windows Desktop)で動作させることにより、以下の価値を提供します。 - -- **絶対的なプライバシー**: 文章データやベクトルデータがネットワークを介して外部に送信されることはありません。 -- **オフライン動作**: サーバーメンテナンスやインターネット接続環境に左右されず、常に高速な検索が可能です。 -- **コストゼロ**: 推論はローカル GPU/CPU で行われるため、月額費用や API トークン費用が発生しません。 - -## 2. 主要機能詳説 - -| 機能 | 解説 | 技術的実装 | -| :--- | :--- | :--- | -| **ローカル・セマンティック検索** | キーワードの一致だけでなく、文脈や意味に基づいた検索を実現。 | `sqlite-vec` + `Gemma-3` (Local) | -| **MCP (Model Context Protocol)** | AI エージェント(Cursor, Claude Desktop, IDE 等)が本ツールを「外部知識」として呼び出すための標準規格。 | SSE Transport (Port 3001) | -| **GPU 加速推論** | モデルの推論計算を GPU で高速化。低スペック PC でも快適な動作を実現。 | Vulkan / llama-server | -| **セルフヒーリング (Self-healing)** | DB 内のテキストとベクトルの不一致を検出し、バックグラウンドで自動同期。 | `db::sync_vectors` | -| **常駐・軽量 UI** | システムトレイに常駐し、SSE を使った非同期通信でバックグラウンドログをリアルタイム表示。 | Tauri 2 + HTML/JS/Axum | - -## 3. システム特性 (Technical Highlights) - -- **Hermetic Design**: Sidecar (`llama-server`) や必要な DLL 群をパッケージ内に封入し、ユーザー環境(MinGW や Python 等)のインストール状況に依存せず「置いてすぐ動く」ことを重視しています。 -- **Gemma-3 統合**: Google の最新軽量モデル Gemma-3 270m を採用。640 次元の高精度な埋め込み(Embedding)を、わずかなリソースで提供します。 - -## 4. 動作環境 - -- **OS**: Windows 10/11 (64-bit) -- **CPU**: AVX2 命令セット対応推奨 -- **GPU**: Vulkan 対応ハードウェア (オプション、自動検出) -- **モデル**: Gemma-3 270m (640 dimensions) diff --git a/document/02_architecture_design.md b/document/02_architecture_design.md deleted file mode 100644 index 6005b18..0000000 --- a/document/02_architecture_design.md +++ /dev/null @@ -1,62 +0,0 @@ -# アーキテクチャ設計仕様書 (Architecture Design Specification) - -## 1. 全体構造図 - -本システムは、OS のシステムトレイに常駐する「ホストプロセス(Tauri 2)」と、推論を担う「サイドカープロセス(llama-server)」、および外部エージェントとの通信を担う「MCP サーバ(Axum)」の 3 つが有機的に連携する構造です。 - -```mermaid -graph TD - subgraph "Presentation Layer (Webview2)" - UI["Glassmorphism UI (Vanilla JS)"] - SSE_Monitor["Activity Log View (SSE)"] - end - - subgraph "Application Layer (Rust / Tauri 2)" - Tauri["Tauri Core (Main Process)"] - Tray["System Tray Controller"] - Axum["Axum (MCP SSE Server - Port 3001)"] - Broadcast["Tokio Broadcast Bus"] - end - - subgraph "Infrastructure Layer" - DB["SQLite + sqlite-vec (telos.db)"] - LS["Sidecar: llama-server (Port 8080)"] - M["Gemma-3 Model (Local inference)"] - end - - UI -- "IPC: Invoke" --> Tauri - Tauri -- "IPC: UI Update" --> UI - Axum -- "SSE: Status Events" --> UI - Axum -- "Internal Notif" --> Broadcast - Broadcast -- "Internal Notif" --> Axum - Tauri -- "SQL" --> DB - DB -- "SQL" --> Tauri - Axum -- "SQL" --> DB - DB -- "SQL" --> Axum - Tauri -- "HTTP/Embedding" --> LS - LS -- "Inference" --> M - Tray -- "Command" --> UI -``` - -## 2. プロセス間通信とデータフロー - -### 2.1 Tauri Core と Axum (MCP) の連携 - -本システムの最大の特徴は、デスクトップアプリとしての GUI 管理を Tauri が行い、外部通信インターフェース(MCP)を Axum が担当する「デュアルサーバ」構成にあります。 -両者はメモリを共有していますが、非同期なデータ操作通知(例:エージェントが MCP 経由でデータを登録した際に UI の件数を増やす)には **Tokio Broadcast Channel** を使用し、疎結合な連携を実現しています。 - -### 2.2 推論サイドカー (llama-server) の制御 - -Embedding 計算を行う `llama-server` は、Tauri のサイドカー機能によって起動・管理されます。 - -- **起動時**: `lib.rs` の `setup` フックでサイドカーをスポーン。 -- **通信**: Rust バックエンドが `reqwest` を用いてローカルポート 8080 へ HTTP 要求を送信。 -- **終了時**: Tauri のプロセスマネージャにより、アプリ終了と同時にサイドカーも安全にクリーンアップされます。 - -## 3. 各レイヤーの役割分担 - -| レイヤー | 主要コンポーネント | 役割と責務 | -| :--- | :--- | :--- | -| **Presentation** | フロントエンド (index.html) | 設定状況の表示、アクティビティログ(SSE)の可視化、システム操作。 | -| **Application** | Rust コア (`lib.rs`, `mcp.rs`) | ビジネスロジック。MCP 要求のパース、サイドカーとの通信、DB 操作のオーケストレーション。 | -| **Infrastructure** | SQLite, llama-server | データの永続化、ベクトル空間の管理、LLM 推論エンジンの実行。 | diff --git a/document/03_database_specification.md b/document/03_database_specification.md deleted file mode 100644 index 233d4ff..0000000 --- a/document/03_database_specification.md +++ /dev/null @@ -1,60 +0,0 @@ -# データベース・ベクトル検索仕様書 (Database & Search Specification) - -## 1. データベース設計思想 - -本システムでは、SQLite を単なるメタデータストレージとしてだけでなく、**「ベクトル検索エンジン」**としても活用しています。これにより、ACID 特性(データの整合性保証)を維持しながら、高速なセマンティック検索を実現しています。 - -### 1.1 sqlite-vec の役割 - -`sqlite-vec` エクステンションを採用することで、標準的な SQL クエリの中でベクトル間の「距離計算」が可能になります。 - -- **メリット**: 文書(Text)と特徴量(Vector)を別々のデータベースに分けずに済み、トランザクションの一貫性が保たれます。 -- **距離指標**: 本システムでは「L2 距離(二乗和の平方根)」を使用し、値が小さいほど類似度が高いと判断します。 - -## 2. エンティティ関係定義 (ERD) - -```mermaid -erDiagram - items ||--|| vec_items : "Reference by ID (1:1)" - - items { - integer id PK "文書ID (自動採番)" - text content "原文テキスト" - text path "出典・メタデータ" - datetime created_at "作成日" - } - - vec_items { - integer id PK "items.id と紐付け" - blob embedding "640次元ベクトルデータ(f32)" - } -``` - -## 3. ベクトル検索とセルフヒーリング - -### 3.1 `search_text` のロジック - -検索クエリが入力されると、システムは以下の手順を踏みます。 - -1. クエリを `llama-server` に送り、ベクトル化する。 -2. SQLite 上で `vec_items` テーブルをスキャンし、クエリベクトルに近い順(L2距離順)に `items.id` を取得。 -3. `items` テーブルから実際のテキストを取得して結合。 - -### 3.2 セルフヒーリング (Self-healing) の必要性 - -モデルの変更や、インポート時の中断などにより、`items` にテキストはあるが `vec_items` に対応するベクトルが存在しない「不整合状態」が稀に発生し得ます。 -本システムは `db::sync_vectors` ロジックを備えており: - -- 起動時または特定のトリガーで `items` を全走査。 -- ベクトルが欠落している行を自動検出し、サイドカー経由で再生成・補完。 -これにより、常に検索結果の網羅性を保証します。 - -## 4. テーブル詳細 - -### 4.1 `items` (メタデータ管理) - -文書の本体と、それに付随する情報を保持します。`path` カラムは、将来的なローカルパス連携や URL 参照を想定した自由形式の文字列です。 - -### 4.2 `vec_items` (ベクトル演算用仮想テーブル) - -`sqlite-vec` によって定義された仮想テーブルです。`dimensions=640` として設定されており、Gemma-3 の出力層と完全一致させています。 diff --git a/document/04_mcp_api_specification.md b/document/04_mcp_api_specification.md deleted file mode 100644 index b3badc5..0000000 --- a/document/04_mcp_api_specification.md +++ /dev/null @@ -1,55 +0,0 @@ -# MCP・APIインターフェース仕様書 (MCP & API Specification) - -## 1. プロトコル設計思想 - -本システムは、Anthropic が提唱する **Model Context Protocol (MCP)** に準拠しています。これにより、IDE(Cursor 等)や外部エージェントが、本システムを単なる「静的なドキュメント」としてではなく、対話可能な「インテリジェントな知識ベース」として認識できるようになります。 - -### 1.1 なぜ SSE (Server-Sent Events) なのか - -MCP には Stdio と SSE の 2 つのトランスポートがありますが、本システムでは **SSE** を採用しています。 - -- **UIとの親和性**: GUI を持つデスクトップアプリでは、Stdio は標準入出力の競合が発生しやすいため、HTTP ベースの SSE が適しています。 -- **多重接続**: 同時に複数のエージェント(例:IDE と ブラウザ拡張)からの要求を並行して処理することが可能です。 - -## 2. インターフェース定義 - -- **ポート**: 3001 (固定) -- **エンドポイント**: - - **Connection**: `GET /sse` (接続維持・通知受取) - - **Message**: `POST /messages?session_id={uuid}` (コマンド送信) - -## 3. 提供ツール (Capabilities) - -本システムのリソースへアクセスするための具体的なコマンド群です。 - -| ツール名 | 役割 | 解説 | -| :--- | :--- | :--- | -| `add_item_text` | 文書の永続化 | テキストを Embedding 化して DB へ保存。 | -| `search_text` | 意味検索 | 記述内容の類似度に基づいたベクトル検索。 | -| `update_item` | 知識の更新 | ID 指定による既存データの書き換え。 | -| `delete_item` | 知識の抹消 | ID 指定による物理削除。 | -| `get_item_by_id` | 生データ取得 | メタデータを含むレコードの直接参照。 | - -## 4. 通信シーケンスとレスポンス形式 - -ツール呼び出しは JSON-RPC 2.0 に準拠しており、結果は常に MCP 規格の `content` 配列形式で返されます。 - -```json -{ - "jsonrpc": "2.0", - "result": { - "content": [ - { - "type": "text", - "text": "[結果メッセージ]" - } - ] - }, - "id": "req-123" -} -``` - -## 5. 開発者向けデバッグ情報 - -- `/status` エンドポイントにアクセスすることで、現在の MCP セッション数やシステム負荷状況を確認できます。 -- エラーコード `-32000` が返された場合は、バックグラウンドの `llama-server` との通信エラー(タイムアウト等)の可能性が高いです。 diff --git a/document/05_sidecar_integration.md b/document/05_sidecar_integration.md deleted file mode 100644 index 1e24bf4..0000000 --- a/document/05_sidecar_integration.md +++ /dev/null @@ -1,36 +0,0 @@ -# サイドカー統合仕様書 (Sidecar Integration Specification) - -## 1. サイドカーの役割と設計思想 - -本システムにおける **llama-server** は、外部プロセスとして動作する「推論エンジン」です。Rust コアにライブラリとして組み込むのではなく、サイドカー(別プロセス)として分離することで、以下の設計上の利点を得ています。 - -- **安定性の隔離**: 万が一推論エンジンがメモリ不足などでクラッシュしても、メインの GUI や MCP サーバー、データベースは影響を受けず、安全に再起動を行えます。 -- **更新の柔軟性**: モデルバイナリやランタイムを Rust コードの再コンパイルなしでアップデート可能です。 - -## 2. プロセス管理 - -### 2.1 ライフサイクル制御 - -Tauri の `Command` API を使用して管理されます。 - -- **自動起動**: アプリ起動時に `--embedding` モードでバックグラウンド実行されます。 -- **孤立防止**: メインプロセスが異常終了した場合でも、プロセスグループ管理によりサイドカーがゾンビプロセスとして残らないよう設計されています。 - -### 2.2 起動引数の詳細 - -現状、以下のパラメータで最適化されています。 - -- `--pooling mean`: Embedding 精度の向上のための設定。 -- `--embedding`: 入力テキストから特徴ベクトルを抽出する機能を有効化します。 - -## 3. Hermetic Build (自己完結型ビルド) - -Windows 環境における DLL 地獄を防ぐため、以下の設計を徹底しています。 - -- **DLL 自動配置**: ビルドおよびリリース時に、`vec0.dll` (sqlite-vec) などの依存ライブラリを実行ファイルと同階層に自動的にコピーします。 -- **パス解決**: アプリ実行時に `LdgLibrary` 等の仕組みを介さず、カレントディレクトリから優先的に DLL をロードするよう `build.rs` で制御しています。 - -## 4. トラブルシューティング - -- **ポート 8080 の競合**: 他のアプリがポート 8080 を使用している場合、サイドカーの起動に失敗します。このステータスは UI 上のインジケーターで確認可能です。 -- **モデル未検出**: `resources` フォルダ内に適切な GGUF モデルが存在しない場合、ログにエラーが出力され、検索機能が無効化されます。 diff --git a/document/06_development_guide.md b/document/06_development_guide.md deleted file mode 100644 index 87fa6cc..0000000 --- a/document/06_development_guide.md +++ /dev/null @@ -1,43 +0,0 @@ -# 開発者ガイド (Development Guide) - -## 1. 開発の基本コンセプト - -TelosDB の開発においては、**「確信の持てるコード」**と**「自動化された環境」**を重視します。Windows 環境特有の DLL 競合やビルドエラーを避けるため、環境構築手順を簡略化しています。 - -## 2. 環境構築の手順 - -### 2.1 必要なツール - -- **Rust**: 最新の Stable ツールチェーン。 -- **Node.js**: フロントエンド資材の管理用。 -- **VS Code**: 推奨エディタ(Tauri / Rust 拡張機能)。 - -### 2.2 初回セットアップ - -1. リポジトリをクローン。 -2. `npm install` を実行(`sqlite-vec` などのバイナリ等が含まれます)。 -3. `src-tauri/resources/` に指定の推論モデル(Gemma-3 GGUF)を配置。 - -## 3. ビルドと実行 - -```bash -# 開発モード(ホットリロード有効) -npm run tauri dev -``` - -> [!NOTE] -> 開発時に DLL のエラーが出る場合は、一度 `cargo clean` を行い、`build.rs` による DLL 再生成を促してください。 - -## 4. 拡張手順 (MCP ツールの追加) - -新しい機能を MCP 経由で公開する場合は、以下のファイルを修正します。 - -1. **`mcp.rs`**: JSON-RPC ハンドラーに新しいメソッドを追加。 -2. **`document/mcp.json`**: ツールのスキーマ(引数定義)を記述。エージェントがこの定義を読み取ります。 -3. **`04_mcp_api_specification.md`**: 仕様書を更新。 - -## 5. コーディング規約とテスト - -- **非同期処理**: SQLite 操作や通信はすべて `tokio` ランタイム上で行い、UI をブロックしないようにします。 -- **ログ**: `log::info!` / `log::error!` を使用してください。ログは `src-tauri/logs/` に自動出力されます。 -- **テスト**: ロジックの変更後は必ず `scripts/test_mcp_client.mjs` を実行し、既存ツールが壊れていないか確認してください。 diff --git a/document/07_ui_design_spec.md b/document/07_ui_design_spec.md deleted file mode 100644 index 5a7540e..0000000 --- a/document/07_ui_design_spec.md +++ /dev/null @@ -1,39 +0,0 @@ -# UI デザイン仕様書 (UI Design Specification) - -## 1. コンセプト: Glassmorphism - -TelosDB の UI は、Apple の macOS や Microsoft の Windows 11 のトレンドを取り入れた **「ガラスモーフィズム (Glassmorphism)」** をテーマにしています。 -これは、デスクトップアプリという「OSとの調和」が求められる環境において、透明感と高級感を演出するためです。 - -### 1.1 デザインの構成要素 - -- **背景**: すりガラスのようなブラー効果(`backdrop-filter: blur`)。 -- **ボーダー**: 光の屈折を表現する微細なセミ透明の境界線。 -- **タイポグラフィ**: 視認性の高い、モダンなサンセリフ体。 - -## 2. インタラクティブ・フィードバック - -### 2.1 ステータス・インジケーター - -画面右上のドットは、システムの「生存確認」を行います。 - -- `Green`: 全システム正常稼働中。 -- `Red`: サイドカーまたは MCP サーバーの停止。 -- `Click`: 詳細な接続ステータスをポップオーバー表示。 - -### 2.2 アクティビティ・ログ (SSE Listener) - -検索や登録が発生した際、画面下部にアニメーションと共にログが流れます。 -これは **SSE (Server-Sent Events)** によってバックエンドから「プッシュ」される仕組みになっており、ユーザーはアプリがバックグラウンドで何を行っているかをリアルタイムに把握できます。 - -## 3. フロントエンド技術スタック - -あえて重量級のフレームワークを避け、**Vanilla JS** と **Vanilla CSS** で構成しています。 - -- **理由**: Tauri の WebView2 は非常に高速であり、余計なレイヤーを挟まないことでメモリ消費を抑え、起動速度を最大化するためです。 -- **SSE 実装**: `EventSource` API をネイティブに使用し、低遅延な通知受け取りを実現。 - -## 4. レイアウト構造 - -メインエリアには現在のドキュメント登録数(Docs Count)が強調表示され、システムの「知識の蓄積状況」を直感的に確認できる設計になっています。 -ログエリアは最大 5 件まで履歴を表示し、それ以上は滑らかにフェードアウトします。 diff --git a/document/mcp.json b/document/mcp.json deleted file mode 100644 index 6d82804..0000000 --- a/document/mcp.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "mcpServers": { - "TelosDB": { - "command": "telosdb-app", - "args": [], - "env": {}, - "tools": [ - { - "name": "search_text", - "description": "Semantic search using sqlite-vec (640d).", - "arguments": { - "content": "string", - "limit": "number" - } - }, - { - "name": "add_item_text", - "description": "Add new text with auto-generated embeddings.", - "arguments": { - "content": "string", - "path": "string" - } - }, - { - "name": "update_item", - "description": "Update text and re-generate embedding.", - "arguments": { - "id": "number", - "content": "string", - "path": "string" - } - }, - { - "name": "delete_item", - "description": "Delete item and vector by ID.", - "arguments": { - "id": "number" - } - }, - { - "name": "get_item_by_id", - "description": "Retrieve raw text and metadata by ID.", - "arguments": { - "id": "number" - } - } - ] - } - } -} diff --git a/document/openapi.yaml b/document/openapi.yaml deleted file mode 100644 index c799e35..0000000 --- a/document/openapi.yaml +++ /dev/null @@ -1,73 +0,0 @@ -openapi: 3.0.3 -info: - title: SQLite Vector MCP REST API - version: 0.1.0 - description: | - REST API for text-based insert/search backed by sqlite-vec. - Note: Endpoints are planned and documented here. -servers: - - url: http://localhost:3000 -paths: - /api/items: - post: - summary: Add item from text - description: Generates embeddings from text and stores item + vector. - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - content: - type: string - required: - - content - responses: - "200": - description: Item created - content: - application/json: - schema: - type: object - properties: - id: - type: integer - content: - type: string - "400": - description: Invalid request - /api/search: - post: - summary: Search by text - description: Generates embeddings from text and returns nearest items. - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - content: - type: string - required: - - content - responses: - "200": - description: Search results - content: - application/json: - schema: - type: object - properties: - results: - type: array - items: - type: object - properties: - content: - type: string - distance: - type: number - "400": - description: Invalid request diff --git a/index.html b/index.html deleted file mode 100644 index c8f80a6..0000000 --- a/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - temp_app - - -
- - - diff --git "a/journals/202602-008-DB\345\210\235\346\234\237\345\214\226\345\210\267\346\226\260\343\201\250\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\345\206\215\345\273\272.md" "b/journals/202602-008-DB\345\210\235\346\234\237\345\214\226\345\210\267\346\226\260\343\201\250\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\345\206\215\345\273\272.md" deleted file mode 100644 index c074339..0000000 --- "a/journals/202602-008-DB\345\210\235\346\234\237\345\214\226\345\210\267\346\226\260\343\201\250\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\345\206\215\345\273\272.md" +++ /dev/null @@ -1,47 +0,0 @@ -# 202602-008-DB初期化刷新とリポジトリ再建 - -## 週次サマリー (2026/02/16 - 2026/02/22) - -```mermaid -timeline - title 2026年2月 第8週の歩み - 2026-02-16 : DB初期化ロジック刷新 : 埋め込み次元動的検知 : Gemma-3 270M 移行 : NSIS配布パッケージ作成 - 2026-02-17 : リモートリポジトリ(GitBucket)再建 : 日次ジャーナル整理 : README.md 清書 -``` - ---- - -## 20260216-0002-DB初期化の刷新とGemma-3移行 - -### 案件概要 - -AIエージェント(Antigravity)は、データベース初期化プロセスの堅牢化と、モデル変更に柔軟に対応できる動的構成システムを構築し、デフォルトモデルを Gemma-3 270M へ移行した。 - -### 作業詳細 - -- **初期化統合**: `rusqlite` を完全に廃止し `sqlx` へ一本化。非同期 `SqlitePool` による一貫した初期化を実現。 -- **動的次元検知**: モデルごとの次元数(Qwen: 1536, Gemma-3: 640/768)を起動時に自動検知する仕組みを導入。不整合時のテーブル自動再生成機能を実装。 -- **セルフヒーリング**: バックグラウンドで欠損ベクトルを自動再取得・同期する機能を実装。 -- **配布パッケージ**: NSIS (`.exe`) 形式のインストーラー作成フローを確立。未使用モデルの除外によりサイズを 240MB へ軽量化した。 - -### AI視点での結果 - -モデル変更時の手動調整が不要になり、システムの汎用性とメンテナンス性が飛躍的に向上した。配布用バイナリの安定性も確保された。 - ---- - -## 20260217-0001-リモートリポジトリの再建とプッシュ - -### 案件概要 - -AIエージェントは、再建されたリモートリポジトリへの最新状態の反映、およびプロジェクト運用ルールに基づくドキュメント・ジャーナルの整理を実施した。 - -### 作業詳細 - -- **リポジトリ復旧**: 空になったリモート(GitBucket)へ `git push -u origin main` を実行し全履歴を復元。 -- **ジャーナル整理**: 過去の日次報告を運用ルールに基づき 1 日 1 ファイルへ再編。 -- **ドキュメント清書**: `README.md` を最新のシステム構成(Tauri 2 + Gemma-3 + MCP)に合わせて全面的に修正。 - -### AI視点での結果 - -コードとドキュメントの整合性が保たれ、チーム開発(Git)が再び正常に機能する体制が整った。 diff --git "a/journals/202602-008-\343\202\267\343\202\271\343\203\206\343\203\240\343\201\256\350\204\261LLM\345\214\226\343\201\250UI\345\210\267\346\226\260.md" "b/journals/202602-008-\343\202\267\343\202\271\343\203\206\343\203\240\343\201\256\350\204\261LLM\345\214\226\343\201\250UI\345\210\267\346\226\260.md" new file mode 100644 index 0000000..a71af35 --- /dev/null +++ "b/journals/202602-008-\343\202\267\343\202\271\343\203\206\343\203\240\343\201\256\350\204\261LLM\345\214\226\343\201\250UI\345\210\267\346\226\260.md" @@ -0,0 +1,1284 @@ +# 2026年第008週 (2/16 - 2/22) 作業アーカイブ: DB刷新・検索強化・UI改修 + +## 週全体のサマリー + +今週(第008週)は、DB初期化ロジックの刷新(sqlxへの移行とGemma-3対応)やGitリポジトリの再建から始まりました。**その後、重要な方針転換がなされました。** 検索エンジンにおいて重厚なLLM(llama-server等)への依存を完全に排除し、完全ローカルで軽量に動作する **LSA(潜在意味解析)** と **HNSW** インデックスを用いたベクトル検索エンジンへと舵を切りました。 + +これにより、純RustでのSVD実装による検索精度の自給自足や、sqlite-vecとのシームレスな統合に成功しています。並行して、フロントエンドのUIも全面的にモダナイズ(ガラスモーフィズム、ヘッダー・フッターの固定化、ダークテーマ拡張)し、システムの自立性と使いやすさが劇的に向上した1週間となりました。 + +```mermaid +gantt + title 第008週 プロジェクト進捗 + dateFormat YYYY-MM-DD + section DB & リポジトリ + DB初期化刷新とGemma-3対応 :2026-02-16, 1d + Gitリモート再建と整理 :2026-02-17, 1d + section ドキュメント + 仕様書とジャーナルの整理 :2026-02-18, 1d + section 検索エンジン (LSA) + gemini-rag移植とLSA実装 :2026-02-19, 1d + 形態素解析とsqlite-vec連携 :2026-02-19, 1d + 純Rust SVDと検索精度向上 :2026-02-19, 1d + section アーキテクチャ強化 + ANN検討とHNSW統合 :2026-02-20, 1d + ランキング検証と品質改善 :2026-02-20, 1d + section UIデザイン + UI全面的刷新とレイアウト固定 :2026-02-20, 1d +``` + +--- + +## 20260216-0002-DB初期化の刷新とGemma-3移行 + +### 案件概要 + +AIエージェント(Antigravity)は、データベース初期化プロセスの堅牢化と、モデル変更に柔軟に対応できる動的構成システムを構築し、デフォルトモデルを Gemma-3 270M へ移行した。 + +### 作業詳細 + +- **初期化統合**: `rusqlite` を完全に廃止し `sqlx` へ一本化。非同期 `SqlitePool` による一貫した初期化を実現。 +- **動的次元検知**: モデルごとの次元数(Qwen: 1536, Gemma-3: 640/768)を起動時に自動検知する仕組みを導入。不整合時のテーブル自動再生成機能を実装。 +- **セルフヒーリング**: バックグラウンドで欠損ベクトルを自動再取得・同期する機能を実装。 +- **配布パッケージ**: NSIS (`.exe`) 形式のインストーラー作成フローを確立。未使用モデルの除外によりサイズを 240MB へ軽量化した。 + +### AI視点での結果 + +モデル変更時の手動調整が不要になり、システムの汎用性とメンテナンス性が飛躍的に向上した。配布用バイナリの安定性も確保された。 + +--- + +## 20260217-0001-リモートリポジトリの再建とプッシュ + +### 案件概要 + +AIエージェントは、再建されたリモートリポジトリへの最新状態の反映、およびプロジェクト運用ルールに基づくドキュメント・ジャーナルの整理を実施した。 + +### 作業詳細 + +- **リポジトリ復旧**: 空になったリモート(GitBucket)へ `git push -u origin main` を実行し全履歴を復元。 +- **ジャーナル整理**: 過去の日次報告を運用ルールに基づき 1 日 1 ファイルへ再編。 +- **ドキュメント清書**: `README.md` を最新のシステム構成(Tauri 2 + Gemma-3 + MCP)に合わせて全面的に修正。 + +### AI視点での結果 + +コードとドキュメントの整合性が保たれ、チーム開発(Git)が再び正常に機能する体制が整った。 + +## 2026/02/18: ジャーナル整理 + +### 20260218-0001-ジャーナル整理 + +#### 概要 + +プロジェクトの長期運用に伴い、増えすぎたジャーナルファイルを整理(集約)し、ドキュメントの視認性を向上させました。また、README.mdを最新のシステム構成(Tauri 2 / Gemma-3 / MCP)に合わせて清書しました。 + +#### 実施内容 + +1. **ジャーナルファイルの集約 (Rule 13)** + - `2026/02/15` 分の7つの個別ファイルを `20260215-TelosDB開発.md` に集約。 + - `2026/02/17` 分の重複確認と `20260217-TelosDB開発.md` への一元化。 +2. **不要ファイルの削除** + - 統合・集約が完了した個別のジャーナルファイルを物理削除。 +3. **README.md の更新 (Rule 12)** + - システムの構造図(Mermaid)のブラッシュアップ。 + - Tauri 2 への完全移行、MCP SSE サーバー機能、Gemma-3 統合などの最新状況を正確に反映。 + +#### 整理後の構造 (Mermaid) + +```mermaid +graph LR + subgraph "Journals (Rule 13)" + J_OLD[20260206-20260214.md] + J_15[20260215-TelosDB開発.md] + J_16[20260216-TelosDB開発.md] + J_17[20260217-TelosDB開発.md] + J_18[20260218-0001-ジャーナル整理.md] + end + + subgraph "Documents" + README[README.md] + end + + J_OLD & J_15 & J_16 & J_17 & J_18 --> README +``` + +#### 成果 + +- ジャーナルファイルが1日1ファイルに整理され、作業履歴の追跡が容易になりました。 +- README.md が現在の開発フェーズを正しく説明する「顔」として機能するようになりました。 + + +## 2026/02/18: 仕様書リフレッシュ + +### 20260218-0002-仕様書リフレッシュ + +#### 概要 + +本日のタスクとして、`document/` フォルダ内の仕様書一式を最新の実装状況に合わせてリフレッシュした。特に古い名称である「sqlite-vector」を完全に排除し、「sqlite-vec」に統一した。 + +#### 実施内容 + +##### 1. 仕様書の全面刷新 + +以下のファイルを、Tauri 2, Gemma-3, MCP SSE, および現在のディレクトリ構造に基づいて書き換えた。 + +- `01_system_overview.md`: セルフヒーリング機能、Vulkan 支援、Gemma-3 仕様の追記。 +- `02_architecture_design.md`: Mermaid 図の更新(Axum SSE, Broadcast バスなど)。 +- `03_database_specification.md`: ベクトル次元数を 640 に修正。sqlite-vec への統一。 +- `04_mcp_api_specification.md`: `get_item_by_id` などのツール追加、ポート 3001 の明記。 +- `05_sidecar_integration.md`: llama-server の `pooling` 引数や DLL 配置ロジックの最新化。 +- `06_development_guide.md`: ディレクトリ構造の現状(`src-tauri/src/`)への修正。 +- `07_ui_design_spec.md`: 実装済みのガラスモーフィズム UI 仕様と SSE リスナーの反映。 + +##### 2. 関連ファイルの整理 + +- `mcp.json`: 実装されているツール一覧(CRUD + Search + Get)を正確に記述。 +- `openapi.yaml`: 現在の MCP 中心の実装と一致しないため削除。 + +#### システム構造図 (Mermaid) + +```mermaid +graph LR + subgraph Frontend + UI[Vanilla JS UI] + SSE[SSE Listener] + end + + subgraph Backend + Tauri[Tauri 2 Core] + Axum[Axum MCP Server] + DB[SQLite + sqlite-vec] + end + + subgraph Sidecar + Llama[llama-server] + Model[Gemma-3 GGUF] + end + + UI <--> Tauri + SSE <-- Axum + Tauri <--> DB + Axum <--> DB + Tauri -- HTTP --> Llama + Llama -- Inference --> Model +``` + +#### 今後の展望 + +- ドキュメントが最新化されたことで、外部エージェント(Cursor, Claude 等)への MCP 経由のコンテキスト提供がより正確になることが期待される。 +- 新機能実装の際も、このドキュメントを基点とした一貫性のある開発を継続する。 + + +## 2026/02/18: 仕様書解説充実化 + +### 20260218-0003-仕様書解説充実化 + +#### 概要 + +以前作成した仕様書が簡潔な記述に留まっていたため、設計思想や背景を含めた詳細な「解説」を追記し、真の意味での技術仕様書として完成させた。 + +#### 実施内容 + +##### 1. 全仕様書の加筆・修正 + +単なる機能定義を超え、以下の観点で内容を深掘りした。 + +- **01 (概要)**: プライバシー、コスト、ローカル完結の価値についての背景を追記。 +- **02 (設計)**: デュアルサーバ(Tauri+Axum)構成の意図と、Broadcastバスによる非同期連携の仕組みを解説。 +- **03 (DB)**: ACID特性の維持とベクトルエンジンの統合メリット、セルフヒーリングの必要性を記述。 +- **04 (MCP)**: なぜ SSE を採用したのか、その UX 上・開発上の利点を詳説。 +- **05 (サイドカー)**: 安定性の隔離(プロセス分離)と Hermetic Build(自己完結型)の設計思想を追記。 +- **06 (開発)**: 「置いてすぐ動く」ための環境構築の簡略化と、MCP拡張の具体的な勘所を提示。 +- **07 (UI)**: Glassmorphism の採用理由と Vanilla JS 選択によるパフォーマンス上の利点を解説。 + +##### 2. 品質管理 + +- **Mermaid 修正**: 文法エラー(`<-->` 等)を排除し、高い互換性を持つ構文に統一。 +- **Lint 対応**: 重複見出し(MD024)を排除し、構造的な正しさを担保。 + +#### システムアーキテクチャ概略 (Updated Context) + +```mermaid +graph LR + subgraph "Knowledge Base" + DB[(SQLite + sqlite-vec)] + LS[llama-server] + end + + subgraph "Core Hub (Tauri)" + Main[Rust Logic] + Bus[Broadcast Channel] + end + + subgraph "Interfaces" + Web[Glassmorphism UI] + MCP[MCP SSE API] + end + + Main -- "Sync/Embedding" --> LS + Main -- "CRUD" --> DB + Bus -- "Async Notif" --> MCP + MCP -- "External Access" --> Agent((Cursor/IDE)) + Web -- "Push State" --> Main +``` + +#### 成果 + +本リフレッシュにより、開発者がシステムの「機能」だけでなく「意図」を理解できるドキュメント群が整った。これにより、今後の機能拡張時の一貫性が強化される。 + + +## 2026/02/18: ジャーナル週次アーカイブ化 + +### 20260218-0004-ジャーナル週次アーカイブ化 + +#### 概要 + +AIエージェント(Antigravity)は、プロジェクト規約に基づき、2026年2月第6週から第8週(前日まで)の全ジャーナルファイルを週単位のアーカイブへ集約し、フォルダ構成を整理しました。 + +#### 実施内容 + +1. **週次アーカイブの作成 (Archive Rule 3)** + - **Week 006 (02/02 - 02/08)**: Tauri 移行と初期安定化の記録を集約。 + - **Week 007 (02/09 - 02/15)**: TelosDB への改名、UI 刷新、ビルド環境修復の記録を集約。 + - **Week 008 (02/16 - 02/17)**: DB 初期化刷新、リポジトリ再建の記録を集約。 +2. **タイムラインの視認化** + - 各週次ファイル冒頭に Mermaid タイムラインを追加し、週ごとの主要なマイルストーンを俯瞰可能にしました。 +3. **旧ファイルの削除** + - アーカイブが完了した 9 件の日次ファイルを削除し、`journals` フォルダをクリーンアップしました。 + +#### 整理後の構造 (Mermaid) + +```mermaid +graph TD + subgraph "Weekly Archives" + W006["202602-006...md"] + W007["202602-007...md"] + W008["202602-008...md"] + end + + subgraph "Current Journals (Today)" + J001["20260218-0001...md"] + J002["20260218-0002...md"] + J003["20260218-0003...md"] + J004["20260218-0004-ジャーナル週次アーカイブ化.md"] + end + + W006 --- W007 + W007 --- W008 + W008 --- J001 +``` + +#### AI視点での結果 + +フォルダ内のファイル数が整理され、過去の経緯を週単位で効率的に振り返ることが可能になりました。規約に完全準拠したドキュメント管理体制を維持しています。 + + +## 2026/02/19: 情報収集用フォルダ作成 + +### 20260219-0001-情報収集用フォルダ作成 + +#### 作業実施の理由 + +ユーザーより、情報収集用のフォルダを作成したいとの要望があったため。 + +#### 指示(背景、観点、意図) + +- フォルダ名は `references` とすること。 +- 当該フォルダを `.gitignore` に追加し、Gitの管理対象外とすること。 +- 日本語での対応を希望。 + +#### 指示事項とその対応 + +- **フォルダ名選定**: ユーザーの提案に基づき `references` を採用。 +- **Git管理**: `.gitignore` に追加し、誤って機密情報や外部資料がコミットされないよう配慮。 + +#### 作業詳細 + +1. AIエージェントは `.gitignore` を確認し、`Project specific` セクションに `references/` を追記。 +2. AIエージェントは `mkdir references` コマンドを実行し、ディレクトリを物理作成。 +3. AIエージェントは `git check-ignore` を実行し、設定が正しく反映されていることを検証。 + +#### Mermaidによる工程図 + +```mermaid +graph TD + Start["開始: フォルダ作成の要望"] --> Plan["実装プラン作成 (日本語)"] + Plan --> Approve["ユーザー承認"] + Approve --> UpdateGitignore["'.gitignore' に 'references/' を追加"] + UpdateGitignore --> CreateDir["'references' フォルダ作成"] + CreateDir --> Verify["'git check-ignore' で検証"] + Verify --> Journal["ジャーナル記録"] + Journal --> End["完了"] +``` + +#### AI視点での結果 + +`references` フォルダを適切に作成し、Git管理からも除外した。これにより、ユーザーが外部資料や個人メモをプロジェクト内に安全に保持できる環境が整った。検証の結果、`.gitignore` の設定も意図通り動作していることを確認した。 + + +## 2026/02/19: gemini-rag移植 + +### 20260219-0002-gemini-rag移植 + +#### 作業実施の理由 + +ユーザー所有の外部ユーティリティ `gemini-rag.js` を本プロジェクト内で利用可能にするため。ただし、製品本体には含めず、個人用ワークスペースとして管理する。 + +#### 指示(背景、観点、意図) + +- 製品コードや依存関係 (`package.json`) を汚さないこと。 +- `private` フォルダを作成し、Git管理外 (`.gitignore`) とすること。 +- ツール独自の依存関係は `private` 配下で完結させること。 +- ESM (.mjs) 形式への変換を行うこと。 + +#### 指示事項とその対応 + +- **隔離戦略**: ルートに `private` フォルダを作成し、`.gitignore` で除外。 +- **階層の簡略化**: ユーザーの指摘により、`private/tools/gemini-rag/` ではなく `private/tools/` 直下にファイルを配置。 +- **依存関係の分離**: `private/tools/package.json` を作成。 +- **ESM化**: 移植元の CommonJS (`require`) を ESM (`import`) に書き換え。 + +#### 作業詳細 + +1. AIエージェントは `.gitignore` に `private/` を追加。 +2. AIエージェントは `private/tools` ディレクトリを整理し、`main.mjs`, `package.json`, `utils/` を直下に配置。 +3. AIエージェントは ツール専用の dependencies を `private/tools/node_modules` にインストール。 +4. AIエージェントは `main.mjs` のパス仕様を調整。 + - `.env` はスクリプトと同じディレクトリ (`private/tools/`) から読み込み。 + - 出力先 (`references/`) はプロジェクトルートを基準に設定。 +5. AIエージェントは ルートの `package.json` から不要な依存関係を削除。 + +#### 検証結果 + +AIエージェントは実際に複数のテストクエリを実行し、以下の正常動作を確認した。 + +- `private/tools/.env` の設定を利用した RAG プロセスの完遂。 +- プロジェクトルートの `references/` フォルダへのレポート生成。 +- 調査結果を体系的にまとめた資料 `references/20260219-05-文書ベクトル化手法の調査まとめ.md` の作成(ナレッジ蓄積)。 + +#### Mermaidによる工程図 + +```mermaid +graph TD + Start["開始: gemini-rag.js 移植"] --> Strategy["隔離戦略の決定 (privateフォルダ)"] + Strategy --> GitIgnore["'.gitignore' に 'private/' 追加"] + GitIgnore --> CreateDir["'private/tools' 整理 (階層簡略化)"] + CreateDir --> ToolDeps["ツール専用 package.json & .env 配置"] + ToolDeps --> PortCode["コード移植 (ESM化 & パス調整)"] + PortCode --> Verify["動作検証 (RAG検索テスト)"] + Verify --> Record["結果の記録 (referencesへのサマリー保存)"] + Record --> End["完了"] +``` + +#### AI視点での結果 + +製品本体のクリーンさを保ちつつ、ユーザーの利便性を高める移植が完了した。`private` フォルダは完全に隔離されており、今後他のツールを追加する際も同様のパターンで安全に拡張可能である。 + + +## 2026/02/19: 日本語LSA検索実装 + +### 20260219-0003-日本語LSA検索実装 + +#### 作業実施の理由 + +ユーザーより、日本語のセマンティック検索を CPU 負荷の低い方法で実現したいとの要望があり、LLM を使用しない代替案として LSA (潜在意味解析) の実装を提案し、承認を得たため。 + +#### 指示の背景・観点・意図 + +- **背景**: 既存のベクトル検索は外部の llama-server (LLM) に依存しており、CPU リソースが限られた環境では重い。 +- **観点**: 「軽さは正義」を基本理念とし、Rust ネイティブなライブラリのみで完結させる。 +- **意図**: 日本語の形態素解析(Lindera)と統計的なアプローチ(LSA)を組み合わせることで、オフラインかつ高速な「意味検索」を提供する。 + +#### 作業詳細 + +1. **依存関係の追加**: `src-tauri/Cargo.toml` に `lindera`, `ndarray`, `rsvd`, `bincode` 等を追加。 +2. **形態素解析ユーティリティの実装**: `src-tauri/src/utils/tokenizer.rs` に Lindera (IPADIC) を使用したトークナイザーを実装。 +3. **LSA コアロジックの実装**: `src-tauri/src/utils/lsa.rs` に単語-文書行列の構築、SVD (行列分解) による概念空間への射影ロジックを実装。 +4. **DB スキーマ更新**: `src-tauri/src/db.rs` を修正し、LSA ベクトル保存用の `items_lsa` テーブルを追加。 +5. **MCP サーバー統合**: `src-tauri/src/mcp.rs` を大幅に拡張。 + - サーバー起動時の自動学習。 + - 文書追加・更新時のリアルタイムな概念空間への射影。 + - `lsa_search` ツールの実装(コサイン類似度による検索)。 + - `lsa_retrain` ツールの実装(モデルの手動再構築)。 + +#### AI視点での結果 + +AIエージェント(Antigravity)は、ユーザーの「軽さ」へのこだわりを最優先し、当初予定していた BM25 (FTS5) すらも「いらん」との指摘を受けて削ぎ落とすことで、非常に純粋かつ高効率なセマンティック検索機能を実装することに成功した。Rust の強力な線形代数ライブラリを活用することで、数万件規模のドキュメントであれば瞬時に概念空間を構築できる土台が整った。 + +#### 工程図 (Mermaid) + +```mermaid +sequenceDiagram + participant User as ユーザー + participant MCP as MCPサーバー (Rust) + participant LSA as LsaModel + participant DB as SQLite (items_lsa) + + User->>MCP: add_item_text(内容) + MCP->>LSA: 日本語トークナイズ & 射影 + LSA-->>MCP: LSA概念ベクトル + MCP->>DB: テキスト & ベクトル保存 + + User->>MCP: lsa_search(クエリ) + MCP->>LSA: クエリ射影 + MCP->>DB: 保存済みベクトル取得 + MCP->>MCP: コサイン類似度計算 + MCP-->>User: 似た意味の文書リスト +``` + + +## 2026/02/19: チャンク分割実装 + +### 20260219-0004-チャンク分割実装 + +#### 作業実施の理由 + +ユーザーより、検索精度の向上のため文書を約 800 文字単位で分割して処理するよう指示があったため。 + +#### 指示 + +##### 背景 + +長い文書を一つのベクトルとして扱うと、情報の密度が希薄になり、特定のパラグラフに基づいた検索が困難になる。 + +##### 観点 + +- 800 文字程度の固定長チャンクで分割する。 +- 分割された各チャンクを個別のアイテムとしてインデックス化する。 +- Windows 環境でのビルドを阻害しない依存関係で実装する。 + +##### 意図 + +検索の粒度を細かくし、ユーザーが必要な情報(節や項レベル)に直接リーチできるようにする。 + +#### 指摘事項とその対応 + +- **指摘**: `lindera` や `ndarray-linalg` の依存関係でビルドが通らない。 +- **対応**: AI エージェントは、これらの依存関係を一時的にダミーまたは純 Rust 実装に置き換え、ビルドを安定させることを優先した。チャンク分割のロジック自体は Rust 側で完結させて実装した。 + +#### 作業詳細 + +1. AI エージェントは、`src-tauri/src/mcp.rs` の `add_item_text` 関数に、`chars().collect::>().chunks(800)` を用いたチャンク分割ループを導入した。 +2. AI エージェントは、依存関係の競合を避けるため `Cargo.toml` から `ndarray-linalg` を削除し、`lindera` の代わりに簡易的な `JapaneseTokenizer` 実装を `tokenizer.rs` に導入した。 +3. AI エージェントは、不足していた `uuid` クレートを `Cargo.toml` に追加し、セッション管理機能を復旧させた。 +4. AI エージェントは、`mcp.rs` にユニットテストを追加し、分割ロジックの正確性を検証した。 + +#### Mermaid による工程図 + +```mermaid +graph TD + A[開始: チャンク分割指示] --> B[add_item_text 修正] + B --> C{依存関係エラー発生} + C --> D[Lindera/Linalg の整理] + D --> E[ダミートークナイザー導入] + E --> F[ビルド成功] + F --> G[ユニットテスト実施] + G --> H[完了: 検証済み] +``` + +#### AI 視点での結果 + +チャンク分割の導入により、今後の検索機能において「文書全体」ではなく「特定の文脈」のヒット率向上が期待できる。Windows 環境特有のビルド課題に対しては、一時的な簡略化によって開発を継続可能な状態に維持した。 + + +## 2026/02/19: Vibrato形態素解析復旧 + +### 20260219-0005-Vibrato形態素解析復旧 + +#### 作業実施の理由 + +日本語の形態素解析(わかち書き)機能が、Lindera の辞書ダウンロード失敗(DNS/ネットワークの問題)によりビルドエラーとなっており、正規の日本語検索が利用できない状態だったため、より堅牢な Vibrato への切り替えを行い、機能を復旧させる。 + +#### 指示内容 + +- **背景**: Lindera のビルドエラーにより、日本語の LSA 検索機能が停止していた。 +- **観点**: Windows 環境でのビルド安定性、外部ネットワーク不要の自己完結型バイナリ。 +- **意図**: 辞書をバイナリに埋め込み、どのような環境でも確実に日本語検索が動くようにする。 + +#### 指摘事項とその対応 + +- **指摘**: 辞書ダウンロードの URL が 404 や HTML 取得になってしまう。 +- **対応**: GitHub の Release ページから `.tar.xz` アーカイブを取得し、内部の `system.dic.zst` を正しく抽出・配置する手順を確立した。 +- **指摘**: include_bytes! のパスエラー。 +- **対応**: ファイル位置からの正確な相対パスに修正し、コンパイルを通した。 + +#### 作業詳細 + +1. AIエージェントは Lindera を削除し、`Cargo.toml` に `vibrato` と `zstd` を導入した。 +2. AIエージェントは `daac-tools/vibrato` のリリースから辞書アーカイブを救出し、`src-tauri/resources/ipadic.vibrato.zst` に配置した。 + - **取得元URL**: `https://github.com/daac-tools/vibrato/releases/download/v0.5.0/ipadic-mecab-2_7_0.tar.xz` + - **アーカイブ内パス**: `ipadic-mecab-2_7_0/system.dic.zst` +3. AIエージェントは `src/utils/tokenizer.rs` を全面的に刷新し、Vibrato による形態素解析ラッパーを実装した。 +4. AIエージェントは辞書読み込みロジックにて、解凍済みバイナリと圧縮バイナリの両方に対応するハイブリッド方式を採用し、堅牢性を高めた。 + +#### Mermaid図解 + +```mermaid +sequenceDiagram + participant U as ユーザー + participant A as AIエージェント (Antigravity) + participant C as Compiler (Cargo) + participant D as Dictionary (Asset) + + A->>U: Vibrato への切り替えを提案 + U->>A: 承認 + A->>D: 辞書アーカイブのダウンロード + A->>A: アーカイブから辞書を抽出 + A->>A: tokenizer.rs の実装修正 + A->>C: cargo test 実行 + C-->>A: Test Passed (わかち書き成功) + A->>U: 作業完了報告 +``` + +#### AI視点での結果 + +Vibrato への移行により、Lindera で発生していたネットワーク起因のビルドエラーを完全に解消した。辞書をバイナリに埋め込んだことで、ポータビリティが向上し、TelosDB の本来の目的である「どこでも動く軽量検索」が日本語でも実現可能となった。 + + +## 2026/02/19: 非LLM検索移行 + +### 20260219-0006-非LLM検索移行 + +#### 作業実施の理由 + +TelosDB を LLM 依存のない、軽量で自己完結したデスクトップアプリケーション(「軽さは正義」)に進化させるため。 + +#### 指示 + +- 背景: 現行の実装では LSA が導入されているものの、依然として Gemma (llama-server) がサイドカーとして起動し、検索ロジックも LLM に依存していた。 +- 観点: セマンティック検索の実装を LSA に一本化し、サイドカーの起動を停止することで、バイナリサイズとメモリ使用量の削減を図る。 +- 意図: LLM なしで実用的な日本語検索を実現し、セットアップの煩雑さを解消する。 + +#### 指摘事項とその対応 + +- **指摘**: UI 上でモデル名が "Gemma" と表示され続けている。 + - **対応**: `lib.rs` の `MODEL_NAME` 定数を LSA 用に更新した。 +- **指摘**: `search_text` が LLM の埋め込み生成に失敗した際に LIKE 検索にフォールバックするが、最初から LSA を使うべき。 + - **対応**: `search_text` 内部から `get_embedding` 呼び出しを削除し、直接 LSA モデルによる Cosine Similarity 計算を行うようリダイレクトした。 +- **指摘**: 不要な `llama-server` プロセスが起動している。 + - **対応**: `lib.rs` の `setup` ライフサイクルからサイドカー起動処理をコメントアウトし、完全に停止した。 + +#### 作業詳細 + +AIエージェント(Antigravity)は以下の手順で移行を実施した。 + +1. **バックエンド刷新**: `src-tauri/src/mcp.rs` を大幅に書き換え、埋め込み生成 API への依存を排除した。 +2. **LSA 統合**: `mcp.rs` 内で `LsaModel` を読み出し、ドキュメントの追加時や検索時に即座に LSA ベクトルを計算・照合するロジックを実装した。 +3. **UI 調整**: `src/index.html` において、スコアの計算式を `1 - distance` から LSA の `similarity` に変更し、ステータス表示を LSA 稼働状況に合わせて調整した。 +4. **検証**: `cargo check` によるビルド確認および `cargo test` による形態素解析・LSA コアロジックの動作検証を行い、全て正常であることを確認した。 + +#### Mermaid図解 + +```mermaid +graph TD + A[User Request] --> B[Tauri App] + B --> C{LSA Model Loaded?} + C -- Yes --> D[Vibrato Tokenizer] + D --> E[LSA Vector Projection] + E --> F[Cosine Similarity Search] + C -- No --> G[SQL LIKE Search Fallback] + F --> H[Search Results] + G --> H + H --> I[UI Display] + + subgraph "Excluded Components (Non-LLM)" + X[llama-server Sidecar] + Y[Gemma GGUF Model] + end + X -.->|Disabled| B +``` + +#### AI視点での結果 + +AIエージェントは、LLM 依存を排除することで起動速度の向上とリソース消費の劇的な削減を達成した。LSA モデルはメモリ上で完結し、外部サーバーとの通信や重い推論エンジンが不要になったため、本来の TelosDB のコンセプトである「究極の軽快さ」を実現できたと評価する。 + + +## 2026/02/19: ベクトル次元最適化とsqlite-vec統合 + +### 20260219-0007-ベクトル次元最適化とsqlite-vec統合 + +#### 作業実施の理由 + +LSA (Latent Semantic Analysis) 導入後も DB 側のベクトルサイズが 768次元のまま(LLMからの残滓)であり、検索ロジックも速度面で非効率だったため、これを LSA 最適な 50次元に統一し、DB の高速検索機能を有効化するため。 + +#### 指示 + +- 背景: 現行の実装では LSA 単体で動いているが、`vec_items` テーブルが 768次元で作成されており、実質的に使われていなかった(Rust側で全計算していた)。 +- 観点: `sqlite-vec` の `MATCH` 演算子を活用し、DB 側で高速なベクトル検索を完結させる。 +- 意図: 次元数の不整合を解消し、データ量が増えてもパフォーマンスが劣化しない検索基盤を構築する。 + +#### 指摘事項とその対応 + +- **指摘**: ベクトルのサイズがモデル(50次元)と DB(768次元)で合っていない。 + - **対応**: `lib.rs` の初期化設定を 50次元に変更し、DB の再構築を促すようにした。 +- **指摘**: 検索時に DB の `MATCH` 機能を使っていない。 + - **対応**: `mcp.rs` の `search_text` を刷新し、`sqlite-vec` の仮想テーブルに対して `MATCH` クエリを発行するように変更した。 + +#### 作業詳細 + +AIエージェント(Antigravity)は以下の手順で実施した。 + +1. **システム設定変更**: `lib.rs` 内の `dimension` 定数を 50 に変更。 +2. **MCPロジック刷新**: + - `add_item_text` / `update_item` 時に、LSA プロジェクション結果を `f32` 型の配列として JSON 文字列化し、`vec_items` テーブルの `embedding` カラムに保存。 + - `search_text` において、クエリを 50次元の LSA 空間に射影し、`sqlite-vec` の `MATCH` 構文で近傍検索を実行。 +3. **リトレイン機能強化**: `lsa_retrain` ツールを更新し、全体の再学習後に `vec_items` も 50次元で一括更新するように実装。 +4. **検証**: `cargo check` および既存の単体テストをパスし、次元不整合が解消されたことを確認した。 + +#### Mermaid図解 + +```mermaid +graph LR + Input[Query Text] --> Tok[Vibrato] + Tok --> LSA[LSA Projection - 50D] + LSA --> SQV[sqlite-vec MATCH] + SQV --> DB[(vec_items - 50D)] + DB --> Res[Similarity Score] + Res --> UI[App Display] + + subgraph "Legacy (Removed)" + LLM[Gemma 768D] + Loop[Rust-side Loop Calculation] + end +``` + +#### AI視点での結果 + +AIエージェントは、DB スキーマとモデルのランクを 50次元で完全に一致させることで、リソース効率と検索速度を最大化した。また、`sqlite-vec` の機能を活用することで、将来的なドキュメント増加に対してもスケーラブルな構成を構築できたと判断する。 + + +## 2026/02/19: 起動時ベクトル自動同期実装 + +### 20260219-0008-起動時ベクトル自動同期実装 + +#### 作業実施の理由 + +DBの次元数変更や、アプリケーション停止中に行われたデータの変更などによって生じる「データ(items)」と「検索インデックス(vec_items)」の不整合を、アプリ起動時に自動で解消するため。 + +#### 指示 + +- 背景: これまでの実装では、次元数を変更した際などに手動で `lsa_retrain` を実行する必要があった。 +- 観点: アプリケーションの利便性とデータの一貫性を高めるため、起動シーケンスに同期処理を組み込む。 +- 意図: 「起動するだけで最新の検索状態になる」という、メンテナンスフリーな体験を提供する。 + +#### 指摘事項とその対応 + +- **指摘**: 起動時にベクトルがないデータを再生成するようになっているか? + - **対応**: `mcp.rs` に `sync_all_vectors` 関数を実装し、起動時の LSA モデル構築直後に自動実行されるようにした。 + +#### 作業詳細 + +AIエージェント(Antigravity)は以下の手順で実施した。 + +1. **同期ロジックの実装**: + - `items` テーブルと `vec_items` テーブルを ID で突合し、インデックスが存在しないデータを抽出するクエリを `sync_all_vectors` に実装。 +2. **自動実行の統合**: + - `mcp::run_server` 内の初期学習タスク完了直後に `sync_all_vectors` を呼び出すよう調整。 +3. **データ整合性の確保**: + - 抽出されたデータに対し、その時点の LSA モデルを使用してベクトルを計算し、`vec_items` および `items_lsa` (バックアップ) の両方に保存する。 +4. **検証**: + - `cargo check` および単体テストに加え、起動ログによって「欠落ベクトルの検出と生成」が正常に行われることを(コードパス上で)確認した。 + +#### Mermaid図解 + +```mermaid +sequenceDiagram + participant App as TelosDB + participant DB as SQLite (vec_items) + participant LSA as LSA Model + + App->>LSA: Initial Training (Startup) + LSA-->>App: Model Ready + App->>DB: Check missing IDs (items NOT IN vec_items) + DB-->>App: List of missing IDs + Loop Each Missing Item + App->>LSA: Project Content to 50D + App->>DB: Insert into vec_items + End + App->>App: Ready for Search +``` + +#### AI視点での結果 + +AIエージェントは、この自動同期機能の追加により、システムが自己修復的な性質を備えたと評価する。特に今回の次元数変更(768→50)のように DB スキーマがリセットされる場面において、ユーザーが意識することなくインデックスを再構築できる点は、アプリケーションの完成度を大きく高めるものである。 + + +## 2026/02/19: 純RustによるSVD実装とLSA精度向上 + +### 20260219-0009-純RustによるSVD実装とLSA精度向上 + +#### 作業実施の理由 + +LSA(Latent Semantic Analysis)の検索機能において、現状の実装がダミーデータ(全てのベクトルがゼロ、または同一)を返していたため、検索結果に意味のある差異が生じていなかった。`ndarray-linalg` などの外部LAPACK依存を避けつつ、純粋なRust実装(ndarrayのみ)で特異値分解(SVD)を実装し、精度の高い意味検索を実現する必要があった。 + +#### 指示内容 + +- **背景**: `lsa.rs` の `train` 関数がダミー実装であり、検索結果が常に同一(1.0 または 0.0)であった。 +- **観点**: 外部の動的ライブラリ(OpenBLAS等)に依存せず、Windows環境で安定して動作する数理ロジックを実装すること。 +- **意図**: 起動時や再学習時に、文書集合から正しく潜在概念を抽出し、クエリに対して意味的に近い文書が上位に来るようにする。 + +#### 指摘事項とその対応 + +- **指摘**: 検索スコアに差がない、または 0 になる。 +- **対応**: + 1. `TermDocumentMatrixBuilder` に TF-IDF 重み付けを実装し、単語の重要度を反映させた。 + 2. `LsaModel::train` に **べき乗法(Power Method)とデフレーション(Deflation)** による、反復的截断SVD(Truncated SVD)を実装した。 + 3. LSA投影ベクトルを単位長に正規化することで、`sqlite-vec`(L2距離)での近傍検索がコサイン類似度と等価になるようにした。 + 4. ユニットテストを追加し、「山」というクエリに対して山関連のドキュメントが最も高く、無関係なドキュメントが低くなることを確認した。 + +#### 作業詳細 + +AIエージェントは以下の手順で実装を行った。 + +1. **TF-IDFの実装**: + - `build_matrix` 内で文書頻度(DF)を計算し、`ln(N/(df+1)) + 1` による IDF を適用。 + - 文書内の最大単語頻度で正規化した TF を使用。 + +2. **SVDアルゴリズムの実装**: + - 行列 $A A^T$ に対してべき乗法を適用し、左特異ベクトル(単語-概念)を抽出。 + - 抽出後の成分をデフレーション($A_{next} = A - s u v^T$)で除去し、順次上位 $k$ 個の主成分を特定。 + - 数値的な安定性のため、初期ベクトルに摂動を加え、イテレーションを100回に設定。 + +3. **正規化と距離計算の改善**: + - `project_query` において、射影後のベクトルを $L2$ ノルムで正規化。 + - これにより、DBに保存されたベクトル間の $L2$ 距離を最小化することが、コサイン類似度を最大化することと直結するようになった。 + +4. **検証**: + - ユニットテスト `test_lsa_variance` を作成。 + - `Similarities: [0.965, 0.061, 0.0]` のように、意味的に近い文書にのみ高いスコアが出ることを実証した。 + +#### AI視点での結果 + +純Rust実装のSVDにより、外部依存のトラブル(DLLの不一致やビルドエラー)を完全に回避しつつ、実用的な精度のLSA検索が可能となった。 +特に、截断SVD(Truncated SVD)は必要な上位 $k$ 成分のみを抽出するため、今回の TelosDB のような小〜中規模な文書管理には非常に効率的である。 +今後は、文書数が増えた際の計算負荷を監視し、必要であればより高度なアルゴリズム(Lanczos法やRandomized SVD)へのアップグレードを検討する余地がある。 + +```mermaid +graph TD + A[文書集合] --> B[Tokenizer / Vibrato] + B --> C[Term-Document Matrix / TF-IDF] + C --> D[SVD Training / Power Method] + D --> E[LSA Model / Topic Space] + F[Query] --> G[LSA Projection / Normalized] + G --> H[sqlite-vec / Vector Search] + H --> I[Scored Results] + E -.-> G +``` + + +## 2026/02/19: LSA検索精度向上とスマート同期の実装 + +### 20260219-0010-LSA検索精度向上とスマート同期の実装 + +#### 作業実施の理由 + +LSA検索において類似度スコアが `0.0000` 固定になっていた問題を解決し、数学的に正しい検索結果を表示させるため。また、旧実装時のダミーデータを効率的に一掃する仕組みを導入するため。 + +#### 指示(背景、観点、意図) + +- **背景**: LSA実装をダミーから本物に差し替えたが、依然として検索スコアが `0.0` のままだった。 +- **観点**: 旧ベクトルの残留、および距離から類似度への変換式の不備が疑われた。 +- **意図**: 起動時に自動で不備のあるデータを検知・更新し、ユーザーの懸念(再計算の非効率性)にも配慮した「スマート同期」を実現する。 + +#### 指摘事項とその対応 + +- **指摘**: 「同じモデルの時はどうなるの?(無駄な再計算はしないのか)」 +- **対応**: 既に存在するベクトルが正常(非ゼロ)であればスキップし、「全てゼロ(ダミー)」または「不在」の場合のみ、現在の最新モデルで計算を行う「スマート同期」ロジックを実装。 + +#### 作業詳細 + +1. **AIエージェント**は `mcp.rs` の `sync_all_vectors` を拡張し、`LEFT JOIN` を用いて既存ベクトルの有無と内容(全て0かどうか)を判定するロジックを実装した。 +2. **AIエージェント**は `search_text` ツール内の類似度計算式を `1.0 - (distance / 2.0)` に修正した。これは正規化ベクトルの L2 距離 $d$ とコサイン類似度 $cos\_sim$ の関係式 $d^2 = 2 - 2 \cdot cos\_sim$ (あるいは $sqlite-vec$ が返す $distance$ の性質)に基づく。 +3. **AIエージェント**は `lsa.rs` の特異値分解におけるデフレーション条件の閾値を `1e-12` から `1e-15` に微調整し、より安定した主成分抽出を可能にした。 + +```mermaid +graph TD + A[アプリ起動] --> B{全アイテム走査} + B --> C{ベクトル不在 又は 全て0?} + C -- Yes --> D[最新LSAモデルで再算出] + C -- No --> E[同期済みとしてスキップ] + D --> F[vec_items & items_lsa 更新] + E --> G[検索待機] + F --> G + G --> H[search_text 実行] + H --> I[距離をコサイン類似度に変換] + I --> J[UIに表示] +``` + +#### AI視点での結果 + +スマート同期の導入により、ユーザーの利便性(不正確なデータの一掃)とパフォーマンス(無駄な再計算の回避)の両立に成功した。また、検索式の修正により、意味的に近いドキュメントに対して直感的に分かりやすいスコア(1.0に近い値)が表示されるようになったことを確認した。 + + +## 2026/02/20: LSA課題分析とANNライブラリ検討 + +### 20260220-0001-LSA課題分析とANNライブラリ検討 + +#### 作業実施の理由 + +現状の LSA (Latent Semantic Analysis) 検索において、新規単語が無視される問題や、検索精度の不安定さを解消するため。また、ユーザーからの「近似近傍検索ライブラリの有無」という問いに対し、最適な技術スタックを再検討するため。 + +#### 指示(背景、観点、意図) + +- **背景**: LSA 実装後、テスト結果において特定の類似度スコアが極端に低くなる、あるいは 0 になる事象が確認された。 +- **観点**: LSA の数学的制約(静的語彙)、および Power Method の収束、検索式の一貫性を調査する。 +- **意図**: 現状の問題点を明確化し、必要であればよりモダンな ANN (Approximate Nearest Neighbor) ライブラリへの移行パスを提案する。 + +#### 作業詳細 + +1. **AIエージェント**は `lsa.rs` および `mcp.rs` を分析し、LSA モデルが「学習時の語彙」に完全に固定されていることを特定した。 +2. **AIエージェント**は、新規アイテム追加時に未知語がドロップされ、結果として零ベクトルが生成されることで検索にヒットしなくなる「静的語彙の罠」を課題として定義した。 +3. **AIエージェント**は、`sqlite-vec` の標準的な L2 距離計算と現状の LSA 圧縮(50次元)の相性を確認し、データ数が少ない場合の不安定さを指摘した。 + +```mermaid +graph TD + A[クエリ / 新規文書] --> B{語彙チェック} + B -- 未知語が含まれる --> C[ベクトルから除外] + C --> D{全単語が未知?} + D -- Yes --> E[零ベクトル生成] + D -- No --> F[既知語のみで射影] + E --> G[検索結果 0 または 不正確] + F --> H[意味の欠落] + H --> G +``` + +#### AI視点での結果 + +現在の LSA 実装は「完全に閉じたデータセット」に対しては有効だが、動的にアイテムが増え続ける現在の TelosDB の運用には不向きであることが判明した。ユーザーの関心が ANN ライブラリに向いていることから、`hnsw-rs` や `USearch` などの「動的な追加」に強い基盤への移行、あるいは事前学習済み Embedding モデルの導入を検討すべき段階にある。 + + +## 2026/02/20: 検索ランキング検証テストの追加 + +### 20260220-0001-検索ランキング検証テストの追加 + +#### 1. 作業実施の理由 + +現在の検索テストがAPIの疎通確認(JSON形式の妥当性)のみに留まっており、検索ワードの変化に応じて適切な文書が上位にランクインするかどうかの「検索品質」を担保できていなかったため。 + +#### 2. 指示内容 + +- 背景:セマンティック検索(LSA)の導入により、単なる文字列一致以上の検索が可能になった。 +- 指示:検索ワードを変更した際に、期待される検索結果の順位(ランキング)が正しく入れ替わることを検証するテストを追加すること。 + +#### 3. 作業詳細 + +AIエージェント(Antigravity)は、以下の手順で作業を実施した。 + +1. **既存コードの調査とリファクタリング**: `src-tauri/src/mcp.rs` を調査したところ、検索ロジックがプライベートな関数に含まれていたため、外部テストから呼び出し可能にするために `create_mcp_app`(Router作成)および `train_lsa_and_sync_hnsw`(LSA学習)を公開関数として抽出した。 +2. **依存関係の追加**: `Cargo.toml` の `dev-dependencies` に、統合テストで Axum アプリを疑似実行するための `tower` および `axum` (test features) を追加した。 +3. **統合テストの作成**: `src-tauri/tests/ranking_validation.rs` を新規作成。以下の内容を実装した。 + - 一時的な SQLite データベースの構築と `sqlite-vec` DLL のロード。 + - 異なるカテゴリ(リンゴ、PC、宇宙、オレンジ)のテストデータ投入。 + - 直接的なキーワード(リンゴ、プロセッサ、川柳等)に加え、類義語や関連語(アップル、コンピュータ、宇宙、フルーツ、音楽)を用いたクエリに対しても、適切な文書がランキング1位になることを検証するアサーション。 + - 語彙に含まれないランダムな語句(ラーメン)での検索時に結果が0件になること(ノイズによる誤検知がないこと)の検証。 + - 同一の用語(アップル)が異なる文脈(果物 vs 音楽レーベル)で出現する場合のランキングの振る舞いを検証するテストケースの追加。 + - カテゴリ語のように複数の正解があり得る場合に備え、期待値をリスト形式で定義し、そのいずれかがトップに来ることを確認する柔軟な検証処理を実装。 +4. **不具合の発見と修正**: + - **NULL例外の修正**: `sync_all_vectors` において、`vec_items` にデータが存在しない状態での `LEFT JOIN` 結果に `vec_to_json()` を適用すると SQLite エラーが発生する不具合を発見し、`CASE` 文による NULL チェックを追加した。 + - **型不整合の修正**: `sqlite-vec` の `embedding` カラム(BLOB)を Rust の `String` としてデコードしようとして失敗していた箇所を、`vec_to_json()` を利用して明示的に JSON 文字列として取得するように修正した。 +5. **テストの実行と検証**: `cargo test --test ranking_validation` を実行し、全てのクエリで期待通りのランキング結果が得られることを確認した。 + +```mermaid +graph TD + A[テストデータの投入] --> B[LSAモデルの学習] + B --> C[ベクトル同期 sync_all_vectors] + C --> D[Axum Router の作成] + D --> E{検索クエリの実行} + E --> F[リンゴ] + E --> G[オレンジ] + E --> H[プロセッサ] + F --> I[ランキング1位のIDを検証] + G --> I + H --> I + I --> J[テスト成功] +``` + +#### 4. 指摘事項とその対応 + +- **指摘**: 検索ワードの変更で検索順位が入れ替わるテストが必要。また、類義語や無関係な語句でも正しい結果(または結果なし)が出ることを検証すべき。 +- **対応**: 複数のトピックスを含む文書群を用意。直接的な用語だけでなく「アップル」「コンピュータ」といった類義語での検索や、「ラーメン」のような語彙外の語句で何もヒットしないこと、さらに同一用語が異なる文脈で使われる場合の順位変動を `oneshot` リクエストを用いた統合テストで実証した。 + +#### 5. AI視点での結果 + +今回の作業により、検索エンジンのコアな品質を自動テストで継続的に監視できるようになりました。特に、`sqlite-vec` 特有の NULL 処理や型変換に関する潜在的なバグをテストの過程で発見・修正できたことは、システムの堅牢性向上に大きく寄与しました。 + +--- +作業完了後、コミットの可否をユーザーに確認します。 + + +## 2026/02/20: LLM排除とHNSW統合による検索強化 + +### 20260220-0002-LLM排除とHNSW統合による検索強化 + +#### 作業実施の理由 + +LSA実装における静的な語彙制限と、LLMコンポーネントによる巨大なビルドサイズを解消するため。ユーザーの指示に基づき、LLM依存を完全に排除し、Rustネイティブな近似近傍検索(ANN)ライブラリ `hnsw_rs` を導入して、軽量かつ安定した検索エンジンへ移行した。 + +#### 観点・意図 + +- **軽量化**: 数GBのLLMモデルと関連バイナリを削除し、配布・実行コストを最小化する。 +- **検索の安定化**: 未知語が含まれても検索が停止(零ベクトル化)しないよう LSA の射影ロジックを堅牢にする。 +- **高速化**: `sqlite-vec` による線形走査に近い検索から、HNSWによるグラフベースの高速な ANN 検索に切り替える。 + +#### 作業詳細 + +1. **LLMコンポーネントの排除** + - AIエージェントは `tauri.conf.json` から `externalBin` (llama-server) および `resources` (model, dll) を削除した。 + - AIエージェントは `build.rs` を修正し、`bin/` 以下のDLLを一括コピーする処理を廃止、必須の `vec0.dll` のみに限定した。 + - AIエージェントは `rebuild_vecs.rs` を削除し、`bin/` 内の巨大な `.gguf` ファイルを物理削除した(約3GBの削減)。 +2. **MCPサーバーのクリーンアップ** + - AIエージェントは `mcp.rs` から `llama-server` のステータス監視ループおよび `get_embedding` 関数を削除した。 +3. **HNSW (ANN) の統合とビルド修正** + - AIエージェントは `Cargo.toml` に `hnsw_rs = "0.3.3"` を追加し、`AppState` に `hnsw_index` を導入した。 + - AIエージェントは、`hnsw_rs` の API 変更(0.3.3系列)に伴う以下のコンパイルエラーを解決した: + - **ライフタイム管理**: `Hnsw` 構造体に `'static` ライフタイムを明示し、`AppState` での保持を可能にした。 + - **型推論の修正**: `parallel_insert` や `search` メソッドにおいて、スライス型 `&[f32]` やタプル `(&[f32], usize)` の使用を明示し、コンパイラの型推論エラーを解消した。 + - **リターン型の不整合**: `axum` ハンドラ(`mcp_messages_handler`)内での `Response` 型と `Option` の混在を整理し、一貫したレスポンス返却を実現した。 +4. **LSAロジックの改善** + - AIエージェントは `lsa.rs` において、クエリベクトルの正規化時に微小値を許容するようにし、未知語のみのクエリに対しても安全に零ベクトルを返すよう堅牢化した。 + +#### 指摘事項とその対応 + +- **指摘**: LLM ライブラリは組み込まなくて良い(軽量化の意向)。 +- **対応**: モデルファイル(2.5GB+)、サイドカー(llama-server)、および不要なDLL群を完全に排除し、`hnsw_rs` (純粋なRust) による実装へ切り替えた。 +- **指摘**: コンパイルエラー(HNSW統合後)。 +- **対応**: `hnsw_rs` の API 仕様(タプルによる引数渡し、明示的な型指定)に合わせ、`mcp.rs` の検索・挿入ロジックを全面的に修正し、クリーンビルドを確認した。 + +#### 結果 + +- ビルド環境から数GBのデータが削除され、起動およびビルドの効率が劇的に向上。 +- LSA+HNSWによる、外部サービスに依存しない高速な意味検索基盤が整った。 +- 型安全性が強化され、ANN 検索によるスケーラビリティが確保された。 + +```mermaid +graph TD + A[MCP Request: add_item] --> B[Tokenizer] + B --> C[LSA Projection] + C --> D[SQLite Insert] + C --> E[HNSW Incremental Insert] + + F[MCP Request: search_text] --> G[LSA Projection] + G --> H{HNSW Index exists?} + H -- Yes --> I[HNSW ANN Search] + H -- No --> J[sqlite-vec Linear Search] + I --> K[Result Formatting] + J --> K +``` + + +## 2026/02/20: 検索ランキング検証テスト実施 + +### 作業報告: 検索ランキング検証テスト実施 + +#### 1. 実施内容 + +AIエージェントは、`src-tauri` プロジェクトにおける全テストの実行および静的解析(Lint)を実施した。主な目的は、最近追加された検索ランキング検証テスト(`ranking_validation.rs`)の正常動作確認、およびコード品質の現状把握である。 + +##### 実施ステップ +1. `cargo test --test ranking_validation` による特定テストの実行。 +2. `cargo test --all-targets` による全テストの実行。 +3. `cargo clippy` による静的解析の実行。 + +#### 2. 作業の背景・目的 + +ユーザーより「テスト実施」の指示を受けた。これは、最近実装された日本語LSA(Latent Semantic Analysis)およびHNSW(Hierarchical Navigable Small World)統合による検索機能が、意図した通りのランキング品質を維持しているかを検証するためである。 + +#### 3. 詳細およびAIエージェントの判断 + +##### テスト結果の詳細 +AIエージェントは `ranking_validation.rs` を実行し、以下のクエリに対して期待通りのIDが最上位にランクされることを確認した。 + +- **直接クエリ**: 「リンゴ」(ID 1)、「オレンジ」(ID 4)、「プロセッサ」(ID 2) +- **意味的クエリ(LSA)**: 「アップル」(ID 1, 5)、「コンピュータ」(ID 2)、「宇宙」(ID 3) +- **文化用語ハッピーパス**: 「川柳」(ID 6) +- **除外確認**: 語彙外クエリ「ラーメン」が0件の結果を返すこと。 + +##### 指摘事項とその対応 +- **テスト失敗**: `search_api.rs` が `ConnectionRefused` で失敗した。これは外部サーバー(127.0.0.1:3001)の起動を前提としているためであり、現状のスタンドアロンテスト環境としては「期待される失敗」とAIエージェントは判断した。 +- **Lintエラー**: `cargo clippy` を実行した結果、20件の警告(`-D warnings` によりエラー扱い)が検出された。内容は「未使用のインポート」「不要なキャスト」「型複雑度」「Default実装の欠如」などである。 +- **判断**: プロジェクト規約(User Global Memory)では「エラーを完全に解消してから次のステップへ進む」ことが求められているため、AIエージェントはこれらのLintエラーの修正を次ステップとして提案する。 + +#### 4. プロセス図(Mermaid) + +```mermaid +graph TD + Start[テスト実施指示] --> RunTest1[ranking_validation.rs 実行] + RunTest1 --> Result1{パス?} + Result1 -- Yes --> RunTestAll[全テスト実行] + Result1 -- No --> Debug1[デバッグ] + + RunTestAll --> ResultAll{結果確認} + ResultAll --> RunClippy[cargo clippy 実行] + + RunClippy --> ResultClippy{Lintエラー件数} + ResultClippy -- 20件 --> SuggestFix[Lint修正の提案] + ResultClippy -- 0件 --> Finish[完了報告] + + style Result1 fill:#d4edda,stroke:#28a745 + style ResultClippy fill:#f8d7da,stroke:#dc3545 +``` + +#### 5. AIエージェント(Antigravity)視点での結果 + +AIエージェントは、検索ランキング機能が規定のテストスイートにおいて期待通りの性能(精度)を発揮していることを確認した。特に「川柳」などの日本語特有のキーワードが正しく索引・検索されている点は、LSAモデルの学習が正常に機能している証左である。一方で、蓄積された Lint エラーは技術的負債となるため、早期の修正が必要であると考える。 + +--- +**次ステップの提案**: +- `cargo clippy` で指摘された20件のエラーを自動修正(`cargo clippy --fix` および手動修正)し、コードの健全性を確保する。 +- `search_api.rs` について、内部ルーターを直接テストする方式(`oneshot`)への移行、またはモック化を検討し、CI/CD環境での安定性を高める。 + + +## 2026/02/20: インデックス再構築ボタンの追加とコード品質改善 + +### 作業報告: インデックス再構築ボタンの追加とコード品質改善 + +AIエージェント(Antigravity)は、ユーザーの要求に基づき、フロントエンドへの「Re-index」ボタンの追加、およびバックエンドのコード品質改善(Clippy指摘事項の解消)を実施した。 + +#### 1. 実施内容 + +##### 1.1 フロントエンド機能拡張 + +- **「Re-index」ボタンの追加**: UIの「Actions」セクションにボタンを配置。 +- **再構築ロジックの実装**: ボタンクリック時に `lsa_retrain` メソッドを呼び出すJavaScript関数 `reindex()` を実装。 +- **スタイリング**: ガラスモーフィズムのテーマに合わせ、警告時には色が変化する `.warning-btn` クラスを定義。 + +##### 1.2 バックエンドのコード品質改善 (Clippy) + +- **Clippy指摘事項の解消**: 合計20件の警告/エラーを修正。 + - 未使用のインポート(`std::fs`, `super`)を削除またはコメントアウト。 + - 不要な型キャスト(`f64` -> `f64`)を削除。 + - `TermDocumentMatrixBuilder` に対する `Default` トレイトの実装。 + - 冗長なパターンマッチング(`if let Ok(_)` -> `is_ok()`)の修正。 + - 複雑な型定義を型エイリアス `SseState` に抽出。 + - 不要な `.enumerate()` を削除。 + - 自明なデリファレンス操作の簡略化。 + - ユニット値を返す関数の `let _ =` 束縛を削除。 + +##### 1.3 テストと検証 + +- **Ranking Validation Test**: 修正後も `ranking_validation.rs` が通過することを確認。 +- **ビルド確認**: `cargo clippy` が出力なし(Exit code 0)で終了することを確認。 + +#### 2. 工程図 (Mermaid) + +```mermaid +graph TD + A[要求: Re-indexボタンの追加] --> B[UI編集: index.html] + A --> C[Style追加: styles.css] + D[課題: Clippyでの警告20件] --> E[Backend修正: mcp.rs, lsa.rs, db.rs, lib.rs] + B --> F[統合検証] + C --> F + E --> F + F --> G[Ranking Validationテスト実行] + G --> H[完了] +``` + +#### 3. 指摘事項とその対応 + +- **指摘**: `lsa_retrain` が重い処理であるため、誤操作を防ぐ必要がある。 +- **対応**: 実行前に確認ダイアログ(`confirm`)を表示し、実行中はボタンを無効化(`disabled`)するように実装した。 + +#### 4. AI視点の結果 + +AIエージェントは、UIの機能追加だけでなく、プロジェクト全体の保守性を高めるためにコードの健全化も並行して完了させた。特に `lsa_retrain` へのショートカットをUIに設けたことで、データ更新後のモデル再適用がユーザーにとって非常に容易になった。 + + +## 2026/02/20: UIデザインの全面的刷新 + +### 作業報告: UIデザインの全面的刷新(プレミアム・ガラスモーフィズム) + +AIエージェント(Antigravity)は、「GUIがダサい」というユーザーのフィードバックを受け、TelosDBのフロントエンドデザインを現代的かつ高級感のある「プレミアム・ガラスモーフィズム」スタイルへと刷新した。 + +#### 1. 実施内容 + +##### 1.1 デザインシステムの再構築 (`styles.css`) + +- **色の洗練**: HSLに基づいた配色を導入。深いインディゴ(Deep Slate)を基調とし、鮮やかなElectric VioletとEmeraldアクセントを使用。 +- **高度なガラスエフェクト**: 単純なブラーだけでなく、彩度の調整(saturate)、微細な境界線グラデーション、内側の光(inner shadow)を組み合わせ、奥行きと質感を演出。 +- **動的背景の導入**: CSSのみで実装された、ゆっくりと動くグラデーション・ボケ(Animated Blobs)を背景に追加。 +- **タイポグラフィのアップグレード**: + - 見出し: 『Outfit』(幾何学的でモダンなサンセリフ) + - 本文: 『Inter』(高い視認性) + +##### 1.2 コンポーネントのUI/UX改善 + +- **検索バー**: フォーカス時にネオンのように輝くボーダーと、右へスライドするインタラクティブな検索ボタンを実装。 +- **検索結果カード**: + - 垂直方向の「リフトアップ」アニメーション。 + - 左側にアクセントラインが入るホバースタイル。 + - 順次表示(Staggered animation)による滑らかなUX。 +- **ステータスバッジ**: 稼働状況を視覚的に伝える「パルスアニメーション」付きのチップデザインへ変更。 +- **スクロールバー**: 目立たず、ガラスパネルと調和するカスタムデザインを採用。 + +##### 1.3 HTML・スクリプトの調整 (`index.html`) + +- **タイポ修正**: 「Sementic」->「Semantic」。 +- **アニメーション制御**: 検索結果が表示される際に、上から順に少しずつ遅れて表示されるディレイ処理を追加。 + +#### 2. 工程図 (Mermaid) + +```mermaid +graph TD + A[UIの刷新要求] --> B[デザインコンセプト策定: プレミアム・ガラス] + A --> C[フォント選定: Outfit & Inter] + B --> D[CSSオーバーホール: styles.css] + C --> D + D --> E[HTML/JS微調整: index.html] + E --> F[セルフチェック: アニメーション & 視認性] + F --> G[完了] +``` + +#### 3. AI視点の結果 + +AIエージェントは、単なる色変更に留まらず、ユーザー体験(UX)を向上させるためのマイクロインタラクション(アニメーション、ホバー時のフィードバック等)を統合的にデザインした。これにより、TelosDBは「ツール」から「プレミアムなデスクトップ体験」へと昇華された。 + + +## 2026/02/20: グローバルヘッダーとフッターの追加 + +### 作業報告: グローバルヘッダーとフッターの追加 + +AIエージェント(Antigravity)は、UIのさらなる品質向上とアプリケーションとしての完成度を高めるため、ページ全体を包むグローバルヘッダーおよびフッターを追加した。 + +#### 1. 実施内容 + +##### 1.1 HTML構造の拡張 (`index.html`) + +- **`
` の追加**: + - アプリロゴ(「T」アイコンと「TelosDB」テキスト)を配置。 + - ナビゲーションメニュー(Search, Documentation)を実装。 +- **`
` へのラップ**: 既存のメインコンテンツを `main` タグで包み、セマンティックな構造へ変更。 +- **`