Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 80 of 266 Next →
February 25, 2026
patch Desktop Shell

Desktop v1.66.1: fix floating Duncan DataContext binding failure

Desktop 1.66.0 → 1.66.1 | 31bfd92d
Details

When the AiSuggestionTray was reparented into the floating window,

its XAML binding DataContext="{Binding AiTrayVM}" tried to resolve

against the floating window's DataContext (AiSuggestionTrayViewModel),

which doesn't have an AiTrayVM property. This caused the binding to

fail, leaving DataContext null and all internal panel visibility

bindings broken (both Chat and Intents panels visible simultaneously,

link picker showing).

Fix: explicitly set trayControl.DataContext = vm.AiTrayVM after

removing from the inline grid, bypassing the XAML binding path.

Also close the link picker before reparenting for clean state.

minor Desktop Shell

Desktop v1.66.0: Duncan AI panel — 3 display modes

Desktop 1.65.9 → 1.66.0 | fd438fe1
Details

Add three display modes for the Duncan AI assistant panel so it no

longer has to consume main window real estate:

1. Attached Full Height (default) — right-side drawer, full height,

same as previous behavior.

2. Attached Half Height — right-side drawer anchored to the bottom

half of the window. Drag resize handle is hidden in this mode;

corner radius adapts to top-left only.

3. Detached / Floating — separate OS window that can be moved to

another monitor, freely resized, and closed independently.

Implementation details:

  • New AiTrayDisplayMode enum (AttachedFull, AttachedHalf, Detached)

drives all mode logic from MainWindowViewModel.

  • Computed booleans (IsAiTrayAttachedFull, IsAiTrayAttachedHalf,

IsAiTrayDetached, IsAiTrayAttached) simplify XAML bindings.

  • IsAiTrayDrawerOpen gates the slide animation so the inline drawer

stays hidden when the tray is in detached mode.

  • AiTrayMaxHeight property constrains the drawer to half the window

content height, updated on window resize via code-behind.

  • Three small icon buttons in the drawer header let the user switch

modes. Active mode gets accent/highlight styling.

  • DetachAiTray() removes the AiSuggestionTray UserControl from the

inline grid and reparents it into a new AiTrayWindow (non-modal,

resizable, native OS decorations). ReattachAiTray() reverses the

operation, returning the UserControl to the inline drawer.

  • Closing the floating window via the OS close button automatically

reattaches to AttachedFull mode.

  • Status bar star icon brings the floating window to front when in

detached mode, toggles the drawer when in attached modes.

  • HalfValueConverter added for potential future XAML-side bindings.
  • App shutdown sequence cleanly closes the floating window.
minor IO

SDK v1.67.0: version bump

SDK 1.66.1 → 1.67.0 | 1ed8ce36
patch Desktop ShellSDKUI Components

SDK v1.66.1: spell check adorner, autocorrect, and Timer ambiguity fixes

SDK 1.66.0 → 1.66.1 | 6796be33
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.

minor Desktop ShellSDK

SDK v1.66.0: add IAudioRecorderService + ITranscriptionService

SDK 1.65.1 → 1.66.0 | Desktop 1.65.8 → 1.65.9 | a2c66356
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.

← Prev Page 80 of 266 Next →

Get notified about new releases