ZIM/Kiwix files were previously auto-discovered and embedded into the AI
knowledge base as soon as they existed on disk, with no way to exclude one
without deleting it entirely. This made browsing content in Kiwix and
including it in AI search the same decision, which isn't what users expect
or consented to.
- Stop auto-discovering ZIM_STORAGE_PATH during KB sync; ZIM files must be
explicitly added via the Content Manager's new 'Add to Knowledge Base'
action (embedSingleFile validates directly against disk instead).
- Add a per-file active/inactive toggle (kb_ingest_state.active) so a file
already indexed can be excluded from/re-included in search instantly,
without re-embedding.
- searchSimilarDocuments excludes inactive sources via a Qdrant filter.
- Hard-deleting an indexed ZIM now also cleans up its kb_ingest_state row
and Qdrant points, instead of leaving an orphaned KB entry behind.
- Batch the kb_ingest_state lookup in ZimService.list() into a single
query instead of one per file.