diff --git "a/journals/202602-010-\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\251\345\256\211\345\256\232\345\214\226\343\201\250\343\203\252\343\203\252\343\203\274\343\202\271\346\224\271\350\250\202.md" "b/journals/202602-010-\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\251\345\256\211\345\256\232\345\214\226\343\201\250\343\203\252\343\203\252\343\203\274\343\202\271\346\224\271\350\250\202.md" index 26d3fc8..f9aaf03 100644 --- "a/journals/202602-010-\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\251\345\256\211\345\256\232\345\214\226\343\201\250\343\203\252\343\203\252\343\203\274\343\202\271\346\224\271\350\250\202.md" +++ "b/journals/202602-010-\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\251\345\256\211\345\256\232\345\214\226\343\201\250\343\203\252\343\203\252\343\203\274\343\202\271\346\224\271\350\250\202.md" @@ -4,6 +4,18 @@ 今週は、v0.3.0 配布パッケージ(NSIS インストーラ)の起動不良対策を中心に、vec0.dll のリソース配置と起動時コピーを実装。あわせて Toast UI Editor のダークモード化、RELEASE_v0.3.0.md の改訂、および MCP 経由での俳句・短歌解説の登録と LSA 再学習を実施した。 +```mermaid +gantt + title 第010週 作業俯瞰 (2026-02-24) + dateFormat YYYY-MM-DD + section インストーラ + vec0.dll リソース配置・起動時コピー :2026-02-24, 1d + section UI・ドキュメント + Toast UI ダークモード・リリースノート改訂 :2026-02-24, 1d + section MCP + 俳句・短歌解説登録と LSA 再学習 :2026-02-24, 1d +``` + --- ## 2026-02-24: インストーラ起動不良の修正(vec0.dll) @@ -11,6 +23,7 @@ ### 1. 作業実施の理由と指示 - **背景**: インストール後にアプリが起動しない事象が報告された。ログでは `vec0.dll NOT FOUND` および DB 初期化失敗(crashed background worker)が確認された。 +- **観点**: 配布パッケージはインストール先のパスが多様なため、リソース解決とフォールバックを明示する必要がある。 - **意図**: 配布パッケージ実行時にも vec0.dll を確実に参照できるようにし、起動を安定させる。 ### 2. 指摘事項とその対応 @@ -24,8 +37,7 @@ ### 3. 作業詳細 -- `src/backend/tauri.conf.json`: `resources` をオブジェクト形式に変更。 -- `src/backend/src/lib.rs`: `BaseDirectory::Resource` による resolve、exe_dir / resource_dir の複数フォールバック、app_data_dir へのコピー、`resource_dir` / `exe_dir` のログ出力、未検出時のエラー返却を実装。 +AIエージェントは、`src/backend/tauri.conf.json` で `resources` をオブジェクト形式に変更し、`src/backend/src/lib.rs` で `BaseDirectory::Resource` による resolve、exe_dir / resource_dir の複数フォールバック、app_data_dir へのコピー、未検出時のエラー返却を実装した。 ### 4. AI視点での結果 @@ -40,13 +52,15 @@ - **背景**: アプリ全体がダークテーマのため、文書編集モーダル内の Toast UI Editor もダークに統一したい。 - **意図**: 公式のダークテーマを有効化し、UI の一貫性を保つ。 -### 2. 作業詳細 +### 2. 指摘事項とその対応 -- `tools/editor-bundle-entry.js`: `@toast-ui/editor/dist/theme/toastui-editor-dark.css` を import に追加。 -- `src/frontend/components/main-panel.js`: `toastui.Editor` のオプションに `theme: 'dark'` を追加。 -- `npm run build-editor` でバンドルを再生成し、`vendor/toast-ui/toastui-editor-bundle.css` にダークスタイルを含めた。 +特になし(ユーザー指示に基づき実施)。 -### 3. AI視点での結果 +### 3. 作業詳細 + +AIエージェントは、`tools/editor-bundle-entry.js` に `@toast-ui/editor/dist/theme/toastui-editor-dark.css` を import し、`src/frontend/components/main-panel.js` の `toastui.Editor` に `theme: 'dark'` を追加。`npm run build-editor` でバンドルを再生成し、`vendor/toast-ui/toastui-editor-bundle.css` にダークスタイルを含めた。 + +### 4. AI視点での結果 編集モーダルを開いた際にエディタがダーク表示となり、アプリのトーンと揃った。 @@ -59,13 +73,15 @@ - **背景**: インストーラ対応と UI 変更をリリースノートに反映させたい。 - **意図**: 配布パッケージの扱いとインストール手順を正確に記載する。 -### 2. 作業詳細 +### 2. 指摘事項とその対応 -- 冒頭に「配布パッケージの安定化と UI の改善」の一文を追加。 -- 「改善・修正」に「配布パッケージ・インストーラ」(vec0.dll のコピー、フォールバック、エラー表示・ログ)と「UI」(Toast UI ダークモード)を追記。 -- 「インストール方法」に NSIS インストーラの明記、ソースからのビルド手順(`npm run tauri build`)、vec0.dll の初回コピーとログの場所を追記。 +特になし(ユーザー指示に基づき実施)。 -### 3. AI視点での結果 +### 3. 作業詳細 + +AIエージェントは、冒頭に「配布パッケージの安定化と UI の改善」を追加し、「改善・修正」に配布パッケージ・インストーラ(vec0.dll のコピー、フォールバック、エラー表示・ログ)と UI(Toast UI ダークモード)を追記。「インストール方法」に NSIS インストーラの明記、ソースからのビルド手順(`npm run tauri build`)、vec0.dll の初回コピーとログの場所を追記した。 + +### 4. AI視点での結果 利用者と開発者が、インストールとトラブルシュートの手がかりをリリースノートから参照しやすくなった。 @@ -78,12 +94,15 @@ - **背景**: TelosDB を MCP 経由で利用する流れの確認として、俳句・短歌の解説文を登録し、インデックス化まで行いたい。 - **意図**: HTTP やスクリプトではなく、MCP ツール(add_item_text / lsa_retrain)のみで登録〜再学習を行う。 -### 2. 作業詳細 +### 2. 指摘事項とその対応 -- **俳句**: MCP サーバー `project-0-TelosDB-TelosDB` のツール `add_item_text` を呼び出し、`path: "haiku-explanation.md"`、`content` に俳句の解説(形式・歴史・季語・例句)を渡して登録。 -- **短歌**: 同様に `add_item_text` で `path: "tanka-explanation.md"`、短歌の解説(三十一音・万葉集〜近代・例句)を登録。 -- **インデックス化**: ツール `lsa_retrain` を呼び出し、バックグラウンドで LSA 再学習を実行。俳句・短歌のチャンクがベクトル化され、意味検索の対象になった。 +特になし(ユーザー指示に基づき実施)。 -### 3. AI視点での結果 +### 3. 作業詳細 + +AIエージェントは、MCP ツール `add_item_text` で俳句解説(`path: "haiku-explanation.md"`)と短歌解説(`path: "tanka-explanation.md"`)を登録し、続けて `lsa_retrain` を呼び出してバックグラウンドで LSA 再学習を実行した。俳句・短歌のチャンクがベクトル化され、意味検索の対象になった。 + +### 4. AI視点での結果 MCP 経由でコンテンツ登録とインデックス更新が一通り完了し、TelosDB を「MCP の知識ベース」として扱う流れが確認できた。 + diff --git "a/journals/202602-011-MCP\344\273\266\346\225\260\343\203\273\350\207\252\345\213\225\345\206\215\345\255\246\347\277\222\343\203\273GUI\346\224\271\345\226\204.md" "b/journals/202602-011-MCP\344\273\266\346\225\260\343\203\273\350\207\252\345\213\225\345\206\215\345\255\246\347\277\222\343\203\273GUI\346\224\271\345\226\204.md" deleted file mode 100644 index 1c91ecb..0000000 --- "a/journals/202602-011-MCP\344\273\266\346\225\260\343\203\273\350\207\252\345\213\225\345\206\215\345\255\246\347\277\222\343\203\273GUI\346\224\271\345\226\204.md" +++ /dev/null @@ -1,133 +0,0 @@ -# 2026年第011週 作業アーカイブ: MCP件数・自動再学習・インデックス表示・UI整理 - -## 週全体のサマリー - -Issue #5 対応として MCP でドキュメント件数を返す `get_document_count` を追加し、HTTP `/doc_count` と UI ヘッダーも documents 件数に統一。MCP ACTIVITY が空になる不具合をブロードキャスト追加で解消し、トレイクリックの二重発火にはデバウンスを導入。LSA 再学習を「変更件数が閾値(登録数の 20% と 5 の少ない方)を超えたら 90 秒デバウンスで自動実行」するようにし、インデックス化の状態をヘッダーに表示。文書一覧にチャンク0の先頭15文字を表示し、左サイドバー下部のアコーディオンと著作権表示を削除した。 - ---- - -## 2026-02-25: MCP でドキュメント件数取得(Issue #5) - -### 1. 作業実施の理由と指示 - -- **背景**: 格納した件数を MCP から取得したい要望があり、当初は items(チャンク)数だったが、ドキュメント数に統一するよう指摘された。 -- **意図**: MCP ツールと HTTP・UI の「件数」をすべて documents テーブルの件数で揃える。 - -### 2. 作業詳細 - -- **MCP**: `get_item_count` を `get_document_count` に変更。`SELECT COUNT(*) FROM documents` で件数を返す。`tools/list`・dispatch・`handle_get_document_count` を追加・改名。 -- **HTTP**: `handlers.rs` の `doc_count_handler` を `COUNT(*) FROM items` から `COUNT(*) FROM documents` に変更。 -- **仕様**: `docs/specification/04_mcp_api_specification.md` に `get_document_count` の説明を追記。 - -### 3. AI視点での結果 - -MCP と UI の「X docs」がどちらもドキュメント数で一致し、意味が明確になった。 - ---- - -## 2026-02-25: MCP ACTIVITY が空になる不具合 - -### 1. 作業実施の理由と指示 - -- **背景**: 検索パネル下部の MCP ACTIVITY が常に空だった。 -- **意図**: ツール呼び出し時に `mcp:call:` を SSE でブロードキャストし、UI に表示する。 - -### 2. 作業詳細 - -- `src/backend/src/mcp/mod.rs`: `mcp_messages_handler` 内で、`tools/call` および各ツール名に該当するリクエストを受けた直後に `state.tx.send(format!("mcp:call:{}", actual_method))` を実行。 -- フロントの `index.html` は既に `update` イベントで `mcp:call:` をパースして MCP ACTIVITY に追記する実装だったため、バックエンドの送信追加のみで解消。 - -### 3. AI視点での結果 - -Cursor 等から MCP ツールを呼ぶと、リアルタイムで MCP ACTIVITY にメソッド名が表示されるようになった。 - ---- - -## 2026-02-25: トレイアイコンクリックで一瞬開いてすぐ閉じる - -### 1. 作業実施の理由と指示 - -- **背景**: タスクトレイのアイコンをクリックするとウィンドウが一瞬表示された直後に閉じてしまう。 -- **意図**: クリックが二重に扱われているため、デバウンスで 2 回目を無視する。 - -### 2. 作業詳細 - -- `src/backend/src/lib.rs`: `on_tray_icon_event` 内で、左クリック時に `LAST_TRAY_CLICK_MS`(AtomicU64)で前回クリック時刻を記録。前回から 400ms 以内のクリックは無視し、それ以外は表示/非表示をトグル。 - -### 3. AI視点での結果 - -トレイクリックでウィンドウの表示・非表示が安定して切り替わるようになった。 - ---- - -## 2026-02-25: LSA 再学習の自動実行(閾値・割合) - -### 1. 作業実施の理由と指示 - -- **背景**: 追加・更新・削除のたびに手動で RE-INDEX するのは手間。毎回再学習するのはコストが高いため、変更が「たまった」タイミングで自動実行したい。 -- **意図**: 変更件数が「登録ドキュメント数の 20%」と「5 件」の少ない方を超えたら、90 秒デバウンス後にバックグラウンドで `train_lsa_and_sync_hnsw` を実行する。 - -### 2. 作業詳細 - -- **状態**: `AppState` に `changes_since_train`(AtomicU64)と `retrain_scheduled`(AtomicBool)を追加。 -- **閾値**: `schedule_retrain_if_needed` を async 化し、`SELECT COUNT(*) FROM documents` で現在件数を取得。`threshold = max(1, min(ceil(doc_count * 0.2), 5))`。変更を 1 加算し、`count >= threshold` かつ未スケジュールなら `retrain_scheduled` を立て、90 秒後に `train_lsa_and_sync_hnsw` を spawn。完了後にカウントとフラグをリセット。 -- **呼び出し**: `add_item_text`・`update_item`・`delete_item`・`delete_document` の成功後に `schedule_retrain_if_needed(state).await` を実行。 - -### 3. AI視点での結果 - -少ない登録数では 1〜2 件の変更で、多い登録数では最大 5 件の変更で再学習が走り、RE-INDEX を押さなくても語彙・LSA が適度に更新されるようになった。 - ---- - -## 2026-02-25: インデックス化の様子を GUI に表示 - -### 1. 作業実施の理由と指示 - -- **背景**: 再学習やインデックス構築がいつ走っているか分からず、操作のフィードバックが欲しい。 -- **意図**: バックエンドの状態(idle / training / syncing)を API と SSE で通知し、ヘッダーに表示する。 - -### 2. 作業詳細 - -- **状態**: `AppState` に `indexing_status`(RwLock)を追加。初期値 `"idle"`。 -- **API**: `GET /indexing_status` で `{ "status": "idle"|"training"|"syncing" }` を返す。 -- **system.rs**: `train_lsa_and_sync_hnsw` の開始時に `"training"` と `indexing:training` をブロードキャスト。`sync_all_vectors` の直前に `"syncing"` と `indexing:syncing`。完了・失敗・件数 0 の早期 return 時に `"idle"` と `indexing:idle`。 -- **フロント**: ヘッダーに「LSA学習中…」「ベクトル同期中…」用のバッジを追加。3 秒ごとのポーリングと SSE の `indexing:*` で表示を更新。idle 時はバッジを非表示。 - -### 3. AI視点での結果 - -起動時や RE-INDEX・自動再学習時に、ヘッダーでインデックス構築の進行が分かるようになった。 - ---- - -## 2026-02-25: 文書一覧にチャンク0の先頭15文字を表示 - -### 1. 作業実施の理由と指示 - -- **背景**: 文書管理のテーブルで、パス・MIME・チャンク数だけでは内容が想像しづらい。 -- **意図**: 各ドキュメントのチャンク0の先頭 15 文字を一覧に表示する。 - -### 2. 作業詳細 - -- **バックエンド**: `list_documents` の SQL に `(SELECT substr(i.content, 1, 15) FROM items i WHERE i.document_id = d.id ORDER BY i.chunk_index ASC LIMIT 1) AS chunk0_preview` を追加。返却 JSON に `chunk0_preview` を含める。 -- **フロント**: 文書管理テーブルに「先頭(chunk0)」列を追加。`chunk0_preview` を表示し、チャンクが 2 以上なら「…」を付与。`.docs-cell-preview` で最大幅・省略・色を指定。 - -### 3. AI視点での結果 - -一覧から各文書の冒頭が把握しやすくなった。 - ---- - -## 2026-02-25: 左サイドバー下部の整理 - -### 1. 作業実施の理由と指示 - -- **背景**: サイドバー下部の TelosDB アコーディオンは不要。著作権表示はサイトフッターにあるため重複する。 -- **意図**: アコーディオンと著作権表示を削除し、ナビのみのシンプルなサイドバーにする。 - -### 2. 作業詳細 - -- `src/frontend/components/app-sidebar.js`: `sidebar-bottom` 内のアコーディオン(TelosDB ▸ / v0.3.5-HUD・© 2026 DtmOjaji)を削除。アコーディオン用のクリックハンドラも削除。その後、著作権のみのフッターも削除し、`sidebar-bottom` ブロックごとなくした。 - -### 3. AI視点での結果 - -サイドバーは「検索・文書管理・設定」のナビのみとなり、見た目と役割が整理された。 diff --git "a/journals/20260225-0001-MCP\344\273\266\346\225\260\343\203\273\350\207\252\345\213\225\345\206\215\345\255\246\347\277\222\343\203\273GUI\346\224\271\345\226\204.md" "b/journals/20260225-0001-MCP\344\273\266\346\225\260\343\203\273\350\207\252\345\213\225\345\206\215\345\255\246\347\277\222\343\203\273GUI\346\224\271\345\226\204.md" new file mode 100644 index 0000000..02657ff --- /dev/null +++ "b/journals/20260225-0001-MCP\344\273\266\346\225\260\343\203\273\350\207\252\345\213\225\345\206\215\345\255\246\347\277\222\343\203\273GUI\346\224\271\345\226\204.md" @@ -0,0 +1,49 @@ +# 2026-02-25: MCP件数・自動再学習・GUI改善 + +## 1. 作業実施の理由と指示 + +- **背景**: Issue #5 として MCP から格納件数を取得したい要望があり、当初は items(チャンク)数だったがドキュメント数に統一するよう指摘された。また、MCP ACTIVITY が空になる不具合、トレイクリックでウィンドウが一瞬開いて閉じる事象、追加・更新・削除のたびに手動 RE-INDEX が必要な点、インデックス化の進行が分からない点、文書一覧で内容が想像しづらい点、サイドバー下部の不要なアコーディオン・著作権表示が指摘された。 +- **観点**: 件数は「ドキュメント数」で MCP・HTTP・UI を統一する。LSA 再学習は変更がたまったタイミングで自動実行し、状態は GUI に表示する。UI は必要な情報を表示し、冗長な要素を削除する。 +- **意図**: get_document_count の追加と doc_count の documents 統一、MCP 呼び出しの SSE ブロードキャスト、トレイのデバウンス、LSA 自動再学習(閾値・90秒デバウンス)、インデックス状態のヘッダー表示、文書一覧にチャンク0の先頭15文字表示、サイドバー下部の整理を行う。 + +## 2. 指摘事項とその対応 + +- **指摘**: 格納件数は「ドキュメント数」にすべき。items 数では「X docs」と一致しない。 + - **対応**: MCP ツールを `get_document_count` に改名し、`SELECT COUNT(*) FROM documents` で返す。HTTP `/doc_count` と UI も同様に documents 件数に統一した。 +- **指摘**: MCP ACTIVITY が常に空である。 + - **対応**: `mcp_messages_handler` 内で `tools/call` 受信時に `state.tx.send("mcp:call:")` を送信するようにした。 +- **指摘**: トレイクリックでウィンドウが一瞬開いてすぐ閉じる。 + - **対応**: 左クリックに 400ms デバウンスを導入し、二重発火を無視するようにした。 +- **指摘**: 文書追加・更新・削除のたびに手動で RE-INDEX するのは手間。毎回再学習はコストが高い。 + - **対応**: 変更件数が「登録ドキュメント数の 20%」と「5 件」の少ない方を超えたら、90 秒デバウンス後に自動で `train_lsa_and_sync_hnsw` を実行する `schedule_retrain_if_needed` を実装し、add_item_text・update_item・delete_item・delete_document の成功後に呼び出すようにした。 +- **指摘**: インデックス化の様子が GUI で分からない。 + - **対応**: `AppState` に `indexing_status` を追加し、`/indexing_status` API と SSE の `indexing:training` / `indexing:syncing` / `indexing:idle` でヘッダーに表示するようにした。 +- **指摘**: 文書一覧で内容が想像しづらい。サイドバー下部のアコーディオン・著作権表示は不要。 + - **対応**: list_documents に chunk0 の先頭15文字(chunk0_preview)を追加し、文書管理テーブルに表示。app-sidebar から sidebar-bottom(アコーディオン・著作権)を削除した。 + +## 3. 作業詳細 + +AIエージェントは、次の変更を実施した。 + +- **MCP・HTTP・仕様**: `get_item_count` を `get_document_count` に変更し、`SELECT COUNT(*) FROM documents` で件数を返す。`tools/list`・dispatch・`handle_get_document_count` を追加・改名。`handlers.rs` の `doc_count_handler` を documents に変更。`04_mcp_api_specification.md` に get_document_count を追記。 +- **MCP ACTIVITY**: `mcp/mod.rs` の `mcp_messages_handler` で、`tools/call` および該当ツール実行直後に `state.tx.send(format!("mcp:call:{}", actual_method))` を実行。 +- **トレイ**: `lib.rs` の `on_tray_icon_event` で左クリック時に AtomicU64 で前回クリック時刻を記録し、400ms 以内のクリックを無視。それ以外で表示/非表示をトグル。 +- **LSA 自動再学習**: `AppState` に `changes_since_train`(AtomicU64)と `retrain_scheduled`(AtomicBool)を追加。`system.rs` に `schedule_retrain_if_needed` を実装(閾値 `max(1, min(ceil(doc_count*0.2), 5))`、90秒デバウンス、spawn で train_lsa_and_sync_hnsw)。add_item_text・update_item・delete_item・delete_document の成功後に呼び出し。 +- **インデックス状態表示**: `AppState` に `indexing_status`(RwLock)を追加。`train_lsa_and_sync_hnsw` の開始・sync 前・完了・失敗・件数0 で `indexing_status` と SSE を更新。`GET /indexing_status` を追加。フロントのヘッダーにバッジを追加し、3秒ポーリングと SSE の `indexing:*` で更新。 +- **文書一覧**: `list_documents` の SQL に chunk0 の先頭15文字のサブクエリを追加し、返却に `chunk0_preview` を含める。main-panel の文書管理テーブルに「先頭(chunk0)」列を追加。`.docs-cell-preview` でスタイルを指定。 +- **サイドバー**: `app-sidebar.js` から `sidebar-bottom`(TelosDB アコーディオン・著作権表示)を削除。 + +```mermaid +flowchart LR + A[get_document_count / doc_count] --> B[documents 統一] + C[MCP tools/call] --> D[SSE mcp:call] + E[変更検知] --> F[schedule_retrain_if_needed] + F --> G[90s デバウンス] + G --> H[train_lsa_and_sync_hnsw] + H --> I[indexing_status / SSE] + I --> J[ヘッダー表示] +``` + +## 4. AI視点での結果 + +MCP と UI の「X docs」がドキュメント数で一致し、MCP ACTIVITY にツール呼び出しが表示されるようになった。トレイクリックでウィンドウの表示・非表示が安定して切り替わる。変更が閾値を超えたタイミングで 90 秒後に LSA が自動再学習され、ヘッダーで training / syncing / idle が確認できる。文書一覧でチャンク0の冒頭が把握でき、サイドバーはナビのみに整理された。