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.
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
Add category field to dataset metadata for AI-generated dataset isolation
Details
Adds a `category` column to the `_datasets_meta` schema via a new migration,
threaded through the full Rust core → FFI → SDK → Desktop stack. The
ChartDatasetGenerator now tags AI-derived datasets with category "ai-generated"
when calling ImportFromContentAsync. The SDK's IDatasetService and DatasetInfo
types expose the new optional category field with backward-compatible defaults.
Rust changes: schema migration, DatasetMeta.category field, store CRUD/mutations
updated to read/write/copy category, new set_category() helper. FFI request
structs (CreateEmptyRequest, ImportContentRequest) accept optional category.
SDK/Desktop: DatasetInfo gains Category property, IDatasetService methods
CreateEmptyDatasetAsync and ImportFromContentAsync accept optional category
parameter, DatasetService.Mutations threads it to FFI JSON requests.
Version bumps: SDK 1.55.0 → 1.56.0, Desktop 1.55.5 → 1.56.0.
Add chart-eligible column filtering for view-based insights
Details
When generating AI insights from SQL views, the view may produce computed
columns (e.g., billable_pct) that don't exist in the underlying dataset.
Charts reference the dataset directly via AggregateAsync, so they can only
use the dataset's actual columns.
This adds ChartEligibleColumns/ChartEligibleColumnTypes to the insight
request message, allowing the Data plugin to pass the underlying dataset's
columns separately from the view's result columns. The orchestrator now
validates chart markers against these chart-eligible columns and instructs
the AI to only reference them in chart suggestions, while still analyzing
all view columns in the prose.
SDK 1.54.0 → 1.55.0, Desktop 1.54.5 → 1.55.0
Wire grouped aggregate through desktop service layer
Details
Adds AggregateGrouped P/Invoke binding to DatasetNativeLibrary and
implements AggregateGroupedAsync in DatasetService using the same
marshal-and-free pattern as AggregateAsync. Bumps Desktop version
from 1.53.0 to 1.54.0.
Get notified about new releases