Add cloud sync entity progress indicator to status bar pill
Details
Track entity-level sync progress (synced/total) through the full stack:
Rust SyncProgress shared state computed from cursor count + outbox
distinct entities, exposed via FFI get_status, deserialized into C#
CloudSyncStatus, and displayed in the storage state pill as
"Cloud · X/Y" while entities are pending upload. Falls back to the
existing storage percentage display once all entities are synced.
Fix RAG index cascade on bulk file operations
Details
RagIndexService now uses batch-coalescing debounce instead of per-entity
timers. Incoming EntitySyncedMessages are queued and deduplicated, then
dispatched as a single batch — calling each IIndexableContentProvider at
most once per batch and loading hashes once. This reduces bulk operations
(e.g. trashing 40 files) from ~560 ReadList calls to ~14.
SdkMessage gains a SuppressChangeNotification property (JsonIgnored) that
tells SdkHost to skip the EntitySyncedMessage broadcast while still
recording sync outbound snapshots. Batch callers send a single summary
notification after all items are processed.
Version bump: 1.67.0 → 1.68.0 (SDK + Desktop)
Add biometric unlock (Touch ID / Windows Hello) support
Details
Implement platform-native biometric authentication as a convenience option
for unlocking PrivStack. The master password remains the root of trust —
biometric enrollment stores it in the OS keychain (macOS Keychain / Windows
Credential Manager), gated by biometric access control. On unlock, biometric
verification retrieves the password and feeds it through the existing
UnlockApp path. Zero Rust core changes required.
New files:
- IBiometricService interface with IsSupported, IsAvailable, Enroll,
Authenticate, Unenroll
- MacBiometricService: Security.framework P/Invoke for Keychain +
LocalAuthentication.framework for Touch ID prompts
- WindowsBiometricService: advapi32.dll CredWrite/Read/Delete +
UserConsentVerifier for Windows Hello
- NullBiometricService: Linux/unsupported fallback
Integration points:
- UnlockView: biometric button with "or" separator, auto-attempts on load
- SensitiveUnlockOverlay: biometric option for re-authentication
- Settings > Security: toggle with inline password enrollment, auto
re-enrollment on password change
- Setup Wizard: optional biometric step after password creation (shown only
when hardware is available)
- AppSettings: BiometricUnlockEnabled persisted setting
- ServiceRegistration: platform-conditional DI registration
Version: 1.66.5 → 1.67.0
Journal v1.9.0: audio journal sections with recording + transcription
Details
Add audio section editor with microphone recording (via IAudioRecorderService),
duration display, stop/record toggle, and Whisper transcription button.
Recorded audio stored via IStorageProvider. Transcription is editable for
corrections before saving.
AudioSectionView provides LibVLCSharp-based playback with progress bar,
seek position display, and play/stop toggle. Audio transcription rendered
as italic quote block below the player.
Wire IAudioRecorderService and ITranscriptionService from IPluginHost
through JournalPlugin to ViewModel for editor access.
Add LibVLCSharp NuGet dependency for cross-platform audio playback.
Modernize startup loader UX: shimmer animation, chromeless windows, auto-focus
Details
Replace the plain indeterminate ProgressBar in UnlockView and SetupWizardView
with a custom shimmer ping-pong animation using Avalonia keyframe animations.
A 60px indicator slides left-to-right inside a 200x3px track with opacity-masked
edges for a polished shimmer effect.
Remove macOS title bar chrome from UnlockWindow and SetupWindow by switching to
SystemDecorations="BorderOnly" with ExtendClientAreaToDecorationsHint and
NoChrome hints. This removes the traffic lights while preserving the window
shadow, letting the existing CornerRadius="16" card design stand on its own.
Add auto-focus behavior: UnlockWindow.Opened calls Activate() to bring the
window to the front, and UnlockView.AttachedToVisualTree focuses the PasswordBox
so users can immediately start typing their master password.
Version bump to 1.66.5.
Get notified about new releases