watchdog.Observer monitors conversation directories for file changes
Monitored Events: Created, Modified
Watched Directories: ~/.claude/projects/, ~/.vibe/logs/, ~/.local/share/opencode/
Identifies file type and selects appropriate connector
Supported: .jsonl (Claude), .json (Vibe/OpenCode), .db (Cursor), .md (Aider)
Action: Unsupported extensions ignored
Time-based delay prevents indexing in-progress files
New Files: 2s delay (fast indexing for completed files)
Modified Files: 5min delay (prevents re-indexing during active editing)
Event added to pending updates queue
Queue Type: Python Queue (thread-safe)
Batch Delay: 5s (groups multiple events)
Separate thread processes queued events without blocking
Method: _process_pending_updates()
Isolation: Indexing runs in background, UI remains responsive
Safe append-only indexing (never deletes existing data)
Method: indexer.index_append_only(file_paths)
Safety: Only adds new conversations, preserves all existing data
Updates statistics: indexed_count, last_update, in_progress flag
Tracked: Files indexed since start, timestamp of last update
API: GET /api/watcher/status
Web UI can poll for updated statistics and refresh results
Polling: Optional real-time updates via periodic API calls
Auto-Discovery: New conversations appear in search automatically