Add contact-aware feed scope

- src/feed.rs: contact_feed + contact_pubkeys fetch the active profile's
  kind 3 contact list and aggregate notes only from those authors;
  aggregate_for + FeedBuilder accept an optional author whitelist
- IPC: FeedGet accepts contacts_only, resolves the active profile npub
- CLI: feed --contacts [limit] filters to the active profile's contacts
- Frontend: Feed screen Everyone/My contacts toggle, scope-aware empty
  states, feedGet(limit, contactsOnly) threading
- Tests for author filtering and the contacts scope in feed.rs and
  FeedScreen.test.tsx
This commit is contained in:
Avi 2026-08-06 11:01:27 -05:00
commit a1445d17a8
10 changed files with 388 additions and 32 deletions

View file

@ -46,7 +46,8 @@ distribution repositories. Expect some API churn until 1.0. No Docker or databas
- **Publishing receipts** — per-relay publish reports, so you always know where a note landed
- **Relay management** — add, remove, enable/disable, and latency-test relays from GUI or CLI
- **Feed aggregation** — a read-only, newest-first feed of recent text notes aggregated from your
enabled relays (24h window), de-duplicated across relays, from a dedicated GUI screen or the CLI
enabled relays (24h window), de-duplicated across relays, from a dedicated GUI screen or the CLI.
Switch the feed to **My contacts** to show only notes from the active profile's kind 3 contact list
- **Encrypted vault** — secret keys encrypted at rest with **AES-256-GCM** under a key derived via
**Argon2id** from your password
- **Secret key recovery** — reveal a key (hex + `nsec1...`) only after unlocking, from GUI or CLI
@ -211,7 +212,7 @@ cargo run --release -- create "Alice" # create a profile
cargo run --release -- list # list profiles (no secret keys)
cargo run --release -- switch <npub> # select the active profile
cargo run --release -- publish <npub> "Hello" # publish a text note
cargo run --release -- feed [limit] # fetch recent notes from enabled relays
cargo run --release -- feed [--contacts] [limit] # fetch recent notes; --contacts = your contacts
cargo run --release -- relays list|add|remove|enable|disable|test
cargo run --release -- settings get|set <key> <value>
cargo run --release -- set-password # encrypt the vault (or change its password)