* fix(capture): bound scroll/evaluate timeouts so heavy pages keep capturing
Fonts/Vercel-class sites were failing after navigation when a single in-page
scroll/evaluate hung until protocolTimeout. Drive lazy scroll from Node,
degrade on evaluate timeouts, and stop labeling those failures as bot blocks.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(capture): enforce stage budgets and surface evaluate degradation
Bound each scroll/content evaluate with remaining stage time so a wedged
page.evaluate cannot outlive the advertised 15s/8s budgets, skip recovery
CDP calls after expiry, and return/propagate timed-out animation and
screenshot work so caller warnings are reachable.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(capture): prefer TimeoutError instanceof for timeout classification
Use puppeteer-core TimeoutError as the primary signal for navigation vs
evaluate/protocol timeouts, with message checks only as a fallback for
string formatting and non-TimeoutError cases.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>