Publish profile metadata (name + picture) so external clients show it

Profiles created in the app never published a kind 0 metadata event, so
clients like Iris and Yakihonne showed generated petnames ("evil iguana")
or a truncated npub instead of the user's chosen name.

- Publish kind 0 metadata (name/display_name) automatically on creation
- Add "Publish name" action (GUI button + publish-name CLI) for existing
  profiles, with a per-relay success/failure report
- Add profile pictures: optional picture URL persisted in the vault,
  set via GUI modal (URL paste or nostr.build upload), set-picture CLI,
  and included in the published metadata; avatars render it in-app
- Run metadata publishing on its own thread so sync and async callers
  never nest tokio runtimes
- Expose undo_history in the state view and fix typecheck errors left by
  the unfinished delete/undo work (variants, icon, null-safety)
- Use offline relay settings in tests: Settings::default() points at real
  relays, which tests were silently publishing to (suite: 126s -> ~3s)

Verification: cargo test 96 passed; clippy/fmt/build clean. Frontend:
78 tests, typecheck, lint, format, vite and electron builds all pass.
This commit is contained in:
Avi 2026-08-22 18:42:20 -05:00
commit a6329d5640
13 changed files with 812 additions and 29 deletions

View file

@ -916,6 +916,16 @@ select {
font-size: 21px;
}
.avatar-picture {
overflow: hidden;
}
.avatar-picture img {
width: 100%;
height: 100%;
object-fit: cover;
}
.relay-status-list {
list-style: none;
margin: 0;