Commit Graph

90 Commits

Author SHA1 Message Date
yan5xu 94c94b7c4e feat(cli): add CDP monitor background process for persistent monitoring (Phase 1, #77)
Monitoring commands (network, console, errors, trace) are broken in
direct CDP mode because each CLI invocation is a new short-lived
process that cannot accumulate events over time.

This introduces a long-running background monitor process that
maintains a persistent CDP connection and collects events:

- cdp-monitor-state.ts: MonitorState class extracted from cdp-client.ts
  event handling logic (Network.*, Runtime.*, trace)
- cdp-monitor.ts: standalone Node.js process that connects to Chrome
  via CDP, attaches to all page targets, and serves an HTTP API on
  127.0.0.1 with bearer-token auth
- monitor-manager.ts: CLI-side lifecycle management (spawn, health
  check, shutdown, command forwarding)
- client.ts: routes monitor actions (network/console/errors/trace)
  through the monitor with graceful fallback to direct CDP
- tsup.config.ts: adds cdp-monitor as a build entry point

The monitor auto-discovers new tabs, writes PID/port/token files to
~/.bb-browser/, and auto-exits after 30 minutes of inactivity.
cdp-client.ts is intentionally left untouched to avoid regressions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 23:47:12 +08:00
Yanwu 22d38c1368 Merge pull request #67 from MonkeyLeeT/codex/mcp-site-tools
feat(mcp): add site adapter tools
2026-03-19 20:15:59 +08:00
Yanwu 3a1541114f Merge pull request #69 from ox01024/fix/status-command-help
fix(cli): wire top-level status command
2026-03-19 20:15:22 +08:00
Yanwu a391b8241a Merge pull request #63 from MonkeyLeeT/codex/fix-eval-top-level-await
Clean fix using replMode: true — same approach as Chrome DevTools Console. No side effects on existing expressions. LGTM.
2026-03-19 20:14:39 +08:00
Yanwu 3659fb869a Merge pull request #74 from ox01024/fix/click-navigation
Fixes real click-offset bug on scrolled pages. Viewport coordinate transformation is correct. LGTM.
2026-03-19 20:14:29 +08:00
Yanwu 152225b2e0 Merge pull request #80 from ox01024/fix/get-ref-cross-invocation
Solid state management with proper stale-target protection. LGTM.
2026-03-19 20:14:21 +08:00
Waffle 600244d0da fix(cli): avoid double-inserting typed text 2026-03-19 15:40:47 +08:00
Waffle 578e10f56d fix(cli): persist selected target for get commands 2026-03-19 15:40:10 +08:00
Waffle 92fa9f7fc7 fix(cli): use viewport coordinates for click targets 2026-03-19 14:59:34 +08:00
Waffle c8b1aab0ad fix(cli): wire top-level status command 2026-03-19 11:03:38 +08:00
ted 4626fff84a chore(cli): minimize site command diff 2026-03-18 18:54:06 -07:00
ted 7804f06226 feat(mcp): add site adapter tools 2026-03-18 18:51:25 -07:00
Yanwu d56cab9d6a Merge pull request #62 from MonkeyLeeT/codex/fix-openclaw-noisy-json
LGTM! All review feedback addressed thoroughly in b0b7c7b. Clean implementation, solid test coverage. Thanks for the quick turnaround!
2026-03-18 16:22:58 +08:00
ted 2a5493ea5b Revert "chore(shared): add Runtime.evaluate coverage"
This reverts commit ef79e28e7b.
2026-03-17 23:49:42 -07:00
ted ef79e28e7b chore(shared): add Runtime.evaluate coverage 2026-03-17 23:43:24 -07:00
ted cbad572068 refactor(cli): simplify OpenClaw JSON recovery 2026-03-17 23:39:35 -07:00
ted b0b7c7be0e fix(cli): harden OpenClaw JSON parsing 2026-03-17 23:32:55 -07:00
ted cfbae0763a fix: support top-level await in eval 2026-03-17 23:28:42 -07:00
ted 28e0867ee4 fix(cli): tolerate noisy OpenClaw JSON output 2026-03-17 21:10:29 -07:00
Waffle a1b9f38617 fix: derive version metadata from package.json 2026-03-17 11:25:51 +08:00
Yanwu e7de67c4df fix(cli): add Chrome Dev/Canary/Beta/Arc to browser detection (#42) (#43)
- Add missing browser candidates to findBrowserExecutable() on macOS
- Remove obsolete daemon-era commands (start/stop/status/reload)
- Bump to v0.8.3

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:04:29 +08:00
yan5xu f36297300c chore: bump to v0.8.2 2026-03-16 10:05:00 +08:00
yan5xu 64bb52ae00 chore: bump to v0.9.0 2026-03-16 10:03:49 +08:00
yan5xu 936047ad2b fix: cross-process refs, fill command, snapshot robustness
- Add DOM.getDocument before DOM.performSearch in xpath fallback (fixes cross-process click/fill)
- Persist refs to /tmp/bb-browser-refs-<targetId>.json for cross-process usage
- Fix fill command: use backendNodeId for DOM.focus, add insertTextIntoNode helper
- Graceful snapshot fallback for complex pages (google.com)

All 13 core commands tested and passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:57:34 +08:00
yan5xu c3a3bf8d1d fix: snapshot, tab list, and discovery overhead in CDP mode
- Fix snapshot: map buildDomTree.js actual API params and parse return format
- Fix tab list: add "list" as recognized subcommand alias
- Fix discovery: check managed browser first, defer OpenClaw probe
- All 9 core commands passing (open, eval, snapshot, screenshot, tab, site, history, recommend)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:42:46 +08:00
yan5xu 4d63ae2935 fix: process hangs after CDP command completes
- Unref WebSocket so it doesn't keep the event loop alive
- Call process.exit(0) after main() resolves

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:15:42 +08:00
yan5xu 7e5c2275c4 feat: set managed Chrome profile name to "bb-browser"
Chrome title bar now shows "bb-browser" to distinguish from user's daily browser.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:04:24 +08:00
yan5xu 59ab96b4c3 feat: v0.8.0 — CDP direct connection, managed Chrome, no extension needed
Major architecture change: remove dependency on Chrome extension and daemon.
bb-browser now manages its own Chrome instance with --remote-debugging-port
and connects directly via CDP WebSocket.

New files:
- cdp-client.ts: CDP WebSocket client, implements all actions directly
- cdp-discovery.ts: auto-discover CDP port (OpenClaw → managed Chrome → auto-launch)
- history-sqlite.ts: read browser history from SQLite (Chrome/Edge/Brave/Arc)

Key changes:
- Auto-launch managed Chrome at ~/.bb-browser/browser/ on port 19825
- User data persists (logins saved across sessions)
- SQLite history replaces chrome.history extension API
- site recommend reads from main Chrome's history (not managed instance)
- Flat CDP protocol support (Chrome 146+)
- --port flag for explicit CDP port override
- All actions implemented: eval, click, snapshot, network, console, frame, dialog, trace

Zero config setup: npm install -g bb-browser → just works

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:02:30 +08:00
yan5xu 0551493aa0 feat(cli): auto-check for CLI updates on site update, bump to 0.7.0
- Bump version to 0.7.0
- Fix VERSION constant in index.ts (was stuck at 0.3.0)
- On `site update`, check npm registry for newer version and show upgrade hint
- Only prompt when npm version is higher than current

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:54:31 +08:00
yan5xu 00ed75fd67 feat(cli): add star command and hint in site update
- `bb-browser star` — stars epiral/bb-browser and epiral/bb-sites via gh CLI
- Show hint after `site update` output to guide agents and users

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:52:25 +08:00
Yanwu cf008d32e5 Merge pull request #32 from powcai001/fix/windows-mcp-path
Clean fix for Windows path resolution. Thanks @powcai001!
2026-03-16 00:05:54 +08:00
powcai 7061ab792a fix: use fileURLToPath for Windows-compatible MCP path resolution
On Windows, new URL(...).pathname returns '/C:/...' which gets
incorrectly resolved to 'C:\C:\...' (double drive letter).
fileURLToPath() correctly handles file:// URL to path conversion
cross-platform.

Fixes #17

Made-with: Cursor
2026-03-15 21:52:05 +08:00
yan5xu 701fa7bc7e feat(site): add --openclaw mode to run adapters via OpenClaw CDP browser
Run site adapters directly through OpenClaw's built-in Chrome browser,
without needing bb-browser's Chrome extension or daemon.

  bb-browser site v2ex/hot --openclaw
  bb-browser site zhihu/hot 3 --openclaw --jq '.items[].title'

The bridge (openclaw-bridge.ts, ~40 lines) uses `npx openclaw browser`
commands: tabs/open/evaluate. Adapter JS is passed directly via
execFileSync to avoid shell escaping issues.

Existing daemon-based flow is unchanged when --openclaw is not set.

Closes #28

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:35:00 +08:00
yan5xu b478226d74 fix(cli): wait for extension connection before sending commands
ensureDaemonRunning() previously returned as soon as the daemon HTTP
server was ready, but the Chrome extension might not have connected
via SSE yet. This caused intermittent "extension not connected" (503)
or "Failed to fetch" errors on the first command.

Now polls /status for extensionConnected (up to 10s) after daemon
starts, ensuring the full CLI → daemon → extension pipeline is ready
before sending any command.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 12:46:12 +08:00
yan5xu 638020d3bb feat(site): silent background update after every site command
Spawn a detached `git pull --ff-only` in the background after each
site command. Non-blocking, no output, keeps community adapters fresh
without user intervention.

Closes #20

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 12:36:20 +08:00
yan5xu 31fb169516 fix(site): filter noise from recommend not_available list
- Only show domains with >= 5 visits
- Exclude localhost and non-domain strings (e.g. Chrome extension IDs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 12:16:42 +08:00
yan5xu fdb8288ce2 feat: add history, site recommend, site info, --jq, and Agent UX guide
New commands:
- `history search/domains` — query Chrome browsing history via chrome.history API
- `site recommend` — cross-reference history with adapters for personalized discovery
- `site info <name>` — expose full adapter @meta (args, example, domain)
- `--jq <expr>` — inline jq-like JSON filtering (inspired by gh CLI)

Agent UX improvements:
- --help grouped by intent, "开始使用" section first with site examples
- --help top hint explicitly guides Agents to use site commands over browser automation
- `open` command shows 💡 hint when the URL has available site adapters
- `--jq` auto-strips `.data.` prefix for Agent tolerance
- `site update` post-install nudge for site recommend
- AGENTS.md with full UX writing spec for contributors

Closes #21, closes #23, relates #24

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 12:02:04 +08:00
Yanwu bed7fbd987 feat(cli): categorize --help output, promote site system (#14)
Group commands by function (site adapters, navigation, interaction,
page info, network/debug, daemon) instead of a flat list.

Move site adapter section to the top with usage examples, making
the most powerful feature immediately visible.

Closes #13

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 01:22:24 +08:00
yan5xu 94070402e1 fix(site): add guide hint to site --help 2026-03-15 00:30:01 +08:00
yan5xu 09ac697877 fix(cli): add guide command to help text 2026-03-15 00:27:33 +08:00
yan5xu bd9e89619c feat(guide): add bb-browser site adapter as gh CLI alternative
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:15:06 +08:00
yan5xu f0869aabef feat: add MCP instructions + bb-browser guide command
MCP server now sends instructions on connect so agents immediately
understand what bb-browser can do (capabilities, site adapters, etc).

New top-level `bb-browser guide` command teaches how to turn any
website into a site adapter — reverse engineer, write, test, contribute.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:13:14 +08:00
yan5xu 847a995db7 feat(site): include bb-browser site adapter as report alternative
reportHint now shows two options for agents:
1. gh issue create --repo epiral/bb-sites
2. bb-browser site github/issue-create epiral/bb-sites

Agents choose whichever tool is available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 23:21:21 +08:00
yan5xu de713a2761 feat(site): add reportHint in error output for agents
When a site adapter fails, include a reportHint field telling the
agent how to file an issue via `gh issue create --repo epiral/bb-sites`.
Agents decide themselves whether to use gh CLI or bb-browser's own
github site adapter.

Remove site report subcommand — agents handle reporting autonomously.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 23:19:48 +08:00
yan5xu 9d8594a168 fix(site): detect auth errors in adapter hint text too
Check both error and hint fields for auth keywords.
When detected, replace with actionable login URL hint.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 23:02:57 +08:00
yan5xu c68653b2fa feat(site): auto-detect auth errors and show login hint
When a site adapter returns 401/403/unauthorized errors, automatically
suggest the user to log in to the site's domain in their browser.
Works in both CLI and JSON output modes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 22:59:35 +08:00
yan5xu ce12d3a9f8 fix: simplify extension setup hints to 4 clear steps
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 22:28:55 +08:00
yan5xu 0491e72c4f fix: improve extension setup hints with direct download link
Point to releases/latest for zip download, simplify steps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 22:28:04 +08:00
yan5xu 1f15f3e433 feat(cli,mcp): add setup hints when extension/daemon not connected
Show actionable setup guide when:
- Daemon not running (ECONNREFUSED)
- Extension not connected (HTTP 503)

Hints include install steps and GitHub releases link, guiding both
users and AI agents to complete the setup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 22:23:05 +08:00
yan5xu cb28e815aa feat(cli): add --mcp flag to start MCP server
`bb-browser --mcp` spawns the MCP server with stdio transport.
Users can configure AI tools with: npx -y bb-browser --mcp

Also fixes root tsup bundling to properly exclude ws while
bundling all other deps (MCP SDK, ajv, zod).

Bump version to 0.4.1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 22:15:33 +08:00