Fix 1: In agent_models.rs, the update_managed_agent profile sync was
always using the provider avatar via managed_agent_avatar_url(). Now
checks persona_id first and uses the persona's avatar_url when present,
falling back to the provider avatar. Mirrors the pattern in agents.rs
creation path.
Fix 2: In MessageRow.tsx, move the responds-to indicator overlay from
top-right (-right-0.5) to top-left (-left-0.5) so it doesn't collide
with the presence dot at bottom-right.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Combined build with presence indicators, icon repositioning, and review fixes:
- types.ts: add presenceStatus field to TimelineMessage
- formatTimelineMessages.ts: accept and populate presenceLookup (9th param)
- ChannelScreen.tsx: add usePresenceQuery + presenceLookup memo, pass to
formatTimelineMessages; gate respondToLookup to bot pubkeys only
- MessageRow.tsx: move respond-to icon to top-right, add presence dot at
bottom-right (gated on respondTo), scale both for thread-reply layout,
add respondTo + presenceStatus to memo comparator, import PresenceDot
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two review fixes:
1. MessageRow.tsx: add prev.message.respondTo === next.message.respondTo
to the React.memo comparator so the icon overlay updates when profiles
load asynchronously.
2. ChannelScreen.tsx: only populate respondToLookup for pubkeys with
role === "bot" in channel members. Prevents human users who publish
respond_to in their kind:0 profile from incorrectly showing the icon.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Colored dots (green/amber) clashed with presence indicators which use
the same colors. Replace with lucide icons: Globe for "anyone", Users
for "allowlist", no indicator for "owner-only" (default behavior).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The respondToLookup and personaLookup maps only contain bot pubkeys,
so gating on role === "bot" is redundant and breaks rendering when
the relay-side role is stale ("member" instead of "bot").
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Strip sprout-db and sprout-relay changes per Wes's direction. The
backend already supports bot role via kind:9000 ON CONFLICT — no
relay-side changes needed. Bot classification and respond-to
visibility fixes are entirely desktop-side.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two bugs fixed:
1. Agents self-joining channels via kind:9021 were assigned "member" role
instead of "bot". The relay now detects agents (via agent_owner_pubkey)
and assigns MemberRole::Bot. Existing incorrect roles are auto-upgraded
when the agent authenticates via NIP-OA.
2. Respond-to badges were only visible to the bot owner because the data
was never published to the relay. Agent kind:0 profiles now include
respond_to, and the desktop app syncs it on create/update. The frontend
reads respond_to from profile data for all bots.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>