diff --git a/AGENTS.md b/AGENTS.md index d15e642..2ca9898 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -129,7 +129,7 @@ To improve repeater disambiguation in the network visualizer, the backend stores - This is independent of raw-packet payload deduplication. - Paths are keyed per contact + path + hop count, with `heard_count`, `first_seen`, and `last_seen`. - Only the N most recent unique paths are retained per contact (currently 10). -- See `frontend/src/components/AGENTS_packet_visualizer.md` § "Advert-Path Identity Hints" for how the visualizer consumes this data. +- See `frontend/src/components/visualizer/AGENTS_packet_visualizer.md` § "Advert-Path Identity Hints" for how the visualizer consumes this data. ## Path Hash Modes diff --git a/app/AGENTS.md b/app/AGENTS.md index 3b7b4e6..7b91296 100644 --- a/app/AGENTS.md +++ b/app/AGENTS.md @@ -230,6 +230,7 @@ app/ - `health` — radio connection status (broadcast on change, personal on connect) - `contact` — single contact upsert (from advertisements and radio sync) +- `contact_resolved` — prefix contact reconciled to a full contact row (payload: `{ previous_public_key, contact }`) - `message` — new message (channel or DM, from packet processor or send endpoints) - `message_acked` — ACK/echo update for existing message (ack count + paths) - `raw_packet` — every incoming RF packet (for real-time packet feed UI) diff --git a/frontend/AGENTS.md b/frontend/AGENTS.md index b516403..eddd30a 100644 --- a/frontend/AGENTS.md +++ b/frontend/AGENTS.md @@ -257,7 +257,7 @@ High-level state is delegated to hooks: - Auto reconnect (3s) with cleanup guard on unmount. - Heartbeat ping every 30s. - Incoming JSON is parsed through `wsEvents.ts`, which validates the top-level envelope and known event type strings, then casts payloads at the handler boundary. It does not schema-validate per-event payload shapes. -- Event handlers: `health`, `message`, `contact`, `raw_packet`, `message_acked`, `contact_deleted`, `channel_deleted`, `error`, `success`, `pong` (ignored). +- Event handlers: `health`, `message`, `contact`, `contact_resolved`, `channel`, `raw_packet`, `message_acked`, `contact_deleted`, `channel_deleted`, `error`, `success`, `pong` (ignored). - For `raw_packet` events, use `observation_id` as event identity; `id` is a storage reference and may repeat. ## URL Hash Navigation (`utils/urlHash.ts`) @@ -327,7 +327,7 @@ Note: MQTT, bot, and community MQTT settings were migrated to the `fanout_config ## Contact Info Pane -Clicking a contact's avatar in `ChatHeader` or `MessageList` opens a `ContactInfoPane` sheet (right drawer) showing comprehensive contact details fetched from `GET /api/contacts/{key}/detail`: +Clicking a contact's avatar in `ChatHeader` or `MessageList` opens a `ContactInfoPane` sheet (right drawer) showing comprehensive contact details fetched from `GET /api/contacts/analytics` using either `?public_key=...` or `?name=...`: - Header: avatar, name, public key, type badge, on-radio badge - Info grid: last seen, first heard, last contacted, distance, hops