2b96e83264
Add an in-process local relay to Amethyst Desktop that persists all received events to a per-account SQLite database using quartz's existing EventStore infrastructure. On startup, the local store hydrates DesktopLocalCache for instant feed rendering before remote relays connect. - LocalRelayStore: manages per-account EventStore lifecycle, batched write-through via BasicBundledInsert (250ms window), startup hydration (contact list -> metadata -> recent content events) - LocalRelayMaintenance: periodic cleanup (NIP-40 expiration, 30-day prune, weekly VACUUM), disk space monitoring - Settings UI: integrated into RelaySettingsScreen with statistics, storage management (prune/vacuum/clear), JSONL export/import, and error display - OfflineBanner: animated banner in both SinglePaneLayout and DeckColumnContainer showing offline status with local cache indicator - Thread-safe store access via @Volatile + synchronized lock - Skips re-enqueue during hydration (checks LOCAL_RELAY_URL) - DB stored at ~/.amethyst/accounts/<pubkey8>/events.db - Corrupt DB auto-detected and recreated on open Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>