cbd748046d
browseHtmlPage wrapped its navigations in untilAborted(signal) but awaited applyViewport, applyStealthPatches, and the finally-block page.close() raw. When the shared headless daemon or the page target dies mid-setup, those puppeteer calls never settle: the search hard timeout fires into a signal with no listener at those await points, the provider promise hangs past SEARCH_HARD_TIMEOUT_MS, and the turn never ends (only kill -9 recovers). - Wrap applyViewport/applyStealthPatches in untilAborted(signal) so the existing hard timeout can abort a dead-session setup. - Bound the teardown page.close() with a fresh 5s deadline; .catch() only covers rejection, not a hang, and the caller signal may already be fired. Fixes #8865