Add AI Intent Engine service and UI surfaces (v1.41.0)
Details
Implements the shell-side IntentEngine that receives IntentSignalMessage
broadcasts, uses IAiService to classify content against available intent
descriptors, and surfaces IntentSuggestion objects to the user.
Engine (Services/AI):
- IntentEngine: channel-based signal consumer with per-plugin debounce,
content deduplication, 50-suggestion FIFO cap, structured AI prompt
- IntentPromptBuilder: dynamic prompt generation from intent descriptors
UI surfaces:
- IntentSuggestionTrayViewModel + AXAML: floating tray with suggestion
cards, badge count, accept/edit/dismiss actions
- IntentSuggestionCardViewModel: per-card display with slot editing
- IntentSlotEditorViewModel + AXAML: modal overlay for slot review/edit
- MainWindow: tray panel + sparkle button in status bar + overlay
- SettingsViewModel.AI: intent engine + auto-analyze toggles
Wiring:
- ServiceRegistration: IntentEngine singleton
- PluginHostFactory/PluginHost: IntentEngine property
- PluginRegistry: IIntentProvider auto-registration
- AppSettings: AiIntentEnabled, AiIntentAutoAnalyze
Add AI Intent Engine capability types (v1.42.0)
Details
Introduces the IIntentProvider capability interface and supporting types
for the cross-plugin AI Intent Engine. Plugins declare actionable intents
with typed slots, and the shell-side engine classifies content signals
to surface suggestions.
New SDK types:
- IIntentProvider: capability interface for intent declaration + execution
- IntentDescriptor, IntentSlot, IntentSlotType: intent schema DTOs
- IntentRequest, IntentResult: execution contract
- IntentSignalMessage, IntentSignalType: messenger-bus signal DTO
- IIntentEngine: shell-provided engine interface exposed to plugins
- IntentSuggestion: matched suggestion record
- IPluginHost.IntentEngine property for plugin access
Global rate-limit pause for cloud sync (v1.13.0)
Details
When any cloud API request receives a 429 (Too Many Requests), the client
now pauses ALL sync operations for the Retry-After duration instead of
silently retrying individual calls.
Changes:
- Added RateLimited { retry_after_secs } variant to CloudError with
retry_after() helper for extracting the pause duration
- Added shared rate_limited_until gate to CloudApiClient with
enforce_rate_limit() pre-flight check and check_rate_limit_response()
post-flight handler on auth_get/auth_post/auth_delete
- Sync engine run() loop now skips flush, poll, and credential refresh
ticks while rate-limited; ForceFlush and Stop final flush also respect
the gate
- Replaced 3-attempt retry loop in flush_outbox() with single
advance_cursor call — on RateLimited error, re-queues current entity
events plus all remaining unprocessed entities and returns immediately
- authenticate() and refresh_access_token() bypass the gate since they
use raw HTTP client calls and aren't subject to cloud rate limits
- Parses Retry-After header (integer seconds from express-rate-limit),
falls back to 60s if missing, only extends deadline never shortens
Add IIntentProvider implementations and version bumps
Details
All 10 plugins now implement IIntentProvider, declaring actionable
intents with typed slots for the AI Intent Engine:
- Calendar: create_event (title, start_time, end_time, location, description)
- Tasks: create_task (title, description, due_date, priority)
- Notes: create_note (title)
- Contacts: create_contact (name, email, phone, company)
- Email: draft_email (to, subject, body) + signal emission for received
- Journal: create_entry (content, mood, tags)
- Files: create_bookmark (name, path)
- Snippets: save_snippet (title, content, language)
- RSS: add_feed (url, title, category)
- WebClips: save_clip (url, title, notes)
Version bumps for IIntentProvider + signal emission additions.
Add intent signal emission on page save/update (v1.46.1)
Details
When a page is saved via SaveCurrentPageAsync, the Notes plugin now
broadcasts an IntentSignalMessage via WeakReferenceMessenger. The signal
extracts plain text from all page blocks using the existing
ExtractBlockText helper and sends it with TextContent signal type. This
enables the shell-side IntentEngine to analyze saved page content for
actionable intents (e.g., auto-creating tasks, calendar events, or
contacts from note content). The emission is wrapped in a try/catch to
ensure it never blocks or interrupts the save flow. Both the csproj
version and PluginMetadata version are bumped to 1.46.1.
Get notified about new releases