refactor(websearch): collapse into single resident tile, drop cross-window pubsub
Before this change websearch had two tile entries: a lazy background
tile owning engine state / command registration / settings / suggestions,
and a window tile for the UI. The two communicated via GLOBAL pubsub
channels (websearch:engine-request, websearch:engines-list,
websearch:request-suggestions, websearch:suggestions). That round-trip
is currently broken at the broadcaster level for home-publish to
bg-subscribe delivery, causing 3 websearch tests to fail (engines list
never populates in the home window).
This collapses the feature into ONE tile per the docs/tiles-single-file.md
pattern used by hello-world, mcp-server, widget-demo: a single home tile
with resident: true, width/height/role/key hoisted onto the entry, no
separate background.html entry. home.js now owns the engine list, command
registration, settings, and suggestion fetching directly — no cross-tile
pubsub needed because the UI and the state live in the same renderer.
Also removes the old cross-tile channel helpers and their subscribers
(onChannel/emitChannel for engine-request/engines-list/request-suggestions/
suggestions). Exports preserved for tests: builtinEngines, getEngine,
getDefaultEngine, getEnabledEngines, buildSearchUrl, parseOpenSearchXml.
background.js and background.html intentionally left on disk — no longer
referenced by the manifest, safe to delete in a follow-up.
Tests: 10/10 websearch tests pass (was 7/10).