From c8d2c2f9f75c2100432750aebb64a5f2c3fe29b3 Mon Sep 17 00:00:00 2001 From: bcode Date: Sun, 3 May 2026 01:15:36 +0000 Subject: [PATCH] sync: harness 59a166f --- UPSTREAM.md | 1 + .../.github/ISSUE_TEMPLATE/bug-report.yml | 49 ++++ .../harness/.github/ISSUE_TEMPLATE/config.yml | 8 + .../ISSUE_TEMPLATE/feature-request.yml | 37 +++ .../bcode-browser/harness/.github/VOUCHED.td | 13 + packages/bcode-browser/harness/.gitignore | 2 + packages/bcode-browser/harness/AGENTS.md | 24 ++ packages/bcode-browser/harness/README.md | 20 +- packages/bcode-browser/harness/SKILL.md | 65 +---- .../harness/docs/allow-remote-debugging.png | Bin 0 -> 192627 bytes packages/bcode-browser/harness/install.md | 175 ++++++------ .../interaction-skills/profile-sync.md | 6 +- .../harness/src/browser_harness/_ipc.py | 78 +++++- .../harness/src/browser_harness/admin.py | 101 ++----- .../harness/src/browser_harness/daemon.py | 17 +- .../harness/src/browser_harness/helpers.py | 114 +++++++- .../harness/src/browser_harness/run.py | 14 +- .../harness/tests/unit/test_admin.py | 10 +- .../harness/tests/unit/test_helpers.py | 253 ++++++++++++++++++ .../harness/tests/unit/test_run.py | 3 +- 20 files changed, 718 insertions(+), 272 deletions(-) create mode 100644 packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/config.yml create mode 100644 packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/feature-request.yml create mode 100644 packages/bcode-browser/harness/.github/VOUCHED.td create mode 100644 packages/bcode-browser/harness/AGENTS.md create mode 100644 packages/bcode-browser/harness/docs/allow-remote-debugging.png diff --git a/UPSTREAM.md b/UPSTREAM.md index 1ac46130e..1da96bf6a 100644 --- a/UPSTREAM.md +++ b/UPSTREAM.md @@ -92,6 +92,7 @@ Each upstream has its own append-only table. Add a row every time you pull. | 2026-04-29 | `2125cea` | `997ee45` | bcode | 6 upstream commits (PRs #241, #244, #245). `src/browser_harness/_ipc.py`: when `BH_TMP_DIR` is set, drop the `bu-` filename prefix (caller-isolated dir means no shared-tmpdir disambiguation needed); without `BH_TMP_DIR` the original `bu-` scheme is unchanged. `src/browser_harness/admin.py`: `_daemon_endpoint_names` short-circuits to the local NAME when `BH_TMP_DIR` is set (no glob); plus catch `SystemError` from `os.kill` on Windows during `restart_daemon`. `src/browser_harness/daemon.py`: discover DevToolsActivePort in Comet and Arc profiles on macOS. `tests/unit/test_admin.py`: 2 new tests for the `BH_TMP_DIR` discovery path. All in protected `src/browser_harness/*.py` + tests — taken verbatim. Smoke test + 12 admin unit tests pass. The `_ipc` filename change pairs with our recent per-session BH_TMP_DIR work (browsercode PR #22) — caller isolation now extends to filenames as well as the dir. Divergences touched: none. | | 2026-04-30 | `997ee45` | `660827d` | bcode | 11 upstream commits (PRs #246, #247, #251, #254, #256, #260). `src/browser_harness/daemon.py`: resolve WS via `/json/version` to avoid stale `DevToolsActivePort` path (PR #260) + report `cdp_disconnected` on stale CDP probe in `connection_status` (PR #254) + cleanup remote browser when daemon startup fails (PR #251). `src/browser_harness/admin.py`: companion changes for the daemon fixes. `tests/unit/test_admin.py`: 7 new tests. New domain skills: `agent-workspace/domain-skills/xiaohongshu/scraping.md` (PR #246), and a top-level `domain-skills/shopify-admin/` tree (PR #247: README, embedded-apps, knowledge-base, polaris-inputs). Note: PR #247 added skills at the top-level `domain-skills/` path, not under `agent-workspace/domain-skills/` as the post-#229 layout would suggest — vendored verbatim to match upstream layout. Doc updates: README operator framing (PR #255), install.md heredoc → `-c` flag (PR #256), profile-sync.md same. All files outside divergences — taken verbatim. Smoke test + 19 admin unit tests pass. Divergences touched: none. | | 2026-05-01 | `660827d` | `013097a` | bcode | 8 upstream commits (PRs #261, #265, #266). `src/browser_harness/daemon.py` (PR #265): split `DevToolsActivePort` into port + ws-path lines and fall back to `ws://127.0.0.1:` when `/json/version` returns 404 (Chrome 147+ disables `/json/*` HTTP discovery on the default user-data-dir). `src/browser_harness/run.py` (PR #266): when no daemon is alive, no local Chrome is listening on 9222/9223 (probed via `/json/version`, not bare TCP), and `BROWSER_USE_API_KEY` is set, auto-bootstrap a cloud daemon. `tests/unit/test_run.py`: 2 new tests for the cloud bootstrap path. PR #261 moved `domain-skills/shopify-admin/` → `agent-workspace/domain-skills/shopify-admin/` upstream — both paths are excluded from the vendored tree per §3, so this rename is a no-op for browsercode (`script/check-harness-diff.sh` filters both via `IGNORED_PATHS_REGEX`). All in protected `src/browser_harness/*.py` + tests — taken verbatim. Smoke test + 23 unit tests pass. Divergences touched: none. | +| 2026-05-03 | `013097a` | `59a166f` | bcode | 62 upstream commits. **Helper additions** (PRs #258, #279): `helpers.py` adds `fill_input` (raises on missing element, optional timeout for SPA rendering, dispatches select-all without char event so Cmd/Ctrl+A fires on macOS), `wait_for_element` (prefers `checkVisibility`, falls back to computed style), `wait_for_network_idle`. `tests/unit/test_helpers.py`: +253 lines covering the new helpers. `daemon.py`: discover Dia browser profile on macOS. **Windows IPC hardening** (PR #276): `_ipc.py` adds ping handshake, token auth, atomic port file. **Domain-skills opt-in** (PR #274): `helpers.py` gates auto-injected domain skills behind `BH_DOMAIN_SKILLS=1` (default off). Aligns upstream default with browsercode's exclusion policy — no behavior change for us, but the `BH_DOMAIN_SKILLS` env name is now the canonical knob if we ever decide to ship a curated set. **Cloud bootstrap opt-in** (PR #277): `run.py` makes cloud auto-bootstrap opt-in via `BU_AUTOSPAWN` instead of triggering on any `BROWSER_USE_API_KEY` presence. Plus admin tweaks (`tests/unit/test_admin.py` +10 lines), doc canonicalization (`README.md`, `SKILL.md`, `install.md`, `interaction-skills/profile-sync.md` PR #280), and new top-level scaffolding: `AGENTS.md` (repo orientation for coding agents), `.github/ISSUE_TEMPLATE/{bug-report,feature-request,config}.yml`, `.github/VOUCHED.td`, `docs/allow-remote-debugging.png`. All non-excluded paths taken verbatim. **Excluded paths** (per §3): 14 new domain-skills directories added upstream (aa, alaska, articulate-rise, bigbang-hr, bilibili, BOSS-zhipin, claude-ai, ctrip, flipkart, ly-com, manus, perplexity, wehotel, plus amazon under top-level `domain-skills/`) — skipped. **Divergence update**: `.gitignore` now also includes upstream's new `.idea/` and `.claude/` entries while preserving our `.venv/`. Smoke test (imports + `--version`) clean. Divergences touched: `.gitignore` (extended, same intent). | --- diff --git a/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/bug-report.yml b/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 000000000..27dec6ace --- /dev/null +++ b/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,49 @@ +name: Bug report +description: Report a reproducible bug in browser-harness. +labels: [bug] +body: + - type: checkboxes + id: preflight + attributes: + label: Before submitting + options: + - label: I searched existing issues for duplicates. + required: true + - label: I ran `browser-harness --doctor` and read the output. + required: true + - label: I read the troubleshooting section of `install.md`. + required: true + - label: This is a reproducible bug in browser-harness — not a question, feature request, or `cloud.browser-use.com` issue. + required: true + + - type: textarea + id: summary + attributes: + label: Summary + description: What's broken, in one or two sentences. + validations: + required: true + + - type: textarea + id: repro + attributes: + label: Repro + description: Numbered steps. Include the exact command and the output you saw. + placeholder: | + 1. Chrome 147 on default profile, remote debugging on + 2. browser-harness -c 'print(page_info())' + 3. RuntimeError: DevTools is not live yet on 127.0.0.1:9222 + validations: + required: true + + - type: textarea + id: environment + attributes: + label: Environment + placeholder: | + OS: + Chrome version: + browser-harness --version: + browser-harness --doctor output: + validations: + required: true diff --git a/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/config.yml b/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..dba8f5aab --- /dev/null +++ b/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Question or how-to + url: https://github.com/browser-use/browser-harness/discussions/categories/q-a + about: Ask in Discussions Q&A, not Issues. + - name: Install or setup troubleshooting + url: https://github.com/browser-use/browser-harness/blob/main/install.md + about: Most install and "DevTools not live" errors are covered here. diff --git a/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/feature-request.yml b/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 000000000..0953f68b3 --- /dev/null +++ b/packages/bcode-browser/harness/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,37 @@ +name: Feature request +description: Propose a new feature or change. +labels: [feature-request] +body: + - type: checkboxes + id: preflight + attributes: + label: Before submitting + options: + - label: I searched existing issues and discussions. + required: true + - label: This is a feature request, not a bug. + required: true + + - type: textarea + id: problem + attributes: + label: Problem + description: What user pain or limitation motivates this? + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposal + description: What you'd like to happen. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: What else you tried, or why other approaches fall short. + validations: + required: true diff --git a/packages/bcode-browser/harness/.github/VOUCHED.td b/packages/bcode-browser/harness/.github/VOUCHED.td new file mode 100644 index 000000000..b51d0cd73 --- /dev/null +++ b/packages/bcode-browser/harness/.github/VOUCHED.td @@ -0,0 +1,13 @@ +# Vouched (or denounced) users for browser-harness. +# +# See https://github.com/mitchellh/vouch for details. +# +# Syntax: +# - One handle per line (without @), sorted alphabetically. +# - Optional platform prefix: platform:username (e.g., github:user). +# - Denounce by prefixing with minus: -username +# - Optional reason after a space following the handle. + +molesza +rohitdutt108 +shaunandrewjackson1977 diff --git a/packages/bcode-browser/harness/.gitignore b/packages/bcode-browser/harness/.gitignore index b4e44e2a2..04d11a358 100644 --- a/packages/bcode-browser/harness/.gitignore +++ b/packages/bcode-browser/harness/.gitignore @@ -5,3 +5,5 @@ __pycache__/ .venv/ uv.lock *.egg-info/ +.idea/ +.claude/ diff --git a/packages/bcode-browser/harness/AGENTS.md b/packages/bcode-browser/harness/AGENTS.md new file mode 100644 index 000000000..546075ebb --- /dev/null +++ b/packages/bcode-browser/harness/AGENTS.md @@ -0,0 +1,24 @@ +browser-harness is a thin layer that connects agents to browsers via an editable CDP harness. + +# Code priorities +- Clarity +- Precision +- Low verbosity +- Versatility + +# Overview +Core code lives in `src/browser_harness/`: +- `admin.py` — daemon lifecycle, diagnostics, updates, profile management +- `daemon.py` — the long-lived middleman process between the browser and the agent +- `helpers.py` — CDP wrapper and core browser primitives auto-imported into `-c` scripts +- `run.py` — the `browser-harness` CLI + +`SKILL.md` tells agents how to use the harness and CLI. +`install.md` tells agents how to install it, attach a browser, and troubleshoot. + +An agent operating the harness only edits inside `agent-workspace/`: +- `agent_helpers.py` — task-specific browser helpers the agent adds +- `domain-skills/` — skills the agent writes and reads + +# Contributing +Consider what is really needed. Prefer the smallest diff that fixes the bug. diff --git a/packages/bcode-browser/harness/README.md b/packages/bcode-browser/harness/README.md index ccfc32942..704b5efd2 100644 --- a/packages/bcode-browser/harness/README.md +++ b/packages/bcode-browser/harness/README.md @@ -25,24 +25,28 @@ Paste into Claude Code or Codex: ```text Set up https://github.com/browser-use/browser-harness for me. -Read `install.md` first to install and connect this repo to my real browser. Then read `SKILL.md` for normal usage. Use `agent-workspace/agent_helpers.py` and `agent-workspace/domain-skills/` for task-specific edits. When you open a setup or verification tab, activate it so I can see the active browser tab. After it is installed, open this repository in my browser and, if I am logged in to GitHub, ask me whether you should star it for me as a quick demo that the interaction works — only click the star if I say yes. If I am not logged in, just go to browser-use.com. +Read `install.md` and follow the steps to install browser-harness and connect it to my browser. ``` -When this page appears, tick the checkbox so the agent can connect to your browser: +The agent will open `chrome://inspect/#remote-debugging`. Tick the checkbox so the agent can connect to your browser: Remote debugging setup +Click Allow when the per-attach popup appears (Chrome 144+): + +Allow remote debugging popup + See [agent-workspace/domain-skills/](agent-workspace/domain-skills/) for example tasks. -## Free remote browsers +## Free Browser Use Cloud browsers -Useful for stealth, sub-agents, or deployment.
-**Free tier: 3 concurrent browsers, proxies, captcha solving, and more. No card required.** +Stealth, sub-agents, or headless deployment.
+**Browser Use Cloud free tier: 3 concurrent browsers, proxies, captcha solving, and more. No card required.** - Grab a key at [cloud.browser-use.com/new-api-key](https://cloud.browser-use.com/new-api-key) - Or let the agent sign up itself via [docs.browser-use.com/llms.txt](https://docs.browser-use.com/llms.txt) (setup flow + challenge context included). -## How simple is it? (~592 lines of Python) +## Architecture (~1k lines across 4 core files) - `install.md` — first-time install and browser bootstrap - `SKILL.md` — day-to-day usage @@ -61,6 +65,10 @@ PRs and improvements welcome. The best way to help: **contribute a new domain sk If you're not sure where to start, open an issue and we'll point you somewhere useful. +## Domain skills + +Set `BH_DOMAIN_SKILLS=1` to enable [agent-workspace/domain-skills/](agent-workspace/domain-skills/) — community-contributed per-site playbooks `goto_url` surfaces by domain. Contribute via PR. + --- [The Bitter Lesson of Agent Harnesses](https://browser-use.com/posts/bitter-lesson-agent-harnesses) · [Web Agents That Actually Learn](https://browser-use.com/posts/web-agents-that-actually-learn) diff --git a/packages/bcode-browser/harness/SKILL.md b/packages/bcode-browser/harness/SKILL.md index 420726d42..7c3153683 100644 --- a/packages/bcode-browser/harness/SKILL.md +++ b/packages/bcode-browser/harness/SKILL.md @@ -5,7 +5,9 @@ description: Direct browser control via CDP. Use when the user wants to automate # browser-harness -Direct browser control via CDP. For task-specific edits, use `agent-workspace/agent_helpers.py` and `agent-workspace/domain-skills/`. For setup, install, or connection problems, read install.md. +Direct browser control via CDP. For task-specific edits, use `agent-workspace/agent_helpers.py`. For setup, install, or connection problems, read install.md. + +Domain skills (community-contributed per-site playbooks under `agent-workspace/domain-skills/`) are off by default. Set `BH_DOMAIN_SKILLS=1` to enable them; see the bottom section. ## Usage @@ -20,13 +22,6 @@ print(page_info()) - Invoke as browser-harness — it's on $PATH. No cd, no uv run. - First navigation is new_tab(url), not goto_url(url) — goto runs in the user's active tab and clobbers their work. -Available interaction skills: -- interaction-skills/connection.md — startup sequence, tab visibility, omnibox popup fix - -Available domain skills: -- tiktok/upload.md -- polymarket/scraping.md - ## Tool call shape ```bash @@ -60,11 +55,10 @@ start_remote_daemon prints liveUrl and auto-opens it in the local browser (if a Profiles (cookies-only login state) live in interaction-skills/profile-sync.md — covers list_cloud_profiles(), the chat-driven "which profile?" pattern, and sync_local_profile() for uploading a local Chrome profile. -## Search first +## Interaction skills -Search `agent-workspace/domain-skills/` first for the domain you are working on before inventing a new approach. - -Only if you start struggling with a specific mechanic while navigating, look in interaction-skills/ for helpers. The available interaction skills are: +If you start struggling with a specific mechanic while navigating, look in interaction-skills/ for helpers. They cover reusable UI mechanics like dialogs, tabs, dropdowns, iframes, and uploads. The available interaction skills are: +- connection.md - cookies.md - cross-origin-iframes.md - dialogs.md @@ -82,44 +76,6 @@ Only if you start struggling with a specific mechanic while navigating, look in - uploads.md - viewport.md -Useful commands: - -```bash -rg --files agent-workspace/domain-skills -rg -n "tiktok|upload" agent-workspace/domain-skills -``` - -## Always contribute back - -If you learned anything non-obvious about how a site works, open a PR to `agent-workspace/domain-skills//` before you finish. Default to contributing. The harness gets better only because agents file what they learn. If figuring something out cost you a few steps, the next run should not pay the same tax. - -Examples of what's worth a PR: - -- A private API the page calls (XHR/fetch endpoint, request shape, auth) — often 10× faster than DOM scraping. -- A stable selector that beats the obvious one, or an obfuscated CSS-module class to avoid. -- A framework quirk — "the dropdown is a React combobox that only commits on Escape", "this Vue list only renders rows inside its own scroll container, so scrollIntoView on the row doesn't work — you have to scroll the container". -- A URL pattern — direct route, required query params (?lang=en, ?th=1), a variant that skips a loader. -- A wait that wait_for_load() misses, with the reason. -- A trap — stale drafts, legacy IDs that now return null, unicode quirks, beforeunload dialogs, CAPTCHA surfaces. - -### What a domain skill should capture - -The *durable* shape of the site — the map, not the diary. Focus on what the next agent on this site needs to know before it starts: - -- URL patterns and query params. -- Private APIs and their payload shape. -- Stable selectors (data-*, aria-*, role, semantic classes). -- Site structure — containers, items per page, framework, where state lives. -- Framework/interaction quirks unique to this site. -- Waits and the reasons they're needed. -- Traps and the selectors that *don't* work. - -### Do not write - -- Raw pixel coordinates. They break on viewport, zoom, and layout changes. Describe how to *locate* the target (selector, scrollIntoView, aria-label, visible text) — never where it happened to be on your screen. -- Run narration or step-by-step of the specific task you just did. -- Secrets, cookies, session tokens, user-specific state. `agent-workspace/domain-skills/` is shared and public. - ## What actually works - Screenshots first: use capture_screenshot() to understand the current page quickly, find visible targets, and decide whether you need a click, a selector, or more navigation. @@ -155,7 +111,10 @@ The *durable* shape of the site — the map, not the diary. Focus on what the ne - Prefer compositor-level actions over framework hacks. Try screenshots, coordinate clicks, and raw key input before adding DOM-specific workarounds. - If you need framework-specific DOM tricks, check interaction-skills/ first. That is where dropdown, dialog, iframe, shadow DOM, and form-specific guidance belongs. -## Interaction notes +## Domain skills (opt-in) + +Only applies when `BH_DOMAIN_SKILLS=1`. Otherwise ignore — `agent-workspace/domain-skills/` is dormant and `goto_url` won't surface skill files. + +When enabled, search `agent-workspace/domain-skills//` before inventing an approach. `goto_url` returns up to 10 skill filenames for the navigated host. -- interaction-skills/ holds reusable UI mechanics such as dialogs, tabs, dropdowns, iframes, and uploads. -- `agent-workspace/domain-skills/` holds site-specific workflows and should be updated when you discover reusable patterns for a website. +If you learn anything non-obvious — a private API, stable selector, framework quirk, URL pattern, hidden wait, or site-specific trap — open a PR to `agent-workspace/domain-skills//`. Capture the durable shape of the site (the map, not the diary). Don't write pixel coordinates (break on layout), task narration, or secrets — the directory is public. diff --git a/packages/bcode-browser/harness/docs/allow-remote-debugging.png b/packages/bcode-browser/harness/docs/allow-remote-debugging.png new file mode 100644 index 0000000000000000000000000000000000000000..77186c2d243550f5a6a37d77d6a6483fcef60392 GIT binary patch literal 192627 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

)Oqt{U6ycLxkZsfiqo@_PM4D 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%0DAAzhsuJq@J|X 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 literal 0 HcmV?d00001 diff --git a/packages/bcode-browser/harness/install.md b/packages/bcode-browser/harness/install.md index 589ebe15a..21cc3f51a 100644 --- a/packages/bcode-browser/harness/install.md +++ b/packages/bcode-browser/harness/install.md @@ -1,17 +1,13 @@ --- name: browser-install -description: Install and bootstrap browser-harness into the current agent, then connect it to the user's real Chrome with minimal prompting. +description: Install browser-harness into the current agent and connect it to a browser with minimal prompting. --- -# browser-harness install +# `browser-harness` installation -Use this file only for first-time install, reconnect, or cold-start browser bootstrap. For day-to-day browser work, read `SKILL.md`. Task-specific edits belong in `agent-workspace/agent_helpers.py` and `agent-workspace/domain-skills/`. +Use this file only for browser-harness install, browser connection setup, and connection troubleshooting. For day-to-day browser work, read `SKILL.md`. Task-specific edits belong in `agent-workspace/agent_helpers.py` and `agent-workspace/domain-skills/`. -## Install prompt contract - -When you open a setup or verification tab, activate it so the user can actually see the active browser tab. - -## Best everyday setup +## Recommended `browser-harness` setup Clone the repo once into a durable location, then install it as an editable tool so `browser-harness` works from any directory: @@ -24,119 +20,114 @@ command -v browser-harness That keeps the command global while still pointing at the real repo checkout, so when the agent edits `agent-workspace/agent_helpers.py` the next `browser-harness` uses the new code immediately. Prefer a stable path like `~/Developer/browser-harness`, not `/tmp`. -## Make it global for the current agent +## Make browser-harness global for the current agent After the repo is installed, register this repo's `SKILL.md` with the agent you are using: - **Codex**: add this file as a global skill at `$CODEX_HOME/skills/browser-harness/SKILL.md` (often `~/.codex/skills/browser-harness/SKILL.md`). A symlink to this repo's `SKILL.md` is fine. -- **Claude Code**: add an import to `~/.claude/CLAUDE.md` that points at this repo's `SKILL.md`, for example `@~/src/browser-harness/SKILL.md`. -Codex command: + ```bash + mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills/browser-harness" && ln -sf "$PWD/SKILL.md" "${CODEX_HOME:-$HOME/.codex}/skills/browser-harness/SKILL.md" + ``` -```bash -mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills/browser-harness" && ln -sf "$PWD/SKILL.md" "${CODEX_HOME:-$HOME/.codex}/skills/browser-harness/SKILL.md" -``` +- **Claude Code**: add an import to `~/.claude/CLAUDE.md` that points at this repo's `SKILL.md`, for example `@~/Developer/browser-harness/SKILL.md`. + +This makes new Codex or Claude Code sessions in other folders load the runtime browser harness instructions automatically. + +## Keeping the harness current -That makes new Codex or Claude Code sessions in other folders load the runtime browser harness instructions automatically. An empty `~/.codex/skills/browser-harness/` directory is fine; the symlink command above populates it. +- On each run, `browser-harness` prints `[browser-harness] update available: X -> Y` (once per day) when a newer GitHub release exists. +- When you see that banner, run `browser-harness --update -y` yourself — don't ask the user. It pulls the new code (`git pull --ff-only` for editable clones, `uv tool upgrade browser-harness` for PyPI installs) and stops the running daemon so the next call picks up the new code. With `-y` it won't prompt. +- `--update` refuses to run on an editable clone with uncommitted changes. If that happens, tell the user and let them resolve the dirty worktree. -## Browser bootstrap +## Maintenance commands -Prefer `browser-harness --setup` — it runs the full attach-and-escalate flow below as one interactive command. The manual steps that follow are only for when `--setup` is unavailable or you need to debug a specific failure. +- browser-harness --doctor — show version, install mode, daemon and Chrome state, and whether an update is pending. -1. Run `uv sync`. - If `browser-harness` is still missing after that, run `command -v browser-harness >/dev/null || uv tool install -e .`. -2. First try the harness directly. If this works, skip manual browser setup: +## Architecture -```bash -uv run browser-harness -c 'print(page_info())' +```text +Chrome / Browser Use cloud -> CDP WS -> browser_harness.daemon -> IPC -> browser_harness.run ``` - Reuse an existing healthy daemon if it is already responding. Do not kill it during setup unless the attach is clearly stale and you are confident no other agent is using the same `BU_NAME`. For parallel agents, use distinct `BU_NAME`s so they do not fight over the same default session. +- Protocol is one JSON line each way. +- Requests are {method, params, session_id} for CDP or {meta: ...} for daemon control. +- Responses are {result} / {error} / {events} / {session_id}. +- IPC: Unix socket at `/tmp/bu-.sock` on POSIX, TCP loopback + port file on Windows. +- BU_NAME namespaces the daemon's IPC, pid, and log files. +- BU_CDP_WS overrides local Chrome discovery for remote browsers. +- BU_CDP_URL overrides local Chrome discovery with a specific DevTools HTTP endpoint (used for Way 2). +- BU_BROWSER_ID + BROWSER_USE_API_KEY lets the daemon stop a Browser Use cloud browser on shutdown. -3. If it failed, **read the error and escalate from there — do not assume you need `chrome://inspect`**. The remote-debugging checkbox is per-profile sticky in Chrome, so any profile that has had it toggled on once will auto-enable CDP on every future launch; the inspect page is only needed the first time per profile. +# Browser connection setup and troubleshooting - - **No Chrome process running** → just start Chrome and re-run the harness. On macOS: `open -a "Google Chrome"`. Do *not* navigate to `chrome://inspect` yet — if the user has ever ticked the checkbox on this profile, the harness will attach on its own. - - **`DevToolsActivePort` missing or empty after Chrome is up** → remote-debugging has never been enabled on this profile. *This* is when you open `chrome://inspect/#remote-debugging` and ask the user to tick the checkbox and click `Allow`. Once ticked, the setting sticks. - - **Port present but `connection refused` / `DevTools not live yet` / `/json/version` 404** → Chrome is mid-startup. Just keep polling for up to 30 seconds; do not restart Chrome and do not open the inspect page. - - **`no close frame received or sent` / stale websocket** → the daemon (not Chrome) is the problem. Run `restart_daemon()` once and retry — see step 7 below. +## Browser connection reference - When you do need to open the inspect page on macOS and Chrome is already running, prefer AppleScript so it reuses the current profile instead of going through the picker: +This section is the source of truth for how browser-harness connects to a browser. It is the canonical reference for every agent and user of this repo. Every statement here is intended to be verifiable against either an official Chrome source or this repo's own code, and is held to that standard deliberately. If anything below is incorrect, incomplete, or misleading, open an issue on the browser-harness repository immediately with clear evidence and explanation so it can be corrected. Do not silently work around an error in this document; the cost of one user being misled is much higher than the cost of one issue. -```bash -osascript -e 'tell application "Google Chrome" to activate' \ - -e 'tell application "Google Chrome" to open location "chrome://inspect/#remote-debugging"' -``` +Browser-harness can connect to any Chrome or Chromium-based browser on your computer, or to a Browser Use cloud browser. - On Linux: open that URL manually in the existing Chrome window. - If Chrome shows the profile picker first, tell the user to choose their normal profile, *then* (only if `DevToolsActivePort` is still missing) open the inspect page in that profile. Keep polling instead of waiting for the user to type a follow-up. -4. Be explicit with the user about the two possible Chrome actions: choose their normal profile if the profile picker is open, and in the remote-debugging tab tick the checkbox and click `Allow` once if Chrome shows it. -5. Try to do everything yourself. Only ask the user to do something if it is truly necessary, like selecting the Chrome profile or clicking `Allow`. While the user is doing that, sleep and check every 3 seconds whether it is completed. After asking, keep retrying for at least 30 seconds even if you see connection-refused, stale websocket, or other weird transient attach errors. -6. If setup still lands on the profile picker, have the user choose their normal profile, then (only if `DevToolsActivePort` is still missing) open `chrome://inspect/#remote-debugging` in that profile and keep polling instead of restarting the explanation. As soon as attach succeeds, continue immediately with the verification task without asking again. -7. Verify with: +**Cloud browsers** are managed by the Browser Use cloud API. Start one in Python with `start_remote_daemon("work", ...)`. Authentication is via the `BROWSER_USE_API_KEY` environment variable; the harness handles the WebSocket URL itself. To carry your local Chrome cookies into a cloud browser, install `profile-use` once (`curl -fsSL https://browser-use.com/profile.sh | sh`), then call `uuid = sync_local_profile("MyChromeProfile")` followed by `start_remote_daemon("work", profileId=uuid)`. Cookies are the only thing synced — not localStorage, not extensions, not history. -```bash -uv run browser-harness -c "$(cat <<'PY' -goto_url("https://github.com/browser-use/browser-harness") -wait_for_load() -print(page_info()) -PY -)" -``` +**Local browsers** require remote debugging to be enabled. There are two ways, and they suit different use cases. -If that fails with a stale websocket or stale socket, restart the daemon once and retry: +*Way 1: chrome://inspect/#remote-debugging checkbox — uses your real profile.* In your running Chrome, navigate to `chrome://inspect/#remote-debugging` and tick the "Allow remote debugging for this browser instance" checkbox. This setting is per-profile and sticky: tick it once and it persists across every future Chrome launch of that profile. Then run any `browser-harness` command. On Chrome 144 and later, the first attach by the harness triggers an in-browser "Allow remote debugging?" popup that you must click Allow on. The popup may reappear on later attaches under conditions that are not fully characterized.[^1] This path inherits your everyday Chrome's logins, extensions, history, and bookmarks, which makes it the right choice for an agent helping you with tasks in your real browser. -```bash -uv run python - <<'PY' -from browser_harness.admin import restart_daemon -restart_daemon() -PY -``` +*Way 2: command-line flag — uses an isolated profile, no popups ever.* Launch Chrome with `--remote-debugging-port=9222 --user-data-dir=`. Two precisions: -If restart_daemon() also hangs, kill Chrome entirely, clean sockets, and reopen: +- The path must be a directory that is **not** Chrome's platform default (`%LOCALAPPDATA%\Google\Chrome\User Data` on Windows, `~/Library/Application Support/Google/Chrome` on macOS, `~/.config/google-chrome` on Linux). On Chrome 136 and later, the port flag is silently no-opped when the user-data-dir is the platform default, even if you pass it explicitly. An empty or new path gives a fresh clean profile that Chrome will persist there across future runs. +- This path does **not** let you reuse your everyday Chrome profile. Copying the default profile's files into a custom directory makes Chrome accept the flag, but cookies are encrypted under a key bound to the original directory and will not survive the copy — so you carry over bookmarks and extensions but lose every logged-in session. If you want your real logins, use Way 1. -```bash -pkill -9 -f "Google Chrome" -rm -f /tmp/bu-default.sock /tmp/bu-default.pid -open -a "Google Chrome" -``` +Tell the harness which port you launched on by setting `BU_CDP_URL=http://127.0.0.1:9222` before running `browser-harness`. -Wait 5 seconds, then reconnect. This resets all CDP state. +For most tasks where the agent acts on your behalf in your normal browser, use Way 1. For automation that runs without you watching, or any case where popup interruptions are unacceptable, use Way 2 or a cloud browser. -8. After install and browser bootstrap succeed, navigate to `https://github.com/browser-use/browser-harness` so the user can see the harness has attached to their browser. If the user is logged in to GitHub, **ask the user whether you should star the repo for them** as a quick demo that the interaction works — only click the star if they say yes. Then ask the user what they want to do next. +[^1]: The conditions that cause Chrome to re-show the "Allow remote debugging?" popup on a subsequent attach (time elapsed since previous Allow, daemon restart, browser restart, new CDP session, version-dependent options like "Allow for N hours") are not fully characterized. Way 2 sidesteps this entirely. -## Maintenance commands +## First time setup -- browser-harness --doctor — show version, install mode, daemon and Chrome state, and whether an update is pending. -- browser-harness --setup — re-run the full interactive browser-attach flow. -- browser-harness --update -y — pull the latest version and restart the daemon. Run this yourself when you see the `[browser-harness] update available: X -> Y` banner — don't ask the user. The banner is rate-limited to once per day. +Try yourself before asking the user to do anything. Retry transient errors briefly. Only ask the user when a step genuinely needs them — ticking a checkbox, clicking Allow. -## Architecture +If the user hasn't said which connection method to use, default to Way 1 if Chrome is already running, Way 2 if not. Cloud is only used when the user opts in. -```text -Chrome / Browser Use cloud -> CDP WS -> browser_harness.daemon -> /tmp/bu-.sock -> browser_harness.run -``` +1. Try the harness: -- Protocol is one JSON line each way. -- Requests are {method, params, session_id} for CDP or {meta: ...} for daemon control. -- Responses are {result} / {error} / {events} / {session_id}. -- BU_NAME namespaces socket, pid, and log files. -- BU_CDP_WS overrides local Chrome discovery for remote browsers. -- BU_BROWSER_ID + BROWSER_USE_API_KEY lets the daemon stop a Browser Use cloud browser on shutdown. + ```bash + browser-harness -c 'print(page_info())' + ``` -## Keeping the harness current + If it prints page info, you're done. + +2. Otherwise run `browser-harness --doctor`. The two lines that matter for connection are `chrome running` and `daemon alive`. + +3. Match the output to a case: + + - **chrome FAIL** → no Chrome process detected. + - **Way 1**: ask the user to open their target Chrome themselves. + - **Way 2**: launch Chrome yourself with `--remote-debugging-port=9222 --user-data-dir=`, then set `BU_CDP_URL=http://127.0.0.1:9222` for the harness (see the Browser connection reference). + + - **chrome ok, daemon FAIL** → Way 1 setup is incomplete. Tell the user to: + - navigate to `chrome://inspect/#remote-debugging` in their Chrome and tick "Allow remote debugging for this browser instance" if not yet ticked (one-time per profile) + - click Allow on the in-browser popup if it appears (every attach on Chrome 144+) + + On macOS, you can open the inspect page in their running Chrome yourself instead of asking them to navigate: + + ```bash + osascript -e 'tell application "Google Chrome" to activate' \ + -e 'tell application "Google Chrome" to open location "chrome://inspect/#remote-debugging"' + ``` + + - **chrome ok, daemon ok, but step 1 still failed** → stale daemon. Restart it: + + ```bash + browser-harness -c 'restart_daemon()' + ``` + + If that hangs, escalate: kill all Chrome and daemon processes, then reopen Chrome and retry. On macOS/Linux, also remove `/tmp/bu-default.sock` and `/tmp/bu-default.pid` if they linger. + +4. After any fix, retry step 1. + +If Way 1 fails repeatedly or the user's task is unattended, move to Way 2 or a cloud browser per the Browser connection reference (these have no popups). + +If you are testing browser connection for the first time, run this demo: open `https://github.com/browser-use/browser-harness` in a new tab and activate it (`switch_tab`) so the user sees the harness has attached. If they are logged into GitHub, ask whether to star the repo for them — only click if they say yes. If they are not logged in, navigate to `https://browser-use.com` instead. Then ask what they want to do next. -- On each run, `browser-harness` prints `[browser-harness] update available: X -> Y` (once per day) when a newer GitHub release exists. -- When you see that banner, run `browser-harness --update -y` yourself — don't ask the user. It pulls the new code (`git pull --ff-only` for editable clones, `uv tool upgrade browser-harness` for PyPI installs) and stops the running daemon so the next call picks up the new code. With `-y` it won't prompt. -- `--update` refuses to run on an editable clone with uncommitted changes. If that happens, tell the user and let them resolve the dirty worktree. -- Use `browser-harness --doctor` any time to see version, install mode, daemon and Chrome state, and whether an update is pending. - -## Cold-start reminders - -- Try attaching before asking the user to change anything. Decide what to escalate based on the harness's error message, not on whether Chrome is visibly running. -- The remote-debugging checkbox is per-profile sticky in Chrome. If it has ever been ticked on a profile, just launching Chrome is enough — only navigate to `chrome://inspect/#remote-debugging` when `DevToolsActivePort` is genuinely missing. -- The first connect may block on Chrome's `Allow` dialog, and Chrome may also stop first on the profile picker. -- `DevToolsActivePort` can exist before the port is actually listening. Treat connection refused as "still enabling" and keep polling briefly. -- If the port is listening but `/json/version` returns `404`, treat that as expected on newer Chrome builds and retry `browser-harness`. -- Chrome may open the profile picker before any real tab exists. -- On macOS, prefer AppleScript `open location` over `open -a ... URL` when Chrome is already running. -- Microsoft Edge (including Beta/Dev/Canary) works too — substitute the app name; steps are identical. diff --git a/packages/bcode-browser/harness/interaction-skills/profile-sync.md b/packages/bcode-browser/harness/interaction-skills/profile-sync.md index 961695a76..19bb08f81 100644 --- a/packages/bcode-browser/harness/interaction-skills/profile-sync.md +++ b/packages/bcode-browser/harness/interaction-skills/profile-sync.md @@ -8,7 +8,7 @@ Make a remote Browser Use browser start already logged in, by uploading cookies curl -fsSL https://browser-use.com/profile.sh | sh ``` -Downloads `profile-use` (macOS / Linux / Windows, x64 / arm64). The Python helpers shell out to it; you don't run `profile-use` directly. +Downloads `profile-use` (macOS / Linux, x64 / arm64). The Python helpers shell out to it; you don't run `profile-use` directly. ## Python API (pre-imported in `browser-harness -c`) @@ -19,7 +19,7 @@ list_cloud_profiles() list_local_profiles() # [{BrowserName, ProfileName, DisplayName, ProfilePath, ...}, ...] — detected on this machine -sync_local_profile(local_profile_name, browser=None, +sync_local_profile(profile_name, browser=None, cloud_profile_id=None, # update an existing cloud profile instead of creating new include_domains=None, # only these domains (and subdomains); leading dot optional exclude_domains=None) # drop these domains; applied before include @@ -81,7 +81,7 @@ Cookies mutated during a remote session only persist on a clean `PATCH /browsers - API: `GET /profiles`, `GET/PATCH/DELETE /profiles/{id}` (paths are relative to `BU_API = "https://api.browser-use.com/api/v3"` in `admin.py`). Fields: `id`, `name`, `userId`, `lastUsedAt`, `cookieDomains[]`. `list_cloud_profiles()` wraps this. - Name → UUID: `profileName=` on `start_remote_daemon` resolves client-side; no API change needed. - Need the UUID for an existing profile? `matches = [p["id"] for p in list_cloud_profiles() if p["name"] == ""]` — then verify `len(matches) == 1` before using it. Profile names are not unique; syncs create duplicates unless you pass `cloud_profile_id=`. -- Lower-level raw calls: `from admin import _browser_use; _browser_use("/profiles/", "DELETE")`. Pass the path *without* the `/api/v3` prefix — it's already on `BU_API`. +- Lower-level raw calls: `from browser_harness.admin import _browser_use; _browser_use("/profiles/", "DELETE")`. Pass the path *without* the `/api/v3` prefix — it's already on `BU_API`. ## Traps diff --git a/packages/bcode-browser/harness/src/browser_harness/_ipc.py b/packages/bcode-browser/harness/src/browser_harness/_ipc.py index e47c31572..71acddd0e 100644 --- a/packages/bcode-browser/harness/src/browser_harness/_ipc.py +++ b/packages/bcode-browser/harness/src/browser_harness/_ipc.py @@ -1,5 +1,5 @@ """Daemon IPC plumbing. AF_UNIX socket on POSIX, TCP loopback on Windows.""" -import asyncio, os, re, socket, subprocess, sys, tempfile +import asyncio, json, os, re, secrets, socket, subprocess, sys, tempfile from pathlib import Path IS_WINDOWS = sys.platform == "win32" @@ -12,6 +12,12 @@ _TMP.mkdir(parents=True, exist_ok=True) _NAME_RE = re.compile(r"\A[A-Za-z0-9_-]{1,64}\Z") +# Set by serve() on Windows. Daemon's handle() requires every request to carry +# this token (TCP loopback has no chmod-equivalent so any local process could +# otherwise issue CDP commands). Stays None on POSIX where AF_UNIX + chmod 600 +# is the boundary. +_server_token = None + def _check(name): # path-traversal guard for BU_NAME if not _NAME_RE.match(name or ""): @@ -26,14 +32,23 @@ def _stem(name): # "bu" when BH_TMP_DIR isolates us, else "bu-" def log_path(name): return _TMP / f"{_stem(name)}.log" def pid_path(name): return _TMP / f"{_stem(name)}.pid" -def port_path(name): return _TMP / f"{_stem(name)}.port" # Windows-only: holds the daemon's TCP port +def port_path(name): return _TMP / f"{_stem(name)}.port" # Windows-only: holds {"port","token"} JSON def _sock_path(name): return _TMP / f"{_stem(name)}.sock" +def _read_port_file(name): + """(port, token) from the Windows port file, or (None, None) on any failure.""" + try: + d = json.loads(port_path(name).read_text()) + return int(d["port"]), d["token"] + except (FileNotFoundError, ValueError, KeyError, TypeError, OSError): + return None, None + + def sock_addr(name): # display-only, used in log lines if not IS_WINDOWS: return str(_sock_path(name)) - try: return f"127.0.0.1:{port_path(name).read_text().strip()}" - except FileNotFoundError: return f"tcp:{_stem(name)}" + port, _ = _read_port_file(name) + return f"127.0.0.1:{port}" if port else f"tcp:{_stem(name)}" def spawn_kwargs(): # subprocess.Popen flags so the daemon detaches from this terminal @@ -48,29 +63,67 @@ def spawn_kwargs(): # subprocess.Popen flags so the daemon detaches from this t def connect(name, timeout=1.0): - """Blocking client. Raises FileNotFoundError if no daemon, TimeoutError on connect timeout.""" + """Blocking client. Returns (sock, token); token is None on POSIX, hex string on Windows. + Callers sending JSON requests MUST include the token as req["token"] on Windows.""" if not IS_WINDOWS: # uv-Python on Windows lacks socket.AF_UNIX, so this branch must be gated. s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - s.settimeout(timeout); s.connect(str(_sock_path(name))); return s - try: port = int(port_path(name).read_text().strip()) - except (FileNotFoundError, ValueError): raise FileNotFoundError(str(port_path(name))) + s.settimeout(timeout); s.connect(str(_sock_path(name))); return s, None + port, token = _read_port_file(name) + if port is None: raise FileNotFoundError(str(port_path(name))) s = socket.create_connection(("127.0.0.1", port), timeout=timeout) - s.settimeout(timeout); return s + s.settimeout(timeout); return s, token + + +def request(c, token, req): + """One-shot send + recv + parse on an open socket. Injects token on Windows. + Returns the parsed JSON response. Caller closes the socket.""" + if token: req = {**req, "token": token} + c.sendall((json.dumps(req) + "\n").encode()) + data = b"" + while not data.endswith(b"\n"): + chunk = c.recv(1 << 16) + if not chunk: break + data += chunk + return json.loads(data or b"{}") + + +def ping(name, timeout=1.0): + """True iff a live daemon answers our ping. Defends against stale .port files + + port reuse: a bare TCP connect can succeed against an unrelated process that + grabbed the port after our daemon crashed; only our daemon answers {"pong":true}.""" + try: + c, token = connect(name, timeout=timeout) + except (FileNotFoundError, ConnectionRefusedError, TimeoutError, socket.timeout, OSError): + return False + try: + return request(c, token, {"meta": "ping"}).get("pong") is True + except (OSError, ValueError): + return False + finally: + try: c.close() + except OSError: pass async def serve(name, handler): """Run the server until cancelled. handler(reader, writer) sees the same interface either way.""" + global _server_token if not IS_WINDOWS: path = str(_sock_path(name)) if os.path.exists(path): os.unlink(path) server = await asyncio.start_unix_server(handler, path=path) os.chmod(path, 0o600) + _server_token = None async with server: await asyncio.Event().wait() return server = await asyncio.start_server(handler, "127.0.0.1", 0) + port = server.sockets[0].getsockname()[1] + _server_token = secrets.token_hex(32) pf = port_path(name) - pf.write_text(str(server.sockets[0].getsockname()[1])) # so clients can find us + # Atomic write so a concurrent reader never sees a half-written file. + tmp = pf.with_name(pf.name + ".tmp") + tmp.write_text(json.dumps({"port": port, "token": _server_token})) + os.replace(tmp, pf) try: async with server: await asyncio.Event().wait() finally: @@ -78,6 +131,11 @@ async def serve(name, handler): except FileNotFoundError: pass +def expected_token(): + """The token the running daemon will accept, or None on POSIX.""" + return _server_token + + def cleanup_endpoint(name): # best-effort; silent if already gone p = _sock_path(name) if not IS_WINDOWS else port_path(name) try: p.unlink() diff --git a/packages/bcode-browser/harness/src/browser_harness/admin.py b/packages/bcode-browser/harness/src/browser_harness/admin.py index 6a387c0da..83109c419 100644 --- a/packages/bcode-browser/harness/src/browser_harness/admin.py +++ b/packages/bcode-browser/harness/src/browser_harness/admin.py @@ -69,10 +69,9 @@ def _is_local_chrome_mode(env=None): def daemon_alive(name=None): - try: - c = ipc.connect(name or NAME, timeout=1.0); c.close(); return True - except (FileNotFoundError, ConnectionRefusedError, TimeoutError, socket.timeout, OSError): - return False + # Ping handshake (not a bare connect) so a stale .port file + port reuse + # after a daemon crash doesn't make us mistake an unrelated listener for ours. + return ipc.ping(name or NAME, timeout=1.0) def _daemon_endpoint_names(): @@ -97,15 +96,8 @@ def _daemon_endpoint_names(): def _daemon_browser_connection(name): c = None try: - c = ipc.connect(name, timeout=1.0) - c.sendall(b'{"meta":"connection_status"}\n') - data = b"" - while not data.endswith(b"\n"): - chunk = c.recv(1 << 16) - if not chunk: - break - data += chunk - response = json.loads(data) + c, token = ipc.connect(name, timeout=1.0) + response = ipc.request(c, token, {"meta": "connection_status"}) if "error" in response: return None page = response.get("page") @@ -140,7 +132,7 @@ def _doctor_short_text(value, limit=None): return value if len(value) <= limit else value[:limit - 3] + "..." -def ensure_daemon(wait=60.0, name=None, env=None, _open_inspect=True): +def ensure_daemon(wait=60.0, name=None, env=None): """Idempotent. Self-heals stale daemon, cold Chrome, and missing Allow on chrome://inspect.""" if daemon_alive(name): # Stale daemons accept connects AND reply to meta:* (pure Python) even when the @@ -148,14 +140,9 @@ def ensure_daemon(wait=60.0, name=None, env=None, _open_inspect=True): # Must go through ipc.connect so this works on Windows (TCP loopback) too; # raw AF_UNIX here would fail on every warm call and churn the daemon. try: - s = ipc.connect(name or NAME, timeout=3.0) - s.sendall(b'{"method":"Target.getTargets","params":{}}\n') - data = b"" - while not data.endswith(b"\n"): - chunk = s.recv(1 << 16) - if not chunk: break - data += chunk - if b'"result"' in data: return + s, token = ipc.connect(name or NAME, timeout=3.0) + resp = ipc.request(s, token, {"method": "Target.getTargets", "params": {}}) + if "result" in resp: return except Exception: pass restart_daemon(name) @@ -174,9 +161,8 @@ def ensure_daemon(wait=60.0, name=None, env=None, _open_inspect=True): time.sleep(0.2) msg = _log_tail(name) or "" if local and attempt == 0 and _needs_chrome_remote_debugging_prompt(msg): - if _open_inspect: - _open_chrome_inspect() - print("browser-harness: click Allow on chrome://inspect (and tick the checkbox if shown)", file=sys.stderr) + _open_chrome_inspect() + print('browser-harness: at chrome://inspect/#remote-debugging, tick "Allow remote debugging for this browser instance" and click Allow on the popup that appears', file=sys.stderr) restart_daemon(name) continue raise RuntimeError(msg or f"daemon {name or NAME} didn't come up -- check {ipc.log_path(name or NAME)}") @@ -206,9 +192,8 @@ def restart_daemon(name=None): pid_path = str(ipc.pid_path(name or NAME)) try: - c = ipc.connect(name or NAME, timeout=5.0) - c.sendall(b'{"meta":"shutdown"}\n') - c.recv(1024) + c, token = ipc.connect(name or NAME, timeout=5.0) + ipc.request(c, token, {"meta": "shutdown"}) c.close() except Exception: pass @@ -373,9 +358,9 @@ def sync_local_profile(profile_name, browser=None, cloud_profile_id=None, include_domains=None, exclude_domains=None): """Sync a local profile's cookies to a cloud profile. Returns the cloud UUID. - Shells out to `profile-use sync` (v1.0.4+). Requires BROWSER_USE_API_KEY and the - target local Chrome profile to be closed (profile-use needs an exclusive lock on - the Cookies DB). + Shells out to `profile-use sync` (v1.0.5+). Requires BROWSER_USE_API_KEY. + profile-use copies the profile dir to a temp and syncs from the copy, so Chrome + can stay open. Args: profile_name: local Chrome profile name (as shown by `list_local_profiles`). @@ -548,56 +533,6 @@ def _open_chrome_inspect(): pass -def run_setup(): - """Interactive bootstrap: attach to the running browser, guiding the user through chrome://inspect if needed. - - Exit code 0 on success, 1 on failure.""" - import sys - print("browser-harness setup: attaching to your browser...") - - if daemon_alive(): - print("daemon already running; nothing to do.") - return 0 - - if not _chrome_running(): - print("no Chrome/Edge process detected. please start your browser and rerun `browser-harness --setup`.") - return 1 - - # First attach attempt. - try: - ensure_daemon(wait=20.0) - print("daemon is up.") - return 0 - except RuntimeError as e: - first_err = str(e) - - needs_inspect = _is_local_chrome_mode() and _needs_chrome_remote_debugging_prompt(first_err) - if needs_inspect: - print("chrome remote-debugging is not enabled on the current profile.") - print("opening chrome://inspect/#remote-debugging -- in the tab that opens:") - print(" 1. if chrome shows the profile picker, pick your normal profile;") - print(" 2. tick 'Discover network targets' and click Allow if prompted.") - _open_chrome_inspect() - else: - print(f"attach failed: {first_err}") - print("retrying for up to 60s (chrome may still be starting up)...") - - deadline = time.time() + 60 - last = first_err - while time.time() < deadline: - try: - ensure_daemon(wait=5.0, _open_inspect=False) - print("daemon is up.") - return 0 - except RuntimeError as e: - last = str(e) - time.sleep(2) - - print(f"setup failed: {last}", file=sys.stderr) - print("run `browser-harness --doctor` for diagnostics.", file=sys.stderr) - return 1 - - def run_doctor(): """Read-only diagnostics. Exit 0 iff everything looks healthy.""" import platform, shutil, sys @@ -626,8 +561,8 @@ def row(label, ok, detail=""): print(f" latest release {latest}" + (" (update available)" if newer else "")) else: print(" latest release (could not reach github)") - row("chrome running", chrome, "" if chrome else "start chrome/edge and rerun `browser-harness --setup`") - row("daemon alive", daemon, "" if daemon else "run `browser-harness --setup` to attach") + row("chrome running", chrome, "" if chrome else "start chrome/edge") + row("daemon alive", daemon, "" if daemon else "see install.md") row("active browser connections", bool(connections), str(len(connections))) for conn in connections: page = conn.get("page") diff --git a/packages/bcode-browser/harness/src/browser_harness/daemon.py b/packages/bcode-browser/harness/src/browser_harness/daemon.py index a8631406d..01edad1ce 100644 --- a/packages/bcode-browser/harness/src/browser_harness/daemon.py +++ b/packages/bcode-browser/harness/src/browser_harness/daemon.py @@ -36,6 +36,7 @@ def _load_env_file(p): Path.home() / "Library/Application Support/Google/Chrome", Path.home() / "Library/Application Support/Comet", Path.home() / "Library/Application Support/Arc/User Data", + Path.home() / "Library/Application Support/Dia/User Data", Path.home() / "Library/Application Support/Microsoft Edge", Path.home() / "Library/Application Support/Microsoft Edge Beta", Path.home() / "Library/Application Support/Microsoft Edge Dev", @@ -210,7 +211,16 @@ async def tap(method, params, session_id=None): self.cdp._event_registry.handle_event = tap async def handle(self, req): + # Token guard for Windows TCP loopback: any local process can otherwise + # connect and issue CDP commands. expected_token() is None on POSIX so + # this check is a no-op there (AF_UNIX + chmod 600 is the boundary). + expected = ipc.expected_token() + if expected is not None and req.get("token") != expected: + return {"error": "unauthorized"} meta = req.get("meta") + # Liveness probe — lets clients confirm the listener is actually this + # daemon and not an unrelated process that reused our port post-crash. + if meta == "ping": return {"pong": True} if meta == "drain_events": out = list(self.events); self.events.clear() return {"events": out} @@ -297,10 +307,9 @@ async def main(): def already_running(): - try: - c = ipc.connect(NAME, timeout=1.0); c.close(); return True - except (FileNotFoundError, ConnectionRefusedError, TimeoutError, socket.timeout, OSError): - return False + # Ping handshake (not a bare connect) so a stale .port file + port reuse + # after a daemon crash doesn't make us mistake an unrelated listener for ours. + return ipc.ping(NAME, timeout=1.0) if __name__ == "__main__": diff --git a/packages/bcode-browser/harness/src/browser_harness/helpers.py b/packages/bcode-browser/harness/src/browser_harness/helpers.py index 516d1837b..aa897da99 100644 --- a/packages/bcode-browser/harness/src/browser_harness/helpers.py +++ b/packages/bcode-browser/harness/src/browser_harness/helpers.py @@ -3,7 +3,7 @@ Core helpers live here. Agent-editable helpers live in BH_AGENT_WORKSPACE/agent_helpers.py. """ -import base64, importlib.util, json, math, os, time, urllib.request +import base64, importlib.util, json, math, os, sys, time, urllib.request from pathlib import Path from urllib.parse import urlparse @@ -40,15 +40,11 @@ def _load_env_file(p): def _send(req): - c = ipc.connect(NAME, timeout=5.0) - c.sendall((json.dumps(req) + "\n").encode()) - data = b"" - while not data.endswith(b"\n"): - chunk = c.recv(1 << 20) - if not chunk: break - data += chunk - c.close() - r = json.loads(data) + c, token = ipc.connect(NAME, timeout=5.0) + try: + r = ipc.request(c, token, req) + finally: + c.close() if "error" in r: raise RuntimeError(r["error"]) return r @@ -162,6 +158,8 @@ def _has_return_statement(expression): # --- navigation / page --- def goto_url(url): r = cdp("Page.navigate", url=url) + if os.environ.get("BH_DOMAIN_SKILLS") != "1": + return r d = (AGENT_WORKSPACE / "domain-skills" / (urlparse(url).hostname or "").removeprefix("www.").split(".")[0]) return {**r, "domain_skills": sorted(p.name for p in d.rglob("*.md"))[:10]} if d.is_dir() else r @@ -205,6 +203,45 @@ def click_at_xy(x, y, button="left", clicks=1): def type_text(text): cdp("Input.insertText", text=text) +def fill_input(selector, text, clear_first=True, timeout=0.0): + """Fill a framework-managed input (React controlled, Vue v-model, Ember tracked). + + type_text() uses Input.insertText which bypasses framework event listeners and leaves + submit buttons disabled. This helper focuses the element, clears it, types via real + key events, then fires synthetic input+change events so the framework sees the update. + + Raises RuntimeError if the element is not found. Pass timeout>0 to wait for + late-rendered elements (e.g. after a route change) before typing. + """ + if timeout > 0: + if not wait_for_element(selector, timeout=timeout): + raise RuntimeError(f"fill_input: element not found: {selector!r}") + focused = js( + f"(()=>{{const e=document.querySelector({json.dumps(selector)});" + f"if(!e)return false;e.focus();return true;}})()" + ) + if not focused: + raise RuntimeError(f"fill_input: element not found: {selector!r}") + if clear_first: + # Dispatch select-all directly — NOT via press_key, which always emits a + # `char` event for single-char keys. With Ctrl/Cmd held, that `char` + # makes Chrome treat the input as a printable "a" instead of firing the + # select-all shortcut, leaving the field uncleared. + mods = 4 if sys.platform == "darwin" else 2 # Cmd on macOS, Ctrl elsewhere + select_all = {"key": "a", "code": "KeyA", "modifiers": mods, + "windowsVirtualKeyCode": 65, "nativeVirtualKeyCode": 65} + cdp("Input.dispatchKeyEvent", type="rawKeyDown", **select_all) + cdp("Input.dispatchKeyEvent", type="keyUp", **select_all) + press_key("Backspace") + for ch in text: + press_key(ch) + js( + f"(()=>{{const e=document.querySelector({json.dumps(selector)});" + f"if(!e)return;" + f"e.dispatchEvent(new Event('input',{{bubbles:true}}));" + f"e.dispatchEvent(new Event('change',{{bubbles:true}}));}})();" + ) + _KEYS = { # key → (windowsVirtualKeyCode, code, text) "Enter": (13, "Enter", "\r"), "Tab": (9, "Tab", "\t"), "Backspace": (8, "Backspace", ""), "Escape": (27, "Escape", ""), "Delete": (46, "Delete", ""), " ": (32, "Space", " "), @@ -320,6 +357,63 @@ def wait_for_load(timeout=15.0): time.sleep(0.3) return False +def wait_for_element(selector, timeout=10.0, visible=False): + """Poll until querySelector(selector) exists in the DOM, or timeout. + + wait_for_load() misses SPAs — the document is 'complete' before the framework renders. + Use this after actions that trigger async rendering (route changes, data fetches). + Set visible=True to also require the element to be non-hidden and in-layout. + Returns True if found, False on timeout. + """ + if visible: + # checkVisibility walks the ancestor chain and respects display:none / + # visibility:hidden / opacity:0 on parents, which a getComputedStyle + # check on the element alone misses (it returns the descendant's own + # style, not the inherited "is this rendered" state). Falls back to + # the per-element CSS check on older Chrome that lacks checkVisibility. + check = ( + f"(()=>{{const e=document.querySelector({json.dumps(selector)});" + f"if(!e)return false;" + f"if(typeof e.checkVisibility==='function')" + f"return e.checkVisibility({{checkOpacity:true,checkVisibilityCSS:true}});" + f"const s=getComputedStyle(e);" + f"return s.display!=='none'&&s.visibility!=='hidden'&&s.opacity!=='0'}})()" + ) + else: + check = f"!!document.querySelector({json.dumps(selector)})" + deadline = time.time() + timeout + while time.time() < deadline: + if js(check): return True + time.sleep(0.3) + return False + +def wait_for_network_idle(timeout=10.0, idle_ms=500): + """Wait until all in-flight requests finish and no Network.* events arrive for idle_ms ms. + + Useful after form submits, SPA route transitions, and any action that triggers + XHR/fetch without a visible DOM change. Builds on drain_events() — no daemon changes. + Returns True if idle window reached, False on timeout. + """ + deadline = time.time() + timeout + last_activity = time.time() + inflight = set() + while time.time() < deadline: + for e in drain_events(): + method = e.get("method", "") + params = e.get("params", {}) + if method == "Network.requestWillBeSent": + inflight.add(params.get("requestId")) + last_activity = time.time() + elif method in ("Network.loadingFinished", "Network.loadingFailed"): + inflight.discard(params.get("requestId")) + last_activity = time.time() + elif method.startswith("Network."): + last_activity = time.time() + if not inflight and (time.time() - last_activity) * 1000 >= idle_ms: + return True + time.sleep(0.1) + return False + def js(expression, target_id=None): """Run JS in the attached tab (default) or inside an iframe target (via iframe_target()). diff --git a/packages/bcode-browser/harness/src/browser_harness/run.py b/packages/bcode-browser/harness/src/browser_harness/run.py index ba7b8309d..2c6ac9573 100644 --- a/packages/bcode-browser/harness/src/browser_harness/run.py +++ b/packages/bcode-browser/harness/src/browser_harness/run.py @@ -17,7 +17,6 @@ print_update_banner, restart_daemon, run_doctor, - run_setup, run_update, start_remote_daemon, stop_remote_daemon, @@ -40,7 +39,6 @@ Commands: browser-harness --version print the installed version browser-harness --doctor diagnose install, daemon, and browser state - browser-harness --setup interactively attach to your running browser browser-harness --update [-y] pull the latest version (agents: pass -y) browser-harness --reload stop the daemon so next call picks up code changes """ @@ -68,8 +66,6 @@ def main(): return if args and args[0] == "--doctor": sys.exit(run_doctor()) - if args and args[0] == "--setup": - sys.exit(run_setup()) if args and args[0] == "--update": yes = any(a in {"-y", "--yes"} for a in args[1:]) sys.exit(run_update(yes=yes)) @@ -85,7 +81,15 @@ def main(): if len(args) < 2: sys.exit("Usage: browser-harness -c \"print(page_info())\"") print_update_banner() - if not daemon_alive() and not _local_chrome_listening() and os.environ.get("BROWSER_USE_API_KEY"): + # Auto-bootstrap a cloud browser is opt-in via BU_AUTOSPAWN — BROWSER_USE_API_KEY alone + # is not enough, since the key is commonly set for unrelated reasons (profile sync, + # cloud API calls, parent agents managing their own session). + if ( + not daemon_alive() + and not _local_chrome_listening() + and os.environ.get("BROWSER_USE_API_KEY") + and os.environ.get("BU_AUTOSPAWN") + ): start_remote_daemon(NAME) ensure_daemon() exec(args[1], globals()) diff --git a/packages/bcode-browser/harness/tests/unit/test_admin.py b/packages/bcode-browser/harness/tests/unit/test_admin.py index ee298086c..70be8afa2 100644 --- a/packages/bcode-browser/harness/tests/unit/test_admin.py +++ b/packages/bcode-browser/harness/tests/unit/test_admin.py @@ -86,8 +86,8 @@ def fake_connect(name, timeout=1.0): if name == "stale": raise ConnectionRefusedError() if name == "remote": - return FakeSocket(b'{"error":"no close frame received or sent"}\n') - return FakeSocket() + return FakeSocket(b'{"error":"no close frame received or sent"}\n'), None + return FakeSocket(), None monkeypatch.setattr(admin.ipc, "connect", fake_connect) @@ -99,8 +99,8 @@ def test_active_browser_connections_skips_daemons_reporting_cdp_disconnected(mon def fake_connect(name, timeout=1.0): if name == "stale": - return FakeSocket(b'{"error":"cdp_disconnected"}\n') - return FakeSocket() + return FakeSocket(b'{"error":"cdp_disconnected"}\n'), None + return FakeSocket(), None monkeypatch.setattr(admin.ipc, "connect", fake_connect) @@ -113,7 +113,7 @@ def test_browser_connections_returns_attached_page(monkeypatch): b'{"target_id":"target-1","session_id":"session-1",' b'"page":{"targetId":"target-1","title":"Cat - Wikipedia","url":"https://en.wikipedia.org/wiki/Cat"}}\n' ) - monkeypatch.setattr(admin.ipc, "connect", lambda name, timeout=1.0: FakeSocket(response)) + monkeypatch.setattr(admin.ipc, "connect", lambda name, timeout=1.0: (FakeSocket(response), None)) assert admin.browser_connections() == [ { diff --git a/packages/bcode-browser/harness/tests/unit/test_helpers.py b/packages/bcode-browser/harness/tests/unit/test_helpers.py index 013649143..e90602b99 100644 --- a/packages/bcode-browser/harness/tests/unit/test_helpers.py +++ b/packages/bcode-browser/harness/tests/unit/test_helpers.py @@ -1,5 +1,6 @@ import os import tempfile +import time from unittest.mock import patch import pytest @@ -28,6 +29,30 @@ def test_max_dim_default_is_no_resize(fake_png): assert _run(fake_png, 4592, 2286) == (4592, 2286) +def _seed_skill(tmp_path): + site = tmp_path / "domain-skills" / "example" + site.mkdir(parents=True) + (site / "scraping.md").write_text("hi") + + +def test_goto_url_omits_domain_skills_by_default(tmp_path, monkeypatch): + monkeypatch.delenv("BH_DOMAIN_SKILLS", raising=False) + monkeypatch.setattr(helpers, "AGENT_WORKSPACE", tmp_path) + _seed_skill(tmp_path) + with patch("browser_harness.helpers.cdp", return_value={"frameId": "f"}): + result = helpers.goto_url("https://www.example.com/") + assert result == {"frameId": "f"} + + +def test_goto_url_includes_domain_skills_when_enabled(tmp_path, monkeypatch): + monkeypatch.setenv("BH_DOMAIN_SKILLS", "1") + monkeypatch.setattr(helpers, "AGENT_WORKSPACE", tmp_path) + _seed_skill(tmp_path) + with patch("browser_harness.helpers.cdp", return_value={"frameId": "f"}): + result = helpers.goto_url("https://www.example.com/") + assert result == {"frameId": "f", "domain_skills": ["scraping.md"]} + + def test_page_info_raises_clear_error_on_js_exception(): def fake_send(req): return {} @@ -50,3 +75,231 @@ def fake_cdp(method, **kwargs): patch("browser_harness.helpers.cdp", side_effect=fake_cdp): with pytest.raises(RuntimeError, match="ReferenceError"): helpers.page_info() + + +# --- fill_input --- + +def test_fill_input_focuses_types_and_fires_events(): + cdp_calls = [] + js_calls = [] + + def fake_cdp(method, **kwargs): + cdp_calls.append((method, kwargs)) + return {} + + def fake_js(expr, **kwargs): + js_calls.append(expr) + return True # focus call must return True (element found) + + with patch("browser_harness.helpers.cdp", side_effect=fake_cdp), \ + patch("browser_harness.helpers.js", side_effect=fake_js): + helpers.fill_input("#my-input", "hello") + + assert any("#my-input" in e for e in js_calls) + key_downs = [m for m, _ in cdp_calls if m == "Input.dispatchKeyEvent"] + assert len(key_downs) > 0 + assert any("input" in e and "change" in e for e in js_calls) + + +def test_fill_input_raises_when_element_not_found(): + def fake_js(expr, **kwargs): + return False # element not found + + with patch("browser_harness.helpers.js", side_effect=fake_js): + with pytest.raises(RuntimeError, match="element not found"): + helpers.fill_input("#missing", "hello") + + +def test_fill_input_clear_first_sends_select_all_then_backspace(): + import sys + + key_events = [] + + def fake_cdp(method, **kwargs): + if method == "Input.dispatchKeyEvent": + key_events.append(kwargs) + return {} + + def fake_js(expr, **kwargs): + return True # element found + + with patch("browser_harness.helpers.cdp", side_effect=fake_cdp), \ + patch("browser_harness.helpers.js", side_effect=fake_js): + helpers.fill_input("#inp", "x", clear_first=True) + + # The "a" must be dispatched with the platform-correct modifier (Meta=4 on + # macOS, Ctrl=2 elsewhere). Without the modifier, the field would never get + # selected — it would just receive a literal "a". + expected_mod = 4 if sys.platform == "darwin" else 2 + a_events = [e for e in key_events if e.get("key") == "a"] + assert a_events, "expected an 'a' key event for select-all" + assert all(e.get("modifiers") == expected_mod for e in a_events), \ + f"select-all 'a' must carry modifiers={expected_mod}; got {[e.get('modifiers') for e in a_events]}" + + # Crucial: no `char` event for the "a" — emitting one makes Chrome treat + # Cmd/Ctrl+A as a printable letter instead of a shortcut. + assert not any(e.get("type") == "char" and e.get("text") == "a" for e in key_events), \ + "select-all must not emit a 'char' event with text='a' (would cancel the shortcut)" + + # Backspace still fires (via press_key, which uses keyDown). + keys_down = [e.get("key") for e in key_events if e.get("type") in ("keyDown", "rawKeyDown")] + assert "Backspace" in keys_down + + +def test_fill_input_no_clear_skips_ctrl_a(): + key_events = [] + + def fake_cdp(method, **kwargs): + if method == "Input.dispatchKeyEvent": + key_events.append(kwargs) + return {} + + def fake_js(expr, **kwargs): + return True # element found + + with patch("browser_harness.helpers.cdp", side_effect=fake_cdp), \ + patch("browser_harness.helpers.js", side_effect=fake_js): + helpers.fill_input("#inp", "x", clear_first=False) + + keys_seen = [e.get("key") for e in key_events if e.get("type") == "keyDown"] + assert "Backspace" not in keys_seen + + +# --- wait_for_element --- + +def test_wait_for_element_returns_true_when_found_immediately(): + def fake_js(expr, **kwargs): + return True + + with patch("browser_harness.helpers.js", side_effect=fake_js): + assert helpers.wait_for_element("#target", timeout=2.0) is True + + +def test_wait_for_element_returns_false_on_timeout(): + def fake_js(expr, **kwargs): + return False + + with patch("browser_harness.helpers.js", side_effect=fake_js), \ + patch("browser_harness.helpers.time") as mock_time: + # simulate time advancing past the deadline immediately + start = time.time() + mock_time.time.side_effect = [start, start + 5.0] + mock_time.sleep = lambda _: None + assert helpers.wait_for_element("#missing", timeout=1.0) is False + + +def test_wait_for_element_visible_uses_check_visibility(): + js_exprs = [] + + def fake_js(expr, **kwargs): + js_exprs.append(expr) + return True + + with patch("browser_harness.helpers.js", side_effect=fake_js): + helpers.wait_for_element("#btn", visible=True) + + # Prefers checkVisibility (walks ancestor chain) with a computed-style + # fallback for older Chrome. + assert any("checkVisibility" in e for e in js_exprs) + assert any("getComputedStyle" in e for e in js_exprs) + # must NOT use offsetParent (fails for position:fixed elements) + assert not any("offsetParent" in e for e in js_exprs) + + +def test_wait_for_element_non_visible_uses_simple_check(): + js_exprs = [] + + def fake_js(expr, **kwargs): + js_exprs.append(expr) + return True + + with patch("browser_harness.helpers.js", side_effect=fake_js): + helpers.wait_for_element("#btn", visible=False) + + assert any("querySelector" in e and "offsetParent" not in e for e in js_exprs) + + +# --- wait_for_network_idle --- + +def test_wait_for_network_idle_returns_true_when_no_events(): + call_count = 0 + + def fake_send(req): + nonlocal call_count + call_count += 1 + return {"events": []} + + with patch("browser_harness.helpers._send", side_effect=fake_send), \ + patch("browser_harness.helpers.time") as mock_time: + start = 1000.0 + # first call: not idle yet; second call: idle window elapsed + mock_time.time.side_effect = [start, start, start, start + 0.6, start + 0.6] + mock_time.sleep = lambda _: None + result = helpers.wait_for_network_idle(timeout=5.0, idle_ms=500) + + assert result is True + + +def test_wait_for_network_idle_waits_for_inflight_request(): + # Verifies inflight tracking: must not return True until loadingFinished, + # even though >idle_ms elapses between requestWillBeSent and loadingFinished. + # An event-silence-only implementation would return True at iter2 (wrong). + events_seq = [ + [{"method": "Network.requestWillBeSent", "params": {"requestId": "req1"}}], + [], # >500ms elapsed — old impl returns True here; new must NOT + [{"method": "Network.loadingFinished", "params": {"requestId": "req1"}}], + [], # idle_ms after loadingFinished → return True + ] + idx = 0 + + def fake_send(req): + nonlocal idx + evs = events_seq[min(idx, len(events_seq) - 1)] + idx += 1 + return {"events": evs} + + with patch("browser_harness.helpers._send", side_effect=fake_send), \ + patch("browser_harness.helpers.time") as mock_time: + start = 1000.0 + # inflight non-empty → short-circuit skips time.time() in idle check for iter1/iter2 + mock_time.time.side_effect = [ + start, start, # deadline + last_activity init + start + 0.1, # iter1 while-check + start + 0.1, # iter1 rWS last_activity update + # iter1 idle-check: inflight non-empty → short-circuit + start + 0.7, # iter2 while-check (>500ms since rWS but request still in flight) + # iter2 idle-check: inflight non-empty → short-circuit + start + 0.8, # iter3 while-check + start + 0.8, # iter3 lF last_activity update + start + 0.8, # iter3 idle-check: 0ms < 500 → not idle + start + 1.4, # iter4 while-check + start + 1.4, # iter4 idle-check: 600ms >= 500 → True + ] + mock_time.sleep = lambda _: None + result = helpers.wait_for_network_idle(timeout=5.0, idle_ms=500) + + assert result is True + assert idx == 4 # did not short-circuit at iter2 despite silence > idle_ms + + +def test_wait_for_network_idle_returns_false_on_timeout(): + # Continuous rWS keeps inflight non-empty → idle check short-circuits every iteration. + # time.time() is only called for while-check and rWS last_activity (not idle check). + def fake_send(req): + return {"events": [{"method": "Network.requestWillBeSent", "params": {"requestId": "r"}}]} + + with patch("browser_harness.helpers._send", side_effect=fake_send), \ + patch("browser_harness.helpers.time") as mock_time: + start = 1000.0 + mock_time.time.side_effect = [ + start, start, # deadline + last_activity init + start + 0.1, # iter1 while-check (in deadline) + start + 0.1, # iter1 rWS last_activity update + # iter1 idle-check: inflight non-empty → short-circuit + start + 20.0, # iter2 while-check (past deadline → exit) + ] + mock_time.sleep = lambda _: None + result = helpers.wait_for_network_idle(timeout=10.0, idle_ms=500) + + assert result is False + diff --git a/packages/bcode-browser/harness/tests/unit/test_run.py b/packages/bcode-browser/harness/tests/unit/test_run.py index fcf2ed4a7..31cb4e1d8 100644 --- a/packages/bcode-browser/harness/tests/unit/test_run.py +++ b/packages/bcode-browser/harness/tests/unit/test_run.py @@ -16,8 +16,9 @@ def test_c_flag_executes_code(): def test_cloud_bootstrap_on_headless_server(monkeypatch): - """No daemon, no local Chrome, API key set -> auto-provision cloud daemon.""" + """No daemon, no local Chrome, API key + BU_AUTOSPAWN set -> auto-provision cloud daemon.""" monkeypatch.setenv("BROWSER_USE_API_KEY", "test-key") + monkeypatch.setenv("BU_AUTOSPAWN", "1") with patch.object(sys, "argv", ["browser-harness", "-c", "x = 1"]), \ patch("browser_harness.run.daemon_alive", return_value=False), \ patch("browser_harness.run._local_chrome_listening", return_value=False), \