Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 11 of 22 Next →
February 19, 2026
minor Core

Global rate-limit pause for cloud sync (v1.13.0)

Core 1.12.2 → 1.13.0 | 58dd2cd7
Details

When any cloud API request receives a 429 (Too Many Requests), the client

now pauses ALL sync operations for the Retry-After duration instead of

silently retrying individual calls.

Changes:

  • Added RateLimited { retry_after_secs } variant to CloudError with

retry_after() helper for extracting the pause duration

  • Added shared rate_limited_until gate to CloudApiClient with

enforce_rate_limit() pre-flight check and check_rate_limit_response()

post-flight handler on auth_get/auth_post/auth_delete

  • Sync engine run() loop now skips flush, poll, and credential refresh

ticks while rate-limited; ForceFlush and Stop final flush also respect

the gate

  • Replaced 3-attempt retry loop in flush_outbox() with single

advance_cursor call — on RateLimited error, re-queues current entity

events plus all remaining unprocessed entities and returns immediately

  • authenticate() and refresh_access_token() bypass the gate since they

use raw HTTP client calls and aren't subject to cloud rate limits

  • Parses Retry-After header (integer seconds from express-rate-limit),

falls back to 60s if missing, only extends deadline never shortens

minor Desktop Shell

Add AI infrastructure with cloud and local providers (v1.40.0)

Desktop 1.39.6 → 1.40.0 | 2330149f
Details

Add complete AI integration infrastructure: OpenAI, Anthropic, Gemini cloud

providers and local LLamaSharp GGUF inference. Includes AiService orchestrator,

AiModelManager for local model downloads (following WhisperModelManager pattern),

AiProviderBase with retry/backoff, and AiPromptTemplates. API keys stored

encrypted in vault. Add AI settings section to Settings panel with provider

selection, API key storage, model selection, local model download with progress,

and temperature control. Wire IAiService through PluginHost/PluginHostFactory

to make AI available to all plugins. Add LLamaSharp NuGet packages. Bump

Desktop from 1.39.6 to 1.40.0.

minor SDK

Add IAiService interface and AI DTOs for plugin AI integration (v1.41.0)

SDK 1.40.0 → 1.41.0 | 3b512725
Details

Add IAiService, AiRequest, AiResponse, AiProviderInfo, and AiModelInfo

to the SDK. Add nullable AI property to IPluginHost for backward-compatible

AI access. This enables plugins to consume AI completions (summarization,

content transformation) through the host-provided service. Bump SDK version

from 1.40.0 to 1.41.0.

minor Desktop Shell

Structural UI modernisation v1.39.0

Desktop 1.38.0 → 1.39.0 | 7c9ea775
Details

Replace the flat, corporate-feeling desktop shell with a modern, animated layout that feels premium across all seven themes.

**NavigationSidebar — full redesign**

  • Gradient sidebar background (ThemeNavGradientBrush) replaces flat colour
  • Left accent bar: wrapper Border uses BorderThickness="3,0,0,0" with BrushTransition from Transparent → ThemePrimaryBrush when the nav item is active — the VS Code / Linear active indicator pattern
  • Icon bubble (Border.nav-icon-bubble): 28×28 rounded square inside each nav item transitions from transparent to ThemePrimaryMutedBrush on active; icon stroke transitions to ThemePrimaryBrush
  • Workspace card header: replaces plain TextBlock with a full-width button containing a 28×28 icon bubble (Layers icon, ThemePrimaryMutedBrush), workspace name (SemiBold), "Workspace" subtitle, and ChevronsUpDown chevron — all with 120ms BrushTransitions
  • All code-behind named elements preserved: ExpandedNavItems, CollapsedNavItems, DragOverlay, CollapsedTimerIndicator, CollapsedTimerPopup; drag-reorder logic intact

**SettingsPanel — two-column redesign with animated navigation**

  • Replaced single-column accordion (12 Expanders) with a two-column Grid (190px / *)
  • Left column: ListBox.settings-categories — 12 category items each with an icon bubble + label; selected item gets ThemePrimaryMutedBrush background and ThemePrimaryBrush icon/text with 120ms BrushTransition; Danger Zone uses danger-colour bubble
  • Right column: Carousel (replaces TabControl) with CrossFade 150ms page transition — categories cross-fade when switching, giving a fluid animated feel
  • Code-behind: removed accordion Expander logic entirely; OnCategoryListSelectionChanged syncs CategoryList.SelectedIndex → Carousel.SelectedIndex; OnLoaded/OnUnloaded wire and unwire the handler cleanly
  • DataContext changes for Connections and CloudSync sections preserved with x:DataType on child StackPanels

**PrivStackTheme.axaml — hover lift animations**

  • Border.hoverable: added TransformOperationsTransition (200ms CubicEaseOut) and BoxShadowsTransition; :pointerover now sets RenderTransform="translateY(-2px)" and a stronger BoxShadow — cards lift off the surface on hover
  • Border.card: same lift treatment — translateY(-2px) + shadow deepens from 3px to 20px on hover; TransformOperationsTransition 200ms
  • Border.stat-card: same hover lift applied — dashboard metric tiles rise on hover

All changes compile clean (0 errors, 0 warnings). Version bumped 1.38.0 → 1.39.0.

minor Desktop Shell

Design system overhaul v1.38.0

Desktop 1.37.1 → 1.38.0 | d5a51381
Details

Comprehensive visual upgrade across the desktop shell targeting a modern, premium feel while preserving all existing functionality and the 7-theme token system.

## SharedTokens.axaml (new)

Extracted ~140 lines of duplicated layout constants (corner radii, spacing, font sizes, padding, panel widths, icon sizes, animation durations, EmptyState sizing tokens) into a single shared ResourceDictionary. All 7 theme files now include it via MergedDictionaries, eliminating the previous token duplication.

## Theme Files (all 7 updated)

  • Dark, Light, Azure, Sage, Lavender: Added ThemeNavGradientBrush (subtle top→bottom depth on nav sidebar), ThemeNavAccentBarBrush (primary→secondary vertical gradient for active nav item accent bar), ThemePrimaryGradientBrush (tactile top-light depth on accent buttons). Nav gradient end colours are individually tuned per theme.
  • Ember, Slate: Same gradient brushes, with hardcoded hex stops since these themes use ThemeSurface directly for their nav background rather than a dedicated ThemeNavBackground key.
  • Removed all duplicate layout token blocks from each theme file (now sourced from SharedTokens).

## PrivStackTheme.axaml (major enhancements)

  • Button.accent: Background changed to ThemePrimaryGradientBrush; pressed state adds scale(0.97) render transform for tactile feedback.
  • New Button.icon-button (32×32, Padding=6) and Button.icon-button-lg (40×40, Padding=8) classes for compact icon-only actions.
  • Border.card / Border.elevated-card / Border.surface-card: Stronger shadow values, added 1px ThemeBorderSubtleBrush border for depth.
  • New Border.stat-card: Elevated surface with Padding=20, CornerRadius=ThemeRadiusLg, 1px border, card-level shadow. Used by Dashboard.
  • New Border.nav-accent-bar: 3px wide, right-rounded (0,2,2,0), ThemeNavAccentBarBrush background. Used in NavigationSidebar.
  • New Border.section-divider: 1px height divider using ThemeBorderSubtleBrush.
  • Typography upgrades: TextBlock.subheading reduced to 11px with LetterSpacing=0.8 and SemiBold weight (category labels now look intentional); TextBlock.page-heading upgraded to Bold; new TextBlock.plugin-title (20px SemiBold), TextBlock.hero-number (34px Bold), TextBlock.empty-state-heading (22px SemiBold Center), TextBlock.empty-state-message (14px Muted Center Wrap).
  • ListBoxItem: Added CornerRadius=ThemeRadiusSm.
  • Button.view-toggle.active: Upgraded to iOS segmented-control style — ThemeSurfaceElevatedBrush background with subtle BoxShadow instead of flat selected colour.
  • New Expander.settings-section style: ThemeSurfaceBrush background, ThemeRadiusLg corner radius, ThemeBorderSubtleBrush 1px border. Includes /template/ ToggleButton override for HorizontalContentAlignment=Stretch and Padding=16,14.

## NavigationSidebar.axaml

Sidebar container background changed from flat ThemeNavBackgroundBrush to ThemeNavGradientBrush for subtle depth that works across all themes.

## ViewToggleGroup.axaml

Outer container changed to ThemeSurfaceRecessedBrush + ThemeRadiusMd + Padding=3 to create the iOS segmented-control recessed track. Active tab uses ThemeSurfaceElevatedBrush with subtle drop shadow. Local styles updated with 120ms BrushTransitions on Background and Foreground.

## SettingsPanel.axaml

All 12 section expander headers updated with icon bubbles: 28×28 Border (CornerRadius=6, Background=ThemePrimaryMutedBrush) containing a 14px IconControl. Section→icon mapping: Profile=User, Appearance=Settings, Accessibility=AlertCircle, Notifications=Mail, Speech-to-Text=MessageSquare, Data & Backup=Database, Connections=Network, Cloud Sync=Sync, Security=Lock, Enterprise=Users, About=Info, Danger Zone=AlertCircle (ThemeDangerMutedBrush bubble + ThemeDangerBrush icon + ThemeDangerBrush text). Added xmlns:controls namespace to root element.

## DashboardView.axaml

System Overview cards (Overview tab) and Storage Overview cards (Data tab) both upgraded:

  • Border now uses Classes="stat-card" for consistent elevation, border, and corner radius.
  • Each card has a 40×40 icon bubble (CornerRadius=10) with semantic colour: App Shell/Database=ThemeInfo (blue), Plugins/Files=ThemeWarning (amber), Data Storage/Vault=ThemeSuccess (green), Memory/Total=ThemePrimary (accent).
  • Large metric value TextBlock upgraded to Classes="hero-number" (34px Bold).
  • Label and subtext reorganised into a nested StackPanel with Spacing=2 for cleaner visual grouping.

## Version

PrivStack.Desktop: 1.37.1 → 1.38.0 (minor bump for design system overhaul)

← Prev Page 11 of 22 Next →

Get notified about new releases