- fix(browser): wrap context lifecycle in try/finally to ensure browser
closes on exceptions and KeyboardInterrupt (login, sniffer, generator)
- fix(browser): replace time.sleep with Playwright native waits
(wait_for, wait_for_timeout) for more reliable element interaction
- fix(browser): use parameterized page.evaluate instead of f-string
JS injection in generator polling
- fix(api): add retry logic in wait_for_completion to survive transient
network errors
- fix(config): add prepare_profile_dir to copy profile to temp dir,
preventing Chromium SingletonLock conflicts when tools run concurrently
- fix(sniffer): stream API logs to tempfile instead of unbounded memory
list to avoid OOM
- fix(api): specify encoding='utf-8' when loading cookies from file
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>