Add auto-reverse-linking and enriched task note signals
Details
Tasks plugin:
- Note intent signals now include task title and description for better
AI context (fixes generic titles like "Rescheduled Meeting").
- Subscribes to IntentExecutedMessage and auto-links the source task to
whatever entity was created from it (e.g. calendar event).
- Tasks plugin version 1.18.3 -> 1.18.4.
Notes plugin:
- Subscribes to IntentExecutedMessage for sticky notes, auto-adding a
privstack:// URI link to the created entity in LinkedItems.
- Notes plugin version 1.57.1 -> 1.57.2.
Fix markdown round-trip losing paragraph indent, ToC, callout, and canvas blocks
Details
Added metadata markers for block types that were silently dropped during
markdown mode round-trips:
- [indent|N]text — preserves ParagraphBlock.IndentLevel through markdown
round-trip so Tab-indented paragraphs survive switching to markdown and back
- [tocmeta|blockId|title|maxDepth|includeChildHeadings|headingDepth] —
preserves TableOfContentsBlock with all its configuration fields
- [callout|icon]text — preserves CalloutBlock icon and text
- [canvasmeta|blockId] — preserves CanvasBlock by restoring from existing
block map (same pattern as chartmeta)
Updated both serialization (BlockToMarkdown in NotesViewModel) and
deserialization (MarkdownBlockParser.ParseMarkdownToBlocks) to handle
these markers.
Fix message selection accumulating in multi-select ListBox
Details
In Avalonia, setting SelectedItem on a Multiple-mode ListBox via binding ADDS
to SelectedItems instead of replacing the selection. This caused selections to
accumulate silently — every programmatic SelectedMessage change (mark-as-read,
sync refresh, keyboard nav) added to the count, showing "4 selected" when only
1 message was actually clicked.
Fix: Remove the SelectedItem binding and manage bidirectional sync in
code-behind. ListBox → VM flows through OnSelectionChanged (existing). VM →
ListBox now flows through a PropertyChanged subscription that clears
SelectedItems and adds only the target message. Both paths use
_suppressSelectionSync to prevent reentrant loops.
Fix email intent signals not firing for incoming messages
Details
Three issues prevented AI intent signals from being emitted for actionable emails:
1. Time cutoff bug: The incremental sync cutoff was AddHours(-1), contradicting
the code comment that said "all new unread messages are analyzed." Incremental
batches already contain only genuinely new UIDs (>= UidNext), so a time cutoff
is unnecessary and was silently dropping emails older than 1 hour. Changed to
DateTimeOffset.MinValue for incremental syncs (no cutoff).
2. IsLikelyAutomated was too aggressive: Patterns like from.Contains("email.")
matched nearly any transactional sender domain, from.StartsWith("info@") and
from.StartsWith("support@") blocked legitimate business emails, and many
subject patterns (e.g., "welcome to", "confirm your") filtered actionable
appointment/account emails. Stripped the filter down to only unambiguously
bulk-mail patterns (noreply, newsletter, marketing, known ESPs, promo subjects).
3. Signal content was sparse: Added sender email address and date to the intent
signal content so the AI classifier has more context for time-sensitive emails
(appointments, deadlines). Also raised maxSignalsPerBatch from 5 to 10.
Scale block action icons with theme font size
Details
Block action button icons (move up/down chevrons, remove X) were
hard-coded at 16px and appeared as tiny dots. Now sized via
DynamicResource ThemeFontSizeMd (15px base, scales with
accessibility settings). Button containers bumped from 24 to 28px
to accommodate the larger icons.
Notes plugin version bump to 1.56.2.
Get notified about new releases