RoomService отвечает объектом участника на верхнем уровне, а не в обёртке
`{"participant": …}`: дорожка микрофона не находилась и серверный мьют молча
пропускался (AGENT.md 7.14). Обёртку тоже принимаем — на случай смены формы
ответа в новых версиях.
- `participantEnvelope` разбирает оба варианта;
- тесты `internal/voice/admin_test.go`: выбор дорожки микрофона (не камеры),
тело MutePublishedTrack, отсутствие микрофона, обёрнутый ответ,
RemoveParticipant и выключенный клиент; в каждом вызове проверяется
Bearer-токен, привязанный к комнате.