fix(pubsub): broadcaster now reaches webview guests, not just BrowserWindows
The pubsub broadcaster in main.ts iterates getAllTileWindows() which
only returns top-level BrowserWindows tracked in the tile-launcher
registry. HUD widget webviews (peek://ext/hud/widgets/*.html) and
page-canvas child webviews are webContents GUESTS of their host
BrowserWindow — not themselves in the registry — so global pubsub
events (context:changed, izui:state-changed, window:focused, etc.)
never reach their subscribers. The widget subscribes, the cap check
passes, the publish happens, but delivery silently misses.
Extended the broadcaster with a second pass over
webContents.getAllWebContents() filtered by getType()==='webview'
and peek:// URLs. Same source-origin echo-prevention as the
BrowserWindow pass.
Fixes the remaining 3 HUD mode-reactivity tests (displays mode
information, updates reactively on mode changes, displays group
mode with name) — all were blocked because the mode widget's
api.context.watchMode subscription never received context:changed
events from setMode() calls on bgWindow.
Cluster 1 now 11/11 passing (10 HUD + 1 groups-context HUD test).