Add IQuickActionForm SDK interface and harden quick action overlay (v1.49.2)
Details
Introduces IQuickActionForm capability interface with CloseRequested event and
RequestClose() method, enabling the shell to handle overlay close lifecycle
instead of each plugin using reflection to find MainWindowViewModel. The
QuickActionService now subscribes to IQuickActionForm.CloseRequested when
creating UI content, providing a standardized close path. ShowQuickActionOverlay
resets stale state before showing new content and dispatches via
Dispatcher.UIThread.Post to ensure a clean visual tree cycle when rapidly
re-invoking overlays.
Fix Clean DB deleting all entities: orphan detection used wrong column
Details
The orphan entity detection compared created_by (a peer UUID identifying
the device) against plugin_id (e.g. "privstack.notes"), which never
matched — causing every entity to be classified as an orphan and deleted.
Fixed find_orphan_entities and delete_orphan_entities to check only the
entity_type column against the set of registered entity types from all
plugins. The created_by field is a peer identifier for CRDT sync and is
not related to plugin ownership.
Rust core v1.13.6, Desktop v1.49.1.
Restyle universal search shortcut badge: larger, bold, right-aligned
Details
Replaced the horizontal StackPanel layout with a Grid so the shortcut
badge is pushed to the far right of the search pill. Made the badge
bold and bumped font size from ThemeFontSizeXs to ThemeFontSizeSm for
better visibility. The badge is now vertically centered with proper
right margin, clearly separated from the placeholder text.
Unified global AI suggestion tray replacing IntentSuggestionTray (v1.49.0)
Details
Merges the shell's intent suggestion tray and plugin-local AI panels into a
single global "AI Suggestions" tray owned by the desktop shell.
New files:
- AiSuggestionServiceImpl: wraps WeakReferenceMessenger for Push/Update/Remove
- AiSuggestionTrayViewModel: subscribes to IntentEngine events + content
suggestion messages, aggregates both card types into one ObservableCollection
- ContentSuggestionCardViewModel: wraps ContentSuggestionCard, sends
ActionRequested/Dismissed messages back to owning plugin
- IAiTrayCardViewModel: common interface for Intent and Content card VMs
- AiSuggestionTray.axaml: DataTemplate-based rendering for both card types
Removed:
- IntentSuggestionTrayViewModel (replaced by AiSuggestionTrayViewModel)
- IntentSuggestionTray.axaml (replaced by AiSuggestionTray.axaml)
Renamed in MainWindowViewModel:
- IntentTrayVM → AiTrayVM, IsIntentTrayOpen → IsAiTrayOpen
- ToggleIntentTray → ToggleAiTray
Updated MainWindow.axaml bindings, Keyboard.cs escape handler, PluginHost/
PluginHostFactory wiring, and ServiceRegistration DI container.
Desktop version 1.48.3 → 1.49.0.
Add IAiSuggestionService SDK types for unified AI tray (v1.49.0)
Details
Introduces the SDK contract for the global AI suggestion tray:
- ContentSuggestionCard, SuggestionAction, ContentSuggestionState models
- Messenger messages: Push/Update/Remove/ActionRequested/Dismissed
- IAiSuggestionService interface (Push, Update, Remove)
- IPluginHost.Suggestions property for plugin access
- SDK version bump 1.48.0 → 1.49.0
Plugins can now push content suggestion cards (summaries, rewrites, etc.)
into a shell-owned unified tray via Host.Suggestions. Action clicks route
back to the owning plugin via ContentSuggestionActionRequestedMessage on
the messenger bus, keeping block-level operations inside the plugin while
the shell renders cards uniformly alongside intent suggestion cards.
Get notified about new releases