v3.0.0 — PerimeterX press-and-hold solver + CDP primitives
Highlights
End-to-end PerimeterX press-and-hold challenge solver via pure CDP — verified clearing the deny page on pedidosya.com.ar. Includes the new BrowserPort primitives that make it possible plus the agent + tools surface to drive it from an LLM.
⚠️ Breaking changes
- chromiumoxide 0.6 → 0.9 (Chrome 142+ wire compatibility — 0.6's protocol crate can't deserialize new CDP message variants)
BrowserPorttrait gains 6 required methods:mouse_down(x, y),mouse_up(x, y),mouse_move(x, y, buttons_mask)mouse_hold(x, y, ms)— humanized press-and-hold (pre-approach + ±1px jitter during hold)block_urls(patterns)—Network.setBlockedURLsglob suppressionclear_cookies(origin)—Storage.clearDataForOrigin(cookies + storage)
- All workspace internal version pins bumped 2.1.0 → 3.0.0
New tools (ras-tools)
press_and_hold_element { index, ms? }— resolves bbox center of a clickable, dispatches humanized hold (default 12000ms, max 60000ms)press_and_hold_coordinate { x, y, ms? }— raw pixel variant for buttons inside cross-origin iframes / closed shadow DOM
Logging
ras_agent::braintarget: per-stepagent decision,agent action params,action resultrecordsras_llm_openaiTRACE level: full request + response body dumps- Presets:
RUST_LOG=info,ras_agent::brain=info— brain + action streamRUST_LOG=info,ras_agent::brain=debug— with raw action paramsRUST_LOG=info,ras_llm_openai=trace— full LLM I/O
New examples
| Example | What it does |
|---|---|
pedidosya_px_solver |
Pure-CDP (no LLM) PerimeterX solver. Clears cookies, locates #px-captcha shadow host, holds ~18s with humanized approach + jitter. Verified to clear the deny page on pedidosya.com.ar. |
pedidosya_perimeterx_smoke |
LLM-driven variant exercising press_and_hold_* builtins. |
mouse_drag_smoke |
autodraw.com canvas drawing smoke — verifies CDP isTrusted=true mouse pipeline draws a recognizable circle. |
youtube_search_claude_code |
Claude Code OAuth path via ChatAnthropicClaudeCode. |
Internal
ras-cdpadapter refactored:mouse_input.rs+cdp_ext.rsextracted; newwith_pagehelper andop!macro deduplicate the page_for+within boilerplate.- Pre-commit guard scripts (
check-loc.sh,check-no-comments.sh,check-no-unwrap.sh) fixed to excludeexamples/,tests/,xtask/when staged without a parent path component.
Verified end-to-end
cargo check --workspace --all-targets✓cargo clippy --workspace --all-targets -- -D warnings✓cargo test -p ras-tools -p ras-agent -p ras-cdp✓- Manual:
cargo run --example pedidosya_px_solver— PASS (PX cleared, redirected to homepage) - Manual:
cargo run --example mouse_drag_smoke— PASS (visible circle drawn on autodraw canvas)
🤖 Generated with Claude Code