@kritchoff/agent-browser 0.9.5 → 0.9.6

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.
@@ -1,109 +1,68 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Cross-platform CLI wrapper for agent-browser
4
+ * WootzApp Agent Browser CLI
5
5
  *
6
- * This wrapper enables npx support on Windows where shell scripts don't work.
7
- * For global installs, postinstall.js patches the shims to invoke the native
8
- * binary directly (zero overhead).
6
+ * Provides terminal-based control over the Android Agent environment.
7
+ * Usage:
8
+ * agent-browser start - Initialize environment (Warm/Cold boot)
9
+ * agent-browser stop - Stop environment
10
+ * agent-browser reset - Fast browser reset (15s)
11
+ * agent-browser open <url> - Open a URL in the browser
9
12
  */
10
13
 
11
- import { spawn } from 'child_process';
12
- import { existsSync, accessSync, chmodSync, constants } from 'fs';
13
- import { dirname, join } from 'path';
14
- import { fileURLToPath } from 'url';
15
- import { platform, arch } from 'os';
14
+ import { WootzAgent } from '../dist/index.js';
16
15
 
17
- const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ const args = process.argv.slice(2);
17
+ const command = args[0];
18
18
 
19
- // Map Node.js platform/arch to binary naming convention
20
- function getBinaryName() {
21
- const os = platform();
22
- const cpuArch = arch();
19
+ if (!command || command === '--help' || command === '-h') {
20
+ console.log(`
21
+ WootzApp Agent Browser CLI
23
22
 
24
- let osKey;
25
- switch (os) {
26
- case 'darwin':
27
- osKey = 'darwin';
28
- break;
29
- case 'linux':
30
- osKey = 'linux';
31
- break;
32
- case 'win32':
33
- osKey = 'win32';
34
- break;
35
- default:
36
- return null;
37
- }
38
-
39
- let archKey;
40
- switch (cpuArch) {
41
- case 'x64':
42
- case 'x86_64':
43
- archKey = 'x64';
44
- break;
45
- case 'arm64':
46
- case 'aarch64':
47
- archKey = 'arm64';
48
- break;
49
- default:
50
- return null;
51
- }
23
+ Usage:
24
+ agent-browser start Initialize and start the environment
25
+ agent-browser stop Stop the environment
26
+ agent-browser reset Fast reset the browser state
27
+ agent-browser <cmd> Run an agent command (e.g. open https://google.com)
52
28
 
53
- const ext = os === 'win32' ? '.exe' : '';
54
- return `agent-browser-${osKey}-${archKey}${ext}`;
29
+ Options:
30
+ --dist Use pre-built images from Docker Hub (default)
31
+ --local Build images locally from source
32
+ `);
33
+ process.exit(0);
55
34
  }
56
35
 
57
- function main() {
58
- const binaryName = getBinaryName();
59
-
60
- if (!binaryName) {
61
- console.error(`Error: Unsupported platform: ${platform()}-${arch()}`);
62
- process.exit(1);
63
- }
64
-
65
- const binaryPath = join(__dirname, binaryName);
66
-
67
- if (!existsSync(binaryPath)) {
68
- console.error(`Error: No binary found for ${platform()}-${arch()}`);
69
- console.error(`Expected: ${binaryPath}`);
70
- console.error('');
71
- console.error('Run "npm run build:native" to build for your platform,');
72
- console.error('or reinstall the package to trigger the postinstall download.');
73
- process.exit(1);
74
- }
75
-
76
- // Ensure binary is executable (fixes EACCES on macOS/Linux when postinstall didn't run,
77
- // e.g., when using bun which blocks lifecycle scripts by default)
78
- if (platform() !== 'win32') {
79
- try {
80
- accessSync(binaryPath, constants.X_OK);
81
- } catch {
82
- // Binary exists but isn't executable - fix it
83
- try {
84
- chmodSync(binaryPath, 0o755);
85
- } catch (chmodErr) {
86
- console.error(`Error: Cannot make binary executable: ${chmodErr.message}`);
87
- console.error('Try running: chmod +x ' + binaryPath);
88
- process.exit(1);
89
- }
36
+ // Check for mode flags
37
+ const isLocal = args.includes('--local');
38
+ // Filter out the --local/--dist flags before passing to command if necessary,
39
+ // but currently our command() method handles raw args.
40
+ const filteredArgs = args.filter(arg => arg !== '--local' && arg !== '--dist');
41
+
42
+ const agent = new WootzAgent({ dist: !isLocal });
43
+
44
+ async function main() {
45
+ try {
46
+ switch (command) {
47
+ case 'start':
48
+ await agent.start();
49
+ break;
50
+ case 'stop':
51
+ await agent.stop();
52
+ break;
53
+ case 'reset':
54
+ await agent.reset();
55
+ break;
56
+ default:
57
+ // Pass through arbitrary commands to the agent daemon
58
+ // e.g. "agent-browser open https://google.com"
59
+ await agent.command(...filteredArgs);
60
+ break;
90
61
  }
91
- }
92
-
93
- // Spawn the native binary with inherited stdio
94
- const child = spawn(binaryPath, process.argv.slice(2), {
95
- stdio: 'inherit',
96
- windowsHide: false,
97
- });
98
-
99
- child.on('error', (err) => {
100
- console.error(`Error executing binary: ${err.message}`);
62
+ } catch (error) {
63
+ console.error(`\n❌ Error: ${error.message}`);
101
64
  process.exit(1);
102
- });
103
-
104
- child.on('close', (code) => {
105
- process.exit(code ?? 0);
106
- });
65
+ }
107
66
  }
108
67
 
109
68
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,GAAE,YAAiB;IAOtC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;OAGG;IACG,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,OAAO,CAAC,aAAa;CAsBtB;AAGD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,GAAE,YAAiB;IAOtC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;OAGG;IACG,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,OAAO,CAAC,aAAa;CAsBtB;AAGD,eAAe,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -18,20 +18,22 @@ export class WootzAgent {
18
18
  * - Subsequent runs: Warm boot (~20s) using snapshot.
19
19
  */
20
20
  async start() {
21
- const args = ['start'];
21
+ const args = [];
22
22
  if (this.options.dist) {
23
23
  args.push('--dist');
24
24
  }
25
+ args.push('start');
25
26
  await this.runSdkCommand(args);
26
27
  }
27
28
  /**
28
29
  * Stop the Agent Environment (graceful shutdown).
29
30
  */
30
31
  async stop() {
31
- const args = ['stop'];
32
+ const args = [];
32
33
  if (this.options.dist) {
33
34
  args.push('--dist');
34
35
  }
36
+ args.push('stop');
35
37
  await this.runSdkCommand(args);
36
38
  }
37
39
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,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,gEAAgE;AAChE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAUxD,MAAM,OAAO,UAAU;IACb,OAAO,CAAe;IAE9B,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,IAAI,EAAE,6CAA6C;YACzD,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,GAAG,IAAc;QAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,aAAa,CAAC,IAAc;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBACpC,KAAK,EAAE,SAAS,EAAE,gCAAgC;gBAClD,KAAK,EAAE,IAAI,EAAO,iCAAiC;aACpD,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,iCAAiC;AACjC,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,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,gEAAgE;AAChE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAUxD,MAAM,OAAO,UAAU;IACb,OAAO,CAAe;IAE9B,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,IAAI,EAAE,6CAA6C;YACzD,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,GAAG,IAAc;QAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,aAAa,CAAC,IAAc;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBACpC,KAAK,EAAE,SAAS,EAAE,gCAAgC;gBAClD,KAAK,EAAE,IAAI,EAAO,iCAAiC;aACpD,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,iCAAiC;AACjC,eAAe,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kritchoff/agent-browser",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "Headless browser automation CLI for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",