- Add Room field to Message struct; carried through all routes
- Group room (default): existing broadcast behavior unchanged
- DM rooms (dm:James, dm:Mira, dm:Hans): messages route only to
that agent, replies stay in the DM room
- Agent↔agent DM: dm:Hans-James format; dmTarget() resolves peer
- UI: replace agent-bar with room-bar tab strip at top
- # group tab + one DM tab per agent (⚡ James, ✨ Mira, 🔧 Hans)
- Client-side room filtering: only show messages for active room
- Unread dot on inactive room tabs when new messages arrive
- Thinking indicator per room
- /api/send: accepts room field for agent-to-agent DMs
- Screenshots already supported (image_url); works in all rooms