SPA frameworks (React Router, Vue Router, Next.js) require a prior
mouseMoved event to establish pointer hover state before the click
event synthesizes correctly. Without it, the router's click listener
never fires and the URL remains unchanged (url_changed: false).
Add a single mouseMoved dispatch at (x, y) with button=none before
the existing mousePressed/mouseReleased loop — matches Playwright's
standard click implementation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Address Codex bot P1 review finding: skipping favicon/data: URLs on
requestWillBeSent without also skipping their loadingFinished would
undercount active requests, causing premature network-idle.
Changes:
- Maintain `skipped_request_ids` HashSet to track suppressed requests
- loadingFinished/loadingFailed checks the set and suppresses delta
- Add EventSource exclusion (persistent like WebSocket)
- Handle redirect double-counting (redirectResponse → don't re-increment)
- Add comprehensive unit test covering all skip/undercount scenarios
WebSocket upgrade requests fire `Network.requestWillBeSent` but never
`Network.loadingFinished`, leaving the pending counter stuck at ≥1
and causing `wait network-idle` to always time out on sites with
persistent WebSocket connections (analytics, real-time features).
Align with Playwright's behaviour by excluding:
- WebSocket upgrades (type == "WebSocket")
- Favicon requests (url ends with /favicon.ico)
- data: URLs (not intercepted by Network Service)
Before: healthline.com 30s timeout, flightaware.com ~25s
After: healthline.com 523ms, flightaware.com 514ms
Replace the TypeScript CLI implementation with a thin JS wrapper that
executes the native Rust binary. The npm package now ships all platform
binaries directly, with a postinstall fallback to download from GitHub
Releases if needed.
- Add bin/actionbook.js: platform detection + binary execution
- Add scripts/postinstall.js: fallback download from GitHub Releases
- Remove all TypeScript source, build config, and dependencies
- Update CI workflow to build, package, and publish with binaries
- Update README with full Rust CLI command documentation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace old JSON API with new text-based API using area_id format
- Add get_action_by_area_id tool to MCP server
- Update search_actions with new parameters (domain, url, page, page_size)
- Remove --json option from CLI commands (output is now plain text)
- Disable sources command temporarily in CLI
- Update README documentation for CLI and MCP
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace npx playwright@{version} with direct node execution of playwright-core CLI.
Find CLI path by checking multiple node_modules structures (pnpm .pnpm/*, npm flat, npm nested).
Search both package dir and workspace root to support pnpm workspaces.
Benefits:
- Eliminates npx overhead and potential version mismatches
- Works reliably with both npm and pnpm package managers
- No need to parse agent-browser's
Remove custom help text and disable Commander.js help option.
Now 'actionbook browser -h' displays full agent-browser help with all
commands, options, and examples instead of minimal Commander help.
Benefits:
- Users see complete command reference without extra steps
- Automatically stays up-to-date with agent-browser changes
- Consistent help across -h, --help, and no-args invocations
Read playwright-core version from agent-browser's package.json to ensure
binary compatibility when installing Chromium. This prevents 'executable
doesn't exist' errors that occur when npx downloads a mismatched Playwright
version.
- Add getAgentBrowserPlaywrightVersion() to read version dynamically
- Use playwright@{version} instead of hardcoded version
- Fallback to 'latest' if version detection fails
- Change command description from "agent-browser" to "actionbook browser"
- Simplify help text from "detailed agent-browser commands" to "detailed commands"
Transform stdout/stderr from agent-browser command to replace all
occurrences of 'agent-browser' with 'actionbook browser' for
consistent branding in user-facing output.
- Add agent-browser ^0.8.3 as dependency in package.json
- Implement spawnAgentBrowser() using npx with cwd to CLI package root
- Update installAgentBrowser() to use 'npx playwright install chromium'
- Replace all agent-browser calls with spawnAgentBrowser()
- Update README with automatic dependency installation info
- Remove manual npm install logic (handled by package manager)
Benefits:
- agent-browser automatically installed with CLI
- No global install required for agent-browser
- Version managed by package.json
- Works seamlessly with npm/pnpm package managers
- Add agent-browser as direct dependency in package.json
- Remove automatic npm global installation logic
- Simplify installAgentBrowser() to only download Chromium binaries
- Update documentation to reflect simpler setup process
- Remove checkAgentBrowserInstalled() and showAgentBrowserSetupInstructions()
- Update help text to clarify browser install only downloads Chromium
- Keep --with-deps flag support for Linux
- Add installAgentBrowser() function to auto-install agent-browser
- Execute 'npm install -g agent-browser' if not already installed
- Automatically run 'agent-browser install' to download Chromium
- Support --with-deps flag for Linux system dependencies
- Show step-by-step progress during installation
- Update README with automatic installation instructions
- Add special handling for 'actionbook browser install' command
- Show detailed setup instructions when agent-browser is not installed
- Guide users through npm installation and Chromium download
- Include Linux-specific instructions for system dependencies
- Update README with improved setup documentation
- Add browser command to CLI for browser automation
- Create process utility for spawning commands with stdio inheritance
- Show installation instructions when agent-browser is not found
- Pass through all arguments to agent-browser CLI
- Add help text with examples and reference link
- Replace hardcoded version string with dynamic package.json reading
- Ensures CLI version stays in sync with package.json
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add actionbook CLI with search, get, and sources commands
- Support formatted output with colors and JSON output mode
- Publish as @actionbookdev/cli to npm
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>