fastbrowser_cli 1.0.21 → 1.0.25
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 +55 -10
- package/dist/fastbrowser_cli/fastbrowser_cli.js +42 -72
- package/dist/fastbrowser_cli/fastbrowser_cli.js.map +1 -1
- package/dist/fastbrowser_cli/libs/query-builder.d.ts +17 -0
- package/dist/fastbrowser_cli/libs/query-builder.d.ts.map +1 -0
- package/dist/fastbrowser_cli/libs/query-builder.js +58 -0
- package/dist/fastbrowser_cli/libs/query-builder.js.map +1 -0
- package/dist/fastbrowser_cli/libs/server-manager.d.ts +8 -3
- package/dist/fastbrowser_cli/libs/server-manager.d.ts.map +1 -1
- package/dist/fastbrowser_cli/libs/server-manager.js +30 -15
- package/dist/fastbrowser_cli/libs/server-manager.js.map +1 -1
- package/dist/fastbrowser_httpd/fastbrowser_httpd.js +9 -6
- package/dist/fastbrowser_httpd/fastbrowser_httpd.js.map +1 -1
- package/dist/fastbrowser_httpd/libs/routes.d.ts +2 -1
- package/dist/fastbrowser_httpd/libs/routes.d.ts.map +1 -1
- package/dist/fastbrowser_httpd/libs/routes.js +2 -2
- package/dist/fastbrowser_httpd/libs/routes.js.map +1 -1
- package/dist/fastbrowser_mcp/fastbrowser_mcp.js +3 -0
- package/dist/fastbrowser_mcp/fastbrowser_mcp.js.map +1 -1
- package/docs/articles/ai_workflow_to_shell_scripts.md +74 -16
- package/docs/articles/ai_workflow_to_shell_scripts.notes.md +23 -0
- package/docs/articles/ai_workflow_to_shell_scripts.outline.md +64 -0
- package/docs/publishing_workflow.md +136 -0
- package/examples/post-to-x.sh +4 -1
- package/examples/welcometothejungle/fastbrowser_helper.ts +39 -0
- package/examples/welcometothejungle/wttj-job.ts +132 -153
- package/examples/welcometothejungle/wttj-search.ts +61 -84
- package/package.json +48 -47
- package/src/fastbrowser_cli/fastbrowser_cli.ts +52 -92
- package/src/fastbrowser_cli/libs/query-builder.ts +89 -0
- package/src/fastbrowser_cli/libs/server-manager.ts +45 -17
- package/src/fastbrowser_httpd/fastbrowser_httpd.ts +14 -6
- package/src/fastbrowser_httpd/libs/routes.ts +3 -2
- package/src/fastbrowser_mcp/fastbrowser_mcp.ts +6 -0
- package/tests/http-client.test.ts +63 -0
- package/tests/query-builder.test.ts +204 -0
- package/tests/server-manager.test.ts +124 -0
- package/.playwright-mcp/.gitignore +0 -3
package/README.md
CHANGED
|
@@ -4,14 +4,14 @@ Control a live Chrome browser from the command line: navigate, click, fill forms
|
|
|
4
4
|
|
|
5
5
|
A lighter alternative to Chrome DevTools MCP or Puppeteer, designed for AI agents and shell workflows. A persistent HTTP daemon keeps an MCP connection to the browser alive so each command incurs minimal latency.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
## Key Features
|
|
8
|
+
|
|
9
|
+
- **CSS-like selectors for accessibility trees** — powered by [a11y_parse](https://github.com/jeromeetienne/skillmd_collection/tree/main/packages/a11y_parse), optimized for precise, efficient querying
|
|
10
|
+
— see [Selector Language](https://github.com/jeromeetienne/skillmd_collection/blob/main/packages/a11y_parse/docs/spec_a11y_selector_language.md) for the full spec
|
|
11
|
+
- **Pluggable browser backends** — choose between [@playwright/mcp](https://github.com/microsoft/playwright/tree/main/packages/mcp) (default, via the [Playwright MCP Bridge](https://chromewebstore.google.com/detail/playwright-mcp-bridge/mmlmfjhmonkocbjadbfplnigmagldckm) Chrome extension) or [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp) using `--mcp-target` or `FASTBROWSER_MCP_TARGET`
|
|
12
|
+
- **AI-optimized toolset** — curated commands that minimize round-trips and boilerplate for common tasks
|
|
13
|
+
- **Lean output** — reduces LLM input size, parsing complexity, and iteration cost while improving response quality
|
|
14
|
+
|
|
15
15
|
|
|
16
16
|
## How to install the CLI tool for claude
|
|
17
17
|
|
|
@@ -64,10 +64,10 @@ Three components ship together in this package:
|
|
|
64
64
|
|
|
65
65
|
- **`fastbrowser_cli`** — the user-facing CLI. Each subcommand maps 1-to-1 to a fastbrowser tool and prints the response on stdout.
|
|
66
66
|
- **`fastbrowser_httpd`** — a long-running HTTP server that fronts `fastbrowser_mcp` and holds the persistent MCP connection. The CLI auto-starts it on first use.
|
|
67
|
-
- **`fastbrowser_mcp`** — the MCP server that drives the
|
|
67
|
+
- **`fastbrowser_mcp`** — the MCP server that drives the browser. It proxies to one of two backends, picked at start time: `playwright` (default, via the Playwright MCP Bridge extension) or `chrome_devtools` (via `chrome-devtools-mcp`).
|
|
68
68
|
|
|
69
69
|
```
|
|
70
|
-
fastbrowser_cli ──HTTP──▶ fastbrowser_httpd ──MCP/stdio──▶ fastbrowser_mcp ──▶ chrome-devtools-mcp
|
|
70
|
+
fastbrowser_cli ──HTTP──▶ fastbrowser_httpd ──MCP/stdio──▶ fastbrowser_mcp ──▶ @playwright/mcp │ chrome-devtools-mcp ──▶ Chrome
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
## Installation
|
|
@@ -144,6 +144,30 @@ Full selector reference is in [skills/fastbrowser/SKILL.md](skills/fastbrowser/S
|
|
|
144
144
|
|---|---|---|
|
|
145
145
|
| `--server <url>` / `FASTBROWSER_SERVER` | URL of the `fastbrowser_httpd` daemon | `http://localhost:8787` |
|
|
146
146
|
| `--autostart` / `--no-autostart` | Auto-start the daemon if it is not already running | `--autostart` |
|
|
147
|
+
| `--mcp-target <target>` / `FASTBROWSER_MCP_TARGET` | Browser backend: `playwright` or `chrome_devtools` | `playwright` |
|
|
148
|
+
|
|
149
|
+
## Browser backend
|
|
150
|
+
|
|
151
|
+
The daemon binds to one backend at startup. Resolution order: `--mcp-target` flag → `FASTBROWSER_MCP_TARGET` env var → default `playwright`.
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Stick with the default (Playwright + bridge extension)
|
|
155
|
+
npx fastbrowser_cli new_page --url https://example.com
|
|
156
|
+
|
|
157
|
+
# Or use chrome-devtools-mcp instead
|
|
158
|
+
FASTBROWSER_MCP_TARGET=chrome_devtools npx fastbrowser_cli new_page --url https://example.com
|
|
159
|
+
|
|
160
|
+
# One-off override of the env var
|
|
161
|
+
npx fastbrowser_cli --mcp-target chrome_devtools list_pages
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
If the daemon is already running with a different backend, the CLI refuses the request and prints the exact restart command, e.g.:
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
fastbrowser server already running with mcpTarget=playwright. To switch to chrome_devtools, run: fastbrowser-cli --mcp-target chrome_devtools server restart
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
`server status` shows the active backend, and `GET /health` returns `{ ok: true, mcpTarget: "<target>" }`.
|
|
147
171
|
|
|
148
172
|
## Scripts
|
|
149
173
|
|
|
@@ -156,6 +180,27 @@ npm run start:fastbrowser_mcp # run fastbrowser_mcp from source
|
|
|
156
180
|
npm run inspect:fastbrowser_mcp # open the MCP inspector against fastbrowser_mcp
|
|
157
181
|
```
|
|
158
182
|
|
|
183
|
+
## How to publish to npmjs.com
|
|
184
|
+
|
|
185
|
+
`fastbrowser_cli` depends on the in-repo workspace package `a11y_parse`. Always publish through **pnpm** (not npm) — `pnpm publish` rewrites the `workspace:^` dep into a real version range in the tarball; `npm publish` cannot.
|
|
186
|
+
|
|
187
|
+
Order matters when both packages have changed: publish `a11y_parse` first so the version baked into `fastbrowser_cli`'s tarball already exists on the registry.
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# 1. Publish a11y_parse first (only if it changed)
|
|
191
|
+
cd packages/a11y_parse
|
|
192
|
+
pnpm run publish:all
|
|
193
|
+
|
|
194
|
+
# 2. Then publish fastbrowser_cli
|
|
195
|
+
cd ../fastbrowser_cli
|
|
196
|
+
pnpm run publish:all
|
|
197
|
+
|
|
198
|
+
# 3. Push the version-bump commits and tags
|
|
199
|
+
git push --follow-tags
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Full workflow, gotchas, and the version-rewriting cheatsheet live in [docs/publishing_workflow.md](docs/publishing_workflow.md).
|
|
203
|
+
|
|
159
204
|
## Output & Errors
|
|
160
205
|
|
|
161
206
|
- Tool output is written to **stdout**, one line per response content part.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { Command, CommanderError } from 'commander';
|
|
2
|
+
import Fs from 'node:fs';
|
|
3
|
+
import Path from 'node:path';
|
|
4
|
+
import { Command, CommanderError, Option } from 'commander';
|
|
5
5
|
import stringArgv from 'string-argv';
|
|
6
6
|
import { HttpClient } from './libs/http-client.js';
|
|
7
7
|
import { ServerManager } from './libs/server-manager.js';
|
|
8
|
+
import { QueryBuilder } from './libs/query-builder.js';
|
|
8
9
|
class SilentExitError extends Error {
|
|
9
10
|
constructor() {
|
|
10
11
|
super('silent-exit');
|
|
@@ -30,6 +31,10 @@ class MainHelper {
|
|
|
30
31
|
const globalOpts = cmd.optsWithGlobals();
|
|
31
32
|
return globalOpts.autostart !== false;
|
|
32
33
|
}
|
|
34
|
+
static getMcpTargetFromCmd(cmd) {
|
|
35
|
+
const globalOpts = cmd.optsWithGlobals();
|
|
36
|
+
return globalOpts.mcpTarget ?? 'playwright';
|
|
37
|
+
}
|
|
33
38
|
/**
|
|
34
39
|
* Run a tool by making an HTTP request to the server, with optional auto-start
|
|
35
40
|
* @param cmd
|
|
@@ -38,81 +43,36 @@ class MainHelper {
|
|
|
38
43
|
*/
|
|
39
44
|
static async runTool(cmd, routeName, body) {
|
|
40
45
|
const server = MainHelper.getServerUrlFromCmd(cmd);
|
|
46
|
+
const mcpTarget = MainHelper.getMcpTargetFromCmd(cmd);
|
|
41
47
|
if (MainHelper.getAutostartFromCmd(cmd) === true) {
|
|
42
|
-
await ServerManager.ensureRunning(server);
|
|
48
|
+
await ServerManager.ensureRunning(server, mcpTarget);
|
|
43
49
|
}
|
|
44
50
|
const response = await HttpClient.postTool(server, routeName, body);
|
|
45
51
|
HttpClient.printResponse(response);
|
|
46
52
|
}
|
|
47
|
-
static
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
throw new Error(`--selectors-json is not valid JSON: ${err.message}`);
|
|
55
|
-
}
|
|
56
|
-
if (Array.isArray(parsed) === false) {
|
|
57
|
-
throw new Error('--selectors-json must be a JSON array');
|
|
58
|
-
}
|
|
59
|
-
return { selectors: parsed };
|
|
60
|
-
}
|
|
61
|
-
const selectorList = opts.selector ?? [];
|
|
62
|
-
if (selectorList.length === 0) {
|
|
63
|
-
throw new Error('At least one --selector or --selectors-json is required');
|
|
64
|
-
}
|
|
65
|
-
const limit = opts.limit === undefined ? 0 : Number.parseInt(opts.limit, 10);
|
|
66
|
-
if (Number.isNaN(limit) === true) {
|
|
67
|
-
throw new Error(`Invalid --limit: ${opts.limit}`);
|
|
68
|
-
}
|
|
69
|
-
const withAncestors = opts.withAncestors !== false;
|
|
70
|
-
const selectors = selectorList.map((selector) => ({
|
|
71
|
-
selector,
|
|
72
|
-
limit,
|
|
73
|
-
withAncestors,
|
|
74
|
-
}));
|
|
75
|
-
return { selectors };
|
|
76
|
-
}
|
|
77
|
-
static buildQuerySelectorFirstBody(opts) {
|
|
78
|
-
if (opts.selectorsJson !== undefined && opts.selectorsJson !== '') {
|
|
79
|
-
let parsed;
|
|
80
|
-
try {
|
|
81
|
-
parsed = JSON.parse(opts.selectorsJson);
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
throw new Error(`--selectors-json is not valid JSON: ${err.message}`);
|
|
85
|
-
}
|
|
86
|
-
if (Array.isArray(parsed) === false) {
|
|
87
|
-
throw new Error('--selectors-json must be a JSON array');
|
|
88
|
-
}
|
|
89
|
-
return { selectors: parsed };
|
|
53
|
+
static readPackageVersion() {
|
|
54
|
+
const packageJsonPath = Path.resolve(import.meta.dirname, '../../package.json');
|
|
55
|
+
const raw = Fs.readFileSync(packageJsonPath, 'utf-8');
|
|
56
|
+
const parsed = JSON.parse(raw);
|
|
57
|
+
if (typeof parsed.version !== 'string') {
|
|
58
|
+
throw new Error(`fastbrowser-cli: missing "version" in ${packageJsonPath}`);
|
|
90
59
|
}
|
|
91
|
-
|
|
92
|
-
if (selectorList.length === 0) {
|
|
93
|
-
throw new Error('At least one --selector or --selectors-json is required');
|
|
94
|
-
}
|
|
95
|
-
const withAncestors = opts.withAncestors !== false;
|
|
96
|
-
const selectors = selectorList.map((selector) => ({
|
|
97
|
-
selector,
|
|
98
|
-
withAncestors,
|
|
99
|
-
}));
|
|
100
|
-
return { selectors };
|
|
60
|
+
return parsed.version;
|
|
101
61
|
}
|
|
102
62
|
static async runInstall(skillFolder) {
|
|
103
|
-
const sourceSkillsDir =
|
|
104
|
-
const targetSkillsDir =
|
|
63
|
+
const sourceSkillsDir = Path.resolve(import.meta.dirname, '../../skills');
|
|
64
|
+
const targetSkillsDir = Path.resolve(skillFolder, 'skills');
|
|
105
65
|
try {
|
|
106
|
-
const entries = await
|
|
66
|
+
const entries = await Fs.promises.readdir(sourceSkillsDir, { withFileTypes: true });
|
|
107
67
|
const skillDirs = entries.filter((entry) => entry.isDirectory() === true);
|
|
108
68
|
if (skillDirs.length === 0) {
|
|
109
69
|
console.error(`fastbrowser-cli error: no skills found in ${sourceSkillsDir}`);
|
|
110
70
|
process.exit(1);
|
|
111
71
|
}
|
|
112
72
|
for (const skillDir of skillDirs) {
|
|
113
|
-
const sourceDir =
|
|
114
|
-
const targetDir =
|
|
115
|
-
await
|
|
73
|
+
const sourceDir = Path.join(sourceSkillsDir, skillDir.name);
|
|
74
|
+
const targetDir = Path.join(targetSkillsDir, skillDir.name);
|
|
75
|
+
await Fs.promises.cp(sourceDir, targetDir, { recursive: true });
|
|
116
76
|
console.log(`Installed ${skillDir.name} skill at ${targetDir}`);
|
|
117
77
|
}
|
|
118
78
|
}
|
|
@@ -127,7 +87,7 @@ class MainHelper {
|
|
|
127
87
|
return inlineScript;
|
|
128
88
|
}
|
|
129
89
|
if (file !== undefined && file !== '') {
|
|
130
|
-
return await
|
|
90
|
+
return await Fs.promises.readFile(file, 'utf-8');
|
|
131
91
|
}
|
|
132
92
|
if (process.stdin.isTTY === true) {
|
|
133
93
|
throw new Error('batch: no input. Provide a file path, --script, or pipe commands on stdin.');
|
|
@@ -151,6 +111,9 @@ class MainHelper {
|
|
|
151
111
|
if (globalOpts.autostart === false) {
|
|
152
112
|
globalFlags.push('--no-autostart');
|
|
153
113
|
}
|
|
114
|
+
if (globalOpts.mcpTarget !== undefined) {
|
|
115
|
+
globalFlags.push('--mcp-target', globalOpts.mcpTarget);
|
|
116
|
+
}
|
|
154
117
|
const lines = source.split('\n');
|
|
155
118
|
let ok = 0;
|
|
156
119
|
let failed = 0;
|
|
@@ -195,9 +158,13 @@ async function main() {
|
|
|
195
158
|
program
|
|
196
159
|
.name('fastbrowser-cli')
|
|
197
160
|
.description('CLI client for fastbrowser')
|
|
161
|
+
.version(MainHelper.readPackageVersion(), '-V, --version', 'Print the fastbrowser-cli version')
|
|
198
162
|
.option('--server <url>', 'fastbrowser-httpd URL (default: env FASTBROWSER_SERVER or http://localhost:8787)')
|
|
199
163
|
.option('--autostart', 'Auto-start the server before a command if it is not running', true)
|
|
200
|
-
.option('--no-autostart', 'Do not auto-start the server before a command')
|
|
164
|
+
.option('--no-autostart', 'Do not auto-start the server before a command')
|
|
165
|
+
.addOption(new Option('--mcp-target <target>', 'browser backend (default: $FASTBROWSER_MCP_TARGET or playwright)')
|
|
166
|
+
.choices(['chrome_devtools', 'playwright'])
|
|
167
|
+
.default(process.env.FASTBROWSER_MCP_TARGET ?? 'playwright'));
|
|
201
168
|
///////////////////////////////////////////////////////////////////////////////
|
|
202
169
|
///////////////////////////////////////////////////////////////////////////////
|
|
203
170
|
//
|
|
@@ -211,7 +178,8 @@ async function main() {
|
|
|
211
178
|
.description('Start the fastbrowser HTTP server as a detached daemon')
|
|
212
179
|
.action(async (_opts, cmd) => {
|
|
213
180
|
const serverUrl = MainHelper.getServerUrlFromCmd(cmd);
|
|
214
|
-
|
|
181
|
+
const mcpTarget = MainHelper.getMcpTargetFromCmd(cmd);
|
|
182
|
+
await ServerManager.start(serverUrl, mcpTarget);
|
|
215
183
|
});
|
|
216
184
|
serverCmd
|
|
217
185
|
.command('stop')
|
|
@@ -226,15 +194,17 @@ async function main() {
|
|
|
226
194
|
.action(async (_opts, cmd) => {
|
|
227
195
|
const serverUrl = MainHelper.getServerUrlFromCmd(cmd);
|
|
228
196
|
const serverStatus = await ServerManager.status(serverUrl);
|
|
229
|
-
|
|
197
|
+
const targetSuffix = serverStatus.mcpTarget !== undefined ? ` (mcpTarget=${serverStatus.mcpTarget})` : '';
|
|
198
|
+
console.log(`fastbrowser server at ${serverUrl}: ${serverStatus.state}${targetSuffix}`);
|
|
230
199
|
});
|
|
231
200
|
serverCmd
|
|
232
201
|
.command('restart')
|
|
233
202
|
.description('Restart the fastbrowser HTTP server')
|
|
234
203
|
.action(async (_opts, cmd) => {
|
|
235
204
|
const serverUrl = MainHelper.getServerUrlFromCmd(cmd);
|
|
205
|
+
const mcpTarget = MainHelper.getMcpTargetFromCmd(cmd);
|
|
236
206
|
await ServerManager.stop(serverUrl);
|
|
237
|
-
await ServerManager.start(serverUrl);
|
|
207
|
+
await ServerManager.start(serverUrl, mcpTarget);
|
|
238
208
|
});
|
|
239
209
|
///////////////////////////////////////////////////////////////////////////////
|
|
240
210
|
///////////////////////////////////////////////////////////////////////////////
|
|
@@ -297,11 +267,11 @@ async function main() {
|
|
|
297
267
|
return prev;
|
|
298
268
|
})
|
|
299
269
|
.option('--limit <number>', 'Max nodes per selector (0 = unlimited)', '0')
|
|
300
|
-
.option('--with-ancestors', 'Include ancestor nodes',
|
|
270
|
+
.option('--with-ancestors', 'Include ancestor nodes', false)
|
|
301
271
|
.option('--no-with-ancestors', 'Exclude ancestor nodes')
|
|
302
272
|
.option('--selectors-json <json>', 'JSON array of {selector,limit,withAncestors} for per-selector control')
|
|
303
273
|
.action(async (opts, cmd) => {
|
|
304
|
-
const body =
|
|
274
|
+
const body = QueryBuilder.buildQuerySelectorsBody(opts);
|
|
305
275
|
await MainHelper.runTool(cmd, 'query_selectors_all', body);
|
|
306
276
|
});
|
|
307
277
|
program
|
|
@@ -311,11 +281,11 @@ async function main() {
|
|
|
311
281
|
prev.push(value);
|
|
312
282
|
return prev;
|
|
313
283
|
})
|
|
314
|
-
.option('--with-ancestors', 'Include ancestor nodes',
|
|
284
|
+
.option('--with-ancestors', 'Include ancestor nodes', false)
|
|
315
285
|
.option('--no-with-ancestors', 'Exclude ancestor nodes')
|
|
316
286
|
.option('--selectors-json <json>', 'JSON array of {selector,withAncestors} for per-selector control')
|
|
317
287
|
.action(async (opts, cmd) => {
|
|
318
|
-
const body =
|
|
288
|
+
const body = QueryBuilder.buildQuerySelectorFirstBody(opts);
|
|
319
289
|
await MainHelper.runTool(cmd, 'query_selectors', body);
|
|
320
290
|
});
|
|
321
291
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastbrowser_cli.js","sourceRoot":"","sources":["../../src/fastbrowser_cli/fastbrowser_cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fastbrowser_cli.js","sourceRoot":"","sources":["../../src/fastbrowser_cli/fastbrowser_cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { QuerySelectorsAllRequest, QuerySelectorRequest } from '../../fastbrowser_httpd/libs/tool-schemas.js';
|
|
2
|
+
export type BuildQuerySelectorsAllOpts = {
|
|
3
|
+
selector?: string[];
|
|
4
|
+
limit?: string;
|
|
5
|
+
withAncestors?: boolean;
|
|
6
|
+
selectorsJson?: string;
|
|
7
|
+
};
|
|
8
|
+
export type BuildQuerySelectorFirstOpts = {
|
|
9
|
+
selector?: string[];
|
|
10
|
+
withAncestors?: boolean;
|
|
11
|
+
selectorsJson?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare class QueryBuilder {
|
|
14
|
+
static buildQuerySelectorsBody(opts: BuildQuerySelectorsAllOpts): QuerySelectorsAllRequest;
|
|
15
|
+
static buildQuerySelectorFirstBody(opts: BuildQuerySelectorFirstOpts): QuerySelectorRequest;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=query-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../../src/fastbrowser_cli/libs/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGX,wBAAwB,EACxB,oBAAoB,EACpB,MAAM,8CAA8C,CAAC;AAQtD,MAAM,MAAM,0BAA0B,GAAG;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,YAAY;IACxB,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,0BAA0B,GAAG,wBAAwB;IAiC1F,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,2BAA2B,GAAG,oBAAoB;CA2B3F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export class QueryBuilder {
|
|
2
|
+
static buildQuerySelectorsBody(opts) {
|
|
3
|
+
if (opts.selectorsJson !== undefined && opts.selectorsJson !== '') {
|
|
4
|
+
let parsed;
|
|
5
|
+
try {
|
|
6
|
+
parsed = JSON.parse(opts.selectorsJson);
|
|
7
|
+
}
|
|
8
|
+
catch (err) {
|
|
9
|
+
throw new Error(`--selectors-json is not valid JSON: ${err.message}`);
|
|
10
|
+
}
|
|
11
|
+
if (Array.isArray(parsed) === false) {
|
|
12
|
+
throw new Error('--selectors-json must be a JSON array');
|
|
13
|
+
}
|
|
14
|
+
return { selectors: parsed };
|
|
15
|
+
}
|
|
16
|
+
const selectorList = opts.selector ?? [];
|
|
17
|
+
if (selectorList.length === 0) {
|
|
18
|
+
throw new Error('At least one --selector or --selectors-json is required');
|
|
19
|
+
}
|
|
20
|
+
const limit = opts.limit === undefined ? 0 : Number.parseInt(opts.limit, 10);
|
|
21
|
+
if (Number.isNaN(limit) === true) {
|
|
22
|
+
throw new Error(`Invalid --limit: ${opts.limit}`);
|
|
23
|
+
}
|
|
24
|
+
const withAncestors = opts.withAncestors !== false;
|
|
25
|
+
const selectors = selectorList.map((selector) => ({
|
|
26
|
+
selector,
|
|
27
|
+
limit,
|
|
28
|
+
withAncestors,
|
|
29
|
+
}));
|
|
30
|
+
return { selectors };
|
|
31
|
+
}
|
|
32
|
+
static buildQuerySelectorFirstBody(opts) {
|
|
33
|
+
if (opts.selectorsJson !== undefined && opts.selectorsJson !== '') {
|
|
34
|
+
let parsed;
|
|
35
|
+
try {
|
|
36
|
+
parsed = JSON.parse(opts.selectorsJson);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
throw new Error(`--selectors-json is not valid JSON: ${err.message}`);
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(parsed) === false) {
|
|
42
|
+
throw new Error('--selectors-json must be a JSON array');
|
|
43
|
+
}
|
|
44
|
+
return { selectors: parsed };
|
|
45
|
+
}
|
|
46
|
+
const selectorList = opts.selector ?? [];
|
|
47
|
+
if (selectorList.length === 0) {
|
|
48
|
+
throw new Error('At least one --selector or --selectors-json is required');
|
|
49
|
+
}
|
|
50
|
+
const withAncestors = opts.withAncestors !== false;
|
|
51
|
+
const selectors = selectorList.map((selector) => ({
|
|
52
|
+
selector,
|
|
53
|
+
withAncestors,
|
|
54
|
+
}));
|
|
55
|
+
return { selectors };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=query-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../../src/fastbrowser_cli/libs/query-builder.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,YAAY;IACxB,MAAM,CAAC,uBAAuB,CAAC,IAAgC;QAC9D,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;YACnE,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,uCAAwC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,MAA8B,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC;QAEnD,MAAM,SAAS,GAAyB,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACvE,QAAQ;YACR,KAAK;YACL,aAAa;SACb,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,SAAS,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,2BAA2B,CAAC,IAAiC;QACnE,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;YACnE,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,uCAAwC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,MAAmC,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC;QAEnD,MAAM,SAAS,GAA8B,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5E,QAAQ;YACR,aAAa;SACb,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,SAAS,EAAE,CAAC;IACtB,CAAC;CACD"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import type { FastBrowserMcpTarget } from '../../fastbrowser_mcp/fastbrowser_types.js';
|
|
2
|
+
export type ServerStatus = {
|
|
3
|
+
state: 'running' | 'stopped';
|
|
4
|
+
mcpTarget?: FastBrowserMcpTarget;
|
|
5
|
+
};
|
|
1
6
|
export declare class ServerManager {
|
|
2
|
-
static status(serverUrl: string): Promise<
|
|
3
|
-
static ensureRunning(serverUrl: string): Promise<void>;
|
|
4
|
-
static start(serverUrl: string): Promise<void>;
|
|
7
|
+
static status(serverUrl: string): Promise<ServerStatus>;
|
|
8
|
+
static ensureRunning(serverUrl: string, mcpTarget: FastBrowserMcpTarget): Promise<void>;
|
|
9
|
+
static start(serverUrl: string, mcpTarget: FastBrowserMcpTarget): Promise<void>;
|
|
5
10
|
static stop(serverUrl: string): Promise<void>;
|
|
6
11
|
private static isLocalUrl;
|
|
7
12
|
private static parsePort;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../../../src/fastbrowser_cli/libs/server-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../../../src/fastbrowser_cli/libs/server-manager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAevF,MAAM,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CACjC,CAAC;AAYF,qBAAa,aAAa;WACZ,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;WAmBhD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;WAkBhF,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;WAuExE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDnD,OAAO,CAAC,MAAM,CAAC,UAAU;IAUzB,OAAO,CAAC,MAAM,CAAC,SAAS;IAaxB,OAAO,CAAC,MAAM,CAAC,OAAO;IAWtB,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,CAAC,MAAM,CAAC,KAAK;CAGpB"}
|
|
@@ -20,26 +20,40 @@ export class ServerManager {
|
|
|
20
20
|
signal: AbortSignal.timeout(500),
|
|
21
21
|
});
|
|
22
22
|
if (response.ok === false)
|
|
23
|
-
return 'stopped';
|
|
23
|
+
return { state: 'stopped' };
|
|
24
24
|
const payload = await response.json();
|
|
25
|
-
|
|
25
|
+
if (payload.ok !== true)
|
|
26
|
+
return { state: 'stopped' };
|
|
27
|
+
const mcpTarget = payload.mcpTarget === 'chrome_devtools' || payload.mcpTarget === 'playwright'
|
|
28
|
+
? payload.mcpTarget
|
|
29
|
+
: undefined;
|
|
30
|
+
return { state: 'running', mcpTarget };
|
|
26
31
|
}
|
|
27
32
|
catch {
|
|
28
|
-
return 'stopped';
|
|
33
|
+
return { state: 'stopped' };
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
|
-
static async ensureRunning(serverUrl) {
|
|
32
|
-
const
|
|
33
|
-
if (state === 'running')
|
|
36
|
+
static async ensureRunning(serverUrl, mcpTarget) {
|
|
37
|
+
const info = await ServerManager.status(serverUrl);
|
|
38
|
+
if (info.state === 'running') {
|
|
39
|
+
if (info.mcpTarget !== undefined && info.mcpTarget !== mcpTarget) {
|
|
40
|
+
throw new Error(`fastbrowser server already running with mcpTarget=${info.mcpTarget}. ` +
|
|
41
|
+
`To switch to ${mcpTarget}, run: fastbrowser-cli --mcp-target ${mcpTarget} server restart`);
|
|
42
|
+
}
|
|
34
43
|
return;
|
|
44
|
+
}
|
|
35
45
|
if (ServerManager.isLocalUrl(serverUrl) === false) {
|
|
36
46
|
throw new Error(`fastbrowser server at ${serverUrl} is not reachable and cannot be auto-started (non-local URL)`);
|
|
37
47
|
}
|
|
38
|
-
await ServerManager.start(serverUrl);
|
|
48
|
+
await ServerManager.start(serverUrl, mcpTarget);
|
|
39
49
|
}
|
|
40
|
-
static async start(serverUrl) {
|
|
50
|
+
static async start(serverUrl, mcpTarget) {
|
|
41
51
|
const existing = await ServerManager.status(serverUrl);
|
|
42
|
-
if (existing === 'running') {
|
|
52
|
+
if (existing.state === 'running') {
|
|
53
|
+
if (existing.mcpTarget !== undefined && existing.mcpTarget !== mcpTarget) {
|
|
54
|
+
throw new Error(`fastbrowser server already running with mcpTarget=${existing.mcpTarget}. ` +
|
|
55
|
+
`Stop it first: fastbrowser-cli server stop`);
|
|
56
|
+
}
|
|
43
57
|
console.error(`fastbrowser server already running at ${serverUrl}`);
|
|
44
58
|
return;
|
|
45
59
|
}
|
|
@@ -50,7 +64,7 @@ export class ServerManager {
|
|
|
50
64
|
let entryPath = Path.resolve(import.meta.dirname, '..', '..', 'fastbrowser_httpd', 'fastbrowser_httpd.js');
|
|
51
65
|
const port = ServerManager.parsePort(serverUrl);
|
|
52
66
|
let spawnCommand = process.execPath;
|
|
53
|
-
let spawnArgs = [entryPath, '--port', String(port)];
|
|
67
|
+
let spawnArgs = [entryPath, '--port', String(port), '--mcp-target', mcpTarget];
|
|
54
68
|
// trick to work without being in `./dist'
|
|
55
69
|
if (entryPath.includes('/dist/') === false) {
|
|
56
70
|
spawnCommand = '/usr/local/bin/npx';
|
|
@@ -75,15 +89,16 @@ export class ServerManager {
|
|
|
75
89
|
const pidFile = {
|
|
76
90
|
pid,
|
|
77
91
|
port,
|
|
92
|
+
mcpTarget,
|
|
78
93
|
startedAt: new Date().toISOString(),
|
|
79
94
|
};
|
|
80
95
|
Fs.writeFileSync(PID_FILENAME, JSON.stringify(pidFile, null, 2));
|
|
81
96
|
const deadline = Date.now() + 10000;
|
|
82
97
|
while (Date.now() < deadline) {
|
|
83
|
-
const
|
|
84
|
-
if (state === 'running') {
|
|
98
|
+
const info = await ServerManager.status(serverUrl);
|
|
99
|
+
if (info.state === 'running') {
|
|
85
100
|
Fs.closeSync(logFd);
|
|
86
|
-
console.error(`fastbrowser server started (pid=${pid}, port=${port})`);
|
|
101
|
+
console.error(`fastbrowser server started (pid=${pid}, port=${port}, mcpTarget=${mcpTarget})`);
|
|
87
102
|
return;
|
|
88
103
|
}
|
|
89
104
|
await ServerManager.sleep(500);
|
|
@@ -136,8 +151,8 @@ export class ServerManager {
|
|
|
136
151
|
// best effort
|
|
137
152
|
}
|
|
138
153
|
// Best-effort: ensure the HTTP server is actually down from the caller's perspective.
|
|
139
|
-
const
|
|
140
|
-
if (state === 'running') {
|
|
154
|
+
const info = await ServerManager.status(serverUrl);
|
|
155
|
+
if (info.state === 'running') {
|
|
141
156
|
console.error(`warning: process ${pid} killed but ${serverUrl} still responds to /health`);
|
|
142
157
|
return;
|
|
143
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../src/fastbrowser_cli/libs/server-manager.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../src/fastbrowser_cli/libs/server-manager.ts"],"names":[],"mappings":"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"}
|