3c5fd918e3
Clicking an agent in a multi-profile roster pays the entire backend spawn + WebSocket dial cost on first open — several seconds of 'loading' (Bot Mode report). Expose the existing pool-only primitive (openGatewayForProfile: opens/pools the socket WITHOUT activating it, already no-ops for the primary and shared-remote routes) as host.warmProfile(name) so rosters can pre-dial after mount and the first click lands on a live socket. Fire-and-forget by design; failures stay silent — the real open path re-runs its own ensure.