@kritchoff/agent-browser 0.9.51 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -849
- package/bin/agent-browser.js +2 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +37 -11
- package/dist/orchestrator.js.map +1 -1
- package/package.json +1 -3
- package/README.sdk.md +0 -129
- package/scripts/fast_reset.sh +0 -117
- package/scripts/snapshot_manager.sh +0 -293
- package/scripts/vaccine-run +0 -26
- package/sdk.sh +0 -176
- package/start.sh +0 -109
package/bin/agent-browser.js
CHANGED
|
@@ -57,7 +57,8 @@ async function main() {
|
|
|
57
57
|
default:
|
|
58
58
|
// Pass through arbitrary commands to the agent daemon
|
|
59
59
|
// e.g. "agent-browser open https://google.com"
|
|
60
|
-
await agent.command(...filteredArgs);
|
|
60
|
+
const result = await agent.command(...filteredArgs);
|
|
61
|
+
console.log(result);
|
|
61
62
|
break;
|
|
62
63
|
}
|
|
63
64
|
} catch (error) {
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,7 @@ export class WootzAgent {
|
|
|
21
21
|
/**
|
|
22
22
|
* Polls the daemon port until it accepts connections.
|
|
23
23
|
*/
|
|
24
|
-
async waitForDaemon(timeoutMs =
|
|
24
|
+
async waitForDaemon(timeoutMs = 180000) {
|
|
25
25
|
const start = Date.now();
|
|
26
26
|
while (Date.now() - start < timeoutMs) {
|
|
27
27
|
try {
|
|
@@ -33,7 +33,7 @@ export class WootzAgent {
|
|
|
33
33
|
await new Promise(r => setTimeout(r, 1000));
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
throw new Error(`Timed out waiting for Agent Daemon on port ${DAEMON_PORT}`);
|
|
36
|
+
throw new Error(`Timed out waiting for Agent Daemon on port ${DAEMON_PORT} after ${timeoutMs / 1000}s`);
|
|
37
37
|
}
|
|
38
38
|
async stop() {
|
|
39
39
|
await this.orchestrator.stop();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,GAAG,KAAK,CAAC;AAU1B,MAAM,OAAO,UAAU;IACb,OAAO,CAAe;IACtB,YAAY,CAAe;IAEnC,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,IAAI,EAAE,6CAA6C;YACzD,GAAG,OAAO;SACX,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAK,CAAC,CAAC;IAC3D,CAAC;IAED,gDAAgD;IAEhD,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAUA,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,OAAO;IAS7B,OAAO,CAAC,GAAG;IAWX,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;YASN,mBAAmB;IAkBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAUA,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,OAAO;IAS7B,OAAO,CAAC,GAAG;IAWX,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;YASN,mBAAmB;IAkBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqGtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DnC,OAAO,CAAC,UAAU;CAgCnB"}
|
package/dist/orchestrator.js
CHANGED
|
@@ -48,8 +48,8 @@ export class Orchestrator {
|
|
|
48
48
|
}
|
|
49
49
|
isPortMapped(containerId, port) {
|
|
50
50
|
try {
|
|
51
|
-
execSync(`docker port "${containerId}" ${port}`, {
|
|
52
|
-
return
|
|
51
|
+
const output = execSync(`docker port "${containerId}" ${port}`, { encoding: 'utf-8' });
|
|
52
|
+
return output.includes('0.0.0.0:') || output.includes(':::');
|
|
53
53
|
}
|
|
54
54
|
catch {
|
|
55
55
|
return false;
|
|
@@ -72,9 +72,7 @@ export class Orchestrator {
|
|
|
72
72
|
}
|
|
73
73
|
async start() {
|
|
74
74
|
this.log(`Initializing Agent Environment...`, 'info');
|
|
75
|
-
// 1. Pull Images (Robustness)
|
|
76
75
|
await this.pullImagesWithRetry();
|
|
77
|
-
// 2. Clean previous state to prevent network namespace corruption
|
|
78
76
|
this.log("Cleaning up previous container state...", 'info');
|
|
79
77
|
this.runCommand(`docker compose -f "${this.composeFile}" down -v --remove-orphans`);
|
|
80
78
|
const hasSnapshot = fs.existsSync(SNAPSHOT_DIR);
|
|
@@ -86,17 +84,33 @@ export class Orchestrator {
|
|
|
86
84
|
});
|
|
87
85
|
if (!success)
|
|
88
86
|
throw new Error("Startup failed during docker compose up.");
|
|
89
|
-
// Verify Port Mapping
|
|
90
87
|
const agentCont = this.getContainerId('agent-service');
|
|
88
|
+
const androidCont = this.getContainerId('android-service');
|
|
89
|
+
// Verify Port Mapping
|
|
91
90
|
if (agentCont && !this.isPortMapped(agentCont, 3000)) {
|
|
92
91
|
this.log("Port 3000 (Host 32001) is not mapped! Container config is stale.", 'warn');
|
|
93
92
|
this.log("Forcing full restart to apply network settings...", 'info');
|
|
94
93
|
this.runCommand(`docker compose -f "${this.composeFile}" down -v --remove-orphans`);
|
|
95
|
-
await new Promise(r => setTimeout(r, 5000));
|
|
94
|
+
await new Promise(r => setTimeout(r, 5000));
|
|
96
95
|
this.runCommand(`docker compose -f "${this.composeFile}" up -d`, {
|
|
97
96
|
EMULATOR_SNAPSHOT_NAME: 'quickboot'
|
|
98
97
|
});
|
|
99
98
|
}
|
|
99
|
+
this.log("Waiting for Daemon Connection...");
|
|
100
|
+
if (agentCont)
|
|
101
|
+
await this.waitForLog(agentCont, "Daemon listening on TCP");
|
|
102
|
+
if (androidCont) {
|
|
103
|
+
this.log("Rehydrating Android network connection...");
|
|
104
|
+
try {
|
|
105
|
+
execSync(`docker exec "${androidCont}" adb shell cmd connectivity airplane-mode enable`, { stdio: 'ignore' });
|
|
106
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
107
|
+
execSync(`docker exec "${androidCont}" adb shell cmd connectivity airplane-mode disable`, { stdio: 'ignore' });
|
|
108
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
this.log(`Network rehydration warning: ${e}`, 'warn');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
100
114
|
}
|
|
101
115
|
else {
|
|
102
116
|
// === COLD START ===
|
|
@@ -122,13 +136,15 @@ export class Orchestrator {
|
|
|
122
136
|
});
|
|
123
137
|
androidCont = this.getContainerId('android-service') || androidCont;
|
|
124
138
|
}
|
|
125
|
-
// Wait for Android to boot fully
|
|
126
139
|
this.log("Waiting for Android OS to boot (this takes a moment)...", 'info');
|
|
127
140
|
await this.waitForLog(androidCont, "Emulator boot complete");
|
|
128
141
|
this.log("Waiting for Browser Installation...", 'info');
|
|
129
142
|
await this.waitForLog(androidCont, "APK installation complete");
|
|
130
143
|
this.log("Waiting for CDP Bridge...", 'info');
|
|
131
144
|
await this.waitForLog(androidCont, "CDP Bridge ready");
|
|
145
|
+
this.log("Waiting for Agent Daemon Connection...");
|
|
146
|
+
if (agentCont)
|
|
147
|
+
await this.waitForLog(agentCont, "Daemon listening on TCP");
|
|
132
148
|
// Save Snapshot
|
|
133
149
|
this.log("Saving emulator state (quickboot)...", 'info');
|
|
134
150
|
const saved = this.runCommand(`docker exec "${androidCont}" adb emu avd snapshot save quickboot`);
|
|
@@ -158,7 +174,7 @@ export class Orchestrator {
|
|
|
158
174
|
execSync(`docker exec "${androidCont}" adb shell reboot userspace`, { stdio: 'ignore' });
|
|
159
175
|
}
|
|
160
176
|
catch {
|
|
161
|
-
// Ignored
|
|
177
|
+
// Ignored
|
|
162
178
|
}
|
|
163
179
|
this.log("Waiting for device to come online...", 'info');
|
|
164
180
|
const start = Date.now();
|
|
@@ -190,7 +206,6 @@ export class Orchestrator {
|
|
|
190
206
|
break;
|
|
191
207
|
}
|
|
192
208
|
catch {
|
|
193
|
-
// If it takes too long, try forcing the browser to open
|
|
194
209
|
if (Date.now() - cdpStart > 15000) {
|
|
195
210
|
try {
|
|
196
211
|
execSync(`docker exec "${androidCont}" adb shell am start -n com.wootzapp.web/com.aspect.chromium.ChromiumMain -a android.intent.action.VIEW -d 'about:blank'`, { stdio: 'ignore' });
|
|
@@ -204,21 +219,32 @@ export class Orchestrator {
|
|
|
204
219
|
throw new Error("Timeout waiting for CDP");
|
|
205
220
|
this.log("Fast reset complete!", 'success');
|
|
206
221
|
}
|
|
207
|
-
waitForLog(container, pattern) {
|
|
208
|
-
return new Promise((resolve) => {
|
|
222
|
+
waitForLog(container, pattern, timeoutMs = 120000) {
|
|
223
|
+
return new Promise((resolve, reject) => {
|
|
224
|
+
const start = Date.now();
|
|
209
225
|
const tail = spawn('docker', ['logs', '-f', container]);
|
|
226
|
+
const timer = setTimeout(() => {
|
|
227
|
+
tail.kill();
|
|
228
|
+
reject(new Error(`Timeout waiting for log pattern "${pattern}" in container ${container}`));
|
|
229
|
+
}, timeoutMs);
|
|
210
230
|
tail.stdout.on('data', (data) => {
|
|
211
231
|
if (data.toString().includes(pattern)) {
|
|
232
|
+
clearTimeout(timer);
|
|
212
233
|
tail.kill();
|
|
213
234
|
resolve();
|
|
214
235
|
}
|
|
215
236
|
});
|
|
216
237
|
tail.stderr.on('data', (data) => {
|
|
217
238
|
if (data.toString().includes(pattern)) {
|
|
239
|
+
clearTimeout(timer);
|
|
218
240
|
tail.kill();
|
|
219
241
|
resolve();
|
|
220
242
|
}
|
|
221
243
|
});
|
|
244
|
+
tail.on('error', (err) => {
|
|
245
|
+
clearTimeout(timer);
|
|
246
|
+
reject(err);
|
|
247
|
+
});
|
|
222
248
|
});
|
|
223
249
|
}
|
|
224
250
|
}
|
package/dist/orchestrator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAEpE,MAAM,OAAO,YAAY;IACf,WAAW,CAAS;IAE5B,YAAY,QAAiB;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;QAE5G,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YACtD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,GAAW,EAAE,QAA+C,MAAM;QAC5E,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,UAAU,EAAK,OAAO;YAC5B,OAAO,EAAE,UAAU,EAAE,QAAQ;YAC7B,IAAI,EAAE,UAAU,EAAK,SAAS;YAC9B,KAAK,EAAE,UAAU,EAAI,MAAM;YAC3B,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,MAA8B,EAAE;QAC9D,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,EAAE;gBACZ,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;aAChC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,WAAmB;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,sBAAsB,IAAI,CAAC,WAAW,WAAW,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/G,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,WAAmB,EAAE,IAAY;QACpD,IAAI,CAAC;YACH,QAAQ,CAAC,gBAAgB,WAAW,KAAK,IAAI,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kritchoff/agent-browser",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Headless browser automation CLI for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
"bin",
|
|
11
11
|
"scripts",
|
|
12
12
|
"skills",
|
|
13
|
-
"sdk.sh",
|
|
14
|
-
"start.sh",
|
|
15
13
|
"docker-compose.sdk.yml"
|
|
16
14
|
],
|
|
17
15
|
"bin": {
|
package/README.sdk.md
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
# @wootzapp/agent-browser SDK
|
|
2
|
-
|
|
3
|
-
The official Node.js SDK for controlling the WootzApp Agent Browser environment.
|
|
4
|
-
|
|
5
|
-
This SDK provides a **Real Android Browser** (WootzApp) wrapped in a Docker container, controlled by a high-speed Playwright daemon. It is specifically designed for AI Agents to navigate the mobile web, bypassing bot detection, and generating LLM-friendly semantic trees (AXTree).
|
|
6
|
-
|
|
7
|
-
## Features
|
|
8
|
-
|
|
9
|
-
- **Real Mobile Environment**: Full Android 14 OS with Touch Events and Mobile Viewports.
|
|
10
|
-
- **Zero-Config Setup**: The SDK automatically downloads and orchestrates the required Docker containers.
|
|
11
|
-
- **Hyper-Speed Warm Boots**: Uses advanced VDI Volume Mounting to boot the environment in **< 5 seconds** after the first run.
|
|
12
|
-
- **Fast Resets**: Cleans the browser state via Android userspace reboot in **~15 seconds**.
|
|
13
|
-
- **Playwright Parity**: Control the mobile browser using standard Playwright commands (`click`, `type`, `waitForSelector`).
|
|
14
|
-
- **Semantic AXTree**: Built-in `snapshot()` method generates a clean, text-based UI tree optimized for LLM reasoning.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Prerequisites
|
|
19
|
-
|
|
20
|
-
1. **Docker Engine**: Must be installed and running.
|
|
21
|
-
- *Linux Users*: Ensure your user is in the `docker` group (`sudo usermod -aG docker $USER`).
|
|
22
|
-
2. **Node.js**: v18+ is required.
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Installation
|
|
27
|
-
|
|
28
|
-
Install the SDK in your project:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
npm install @kritchoff/agent-browser
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
*(Optional but recommended)* Install `tsx` to run TypeScript files natively:
|
|
35
|
-
```bash
|
|
36
|
-
npm install -D tsx
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Quick Start Guide
|
|
42
|
-
|
|
43
|
-
Create a file named `agent.ts`:
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
import { WootzAgent } from '@kritchoff/agent-browser';
|
|
47
|
-
|
|
48
|
-
async function main() {
|
|
49
|
-
// 1. Initialize the controller
|
|
50
|
-
const agent = new WootzAgent();
|
|
51
|
-
|
|
52
|
-
console.log('🚀 Booting Environment...');
|
|
53
|
-
// First run: Downloads 3GB image and cold boots (~90s).
|
|
54
|
-
// Next run: Instant Hyper-Speed Warm Boot (~5s).
|
|
55
|
-
await agent.start();
|
|
56
|
-
|
|
57
|
-
console.log('🌐 Navigating to Google...');
|
|
58
|
-
await agent.navigate('https://google.com');
|
|
59
|
-
|
|
60
|
-
console.log('📸 Capturing Semantic Tree for LLM...');
|
|
61
|
-
const uiTree = await agent.snapshot();
|
|
62
|
-
console.log(uiTree);
|
|
63
|
-
|
|
64
|
-
console.log('⌨️ Typing and Searching...');
|
|
65
|
-
await agent.type('textarea[name="q"]', 'WootzApp AI');
|
|
66
|
-
await agent.press('Enter');
|
|
67
|
-
|
|
68
|
-
console.log('🧹 Fast Reset for next task...');
|
|
69
|
-
// Wipes all tabs, cookies, and cache in ~15s
|
|
70
|
-
await agent.reset();
|
|
71
|
-
|
|
72
|
-
console.log('🛑 Shutting down...');
|
|
73
|
-
// Completely destroys containers and releases ports
|
|
74
|
-
await agent.stop();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
main().catch(console.error);
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Run your agent:
|
|
81
|
-
```bash
|
|
82
|
-
npx tsx agent.ts
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## CLI Usage (Global Install)
|
|
88
|
-
|
|
89
|
-
You can also use the SDK directly from your terminal to debug or control the browser manually.
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
npm install -g @kritchoff/agent-browser
|
|
93
|
-
|
|
94
|
-
# Start the environment
|
|
95
|
-
agent-browser start
|
|
96
|
-
|
|
97
|
-
# Run commands
|
|
98
|
-
agent-browser navigate https://news.ycombinator.com
|
|
99
|
-
agent-browser click ".titleline a"
|
|
100
|
-
agent-browser snapshot
|
|
101
|
-
|
|
102
|
-
# Clean the browser
|
|
103
|
-
agent-browser reset
|
|
104
|
-
|
|
105
|
-
# Stop
|
|
106
|
-
agent-browser stop
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Troubleshooting
|
|
112
|
-
|
|
113
|
-
### `Error: Failed to connect to agent daemon (ECONNREFUSED)`
|
|
114
|
-
- **Cause**: The container failed to bind port `32001` to your host machine.
|
|
115
|
-
- **Fix**: Run `agent.stop()` or `docker rm -f $(docker ps -aq)` to clear old/stuck containers, then run `agent.start()` again. The SDK has built-in self-healing, but a manual hard reset always works.
|
|
116
|
-
|
|
117
|
-
### `net::ERR_NAME_NOT_RESOLVED`
|
|
118
|
-
- **Cause**: The Android Emulator temporarily lost its internet connection after a Warm Boot.
|
|
119
|
-
- **Fix**: The SDK automatically toggles Airplane Mode to fix this, but if it persists, ensure your host machine has a stable internet connection before starting the agent.
|
|
120
|
-
|
|
121
|
-
### `Selector "..." matched X elements (Strict Mode Violation)`
|
|
122
|
-
- **Cause**: Playwright requires selectors to point to exactly one element.
|
|
123
|
-
- **Fix**: Use more specific selectors, or use Playwright's `>> nth=0` pseudo-selector to pick the first match (e.g., `agent.click('a >> nth=0')`).
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Next Steps
|
|
128
|
-
|
|
129
|
-
For a complete list of all available commands (clicking, typing, tabbing, network interception), please read the [COMMANDS.md](./COMMANDS.md) file.
|
package/scripts/fast_reset.sh
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Fast Android environment reset using userspace reboot.
|
|
3
|
-
#
|
|
4
|
-
# This script resets the Android emulator state much faster (~15s) than
|
|
5
|
-
# a full container restart (~60s). It uses 'adb reboot userspace' to
|
|
6
|
-
# restart the Android framework while keeping the kernel running.
|
|
7
|
-
#
|
|
8
|
-
# Usage:
|
|
9
|
-
# ./scripts/fast_reset.sh
|
|
10
|
-
|
|
11
|
-
set -e
|
|
12
|
-
|
|
13
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
-
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
15
|
-
|
|
16
|
-
cd "$PROJECT_DIR"
|
|
17
|
-
|
|
18
|
-
# Colors for output
|
|
19
|
-
RED='\033[0;31m'
|
|
20
|
-
GREEN='\033[0;32m'
|
|
21
|
-
YELLOW='\033[1;33m'
|
|
22
|
-
BLUE='\033[0;34m'
|
|
23
|
-
NC='\033[0m' # No Color
|
|
24
|
-
|
|
25
|
-
log_info() {
|
|
26
|
-
echo -e "${BLUE}[INFO]${NC} $1"
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
log_success() {
|
|
30
|
-
echo -e "${GREEN}[OK]${NC} $1"
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
log_warn() {
|
|
34
|
-
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
log_error() {
|
|
38
|
-
echo -e "${RED}[ERROR]${NC} $1"
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
# Respect COMPOSE_FILE from environment, or auto-detect
|
|
42
|
-
if [ -z "$COMPOSE_FILE" ]; then
|
|
43
|
-
if [ -f "$PROJECT_DIR/docker-compose.sdk.yml" ]; then
|
|
44
|
-
COMPOSE_FILE="$PROJECT_DIR/docker-compose.sdk.yml"
|
|
45
|
-
else
|
|
46
|
-
COMPOSE_FILE="$PROJECT_DIR/docker-compose.prod.yml"
|
|
47
|
-
fi
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
# Detect container
|
|
51
|
-
CONTAINER=$(docker compose -f "$COMPOSE_FILE" ps -q android-service)
|
|
52
|
-
if [ -z "$CONTAINER" ]; then
|
|
53
|
-
log_error "android-service container not running."
|
|
54
|
-
exit 1
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
ADB_CMD="docker exec $CONTAINER adb"
|
|
58
|
-
|
|
59
|
-
log_info "Initiating fast reset (userspace reboot)..."
|
|
60
|
-
|
|
61
|
-
# 1. Trigger userspace reboot
|
|
62
|
-
# This command returns immediately and the device goes offline
|
|
63
|
-
$ADB_CMD shell reboot userspace || true
|
|
64
|
-
|
|
65
|
-
# 2. Wait for device to come back online
|
|
66
|
-
log_info "Waiting for device to come online..."
|
|
67
|
-
start_time=$(date +%s)
|
|
68
|
-
timeout=30
|
|
69
|
-
|
|
70
|
-
while true; do
|
|
71
|
-
current_time=$(date +%s)
|
|
72
|
-
elapsed=$((current_time - start_time))
|
|
73
|
-
|
|
74
|
-
if [ $elapsed -gt $timeout ]; then
|
|
75
|
-
log_error "Timeout waiting for device after ${timeout}s"
|
|
76
|
-
exit 1
|
|
77
|
-
fi
|
|
78
|
-
|
|
79
|
-
# Check if device is visible to ADB and state is 'device'
|
|
80
|
-
if $ADB_CMD get-state 2>/dev/null | grep -q "device"; then
|
|
81
|
-
# Verify shell is responsive
|
|
82
|
-
if $ADB_CMD shell echo ok 2>/dev/null | grep -q "ok"; then
|
|
83
|
-
break
|
|
84
|
-
fi
|
|
85
|
-
fi
|
|
86
|
-
|
|
87
|
-
sleep 1
|
|
88
|
-
done
|
|
89
|
-
|
|
90
|
-
log_success "Device online (${elapsed}s)"
|
|
91
|
-
|
|
92
|
-
# 3. Wait for CDP (Chrome DevTools Protocol)
|
|
93
|
-
log_info "Waiting for browser CDP..."
|
|
94
|
-
cdp_timeout=30
|
|
95
|
-
cdp_start_time=$(date +%s)
|
|
96
|
-
|
|
97
|
-
while true; do
|
|
98
|
-
current_time=$(date +%s)
|
|
99
|
-
elapsed=$((current_time - cdp_start_time))
|
|
100
|
-
|
|
101
|
-
if [ $elapsed -gt $cdp_timeout ]; then
|
|
102
|
-
log_warn "Timeout waiting for CDP. Browser might not have autostarted."
|
|
103
|
-
log_info "Attempting to start browser manually..."
|
|
104
|
-
$ADB_CMD shell am start -n com.wootzapp.web/com.aspect.chromium.ChromiumMain -a android.intent.action.VIEW -d 'about:blank'
|
|
105
|
-
sleep 2
|
|
106
|
-
fi
|
|
107
|
-
|
|
108
|
-
# Check CDP version endpoint
|
|
109
|
-
if docker exec $CONTAINER curl -s --connect-timeout 2 http://localhost:9224/json/version >/dev/null; then
|
|
110
|
-
break
|
|
111
|
-
fi
|
|
112
|
-
|
|
113
|
-
sleep 1
|
|
114
|
-
done
|
|
115
|
-
|
|
116
|
-
log_success "Browser CDP ready"
|
|
117
|
-
log_success "Fast reset complete!"
|