Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 28 of 212 Next →
February 28, 2026
patch Desktop Shell

Guard BackupService and vault unlock for client mode

Details
  • BackupService: skip scheduled backups in client mode (server handles

its own backups). Previously, SettingsViewModel's DI resolution

triggered BackupService constructor which immediately started the

backup timer — even in client mode.

  • PluginRegistry.EnsurePluginVaultsUnlocked: skip in client mode since

vault state is managed by the server. The NativeLib vault calls would

fail (or succeed silently via catch) since the native runtime isn't

initialized in client mode.

patch Desktop Shell

Register EmbeddingService and IEmbeddingService in Desktop DI

Details

EmbeddingService (ONNX embedding model) and its IEmbeddingService

interface were never registered in Desktop's DI container. The Server

project registered a no-op HeadlessEmbeddingService, but Desktop was

missing the mapping entirely. This caused RagSearchService resolution

to fail when CommandPaletteViewModel built AI commands during

MainWindowViewModel construction.

Pre-existing bug surfaced by client mode startup where the full

DI resolution chain is exercised earlier than in standalone mode.

patch Files

Migrate Files plugin from local ErrorMessage/SuccessMessage to unified IToastService

Details

Replace inline ErrorMessage and SuccessMessage observable properties with

centralized Toast() helper that delegates to _host.Toast.Show(). This removes

the custom auto-dismiss timer (OnSuccessMessageChanged) and inline TextBlock

toast UI from FilesView.axaml, aligning with the shell's unified toast system

already adopted by Calendar and other plugins.

Changes:

  • Add private Toast() helper method using _host.Toast.Show()
  • Replace all ErrorMessage assignments with Toast(..., ToastType.Error)
  • Replace all SuccessMessage assignments with Toast(..., ToastType.Success)
  • Remove ErrorMessage and SuccessMessage observable properties
  • Remove OnSuccessMessageChanged partial method (3-second auto-dismiss)
  • Remove ErrorMessage TextBlock from vault unlock panel in AXAML
  • Remove SuccessMessage/ErrorMessage TextBlocks from status bar in AXAML
patch Calendar

Migrate Calendar from local toasts to unified IToastService

Details

Replace custom ErrorMessage/SuccessMessage observable properties and

inline toast borders with the shell's IToastService (same pattern Tasks

uses). This gives Calendar consistent animated toasts with type-specific

styling and auto-dismiss timers managed by the shell.

Removed: ErrorMessage/SuccessMessage properties, OnErrorMessageChanged/

OnSuccessMessageChanged auto-clear handlers, inline success/error

Border elements from CalendarView.axaml.

Added: Toast() helper method routing to Host.Toast with StatusMessage

fallback (matching Tasks pattern).

patch Desktop ShellServices

Fix client mode startup: license check and error handling

Details

In client mode, ShowMainWindow crashed at LicenseExpirationService because

PrivStackService.GetLicenseStatus() requires the native runtime to be

initialized — which it isn't in client mode. The exception was silently

swallowed by the fire-and-forget task, leaving the app with no visible

window.

  • Add license_status field to /api/v1/status endpoint response
  • Parse and store server license status during TryEnterClientMode()
  • Add CheckLicenseStatusFromServer() to LicenseExpirationService for

applying license status from a remote server string

  • Use server-provided license status in client mode ShowMainWindow
  • Add ContinueWith error handler on fire-and-forget EnterClientModeAsync

to log failures instead of silently swallowing them

← Prev Page 28 of 212 Next →

Get notified about new releases