content.type === "avatar" in their send action and decide
their own support story (e.g. iMessage only supports it for remote group
chats).
space.send(avatar(...)) is the canonical form; space.avatar(...) is
universal sugar that delegates here. Per-platform constraints (e.g.
group-only, remote-only) surface as UnsupportedError from the provider’s
send action so the canonical and sugar forms share one error path.
Bidirectional: providers also surface platform icon changes as inbound
Messages carrying this content — action.kind === "set" arrives with
the fetched icon behind read(), "clear" mirrors icon removal.
message.sender is the user who changed it (may be undefined when the
platform recorded no actor).