Add cloud-aware chat with conversation history and persistent memory
Details
Cloud providers (OpenAI, Anthropic, Gemini) now build full message arrays from
ConversationHistory when present, enabling multi-turn conversations. Anthropic
uses automatic prompt caching (cache_control ephemeral) for multi-turn chats,
reducing repeat input cost to 10% on cache hits. AiPersona gains a richer
cloud system prompt with memory context injection and higher token budgets.
AiMemoryService persists learned user facts to JSON at DataPaths.BaseDir,
capped at 50 entries. AiMemoryExtractor runs a fire-and-forget secondary AI
call after cloud responses to extract memorable facts. The chat VM branches:
local models get the existing minimal prompt path; cloud models get history,
memory, and no aggressive sanitization. Desktop version bumped to 1.51.0.
Add AiChatMessage record and ConversationHistory to AiRequest
Details
Introduces AiChatMessage (Role + Content) and an optional ConversationHistory
property on AiRequest for multi-turn chat support. Cloud providers can iterate
over the history to build full message arrays while local providers ignore it.
Backward-compatible — defaults to null. SDK version bumped to 1.51.0.
Convert AI tray from flat card list to conversation chat interface
Details
Redesign the AI suggestion tray as a chat-style conversation UI with user/assistant
message bubbles. User actions (Summarize, Rewrite) appear as right-aligned user bubbles
with clickable source entity links, followed by left-aligned assistant response bubbles
with loading states, content, and action buttons.
Key changes:
- Add UserPromptLabel to ContentSuggestionCard SDK model for user bubble text
- New AiChatMessageViewModel with User/Assistant roles, state management, and actions
- Refactor AiSuggestionTrayViewModel to use Messages collection instead of Cards
- Add free-form chat input with AiSuggestionTrayViewModel.Chat.cs partial class
- Rewrite AiSuggestionTray.axaml with chat bubble layout, auto-scroll, Enter-to-send
- Wire NavigateToLinkedItemFunc for clickable source links in bubbles
- Fix text overflow: all content uses TextWrapping="Wrap" instead of TextTrimming
- Rename tray header from "AI Suggestions" to "PrivStack AI"
- Mark old IAiTrayCardViewModel and ContentSuggestionCardViewModel as [Obsolete]
- Bump SDK to 1.50.0, Desktop to 1.50.0
Add AI Generated section to Data plugin sidebar
Details
Isolates AI-generated datasets (category "ai-generated") into a dedicated
sidebar section between Datasets and Views. The new section uses a globe icon
with accent color to visually distinguish AI-derived data, and auto-hides
when no AI datasets exist.
DataObjectSummary gains a Category field. DataViewModel partitions datasets
by category into Datasets vs AiGeneratedDatasets collections with matching
FilteredAiGenerated computed property. DataView.axaml adds the third section
with its own ListBox and context menu. Code-behind wires up selection so
clicking in any of the three lists clears the other two.
All lookup sites (delete, duplicate, deep link navigation) now search
AiGeneratedDatasets in addition to Datasets and Views.
Version bump: 1.18.2 → 1.19.0.
Migrate chart rendering to LiveCharts with 6 new chart types
Details
Replaces ~1300 lines of custom Canvas/SkiaSharp chart rendering with LiveCharts
for bar, line, pie, stacked bar, grouped bar, horizontal bar, scatter, area, and
donut charts. Timeline remains custom Canvas (no LC Gantt equivalent).
ChartBlockEditor is now a ~280-line orchestrator that delegates data loading to
ChartDataLoader and series construction to ChartSeriesFactory. The AXAML adds
buttons for all 10 chart types plus a Group By column selector for stacked/grouped.
ChartExportRenderer uses LiveCharts off-screen rendering (SKCartesianChart/SKPieChart)
instead of manual SkiaSharp drawing, ensuring export matches interactive rendering.
ChartConfigViewModel gains SelectedGroupByColumn and emits GroupBy, Orientation, and
InnerRadiusRatio fields for the new chart types.
Bumps Notes plugin from 1.54.2 to 1.55.0.
Get notified about new releases