Fix wiki folder children disappearing after trash view round-trip
Details
When ShowingTrash toggles, the TreeView becomes invisible. Avalonia
tears down TreeViewItem containers and resets IsExpanded to false via
the two-way binding, collapsing all nodes. When returning from trash,
wiki folders (and any expanded regular folders) appeared empty because
their expansion state was lost.
Fix: snapshot _expandedNodeIds when entering trash, then restore
expansion state on all nodes (including wiki folders) when leaving.
Wiki folders with children are always re-expanded by convention since
they don't participate in the _expandedNodeIds tracking.
Add Developer settings section with local API toggle
Details
New "Developer" category in Settings (between Security and Enterprise)
with UI to enable/disable the local HTTP API server:
- Enable toggle that starts/stops the Kestrel server immediately
- Port configuration field (default 9720)
- API key display with Copy and Regenerate buttons
- Status indicator showing running state
- Quick test curl command for easy verification
Document local HTTP API in APP_CONTEXT.md
Details
Add IApiProvider to the capability table and describe the local API server
in the shell features section (port, auth, endpoints, opt-in setting).
Add IApiProvider SDK capability and local HTTP API server
Details
New SDK capability interface (IApiProvider) lets plugins declare HTTP API
routes and handle requests via pure SDK DTOs — no Kestrel dependency in
plugins. The shell hosts a Kestrel minimal API server on 127.0.0.1:9720
(configurable) that discovers providers and maps routes.
- IApiProvider interface + ApiProviderModels DTOs (ApiMethod, ApiRouteDescriptor,
ApiRequest, ApiResponse with static factory methods)
- LocalApiServer: WebApplication.CreateSlimBuilder(), API key auth middleware
(constant-time compare), per-provider route mapping, /api/v1/status (no auth)
and /api/v1/routes shell endpoints
- AppSettings: ApiEnabled (default false), ApiPort (default 9720), ApiKey
(auto-generated base64url on first enable)
- ServiceRegistration: LocalApiServer singleton
- App.axaml.cs: conditional server start in deferred background services
- PluginRegistry.ActivatePlugin: auto-register IApiProvider to CapabilityBroker
- FrameworkReference Microsoft.AspNetCore.App in Desktop csproj
Fix split layout resize and replace selection highlight
Details
Resize: Changed ColumnDefinitions from star (*) to Auto sizing for
both panes. Star columns have implicit minimum widths from content,
preventing the left pane from shrinking below ~50%. Both panes now
get explicit programmatic widths set in ApplyDetailPanelRatio() and
OnPanelResizeMoved(), allowing true 25%-75% range.
Selection: Stripped the default ThemeSelectedBrush lavender highlight
on ListBoxItem. Selected items now use ThemeHoverBrush background
with a subtle drop shadow on the .item-card border instead.
Get notified about new releases