e16146fa0c
Every picker and RawBrowseModal stored the OpenAsync token after the await; if the host was disposed (or the modal closed) meanwhile, its teardown had already run with no token, so the plant-side session lived until the reaper's idle TTL. BrowseOpenGuard.CloseIfOrphaned closes it at once; each host sets _disposed first thing in DisposeAsync (RawBrowseModal also treats !Visible as gone). Refs #745 Claude-Session: https://claude.ai/code/session_01Ub9hGmYLQvn9XETzw7CMsT