Add reattach button and padding to detached AI tray window
Details
- Add IsDetached property and RequestReattach command to AiSuggestionTrayViewModel
- Show reattach button (dock icon) in tab strip when tray is detached
- Add content margin (8px sides/bottom) to AiTrayWindow for breathing room
- Wire ReattachRequested event in MainWindow detach/reattach lifecycle
- Version bump 1.66.1 → 1.66.2
Desktop v1.66.1: fix floating Duncan DataContext binding failure
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.
Desktop v1.66.0: Duncan AI panel — 3 display modes
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.
Get notified about new releases