Split AI memories into personal vs data categories with audit UI
Details
Add category-aware clear methods (ClearPersonalMemories, ClearDataMemories)
to AiMemoryService so personal memories (preference, personal) survive
data wipe/reseed while data memories (work, other, null) are cleared.
Settings UI now shows memory counts per category with individual clear
buttons, a "View All Memories" toggle to audit stored memories, and
inline edit/delete controls for individual memory entries. Users can
correct misunderstood memories or remove specific ones without clearing
everything.
SeedDataService.ClearAiState() now calls ClearDataMemories() instead of
ClearAll(), preserving user-shared personal facts across wipe/reseed.
Version bump 1.57.1 → 1.57.2.
Clear AI state on data wipe and reseed
Details
Add rag_delete_all FFI function to truncate the rag_vectors table.
Wire SeedDataService to clear RAG vectors, AI conversation history,
and AI memories when wiping or reseeding data. Add ClearAll() methods
to AiConversationStore and AiMemoryService. Prevents stale embeddings
and chat history from referencing deleted entities.
Fix RAG pipeline build errors
Details
Switch EmbeddingService tokenizer from non-existent Tokenizer.CreateTiktokenForEncoding
to WordPieceTokenizer.Create for nomic-embed-text-v1.5 compatibility. Update
EmbeddingModelManager to download vocab.txt instead of tokenizer.json. Fix
System.Threading.Timer type ambiguity in RagIndexService debounce. Remove unused
to_c_string import from Rust rag.rs FFI module.
Wire embedding model download into Settings UI with auto-index on startup
Details
Adds "Semantic Search" card to AI settings with download/delete buttons,
progress bar, and status text. Uses nomic-embed-text-v1.5 (~260MB ONNX model).
After download completes, initializes EmbeddingService and kicks off full
RAG index in the background. On subsequent app starts, if model is already
downloaded, auto-initializes after a 5-second delay (to allow plugin activation)
and runs full index with content-hash skip for unchanged chunks.
SettingsViewModel.AI.cs: IsEmbeddingModelDownloading, CanDownloadEmbeddingModel,
EmbeddingModelDownloadLabel, DownloadEmbeddingModelCommand, DeleteEmbeddingModelCommand.
RagIndexService: deferred auto-init in constructor via Task.Run with 5s delay.
Add RAG pipeline: SDK interface, Rust FFI, embedding + index services
Details
Implements full semantic search infrastructure for cross-plugin content retrieval:
SDK: IIndexableContentProvider capability interface with ContentChunk/IndexableContentResult
DTOs enabling plugins to contribute text content for vector embedding.
Rust Core: rag_vectors table (entity_id, chunk_path, embedding DOUBLE[], content_hash)
with cosine similarity search via DuckDB list_cosine_similarity(). Four FFI functions:
rag_upsert, rag_search, rag_delete, rag_get_hashes with P/Invoke bindings.
Desktop: EmbeddingService wraps ONNX Runtime for nomic-embed-text-v1.5 (768-dim vectors)
with search_document/search_query task prefixes and L2 normalization.
EmbeddingModelManager handles HuggingFace model download with temp-file-and-rename.
RagIndexService is a Channel<T> bounded background worker that listens for
EntitySyncedMessage, debounces per-entity (500ms), and skips unchanged chunks via
content_hash comparison. RagSearchService provides the query API.
Auto-registers IIndexableContentProvider in PluginRegistry capability broker.
SDK 1.56.0 → 1.57.0, Desktop 1.56.0 → 1.57.0, Rust 1.13.6 → 1.14.0
Get notified about new releases