@actionbookdev/cli 0.1.2 → 0.2.1
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 +73 -0
- package/dist/commands/browser.d.ts +3 -0
- package/dist/commands/browser.d.ts.map +1 -0
- package/dist/commands/browser.js +45 -0
- package/dist/commands/browser.js.map +1 -0
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/process.d.ts +23 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +179 -0
- package/dist/utils/process.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -22,6 +22,10 @@ actionbook sources
|
|
|
22
22
|
|
|
23
23
|
# Search sources
|
|
24
24
|
actionbook sources search "linkedin"
|
|
25
|
+
|
|
26
|
+
# Browser automation (requires agent-browser)
|
|
27
|
+
actionbook browser open example.com
|
|
28
|
+
actionbook browser snapshot -i
|
|
25
29
|
```
|
|
26
30
|
|
|
27
31
|
## Commands
|
|
@@ -89,6 +93,61 @@ actionbook sources search "e-commerce" --limit 20
|
|
|
89
93
|
|
|
90
94
|
**Alias:** `actionbook sources s`
|
|
91
95
|
|
|
96
|
+
### `actionbook browser [command]`
|
|
97
|
+
|
|
98
|
+
Execute browser automation commands. This command forwards all arguments to `agent-browser` CLI.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Open a website
|
|
102
|
+
actionbook browser open example.com
|
|
103
|
+
|
|
104
|
+
# Take interactive snapshot
|
|
105
|
+
actionbook browser snapshot -i
|
|
106
|
+
|
|
107
|
+
# Click element by reference
|
|
108
|
+
actionbook browser click @e1
|
|
109
|
+
|
|
110
|
+
# Fill input field
|
|
111
|
+
actionbook browser fill @e3 "test@example.com"
|
|
112
|
+
|
|
113
|
+
# Check current session
|
|
114
|
+
actionbook browser session
|
|
115
|
+
|
|
116
|
+
# Close browser
|
|
117
|
+
actionbook browser close
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Setup:**
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# npm (recommended)
|
|
124
|
+
# Download Chromium
|
|
125
|
+
actionbook browser install
|
|
126
|
+
|
|
127
|
+
# Linux users - include system dependencies
|
|
128
|
+
actionbook browser install --with-deps
|
|
129
|
+
# or manually: npx playwright install-deps chromium
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Common Commands:**
|
|
133
|
+
- `open <url>` - Navigate to URL
|
|
134
|
+
- `snapshot -i` - Get interactive elements with references
|
|
135
|
+
- `click <selector>` - Click element (or @ref)
|
|
136
|
+
- `fill <selector> <text>` - Fill input field
|
|
137
|
+
- `type <selector> <text>` - Type into element
|
|
138
|
+
- `wait <selector|ms>` - Wait for element or time
|
|
139
|
+
- `screenshot [path]` - Take screenshot
|
|
140
|
+
- `close` - Close browser
|
|
141
|
+
|
|
142
|
+
**For full command list:**
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
actionbook browser --help
|
|
146
|
+
actionbook browser # Shows full agent-browser help
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Learn more:** [agent-browser on GitHub](https://github.com/vercel-labs/agent-browser)
|
|
150
|
+
|
|
92
151
|
## Authentication
|
|
93
152
|
|
|
94
153
|
Set your API key via environment variable:
|
|
@@ -144,6 +203,20 @@ actionbook search "login" --source-ids 1,2
|
|
|
144
203
|
actionbook get "booking.com" --json | jq '.elements'
|
|
145
204
|
```
|
|
146
205
|
|
|
206
|
+
### Browser Automation Workflow
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# 1. Get action details with verified selectors
|
|
210
|
+
actionbook get "github.com/login"
|
|
211
|
+
|
|
212
|
+
# 2. Use browser command to automate
|
|
213
|
+
actionbook browser open "https://github.com/login"
|
|
214
|
+
actionbook browser snapshot -i
|
|
215
|
+
actionbook browser fill @e1 "username"
|
|
216
|
+
actionbook browser fill @e2 "password"
|
|
217
|
+
actionbook browser click @e3
|
|
218
|
+
```
|
|
219
|
+
|
|
147
220
|
## Related Packages
|
|
148
221
|
|
|
149
222
|
- [`@actionbookdev/sdk`](https://www.npmjs.com/package/@actionbookdev/sdk) - JavaScript/TypeScript SDK
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,eAAO,MAAM,cAAc,SA8CvB,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { spawnAgentBrowser, installAgentBrowser } from '../utils/process.js';
|
|
4
|
+
export const browserCommand = new Command('browser')
|
|
5
|
+
.description('Execute actionbook browser commands (browser automation)')
|
|
6
|
+
.allowUnknownOption(true) // Critical: allow any args through
|
|
7
|
+
.allowExcessArguments(true)
|
|
8
|
+
.helpOption('-h, --help', 'Display help for actionbook browser')
|
|
9
|
+
.addHelpText('after', `
|
|
10
|
+
Examples:
|
|
11
|
+
$ actionbook browser open example.com
|
|
12
|
+
$ actionbook browser snapshot -i
|
|
13
|
+
$ actionbook browser click @e1
|
|
14
|
+
$ actionbook browser fill @e3 "test@example.com"
|
|
15
|
+
|
|
16
|
+
Setup:
|
|
17
|
+
$ actionbook browser install # Download Chromium browser
|
|
18
|
+
$ actionbook browser install --with-deps # Linux: include system dependencies
|
|
19
|
+
|
|
20
|
+
For detailed commands:
|
|
21
|
+
$ actionbook browser
|
|
22
|
+
|
|
23
|
+
Learn more: ${chalk.cyan('https://github.com/vercel-labs/agent-browser')}
|
|
24
|
+
`)
|
|
25
|
+
.action(async (_options, command) => {
|
|
26
|
+
// Get all arguments passed after 'browser'
|
|
27
|
+
const args = command.args;
|
|
28
|
+
// If no args and user didn't ask for help, show agent-browser help
|
|
29
|
+
if (args.length === 0) {
|
|
30
|
+
console.log(chalk.yellow('No arguments provided. Showing agent-browser help:\n'));
|
|
31
|
+
const exitCode = await spawnAgentBrowser(['--help']);
|
|
32
|
+
process.exit(exitCode);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Special handling for 'install' command - auto-install agent-browser if needed
|
|
36
|
+
if (args[0] === 'install') {
|
|
37
|
+
const exitCode = await installAgentBrowser(args.slice(1));
|
|
38
|
+
process.exit(exitCode);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Execute agent-browser with all args
|
|
42
|
+
const exitCode = await spawnAgentBrowser(args);
|
|
43
|
+
process.exit(exitCode);
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,0DAA0D,CAAC;KACvE,kBAAkB,CAAC,IAAI,CAAC,CAAC,mCAAmC;KAC5D,oBAAoB,CAAC,IAAI,CAAC;KAC1B,UAAU,CAAC,YAAY,EAAE,qCAAqC,CAAC;KAC/D,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;cAcU,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC;GACrE,CACA;KACA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClC,2CAA2C;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAEzB,mEAAmE;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAA;QACjF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtB,OAAM;IACR,CAAC;IAED,gFAAgF;IAChF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtB,OAAM;IACR,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACxB,CAAC,CAAC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
3
6
|
import { searchCommand } from './commands/search.js';
|
|
4
7
|
import { getCommand } from './commands/get.js';
|
|
5
8
|
import { sourcesCommand } from './commands/sources.js';
|
|
9
|
+
import { browserCommand } from './commands/browser.js';
|
|
10
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
6
12
|
const program = new Command();
|
|
7
13
|
program
|
|
8
14
|
.name('actionbook')
|
|
9
15
|
.description('CLI for Actionbook - Get website action manuals for AI agents')
|
|
10
|
-
.version(
|
|
16
|
+
.version(pkg.version)
|
|
11
17
|
.option('--api-key <key>', 'API key (or set ACTIONBOOK_API_KEY env var)');
|
|
12
18
|
program.addCommand(searchCommand);
|
|
13
19
|
program.addCommand(getCommand);
|
|
14
20
|
program.addCommand(sourcesCommand);
|
|
21
|
+
program.addCommand(browserCommand);
|
|
15
22
|
program.parse();
|
|
16
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAEpF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC,CAAA;AAE3E,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC9B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;AAElC,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spawn a command with arguments, inheriting stdio
|
|
3
|
+
* Returns the exit code
|
|
4
|
+
* If command is not found (ENOENT), shows installation instructions
|
|
5
|
+
* @param suppressInstallInstructions - If true, don't show installation instructions on ENOENT
|
|
6
|
+
*/
|
|
7
|
+
export declare function spawnCommand(command: string, args: string[], suppressInstallInstructions?: boolean): Promise<number>;
|
|
8
|
+
/**
|
|
9
|
+
* Spawn agent-browser command using npx from CLI package directory
|
|
10
|
+
* This ensures agent-browser is executed from the CLI's node_modules
|
|
11
|
+
* Replaces "agent-browser" with "actionbook browser" in output
|
|
12
|
+
*/
|
|
13
|
+
export declare function spawnAgentBrowser(args: string[]): Promise<number>;
|
|
14
|
+
/**
|
|
15
|
+
* Show installation instructions for agent-browser
|
|
16
|
+
*/
|
|
17
|
+
export declare function showAgentBrowserInstallation(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Install Chromium browser binaries for agent-browser
|
|
20
|
+
* @param installArgs - Additional arguments like ['--with-deps'] for Linux
|
|
21
|
+
*/
|
|
22
|
+
export declare function installAgentBrowser(installArgs?: string[]): Promise<number>;
|
|
23
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,2BAA2B,UAAQ,GAClC,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDvE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAYnD;AAoBD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDrF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
/**
|
|
7
|
+
* Spawn a command with arguments, inheriting stdio
|
|
8
|
+
* Returns the exit code
|
|
9
|
+
* If command is not found (ENOENT), shows installation instructions
|
|
10
|
+
* @param suppressInstallInstructions - If true, don't show installation instructions on ENOENT
|
|
11
|
+
*/
|
|
12
|
+
export async function spawnCommand(command, args, suppressInstallInstructions = false) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const child = spawn(command, args, {
|
|
15
|
+
stdio: 'inherit',
|
|
16
|
+
shell: false,
|
|
17
|
+
env: process.env,
|
|
18
|
+
});
|
|
19
|
+
child.on('close', (code, signal) => {
|
|
20
|
+
if (signal) {
|
|
21
|
+
// Process was killed by signal (e.g., SIGINT from Ctrl+C)
|
|
22
|
+
// Convert signal to exit code: 128 + signal number
|
|
23
|
+
resolve(128 + (signal === 'SIGINT' ? 2 : 15));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
resolve(code ?? 1);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
child.on('error', (error) => {
|
|
30
|
+
// Command not found - show installation instructions
|
|
31
|
+
if (error.code === 'ENOENT') {
|
|
32
|
+
if (!suppressInstallInstructions) {
|
|
33
|
+
showAgentBrowserInstallation();
|
|
34
|
+
}
|
|
35
|
+
resolve(127); // Standard exit code for command not found
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.error(chalk.red(`Failed to execute ${command}: ${error.message}`));
|
|
39
|
+
resolve(1);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Spawn agent-browser command using npx from CLI package directory
|
|
46
|
+
* This ensures agent-browser is executed from the CLI's node_modules
|
|
47
|
+
* Replaces "agent-browser" with "actionbook browser" in output
|
|
48
|
+
*/
|
|
49
|
+
export async function spawnAgentBrowser(args) {
|
|
50
|
+
return new Promise((resolve) => {
|
|
51
|
+
// Get CLI package root directory (dist/utils/process.js -> ../..)
|
|
52
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
53
|
+
const cliPackageRoot = join(__dirname, '..', '..');
|
|
54
|
+
const child = spawn('npx', ['agent-browser', ...args], {
|
|
55
|
+
stdio: ['inherit', 'pipe', 'pipe'], // Inherit stdin, pipe stdout/stderr for transformation
|
|
56
|
+
shell: false,
|
|
57
|
+
env: process.env,
|
|
58
|
+
cwd: cliPackageRoot, // Execute in CLI package directory
|
|
59
|
+
});
|
|
60
|
+
// Transform and output stdout
|
|
61
|
+
if (child.stdout) {
|
|
62
|
+
child.stdout.on('data', (data) => {
|
|
63
|
+
const output = data.toString().replace(/agent-browser/g, 'actionbook browser');
|
|
64
|
+
process.stdout.write(output);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Transform and output stderr
|
|
68
|
+
if (child.stderr) {
|
|
69
|
+
child.stderr.on('data', (data) => {
|
|
70
|
+
const output = data.toString().replace(/agent-browser/g, 'actionbook browser');
|
|
71
|
+
process.stderr.write(output);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
child.on('close', (code, signal) => {
|
|
75
|
+
if (signal) {
|
|
76
|
+
resolve(128 + (signal === 'SIGINT' ? 2 : 15));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
resolve(code ?? 1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
child.on('error', (error) => {
|
|
83
|
+
if (error.code === 'ENOENT') {
|
|
84
|
+
console.error(chalk.red('\nnpx command not found.'));
|
|
85
|
+
console.error(chalk.white('Please ensure npm 5.2+ is installed.\n'));
|
|
86
|
+
resolve(127);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.error(chalk.red(`Failed to execute agent-browser: ${error.message}`));
|
|
90
|
+
resolve(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Show installation instructions for agent-browser
|
|
97
|
+
*/
|
|
98
|
+
export function showAgentBrowserInstallation() {
|
|
99
|
+
console.error(chalk.red('\nagent-browser is not installed or not in PATH.\n'));
|
|
100
|
+
console.error(chalk.white('agent-browser is a fast browser automation CLI for AI agents.'));
|
|
101
|
+
console.error(chalk.white('To install it, run:\n'));
|
|
102
|
+
console.error(chalk.cyan(' npm install -g agent-browser\n'));
|
|
103
|
+
console.error(chalk.white('Learn more: ') + chalk.cyan('https://github.com/vercel-labs/agent-browser\n'));
|
|
104
|
+
console.error(chalk.white('After installation, verify with:\n'));
|
|
105
|
+
console.error(chalk.cyan(' agent-browser --help\n'));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get playwright-core version from agent-browser's package.json
|
|
109
|
+
* Returns version string like "1.57.0" (without ^ or ~ prefix)
|
|
110
|
+
*/
|
|
111
|
+
function getAgentBrowserPlaywrightVersion(cliPackageRoot) {
|
|
112
|
+
try {
|
|
113
|
+
const agentBrowserPkgPath = join(cliPackageRoot, 'node_modules', 'agent-browser', 'package.json');
|
|
114
|
+
const pkgContent = readFileSync(agentBrowserPkgPath, 'utf-8');
|
|
115
|
+
const pkg = JSON.parse(pkgContent);
|
|
116
|
+
const playwrightCoreVersion = pkg.dependencies?.['playwright-core'] || '';
|
|
117
|
+
// Remove ^ ~ or other semver prefixes
|
|
118
|
+
return playwrightCoreVersion.replace(/^[\^~]/, '');
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.warn(chalk.yellow('Warning: Could not read agent-browser version, using latest playwright'));
|
|
122
|
+
return 'latest';
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Install Chromium browser binaries for agent-browser
|
|
127
|
+
* @param installArgs - Additional arguments like ['--with-deps'] for Linux
|
|
128
|
+
*/
|
|
129
|
+
export async function installAgentBrowser(installArgs = []) {
|
|
130
|
+
console.log(chalk.cyan('Setting up browser automation...\n'));
|
|
131
|
+
console.log(chalk.yellow('Downloading Chromium browser binaries...\n'));
|
|
132
|
+
// Get CLI package root directory to run npx from there
|
|
133
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
134
|
+
const cliPackageRoot = join(__dirname, '..', '..');
|
|
135
|
+
// Dynamically get playwright version from agent-browser to ensure binary compatibility
|
|
136
|
+
const playwrightVersion = getAgentBrowserPlaywrightVersion(cliPackageRoot);
|
|
137
|
+
const playwrightArgs = [`playwright@${playwrightVersion}`, 'install', 'chromium'];
|
|
138
|
+
// Add --with-deps if requested (Linux only)
|
|
139
|
+
if (installArgs.includes('--with-deps')) {
|
|
140
|
+
playwrightArgs.push('--with-deps');
|
|
141
|
+
}
|
|
142
|
+
const exitCode = await new Promise((resolve) => {
|
|
143
|
+
const child = spawn('npx', playwrightArgs, {
|
|
144
|
+
stdio: 'inherit',
|
|
145
|
+
shell: false,
|
|
146
|
+
env: process.env,
|
|
147
|
+
cwd: cliPackageRoot,
|
|
148
|
+
});
|
|
149
|
+
child.on('close', (code, signal) => {
|
|
150
|
+
if (signal) {
|
|
151
|
+
resolve(128 + (signal === 'SIGINT' ? 2 : 15));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
resolve(code ?? 1);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
child.on('error', (error) => {
|
|
158
|
+
if (error.code === 'ENOENT') {
|
|
159
|
+
console.error(chalk.red('\nnpx command not found.'));
|
|
160
|
+
console.error(chalk.white('Please ensure npm 5.2+ is installed.\n'));
|
|
161
|
+
resolve(127);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.error(chalk.red(`Failed to install Chromium: ${error.message}`));
|
|
165
|
+
resolve(1);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
if (exitCode === 0) {
|
|
170
|
+
console.log(chalk.green('\n✓ Browser automation setup complete!\n'));
|
|
171
|
+
console.log(chalk.white('You can now use: ') + chalk.cyan('actionbook browser <command>\n'));
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.error(chalk.red('\nBrowser setup encountered an error.'));
|
|
175
|
+
console.error(chalk.white('Please check the output above for details.\n'));
|
|
176
|
+
}
|
|
177
|
+
return exitCode;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actionbookdev/cli",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "CLI for Actionbook - Get website action manuals for AI agents",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"
|
|
19
|
+
"agent-browser": "^0.8.3",
|
|
20
20
|
"chalk": "^5.3.0",
|
|
21
|
+
"commander": "^12.1.0",
|
|
21
22
|
"@actionbookdev/sdk": "0.2.2"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|