Limit email initial sync to 60 days, remove Load More button
Details
Initial IMAP sync now uses DeliveredAfter search query to only fetch
message headers from the last 60 days instead of all messages. This
prevents the UI from locking up on accounts with thousands of emails.
Older messages remain accessible via server-side IMAP search.
Progress bar runs in indeterminate mode during sync since the total
message count within the 60-day window isn't known upfront. Status
text shows count-only format ("Synced N messages...").
Removed the explicit "Load more messages..." button from the message
list panel — scroll-to-load at 80% threshold remains as the seamless
pagination mechanism.
Version: 1.24.2 → 1.25.0
Change Notes save model to LostFocus instead of keystroke debounce
Details
Remove the 500ms auto-save debounce from MarkBlockModified(). Previously
every keystroke would cancel/restart a timer that saved the entire page
after 500ms of idle, causing frequent saves, DB writes, and intent signal
emissions even during active typing.
Now MarkBlockModified() only sets HasUnsavedChanges = true (dirty flag).
Actual persistence is triggered by:
1. Block LostFocus — a tunnel handler on NotesView detects when focus
leaves a block editor element and calls SaveOnBlockLostFocus() with
a 200ms debounce to coalesce rapid focus transitions.
2. Explicit save — Cmd+S / page navigation / FlushAndCancelAutosaveAsync
still works as before via SaveCurrentPageAsync().
This reduces unnecessary load and ensures intent signals only fire once
per meaningful edit rather than on every typing pause.
Bump Notes plugin to v1.47.0.
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.
Add intent signal emission on save/create/update
Details
Tasks plugin (v1.11.1): Emit IntentSignalMessage with TextContent type
when a task description is saved with non-trivial content. The signal is
broadcast via WeakReferenceMessenger after the description is persisted
and includes the task ID, title, and full description text for the
IntentEngine to analyze.
Calendar plugin (v1.12.1): Emit IntentSignalMessage on event creation
and updates from two code paths -- the EventEditorViewModel.SaveAsync
(full editor) and CalendarViewModel.QuickCreateEvent (inline quick-add).
The signal type is EntityCreated for new events and EntityUpdated for
edits. Content includes the event title and description when present.
Both signals are only emitted for non-empty content to avoid unnecessary
IntentEngine processing. The IntentEngine on the shell side already
subscribes to these messages and will perform background intent analysis
when AI services are available.
Get notified about new releases