SDK v1.66.1: spell check adorner, autocorrect, and Timer ambiguity fixes
Details
Adds SpellCheckAdorner (wavy underlines for misspelled words in TextBox),
SpellCheckBehavior (attached behavior to enable spell check), autocorrect
service, and spell check rendering utilities. Integrates spell check into
RichTextEditor with debounced recheck and dictionary change handling.
Fixes Timer ambiguity (System.Timers vs System.Threading) in SpellCheckAdorner
and RichTextEditor.SpellCheck by fully qualifying System.Timers.Timer. Fixes
IsAttachedToVisualTree → GetVisualRoot() and GetTemplateChildren →
GetVisualDescendants for Avalonia 11.3.x compatibility.
SDK v1.66.0: add IAudioRecorderService + ITranscriptionService
Details
Add IAudioRecorderService and ITranscriptionService interfaces to the SDK
Services namespace. These allow plugins to record audio and transcribe
speech-to-text without directly depending on Desktop internals.
AudioRecorderServiceAdapter wraps AudioRecorderService.Instance, translating
PropertyChanged events into DurationChanged. TranscriptionServiceAdapter
wraps WhisperService.Instance.TranscribeAudioFileAsync.
Both services are wired through PluginHost and PluginHostFactory, exposed
as nullable properties on IPluginHost for backward compatibility.
Desktop v1.65.9 for adapter wiring.
Duncan persona: warm directness, adaptive technical depth, honest unknowns
Details
Enriched the cloud system prompt with personality traits: honest but
empathetic tone, balanced verbosity, clean dry humor, neutral error
handling that pivots to solutions. Technical depth now adapts to the
user via memory context rather than assuming expertise level.
RAG search: cross-plugin diversity with query-based plugin boosting
Details
RAG search results were dominated by the active plugin's data, making
cross-plugin queries (e.g. asking about Notes from Tasks) return no
results from the mentioned plugin. Fix: fetch 3x candidates, then
apply plugin diversity via round-robin interleaving. When the user
mentions a specific plugin by name (e.g. "notes", "calendar"),
half the result slots are reserved for that plugin's data.
Fix intent actions not surfacing in RAG — use dedicated intent search
Details
The root cause of the AI responding conversationally ("Shall I go ahead?"
"Creating those now!") without actually executing actions was that RAG
returned 0 intent_action chunks. Entity data (the user's actual tasks,
notes, etc.) crowded out intent_action chunks in the general semantic
search because task titles are closer to the query than "ACTION: Create
Task" descriptors.
Fix: BuildRagContextWithIntentsAsync now performs TWO parallel searches —
one general (for entity data + plugin context) and one specifically
filtered to intent_action entity type. Results are deduped and merged,
ensuring the AI always sees relevant available actions alongside the
user's data context.
Also fixed incorrect slot names in ActionFormatHeader for tasks.add_link
(was source_task_id/target_entity_id, corrected to task_id/target_id).
Desktop version 1.65.6 → 1.65.7.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Get notified about new releases