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).
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
Make color picker selection ring theme-aware (BUG #60 follow-up)
Details
Replace hardcoded white BorderBrush with ThemeTextPrimaryBrush (adapts
to light/dark theme). Converter now returns Thickness instead of Brush
so the theme resource can be resolved in XAML.
Route entity type registration through SDK transport layer
Details
RegisterEntityType was called directly via NativeLib P/Invoke in both
PluginRegistry (Desktop) and HeadlessPluginRegistry (Server), bypassing
the ISdkTransport abstraction. In client mode, the native runtime isn't
initialized, causing all entity schema registrations to fail with error
code -4.
- Add RegisterEntityType to ISdkTransport interface
- Implement in FfiSdkTransport (delegates to NativeLib)
- Implement in HttpSdkTransport (POSTs to /api/v1/sdk/register-entity-type)
- Add public RegisterEntityType method on SdkHost
- Add /sdk/register-entity-type endpoint to LocalApiServer
- Update PluginRegistry to route through SdkHost instead of NativeLib
- Update HeadlessPluginRegistry with same fix, remove unused NativeLib import
Fix trash view title overflow — replace StackPanel with DockPanel (BUG #20)
Details
Horizontal StackPanel gives children unbounded width, making TextTrimming
ineffective. Switch to DockPanel so the icon docks left and the title
fills remaining constrained space, enabling proper ellipsis truncation.
Get notified about new releases