feat(browser): add optional rust-native backend via fantoccini

* feat(browser): add optional rust-native automation backend

* style: align channels module with stable rustfmt

* fix(browser): switch rust-native backend to fantoccini

Replace headless_chrome with fantoccini to satisfy license checks and keep browser-native optional. Adds native_webdriver_url wiring, migrates native backend session/actions to WebDriver, updates docs/config defaults, and keeps backend auto-resolution behavior intact.

* test(config): serialize env override tests with lock

Prevent flaky CI failures caused by concurrent environment variable mutation across config env-override tests.

* style: apply rustfmt 1.92 for CI parity

* chore(ci): sync lockfile and rustfmt with current main

Resolve feature table drift after rebasing onto latest main, refresh Cargo.lock for browser-native fantoccini, and apply rustfmt 1.92 formatting required by CI.
This commit is contained in:
Chummy 2026-02-16 18:25:27 +08:00 committed by GitHub
parent 9d29f30a31
commit 85fc12bcf7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 1412 additions and 64 deletions

View file

@ -39,6 +39,9 @@ prometheus = { version = "0.13", default-features = false }
# Base64 encoding (screenshots, image data)
base64 = "0.22"
# Optional Rust-native browser automation backend
fantoccini = { version = "0.22.0", optional = true, default-features = false, features = ["rustls-tls"] }
# Error handling
anyhow = "1.0"
thiserror = "2.0"
@ -96,6 +99,7 @@ opentelemetry-otlp = { version = "0.31", default-features = false, features = ["
[features]
default = []
browser-native = ["dep:fantoccini"]
# Sandbox backends (platform-specific, opt-in)
sandbox-landlock = ["landlock"] # Linux kernel LSM