Journal v1.9.0: audio journal sections with recording + transcription
Details
Add audio section editor with microphone recording (via IAudioRecorderService),
duration display, stop/record toggle, and Whisper transcription button.
Recorded audio stored via IStorageProvider. Transcription is editable for
corrections before saving.
AudioSectionView provides LibVLCSharp-based playback with progress bar,
seek position display, and play/stop toggle. Audio transcription rendered
as italic quote block below the player.
Wire IAudioRecorderService and ITranscriptionService from IPluginHost
through JournalPlugin to ViewModel for editor access.
Add LibVLCSharp NuGet dependency for cross-platform audio playback.
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.
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.
Journal v1.8.0: rich sections model + progressive loading
Details
Introduce structured JournalSection model (Text, Photos, Audio, Map types)
with backward compatibility for legacy plain-text entries. Add section
toolbar to quick capture card, section editor controls, and section
rendering in Feed/Focused views.
Wire progressive loading: scroll-triggered auto-load when near bottom of
feed, explicit Load More button, progress indicator. Reduce page size from
100 to 20 entries per load for faster initial render.
Update RAG indexing to include section text content, audio transcriptions,
and map labels in search chunks.
New files: JournalSection model, JournalSectionViewModel, partial
JournalViewModel.Sections, JournalSectionRenderer, TextSectionView,
TextSectionEditor, SectionToolbar.
Get notified about new releases