Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 6 of 139 Next →
March 1, 2026
patch Desktop Shell

Fix IPC server starting when bridge binary exists but extension not paired

Desktop 1.69.0 | 468e57be
Details

FindBridgePath() finds the privstack-bridge binary in the build output

directory even in dev builds where the browser extension isn't installed.

This caused the IPC server to always start.

Changed the guard: IPC server now starts only when ApiEnabled is true OR

BridgeAuthToken is non-empty (meaning the browser extension has actually

been paired). The bridge binary existence is still used for native

messaging host registration (writing manifests to browser directories),

which is harmless.

patch Desktop Shell

Only start IPC server when bridge binary exists or local API is enabled

Desktop 1.69.0 | 93425e28
Details

The IPC named-pipe server was starting unconditionally on every launch,

even when neither the browser extension bridge binary is installed nor

the local API is enabled. This wastes a background thread listening on

a pipe nobody will connect to.

Now guarded: IPC server only starts if FindBridgePath() finds the

privstack-bridge binary (meaning the web clipper extension is installed)

OR if appSettings.ApiEnabled is true (local dev API).

patch Desktop ShellServices

Sort Subsystems tab by category, skip Intent Engine when AI is off

Desktop 1.69.0 | Services 1.68.6 | 7814ec42
Details

Subsystem items now sorted by category (Core → AI → Services → UI →

Runtime → Plugin), then alphabetically within each group. Previously

items appeared in random insertion order.

Intent Engine's consumer task was starting unconditionally in the

constructor even when AI was disabled. The task sat forever on an empty

channel reader, showing a green "active" dot in the Subsystems tab

despite doing no work. Now only starts when AiEnabled && AiIntentEnabled.

IPC Server still shows active — that's correct, it always runs for

browser extension / CLI pipe connections.

patch Desktop Shell

Throttle Dashboard live metrics: stop per-second ReadList spam

Desktop 1.69.0 | 105a850f
Details

The 1-second live metrics timer was calling GetDataMetricsAsync on every

tick regardless of active tab. This triggered ~33 SDK ReadList/Count

calls per second across all plugins (page, task, event, contact, etc.),

saturating the SDK message bus with unnecessary I/O.

  • Memory metrics (process-level, no SDK calls) still refresh every 1s
  • Data metrics now only run on the Data tab, throttled to every 10s
  • Overview tab DataStorageTotal populated on first load only
  • Subsystems tab refresh unchanged (local counters, no SDK calls)
patch Desktop Shell

Fix Dashboard plugin toggle not rendering + clean up alloc tracking

Desktop 1.69.0 | ee972093
Details

The ToggleSwitch for enabling/disabling plugins was invisible because

ToggleSwitch in Avalonia does not have Command/CommandParameter properties.

The XAML parser silently dropped the invalid attributes, preventing the

control from rendering.

  • Remove invalid Command/CommandParameter from ToggleSwitch
  • Switch to two-way IsChecked binding on IsActivated property
  • Add OnActivationChanged callback on DashboardPluginItem that fires

when IsActivated changes from the ToggleSwitch

  • Wire callback in PopulateLocalPlugins AFTER setting initial value

to avoid re-entrant enable/disable calls during initialization

  • Add OnPluginActivationChanged handler that syncs to plugin registry

Also cleans up SubsystemTracker: removed broken heartbeat approach for

long-running task alloc tracking (GC.GetAllocatedBytesForCurrentThread

cannot be queried cross-thread after await resumes on a different thread).

← Prev Page 6 of 139 Next →

Get notified about new releases