""" Open the Chrome the bot attaches to when BROWSER_CDP_URL is set. start_ecw_chrome.bat (or: python tools\\start_ecw_chrome.py) Not needed for a run any more (2026-10-22): with no Chrome on the port, the bot opens it itself when the run starts, and closes it at the end. This is for opening it by hand — to add or sign in to the Claude extension before a run, or to keep one open across runs (the bot never closes a Chrome it did not open). Google Chrome, not Playwright's Chromium, started exactly as the bot starts it (core/browser.py `start_chrome`): * its own profile, CDP_PROFILE_DIR (default D:\\EcwChrome): Chrome refuses a debug port on the default profile, and C: running out of space killed the browser mid-login once (2026-10-21); * the debug port from BROWSER_CDP_URL, on 127.0.0.1 only; * the eCW proxy, except for claude.ai — the extension's traffic goes direct (the Windows proxy stays off); * the same flags as the bot's own launch (core/browser.py CHROME_ARGS). Close this Chrome when you are done: while it is open, any program on this PC can drive it — a browser that has been logged in to eCW — through the port. The bot clears eCW's cookies at the start and end of every run, not the rest of the profile. """ # Run standalone from the project root: python tools\start_ecw_chrome.py import sys as _sys from pathlib import Path as _Path _sys.path.insert(0, str(_Path(__file__).resolve().parent.parent / "src")) for _s in (_sys.stdout, _sys.stderr): try: _s.reconfigure(encoding="utf-8", errors="replace") except Exception: pass import sys from ecw_bot import settings as cfg from ecw_bot.core.browser import (PROXY_BYPASS, cdp_ready, # noqa: F401 chrome_command, find_chrome, start_chrome) def main() -> int: url = cfg.BROWSER_CDP_URL or "http://127.0.0.1:9222" problem = cfg.cdp_url_problem(url) if problem: print(f"[CHROME] {problem}") return 2 if cdp_ready(url): print(f"[CHROME] Already running at {url} — nothing to do") return 0 if not start_chrome(url): return 1 proxy = cfg.proxy_settings() print(f"[CHROME] Running at {url}") print(f"[CHROME] Profile {cfg.CDP_PROFILE_DIR}") print(f"[CHROME] Proxy {proxy['server'] if proxy else '(none)'}" f"{' (direct: ' + PROXY_BYPASS + ')' if proxy else ''}") if not cfg.BROWSER_CDP_URL: print(f"[CHROME] Note: BROWSER_CDP_URL is blank in .env, so the bot " f"will still launch its own browser. Set BROWSER_CDP_URL={url}") print("[CHROME] Close this Chrome when you are done with it.") return 0 if __name__ == "__main__": sys.exit(main())