Add Embedding Space tab to Graph plugin (v1.58.0)
Details
Integrate the 3D embedding space visualization as a second tab in the
Graph plugin. New EmbeddingDataService calls the rag_fetch_all FFI,
projects 768-dim embeddings to 3D via random projection, and computes
pairwise cosine similarity edges above a configurable threshold.
EmbeddingSpaceViewModel manages loading, parameters (similarity threshold,
max points, max neighbors, auto-rotate), entity type filtering, and
selection state. GraphViewModel gains GraphTab enum and ActiveTab property.
GraphView.axaml adds a tab strip with Knowledge Graph / Embedding Space
tabs, per-tab sidebar controls, and per-tab footer stats. GraphView
code-behind handles tab switching with lazy control creation.
GraphPlugin version bumped to 1.1.0, Desktop to 1.58.0.
Add 3D embedding space infrastructure: Rust FFI, models, controls (v1.58.0)
Details
Add rag_fetch_all FFI function to retrieve all RAG vector embeddings with
metadata for 3D visualization. New UI.Adaptive components: EmbeddingModels
(point/edge/data records), RandomProjection (Johnson-Lindenstrauss 768->3D),
PerspectiveCamera (orbit camera with perspective projection), and
EmbeddingSpaceControl (DrawingContext-based 3D point cloud renderer with
depth sorting, entity-type coloring, similarity edges, orbit drag, zoom,
and hit testing). Rust workspace bumped to 1.15.0, SDK to 1.58.0.
Store chunk text in RAG index and remove hardcoded plugin knowledge from chat
Details
Add chunk_text column to rag_vectors table so search results include the
original indexed content, not just titles. This enables the AI chat to
reference actual entity details (descriptions, due dates, notes) when
answering user queries.
Changes:
- Rust: add chunk_text TEXT column to rag_vectors (migration + CREATE TABLE)
- Rust: pass chunk_text through rag_upsert and return it from rag_search
- FFI: add chunk_text field to RagUpsertRequest with serde(default)
- C# RagIndexService: pass chunk.Text through upsert JSON
- C# RagSearchResult: add ChunkText property
- C# RagSearchService: parse chunk_text from FFI response
- C# Chat: replace FormatEntityTypeLabel() hardcoded switch with direct
EntityType usage from RAG results, and format results with truncated
chunk text content (500 chars cloud, 200 chars local)
Removes plugin isolation violation where the shell hardcoded entity type
display names (page->Note, task->Task, etc). Entity types now flow
directly from the plugin-provided ContentChunk.EntityType field.
Wire RAG semantic search into AI chat flow
Details
The RagSearchService existed but was never called during chat. Now
SendChatMessageAsync runs a semantic search against the RAG vector index
before building the system prompt, injecting relevant entity titles and
types as context. Cloud models get up to 10 results; local models get 5.
Results below a 0.3 cosine similarity threshold are filtered out.
This gives the AI awareness of the user's notes, tasks, contacts, events
and other indexed content when answering questions. (v1.57.4)
Fix DI resolution failure and wire RAG indexing for local mutations
Details
Root cause: SeedDataService constructor was changed to internal in a
prior commit, breaking Microsoft DI resolution. This caused
SettingsViewModel construction to throw, leaving all overlay dialogs
(ThemeEditor, ManagePlugins, GitHubDeviceFlow) with null DataContext
and defaulting IsVisible to true on startup.
Fixes:
- SeedDataService constructor back to public
- AiMemoryService, AiConversationStore and their model types to public
(required as public constructor parameter types)
- FallbackValue=False on overlay dialog IsVisible bindings as defense
- Error logging on SettingsVM lazy construction
RAG indexing fix: local entity CRUD was never triggering embeddings
because RagIndexService only listened for EntitySyncedMessage (P2P
sync only). Now SdkHost broadcasts EntitySyncedMessage after every
local mutation so RAG stays current. Also triggers full re-index
after reseed completes.
Version 1.57.2 → 1.57.3.
Get notified about new releases