Add Rust grouped aggregate query and FFI export
Details
Implements aggregate_query_grouped in the dataset store which generates
GROUP BY x_column, group_column SQL and returns (x, group, y) triples.
The FFI layer pivots these triples into a GroupedAggregateQueryResponse
with shared x_labels and per-series value arrays, ready for multi-series
chart rendering on the C# side.
Remove duplicate H1 titles, add chart block generation to insights
Details
Fixes the double title issue where page title and H1 heading both showed
the same text. Now only the page title is used — no redundant heading blocks
in either the parent or sub-pages.
AI prompt now instructs the model to suggest charts via [CHART: ...] markers
when data would be better understood visually. The orchestrator validates
column names against the actual dataset, parses chart markers, and creates
dataset-backed ChartBlock JSON (bar, line, pie) inline with the text.
Charts reference the source dataset by ID so they render live from the data.
Update AI provider models to current GA, add saved API keys UI
Details
Replace stale model lists across all three cloud providers: Gemini now
uses 2.5-series GA models (fixing 404 on retired preview), OpenAI adds
GPT-4.1 and o4-mini while dropping GPT-4 Turbo, Anthropic adds Claude
4.6 models. Settings panel now displays saved API keys with masked hints
and a delete button for each, backed by a new AiSavedKeyHints dictionary
in AppSettings. Deleting a key removes it from both the vault and the
persisted hints.
Enhance AI context: email/web clips, embedded datasets, history tab fix
Details
Add email_message and web_clip to EntityTypeMap so the AI tray sends
context for those entity types. For notes containing embedded
datasets/tables, parse dataset_id references from content and fetch
actual row data via IPluginDataSourceProvider. Add fallback entity
fetching through DataSourceProvider for unmapped types like dataset_row.
Fix history tab: clicking a previous conversation now switches to the
chat view by subscribing to SelectedTabIndex PropertyChanged in the
code-behind.
Fetch full entity data for active context injection in AI chat
Details
When the user views an item and chats with the AI, cloud models now receive
the full entity JSON (fetched via SDK Read) instead of just the title. This
gives the AI complete knowledge of the note body, task description, contact
details, etc. for the item the user is looking at.
Entity data is fetched async on active item change via SdkMessage Read,
serialized as indented JSON, and capped at 8K chars to avoid prompt bloat.
Local models still get the short "Currently viewing: Title (type)" summary
since their context windows are too small for full entity payloads.
Get notified about new releases