When a unified agent reports both host and docker data, the WebSocket
handler was calling setState separately for dockerHosts and hosts.
This caused the UnifiedAgents component's allHosts memo to recalculate
twice - first seeing only the updated dockerHosts (showing "Docker"),
then seeing both (showing "Host & Docker").
Batch both updates into a single setState call using produce() when
both are present in the same message, ensuring the component always
sees consistent data.
Related to #778