Issue #5 対応として MCP でドキュメント件数を返す get_document_count を追加し、HTTP /doc_count と UI ヘッダーも documents 件数に統一。MCP ACTIVITY が空になる不具合をブロードキャスト追加で解消し、トレイクリックの二重発火にはデバウンスを導入。LSA 再学習を「変更件数が閾値(登録数の 20% と 5 の少ない方)を超えたら 90 秒デバウンスで自動実行」するようにし、インデックス化の状態をヘッダーに表示。文書一覧にチャンク0の先頭15文字を表示し、左サイドバー下部のアコーディオンと著作権表示を削除した。
get_item_count を get_document_count に変更。SELECT COUNT(*) FROM documents で件数を返す。tools/list・dispatch・handle_get_document_count を追加・改名。handlers.rs の doc_count_handler を COUNT(*) FROM items から COUNT(*) FROM documents に変更。docs/specification/04_mcp_api_specification.md に get_document_count の説明を追記。MCP と UI の「X docs」がどちらもドキュメント数で一致し、意味が明確になった。
mcp:call:<method> を SSE でブロードキャストし、UI に表示する。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 に追記する実装だったため、バックエンドの送信追加のみで解消。Cursor 等から MCP ツールを呼ぶと、リアルタイムで MCP ACTIVITY にメソッド名が表示されるようになった。
src/backend/src/lib.rs: on_tray_icon_event 内で、左クリック時に LAST_TRAY_CLICK_MS(AtomicU64)で前回クリック時刻を記録。前回から 400ms 以内のクリックは無視し、それ以外は表示/非表示をトグル。トレイクリックでウィンドウの表示・非表示が安定して切り替わるようになった。
train_lsa_and_sync_hnsw を実行する。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 を実行。少ない登録数では 1〜2 件の変更で、多い登録数では最大 5 件の変更で再学習が走り、RE-INDEX を押さなくても語彙・LSA が適度に更新されるようになった。
AppState に indexing_status(RwLock)を追加。初期値 "idle"。GET /indexing_status で { "status": "idle"|"training"|"syncing" } を返す。train_lsa_and_sync_hnsw の開始時に "training" と indexing:training をブロードキャスト。sync_all_vectors の直前に "syncing" と indexing:syncing。完了・失敗・件数 0 の早期 return 時に "idle" と indexing:idle。indexing:* で表示を更新。idle 時はバッジを非表示。起動時や RE-INDEX・自動再学習時に、ヘッダーでインデックス構築の進行が分かるようになった。
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_preview を表示し、チャンクが 2 以上なら「…」を付与。.docs-cell-preview で最大幅・省略・色を指定。一覧から各文書の冒頭が把握しやすくなった。
src/frontend/components/app-sidebar.js: sidebar-bottom 内のアコーディオン(TelosDB ▸ / v0.3.5-HUD・© 2026 DtmOjaji)を削除。アコーディオン用のクリックハンドラも削除。その後、著作権のみのフッターも削除し、sidebar-bottom ブロックごとなくした。サイドバーは「検索・文書管理・設定」のナビのみとなり、見た目と役割が整理された。