> I noticed a call to Inspector.disconnect() may never do anything if the socket === undefined or it's readyState != "OPEN"

If the socket === undefined, then it's not connected, so I think that's correct. The other possible states for readyState are CONNECTING, CLOSING, and CLOSED. Not sure if we need to handle the CONNECTING or CLOSING states.

I played around with calling _onDisconnect in the timeout case, but it didn't seem to help.

In the current code in master on Mac, I notice that closing LD when it's the last tab in the last window does *not* shutdown Chrome, so it makes sense to call closeLiveBrowser(). So, I'm ok with the brackets code as it is. We just need to get the brackets-shell code to compile.