feat: add relay URL IPC commands and Keychain persistence
Add get_relay_url() and save_relay_url() IPC commands to expose relay URL
configuration to the frontend. Implement Keychain persistence with
store_relay_url() and load_relay_url() helpers, plus delete_relay_url_test_only()
for test cleanup.
Add RelayConfigError enum with three variants (InvalidUrl, Unreachable,
KeychainError) serializing to SCREAMING_SNAKE_CASE for the frontend.
Implement normalize_relay_url() helper that validates URLs are http/https with
non-empty host, and strips trailing slashes before saving.
Update run() setup block to restore relay URL from Keychain on startup if
previously configured, ensuring all IPC commands use the saved URL.
Add 6 unit tests covering normalize_relay_url variants and get_relay_url/
load_relay_url round-trip with proper test cleanup.
All tests pass.