51d1675ad6
Reworks the multi-identity model. When the wallet is unlocked, EVERY held identity's nsec is decrypted into memory (unlock_all_identities), and the service listens for gift wraps addressed to ALL of them at once, each redeeming into the one shared balance. Switching is now an instant, purely-local change of which identity is presented and used for sending — no password, no service teardown, no catch-up. How receives stay deduped across all identities: a SINGLE gift-wrap subscription with a multi-pubkey filter (OR over #p) and a SINGLE sequential notification handler. Each wrap is p-tagged to exactly one identity, so it arrives once and is processed once through the unchanged processed-set — dedup is exactly as safe as the single-identity path, with no concurrent wrap processing. handle_wrap opens each wrap by trying each held key until one succeeds; that key is the recipient identity, recorded as the tx's recipient_pubkey. publish_identity now advertises every held identity's DM-relay list (and profile, if named), each signed with its own key, on the shared relay set. NostrService holds all identities (recv) plus the active keys/identity (swapped in place on switch); the switch-sync signals (is_switch_syncing/switch_received and the "Syncing/Caught up/You were paid while away" flow) are removed — there is nothing to catch up. The password modal remains only for add/import; the Build 144 import button and modal-position fixes are kept. init/add/import/rotate rebuild the service with all identities; a plain switch does not. Per-identity Tor-circuit isolation is deferred: all identities share the wallet relay set for now.