Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7159012173 | ||
|
|
1b3d41e579 | ||
|
|
dbf272ced7 |
Generated
+1
-1
@@ -45,7 +45,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "agent-browser-stealth"
|
name = "agent-browser-stealth"
|
||||||
version = "0.27.0-fork.5"
|
version = "0.27.0-fork.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes-gcm",
|
"aes-gcm",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "agent-browser-stealth"
|
name = "agent-browser-stealth"
|
||||||
version = "0.27.0-fork.5"
|
version = "0.27.0-fork.6"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Fast browser automation CLI for AI agents"
|
description = "Fast browser automation CLI for AI agents"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|||||||
@@ -1607,8 +1607,9 @@ async fn auto_launch(state: &mut DaemonState) -> Result<(), String> {
|
|||||||
To let agent-browser work with your existing Chrome (recommended):\n\
|
To let agent-browser work with your existing Chrome (recommended):\n\
|
||||||
{}\n\n\
|
{}\n\n\
|
||||||
Or start a standalone browser with: agent-browser --launch open <url>\n\n\
|
Or start a standalone browser with: agent-browser --launch open <url>\n\n\
|
||||||
Tip: On Chrome 144+, you can enable CDP without restarting:\n\
|
Note: chrome://inspect/#remote-debugging only enables remote *target discovery* — \
|
||||||
Open chrome://inspect/#remote-debugging and toggle it on.",
|
it does NOT expose the standard CDP HTTP API on /json/version. \
|
||||||
|
A full restart with --remote-debugging-port=<port> is required.",
|
||||||
chrome_relaunch_hint(),
|
chrome_relaunch_hint(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -2135,8 +2136,9 @@ async fn handle_launch(cmd: &Value, state: &mut DaemonState) -> Result<Value, St
|
|||||||
To let agent-browser work with your existing Chrome (recommended):\n\
|
To let agent-browser work with your existing Chrome (recommended):\n\
|
||||||
{}\n\n\
|
{}\n\n\
|
||||||
Or start a standalone browser with: agent-browser --launch open <url>\n\n\
|
Or start a standalone browser with: agent-browser --launch open <url>\n\n\
|
||||||
Tip: On Chrome 144+, you can enable CDP without restarting:\n\
|
Note: chrome://inspect/#remote-debugging only enables remote *target discovery* — \
|
||||||
Open chrome://inspect/#remote-debugging and toggle it on.",
|
it does NOT expose the standard CDP HTTP API on /json/version. \
|
||||||
|
A full restart with --remote-debugging-port=<port> is required.",
|
||||||
chrome_relaunch_hint(),
|
chrome_relaunch_hint(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -396,9 +396,23 @@ async fn verify_ref_identity(
|
|||||||
"backendNodeId": backend_node_id,
|
"backendNodeId": backend_node_id,
|
||||||
"fetchRelatives": false,
|
"fetchRelatives": false,
|
||||||
});
|
});
|
||||||
let resp: Result<GetFullAXTreeResult, String> = client
|
// Tight 1s timeout: this is a defensive guard, not a critical path.
|
||||||
.send_command_typed("Accessibility.getPartialAXTree", ¶ms, Some(session_id))
|
// The default 30s CDP timeout was the dominant factor in the
|
||||||
.await;
|
// "click hangs 5+ minutes" report — three CDP calls (verify +
|
||||||
|
// resolveNode + paint-settle) at 30s each, multiplied by parallel
|
||||||
|
// click invocations queueing on the daemon, totalled multi-minute
|
||||||
|
// user-visible hangs. Cap our own helper so a stuck AX query
|
||||||
|
// doesn't make `click` worse than the no-guard version was.
|
||||||
|
let resp: Result<GetFullAXTreeResult, String> = match tokio::time::timeout(
|
||||||
|
std::time::Duration::from_secs(1),
|
||||||
|
client.send_command_typed("Accessibility.getPartialAXTree", ¶ms, Some(session_id)),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(r) => r,
|
||||||
|
// Timeout: skip identity verification rather than block the click.
|
||||||
|
Err(_) => return Ok(()),
|
||||||
|
};
|
||||||
let Ok(tree) = resp else {
|
let Ok(tree) = resp else {
|
||||||
// Node likely gone; let the box-model call fail and trigger fallback.
|
// Node likely gone; let the box-model call fail and trigger fallback.
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
|||||||
@@ -903,8 +903,15 @@ async fn wait_for_paint_settled(client: &CdpClient, session_id: &str) {
|
|||||||
requestAnimationFrame(() => \
|
requestAnimationFrame(() => \
|
||||||
requestAnimationFrame(() => \
|
requestAnimationFrame(() => \
|
||||||
queueMicrotask(() => resolve(true)))))";
|
queueMicrotask(() => resolve(true)))))";
|
||||||
let _ = client
|
// Tight 500ms timeout. RAF normally fires at 16ms, two RAFs total ~33ms.
|
||||||
.send_command_typed::<_, Value>(
|
// If the tab is hidden / throttled / page is doing something pathological
|
||||||
|
// and RAF doesn't fire in 500ms, we'd rather return now than stall the
|
||||||
|
// user's click. Without this cap, a stuck RAF inherited the default 30s
|
||||||
|
// CDP timeout and was the main contributor to the "click hangs 5+ min"
|
||||||
|
// user report.
|
||||||
|
let _ = tokio::time::timeout(
|
||||||
|
std::time::Duration::from_millis(500),
|
||||||
|
client.send_command_typed::<_, Value>(
|
||||||
"Runtime.evaluate",
|
"Runtime.evaluate",
|
||||||
&EvaluateParams {
|
&EvaluateParams {
|
||||||
expression: script.to_string(),
|
expression: script.to_string(),
|
||||||
@@ -912,8 +919,9 @@ async fn wait_for_paint_settled(client: &CdpClient, session_id: &str) {
|
|||||||
await_promise: Some(true),
|
await_promise: Some(true),
|
||||||
},
|
},
|
||||||
Some(session_id),
|
Some(session_id),
|
||||||
)
|
),
|
||||||
.await;
|
)
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn dispatch_click(
|
async fn dispatch_click(
|
||||||
|
|||||||
@@ -25,8 +25,14 @@ services:
|
|||||||
(echo "→ Linux ARM64" && cargo zigbuild --release --target aarch64-unknown-linux-gnu && cp /build/target/aarch64-unknown-linux-gnu/release/agent-browser /output/agent-browser-linux-arm64 && chmod +x /output/agent-browser-linux-arm64 && echo "✓ Linux ARM64 done") &
|
(echo "→ Linux ARM64" && cargo zigbuild --release --target aarch64-unknown-linux-gnu && cp /build/target/aarch64-unknown-linux-gnu/release/agent-browser /output/agent-browser-linux-arm64 && chmod +x /output/agent-browser-linux-arm64 && echo "✓ Linux ARM64 done") &
|
||||||
PID2=$!
|
PID2=$!
|
||||||
|
|
||||||
# Wait for both to complete
|
# Wait for both and check exit codes individually — without this
|
||||||
wait $PID1 $PID2
|
# the outer script exits 0 even if one of the parallel builds
|
||||||
|
# failed, silently leaving a stale binary in /output from the
|
||||||
|
# previous release. Caused 0.27.0-fork.5 to ship with a stale
|
||||||
|
# linux-x64 binary at the first publish attempt until caught
|
||||||
|
# manually by checking the embedded version string.
|
||||||
|
wait $PID1 || { echo "✗ Linux x64 build failed"; exit 1; }
|
||||||
|
wait $PID2 || { echo "✗ Linux ARM64 build failed"; exit 1; }
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✓ Linux platforms built successfully!"
|
echo "✓ Linux platforms built successfully!"
|
||||||
@@ -67,8 +73,14 @@ services:
|
|||||||
- OUTPUT_NAME=${OUTPUT_NAME:-agent-browser-linux-x64}
|
- OUTPUT_NAME=${OUTPUT_NAME:-agent-browser-linux-x64}
|
||||||
command: |
|
command: |
|
||||||
-c '
|
-c '
|
||||||
|
set -e
|
||||||
cargo zigbuild --release --target $TARGET
|
cargo zigbuild --release --target $TARGET
|
||||||
cp /build/target/$TARGET/release/agent-browser* /output/$OUTPUT_NAME
|
# Copy the binary explicitly. The previous `agent-browser*` glob
|
||||||
|
# matched the binary AND its `.d` dependency file, which made cp
|
||||||
|
# treat the destination as a directory and silently failed.
|
||||||
|
SRC="/build/target/$TARGET/release/agent-browser"
|
||||||
|
if [ -f "$SRC.exe" ]; then SRC="$SRC.exe"; fi
|
||||||
|
cp "$SRC" "/output/$OUTPUT_NAME"
|
||||||
chmod +x /output/$OUTPUT_NAME 2>/dev/null || true
|
chmod +x /output/$OUTPUT_NAME 2>/dev/null || true
|
||||||
echo "✓ Built $OUTPUT_NAME"
|
echo "✓ Built $OUTPUT_NAME"
|
||||||
'
|
'
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "agent-browser-stealth",
|
"name": "agent-browser-stealth",
|
||||||
"version": "0.27.0-fork.5",
|
"version": "0.27.0-fork.6",
|
||||||
"description": "Browser automation CLI for AI agents — stealth fork with anti-detection",
|
"description": "Browser automation CLI for AI agents — stealth fork with anti-detection",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
Reference in New Issue
Block a user