Add database internals diagnostics panel
Details
Adds a "Database Internals" section to the Dashboard Data tab that queries
DuckDB's internal metadata to show per-table row counts, column counts, and
estimated sizes. This helps diagnose database bloat by revealing exactly which
tables are consuming space (e.g., orphaned entity_vectors, stale sync_ledger
entries, or accumulated email data).
The feature spans the full stack:
- Rust: db_diagnostics() on EntityStore queries duckdb_tables() and
pragma_database_size() to return JSON with per-table stats
- FFI: privstack_db_diagnostics() exports the function as a C string
- C#: NativeLibrary.DbDiagnostics P/Invoke + SdkHost.GetDatabaseDiagnostics()
- ViewModel: RunDatabaseDiagnosticsCommand parses JSON into ObservableCollection
- View: Card with Scan Tables button, DB/WAL size summary, per-table breakdown
Versions: Rust 1.13.3, SDK 1.43.1, Desktop 1.45.0
Cascade-delete orphaned vectors and sync ledger on entity deletion (v1.13.2)
Details
delete_entity() now also cleans entity_vectors and sync_ledger rows for
the deleted entity, preventing orphaned data from accumulating. Additionally,
run_maintenance() now purges any existing orphaned rows in entity_vectors,
sync_ledger, and entity_links whose parent entity no longer exists before
running CHECKPOINT and VACUUM. This addresses the issue where DuckDB files
remained large (124 MB) despite having 0 entities — the space was consumed
by orphaned auxiliary table rows that VACUUM alone couldn't reclaim.
Replace remaining hardcoded colors in SpeechRecordingOverlay (v1.44.1)
Details
Second pass of theme compliance audit. Replace Fill="White" on microphone icons in recording and transcribing states with ThemeTextOnAccentBrush.
Force-recreate empty DuckDB files during maintenance (v1.43.2)
Details
DuckDB VACUUM doesn't always reclaim disk space after mass deletions.
When "Clean Database" detects 0 entities but the entity DB is >1 MB,
it now shuts down the Rust core, deletes the empty .duckdb files, and
re-initializes — causing the Rust core to recreate fresh schemas. This
drops a 124 MB empty database down to ~260 KB.
Show PrivStack Cloud as storage location for cloud workspaces (v1.43.1)
Details
Add PrivStackCloud to DataDirectoryType enum. When the active workspace
has sync_tier == PrivStackCloud, the storage location selector now shows
"PrivStack Cloud" with a checkmark instead of falling through to stale
Custom/Default values. The displayed path uses the actual local workspace
directory (DataPaths.WorkspaceDataDir) rather than an outdated custom_path.
The PrivStack Cloud button is read-only — cloud sync is managed from the
Cloud Sync settings section, not the storage location picker.
Get notified about new releases