fix(page): page widget updates reactively for tag events
Three bugs in the page tag-reactivity path that together caused
tag:item-added events to silently not update the page's tag widget:
1. tile-preload: api.window.getId renamed from getWindowId but page.js
and app/cmd/panel.js still call getWindowId synchronously — threw
'is not a function' and halted page.js module evaluation at the
top level. Added getWindowId as a legacy alias.
2. page.js: api.ipc.on call halted module evaluation because api.ipc
is not exposed on the tile preload. Guarded the opener-message
bridge behind api.ipc existence check.
3. page.js: tag:item-added handler compared msg.itemId to
webview.getURL() which throws when webview isn't DOM-ready (e.g.,
test fake URLs). Falls back to comparing the tagged item's URL
against all candidate forms of the page URL — raw http(s), the
wrapped peek://app/page URL, and the URL param — so the widget
adopts the right item regardless of webview state.
Fixes test 'tags page widget updates dynamically when tag is added
via command' (smoke.spec.ts:2010) and prevents a whole class of
silent page widget failures when webview navigation hasn't completed.