playwright-repl 0.26.0 → 0.27.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 +26 -31
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/playwright-repl.d.ts +1 -1
- package/dist/playwright-repl.js +5 -12
- package/dist/pw-cli.d.ts +0 -1
- package/dist/pw-cli.d.ts.map +1 -1
- package/dist/pw-cli.js +76 -6
- package/dist/recorder.d.ts +4 -91
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +4 -203
- package/dist/repl.d.ts +10 -8
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +277 -287
- package/package.json +3 -3
- package/dist/engine.d.ts +0 -66
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -398
- package/dist/engine.js.map +0 -1
- package/dist/http-client.d.ts +0 -29
- package/dist/http-client.js +0 -173
- package/dist/index.js.map +0 -1
- package/dist/playwright-repl.js.map +0 -1
- package/dist/recorder.js.map +0 -1
- package/dist/repl.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwright-repl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Interactive REPL for Playwright — keyword commands, recording, and replay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"node": ">=20.0.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
+
"@playwright/test": "^1.59.1",
|
|
37
38
|
"playwright": "^1.59.1",
|
|
38
39
|
"playwright-core": "^1.59.1",
|
|
39
|
-
"@playwright-repl/
|
|
40
|
-
"@playwright-repl/core": "0.26.0"
|
|
40
|
+
"@playwright-repl/core": "0.27.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"vitest": "^4.0.18"
|
package/dist/engine.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Engine — in-process Playwright backend.
|
|
3
|
-
*
|
|
4
|
-
* Wraps BrowserBackend directly, eliminating the daemon process.
|
|
5
|
-
* Provides the same interface as DaemonConnection: run(args), connected, close().
|
|
6
|
-
*
|
|
7
|
-
* Three connection modes:
|
|
8
|
-
* - launch: new browser via Playwright (default)
|
|
9
|
-
* - connect: existing Chrome via CDP port (--connect [port])
|
|
10
|
-
* - extension: DevTools extension via serviceWorker.evaluate (--extension)
|
|
11
|
-
*/
|
|
12
|
-
import type { EngineOpts, EngineResult, ParsedArgs } from '@playwright-repl/core';
|
|
13
|
-
export type { EngineOpts, EngineResult, ParsedArgs };
|
|
14
|
-
interface PlaywrightDeps {
|
|
15
|
-
BrowserBackend: new (config: any, browserContext: any, tools: any[]) => any;
|
|
16
|
-
createBrowser: (config: any, clientInfo: any) => Promise<any>;
|
|
17
|
-
browserTools: any[];
|
|
18
|
-
playwright: any;
|
|
19
|
-
registry: {
|
|
20
|
-
findExecutable: (name: string) => {
|
|
21
|
-
executablePath: () => string | undefined;
|
|
22
|
-
} | undefined;
|
|
23
|
-
};
|
|
24
|
-
resolveConfig: (config: any) => Promise<any> | any;
|
|
25
|
-
commands: Record<string, any>;
|
|
26
|
-
parseCommand: (command: any, args: any) => {
|
|
27
|
-
toolName: string;
|
|
28
|
-
toolParams: Record<string, any>;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export declare class Engine {
|
|
32
|
-
private _deps;
|
|
33
|
-
private _backend;
|
|
34
|
-
private _browserContext;
|
|
35
|
-
private _close;
|
|
36
|
-
private _connected;
|
|
37
|
-
private _commandServer;
|
|
38
|
-
private _chromeProc;
|
|
39
|
-
private _isReconnecting;
|
|
40
|
-
private _reconnectInfo;
|
|
41
|
-
constructor(deps?: PlaywrightDeps);
|
|
42
|
-
get connected(): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Start the engine with given options.
|
|
45
|
-
*/
|
|
46
|
-
start(opts?: EngineOpts): Promise<void>;
|
|
47
|
-
/**
|
|
48
|
-
* Run a command given minimist-parsed args.
|
|
49
|
-
* Returns { text, isError } matching DaemonConnection.run() shape.
|
|
50
|
-
*/
|
|
51
|
-
run(args: ParsedArgs): Promise<EngineResult>;
|
|
52
|
-
/**
|
|
53
|
-
* Select the Playwright page matching the given URL.
|
|
54
|
-
* Uses backend.callTool('browser_tabs') to properly update the tab tracker.
|
|
55
|
-
*/
|
|
56
|
-
selectPageByUrl(targetUrl: string): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Shut down the browser and backend.
|
|
59
|
-
*/
|
|
60
|
-
close(): Promise<void>;
|
|
61
|
-
private _connectToCdp;
|
|
62
|
-
private _scheduleReconnect;
|
|
63
|
-
private _doReconnect;
|
|
64
|
-
private _buildConfig;
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=engine.d.ts.map
|
package/dist/engine.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAElF,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAGrD,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAC5E,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9D,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC;IAChB,QAAQ,EAAE;QAAE,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;YAAE,cAAc,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;SAAE,GAAG,SAAS,CAAA;KAAE,CAAC;IACzG,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,YAAY,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;CAClG;AA4BD,qBAAa,MAAM;IAEjB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,WAAW,CAAwD;IAC3E,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAmE;gBAG7E,IAAI,CAAC,EAAE,cAAc;IAIjC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACG,KAAK,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCjD;;;OAGG;IACG,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAwFlD;;;OAGG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBd,aAAa;IAkC3B,OAAO,CAAC,kBAAkB;YAQZ,YAAY;YAsDZ,YAAY;CA0D3B"}
|
package/dist/engine.js
DELETED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Engine — in-process Playwright backend.
|
|
3
|
-
*
|
|
4
|
-
* Wraps BrowserBackend directly, eliminating the daemon process.
|
|
5
|
-
* Provides the same interface as DaemonConnection: run(args), connected, close().
|
|
6
|
-
*
|
|
7
|
-
* Three connection modes:
|
|
8
|
-
* - launch: new browser via Playwright (default)
|
|
9
|
-
* - connect: existing Chrome via CDP port (--connect [port])
|
|
10
|
-
* - extension: DevTools extension via serviceWorker.evaluate (--extension)
|
|
11
|
-
*/
|
|
12
|
-
import { createRequire } from 'node:module';
|
|
13
|
-
import path from 'node:path';
|
|
14
|
-
import url from 'node:url';
|
|
15
|
-
import { replVersion } from '@playwright-repl/core';
|
|
16
|
-
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
17
|
-
// ─── Lazy-loaded Playwright dependencies ────────────────────────────────────
|
|
18
|
-
let _deps;
|
|
19
|
-
function loadDeps() {
|
|
20
|
-
if (_deps)
|
|
21
|
-
return _deps;
|
|
22
|
-
const require = createRequire(import.meta.url);
|
|
23
|
-
// Resolve absolute paths to bypass Playwright's exports map.
|
|
24
|
-
const pwCoreDir = path.dirname(require.resolve('playwright-core/package.json'));
|
|
25
|
-
const pwCoreReq = (sub) => require(path.join(pwCoreDir, sub));
|
|
26
|
-
_deps = {
|
|
27
|
-
BrowserBackend: pwCoreReq('lib/tools/backend/browserBackend.js').BrowserBackend,
|
|
28
|
-
createBrowser: pwCoreReq('lib/tools/mcp/browserFactory.js').createBrowser,
|
|
29
|
-
browserTools: pwCoreReq('lib/tools/backend/tools.js').browserTools,
|
|
30
|
-
playwright: require('playwright-core'),
|
|
31
|
-
registry: pwCoreReq('lib/server/registry/index.js').registry,
|
|
32
|
-
resolveConfig: pwCoreReq('lib/tools/mcp/config.js').resolveConfig,
|
|
33
|
-
commands: pwCoreReq('lib/tools/cli-daemon/commands.js').commands,
|
|
34
|
-
parseCommand: pwCoreReq('lib/tools/cli-daemon/command.js').parseCommand,
|
|
35
|
-
};
|
|
36
|
-
return _deps;
|
|
37
|
-
}
|
|
38
|
-
// ─── Engine ─────────────────────────────────────────────────────────────────
|
|
39
|
-
export class Engine {
|
|
40
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
41
|
-
_deps;
|
|
42
|
-
_backend = null;
|
|
43
|
-
_browserContext = null;
|
|
44
|
-
_close = null;
|
|
45
|
-
_connected = false;
|
|
46
|
-
_commandServer = null;
|
|
47
|
-
_chromeProc = null;
|
|
48
|
-
_isReconnecting = false;
|
|
49
|
-
_reconnectInfo = null;
|
|
50
|
-
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
51
|
-
constructor(deps) {
|
|
52
|
-
this._deps = deps;
|
|
53
|
-
}
|
|
54
|
-
get connected() {
|
|
55
|
-
return this._connected;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Start the engine with given options.
|
|
59
|
-
*/
|
|
60
|
-
async start(opts = {}) {
|
|
61
|
-
const deps = this._deps || loadDeps();
|
|
62
|
-
const config = await this._buildConfig(opts, deps);
|
|
63
|
-
const cwd = process.cwd();
|
|
64
|
-
const clientInfo = {
|
|
65
|
-
name: 'playwright-repl',
|
|
66
|
-
version: replVersion,
|
|
67
|
-
cwd,
|
|
68
|
-
roots: [{ uri: url.pathToFileURL(cwd).href, name: 'cwd' }],
|
|
69
|
-
timestamp: Date.now(),
|
|
70
|
-
};
|
|
71
|
-
// Launch/connect mode.
|
|
72
|
-
{
|
|
73
|
-
// Launch/connect mode: eagerly create context for immediate feedback.
|
|
74
|
-
const browser = await Promise.race([
|
|
75
|
-
deps.createBrowser(config, clientInfo),
|
|
76
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error('Browser launch timed out after 30s')), 30000)),
|
|
77
|
-
]);
|
|
78
|
-
const browserContext = browser.contexts()[0] || await browser.newContext();
|
|
79
|
-
this._browserContext = browserContext;
|
|
80
|
-
this._close = () => browser.close();
|
|
81
|
-
this._backend = new deps.BrowserBackend(config, browserContext, deps.browserTools);
|
|
82
|
-
await this._backend.initialize?.(clientInfo);
|
|
83
|
-
this._connected = true;
|
|
84
|
-
browserContext.on('close', () => {
|
|
85
|
-
this._connected = false;
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Run a command given minimist-parsed args.
|
|
91
|
-
* Returns { text, isError } matching DaemonConnection.run() shape.
|
|
92
|
-
*/
|
|
93
|
-
async run(args) {
|
|
94
|
-
if (!this._backend)
|
|
95
|
-
throw new Error('Engine not started');
|
|
96
|
-
// ── locator → run-code translation ──
|
|
97
|
-
if (args._[0] === 'locator') {
|
|
98
|
-
const ref = args._[1];
|
|
99
|
-
if (!ref)
|
|
100
|
-
return { text: 'Usage: locator <ref>', isError: true };
|
|
101
|
-
args = { _: ['run-code', `async (page) => { return (await page.locator('aria-ref=${ref}').normalize()).toString(); }`] };
|
|
102
|
-
}
|
|
103
|
-
// ── highlight → run-code translation ──
|
|
104
|
-
if (args._[0] === 'highlight') {
|
|
105
|
-
if (args.clear) {
|
|
106
|
-
args = { _: ['run-code', `async (page) => { await page.locator('#__pw_clear__').highlight().catch(() => {}); return "Cleared"; }`] };
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const parts = args._.slice(1);
|
|
110
|
-
if (!parts.length)
|
|
111
|
-
return { text: 'Usage: highlight <locator>', isError: true };
|
|
112
|
-
// highlight <ref> → use aria-ref selector
|
|
113
|
-
if (parts.length === 1 && /^e\d+$/.test(parts[0])) {
|
|
114
|
-
args = { _: ['run-code', `async (page) => { await page.locator('aria-ref=${parts[0]}').highlight(); return "Highlighted"; }`] };
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
const nth = args.nth !== undefined ? parseInt(String(args.nth), 10) : undefined;
|
|
118
|
-
let locExpr;
|
|
119
|
-
// highlight <role> "<name>" → getByRole(role, { name })
|
|
120
|
-
if (parts.length >= 2 && /^[a-z]+$/.test(parts[0])) {
|
|
121
|
-
const role = parts[0];
|
|
122
|
-
const name = parts.slice(1).join(' ');
|
|
123
|
-
locExpr = `page.getByRole(${JSON.stringify(role)}, { name: ${JSON.stringify(name)}, exact: true })`;
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
const loc = parts.join(' ');
|
|
127
|
-
const isSelector = /[.#\[\]>:=]/.test(loc);
|
|
128
|
-
locExpr = isSelector
|
|
129
|
-
? `page.locator(${JSON.stringify(loc)})`
|
|
130
|
-
: `page.getByText(${JSON.stringify(loc)})`;
|
|
131
|
-
}
|
|
132
|
-
if (nth !== undefined)
|
|
133
|
-
locExpr += `.nth(${nth})`;
|
|
134
|
-
args = { _: ['run-code', `async (page) => { await ${locExpr}.highlight(); return "Highlighted"; }`] };
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
// ── >> chaining → run-code translation ──
|
|
139
|
-
const LOCATOR_ACTIONS = {
|
|
140
|
-
click: 'click', dblclick: 'dblclick', hover: 'hover',
|
|
141
|
-
check: 'check', uncheck: 'uncheck',
|
|
142
|
-
fill: 'fill', select: 'selectOption',
|
|
143
|
-
};
|
|
144
|
-
if (LOCATOR_ACTIONS[args._[0]] && args._.some(a => a.includes('>>'))) {
|
|
145
|
-
const action = LOCATOR_ACTIONS[args._[0]];
|
|
146
|
-
const positional = args._.slice(1);
|
|
147
|
-
// Find last >> — everything up to the token after it is the selector,
|
|
148
|
-
// everything after that is the action argument (e.g., value for fill).
|
|
149
|
-
let lastChainIdx = -1;
|
|
150
|
-
for (let i = 0; i < positional.length; i++) {
|
|
151
|
-
if (positional[i] === '>>' || positional[i].includes('>>'))
|
|
152
|
-
lastChainIdx = i;
|
|
153
|
-
}
|
|
154
|
-
const selectorEnd = positional[lastChainIdx] !== '>>' && positional[lastChainIdx]?.includes('>>')
|
|
155
|
-
? lastChainIdx // >> inside quoted token like ".nav >> button"
|
|
156
|
-
: lastChainIdx + 1;
|
|
157
|
-
const selector = positional.slice(0, selectorEnd + 1).join(' ');
|
|
158
|
-
const rest = positional.slice(selectorEnd + 1).join(' ');
|
|
159
|
-
const locExpr = `page.locator(${JSON.stringify(selector)})`;
|
|
160
|
-
const actionCall = rest
|
|
161
|
-
? `${locExpr}.${action}(${JSON.stringify(rest)})`
|
|
162
|
-
: `${locExpr}.${action}()`;
|
|
163
|
-
args = { _: ['run-code', `async (page) => { await ${actionCall}; return "Done"; }`] };
|
|
164
|
-
}
|
|
165
|
-
const deps = this._deps || loadDeps();
|
|
166
|
-
const command = deps.commands[args._[0]];
|
|
167
|
-
if (!command)
|
|
168
|
-
throw new Error(`Unknown command: ${args._[0]}`);
|
|
169
|
-
const { toolName, toolParams } = deps.parseCommand(command, args);
|
|
170
|
-
// Commands like "close", "list", "kill-all" have empty toolName.
|
|
171
|
-
if (!toolName)
|
|
172
|
-
return { text: `Command "${args._[0]}" is not supported in engine mode.`, isError: true };
|
|
173
|
-
toolParams._meta = { cwd: args.cwd || process.cwd() };
|
|
174
|
-
const response = await this._backend.callTool(toolName, toolParams);
|
|
175
|
-
return formatResult(response);
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Select the Playwright page matching the given URL.
|
|
179
|
-
* Uses backend.callTool('browser_tabs') to properly update the tab tracker.
|
|
180
|
-
*/
|
|
181
|
-
async selectPageByUrl(targetUrl) {
|
|
182
|
-
if (!this._browserContext || !this._backend || !targetUrl)
|
|
183
|
-
return;
|
|
184
|
-
const pages = this._browserContext.pages();
|
|
185
|
-
const normalize = (u) => {
|
|
186
|
-
try {
|
|
187
|
-
const p = new URL(u);
|
|
188
|
-
return (p.origin + p.pathname).replace(/\/+$/, '');
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
return u.replace(/\/+$/, '');
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
const target = normalize(targetUrl);
|
|
195
|
-
for (let i = 0; i < pages.length; i++) {
|
|
196
|
-
if (normalize(pages[i].url()) === target) {
|
|
197
|
-
try {
|
|
198
|
-
await this._backend.callTool('browser_tabs', { action: 'select', index: i });
|
|
199
|
-
}
|
|
200
|
-
catch { /* ignore */ }
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Shut down the browser and backend.
|
|
207
|
-
*/
|
|
208
|
-
async close() {
|
|
209
|
-
this._connected = false;
|
|
210
|
-
if (this._commandServer) {
|
|
211
|
-
await this._commandServer.close();
|
|
212
|
-
this._commandServer = null;
|
|
213
|
-
}
|
|
214
|
-
if (this._backend) {
|
|
215
|
-
await this._backend.dispose();
|
|
216
|
-
this._backend = null;
|
|
217
|
-
}
|
|
218
|
-
if (this._close) {
|
|
219
|
-
await this._close();
|
|
220
|
-
this._close = null;
|
|
221
|
-
}
|
|
222
|
-
if (this._chromeProc) {
|
|
223
|
-
try {
|
|
224
|
-
this._chromeProc.kill();
|
|
225
|
-
}
|
|
226
|
-
catch { /* ignore */ }
|
|
227
|
-
this._chromeProc = null;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
// ─── CDP connect / reconnect ─────────────────────────────────────────────
|
|
231
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
232
|
-
async _connectToCdp(deps, config, clientInfo) {
|
|
233
|
-
const browser = await deps.createBrowser(config, clientInfo);
|
|
234
|
-
const browserContext = browser.contexts()[0] || await browser.newContext();
|
|
235
|
-
this._browserContext = browserContext;
|
|
236
|
-
this._close = () => browser.close();
|
|
237
|
-
this._backend = new deps.BrowserBackend(config, browserContext, deps.browserTools);
|
|
238
|
-
await this._backend.initialize?.(clientInfo);
|
|
239
|
-
this._connected = true;
|
|
240
|
-
// Auto-select the first visible web page.
|
|
241
|
-
const pages = browserContext.pages();
|
|
242
|
-
const INTERNAL = /^(chrome|devtools|chrome-extension|about):/;
|
|
243
|
-
let selectedIdx = -1;
|
|
244
|
-
for (let i = 0; i < pages.length; i++) {
|
|
245
|
-
const pageUrl = pages[i].url();
|
|
246
|
-
if (!pageUrl || INTERNAL.test(pageUrl))
|
|
247
|
-
continue;
|
|
248
|
-
try {
|
|
249
|
-
const state = await pages[i].evaluate(() => document.visibilityState);
|
|
250
|
-
if (state === 'visible' && selectedIdx === -1) {
|
|
251
|
-
selectedIdx = i;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
catch { /* skip */ }
|
|
255
|
-
}
|
|
256
|
-
if (selectedIdx > 0) {
|
|
257
|
-
await this._backend.callTool('browser_tabs', { action: 'select', index: selectedIdx });
|
|
258
|
-
}
|
|
259
|
-
browserContext.on('close', () => {
|
|
260
|
-
this._connected = false;
|
|
261
|
-
if (this._reconnectInfo)
|
|
262
|
-
this._scheduleReconnect();
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
_scheduleReconnect() {
|
|
266
|
-
if (this._isReconnecting)
|
|
267
|
-
return;
|
|
268
|
-
this._isReconnecting = true;
|
|
269
|
-
this._doReconnect().catch((e) => {
|
|
270
|
-
console.warn('Reconnection failed:', e instanceof Error ? e.message : String(e));
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
async _doReconnect() {
|
|
274
|
-
if (!this._reconnectInfo)
|
|
275
|
-
return;
|
|
276
|
-
const { opts, config, clientInfo } = this._reconnectInfo;
|
|
277
|
-
const deps = this._deps || loadDeps();
|
|
278
|
-
const cdpPort = opts.cdpPort || 9222;
|
|
279
|
-
const cdpUrl = `http://localhost:${cdpPort}`;
|
|
280
|
-
console.log('Browser context closed. Waiting for Chrome to reconnect...');
|
|
281
|
-
let attempt = 0;
|
|
282
|
-
while (!this._connected) {
|
|
283
|
-
attempt++;
|
|
284
|
-
await new Promise(r => setTimeout(r, 1500));
|
|
285
|
-
// Check if engine was closed during reconnect
|
|
286
|
-
if (!this._reconnectInfo) {
|
|
287
|
-
console.log('Reconnection cancelled (engine closed).');
|
|
288
|
-
break;
|
|
289
|
-
}
|
|
290
|
-
try {
|
|
291
|
-
const res = await fetch(`${cdpUrl}/json/version`, { signal: AbortSignal.timeout(5000) });
|
|
292
|
-
if (!res.ok) {
|
|
293
|
-
console.warn(`Reconnect attempt ${attempt}: CDP responded with status ${res.status}`);
|
|
294
|
-
continue;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch (e) {
|
|
298
|
-
console.warn(`Reconnect attempt ${attempt}: CDP not available (${e instanceof Error ? e.message : String(e)})`);
|
|
299
|
-
continue;
|
|
300
|
-
}
|
|
301
|
-
// CDP is responding — reconnect
|
|
302
|
-
try {
|
|
303
|
-
// Clean up old backend before reconnecting
|
|
304
|
-
if (this._backend) {
|
|
305
|
-
try {
|
|
306
|
-
this._backend.serverClosed();
|
|
307
|
-
}
|
|
308
|
-
catch { /* ignore */ }
|
|
309
|
-
}
|
|
310
|
-
if (this._close) {
|
|
311
|
-
try {
|
|
312
|
-
await this._close();
|
|
313
|
-
}
|
|
314
|
-
catch { /* ignore */ }
|
|
315
|
-
}
|
|
316
|
-
this._backend = null;
|
|
317
|
-
this._browserContext = null;
|
|
318
|
-
this._close = null;
|
|
319
|
-
config.browser.cdpEndpoint = cdpUrl;
|
|
320
|
-
await this._connectToCdp(deps, config, clientInfo);
|
|
321
|
-
console.log(`Reconnected to Chrome CDP after ${attempt} attempt(s).`);
|
|
322
|
-
}
|
|
323
|
-
catch (e) {
|
|
324
|
-
console.warn(`Reconnect attempt ${attempt}: connection failed (${e instanceof Error ? e.message : String(e)})`);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
this._isReconnecting = false;
|
|
328
|
-
}
|
|
329
|
-
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
330
|
-
// ─── Config builder ───────────────────────────────────────────────────────
|
|
331
|
-
async _buildConfig(opts, deps) {
|
|
332
|
-
const config = {
|
|
333
|
-
browser: {
|
|
334
|
-
browserName: 'chromium',
|
|
335
|
-
launchOptions: {
|
|
336
|
-
channel: 'chrome',
|
|
337
|
-
headless: !opts.headed,
|
|
338
|
-
},
|
|
339
|
-
contextOptions: {
|
|
340
|
-
viewport: null,
|
|
341
|
-
},
|
|
342
|
-
isolated: false,
|
|
343
|
-
userDataDir: undefined,
|
|
344
|
-
cdpEndpoint: undefined,
|
|
345
|
-
},
|
|
346
|
-
server: {},
|
|
347
|
-
network: {},
|
|
348
|
-
timeouts: {
|
|
349
|
-
action: 5000,
|
|
350
|
-
navigation: 15000,
|
|
351
|
-
},
|
|
352
|
-
};
|
|
353
|
-
// Browser selection
|
|
354
|
-
if (opts.browser) {
|
|
355
|
-
switch (opts.browser) {
|
|
356
|
-
case 'firefox':
|
|
357
|
-
config.browser.browserName = 'firefox';
|
|
358
|
-
config.browser.launchOptions.channel = undefined;
|
|
359
|
-
break;
|
|
360
|
-
case 'webkit':
|
|
361
|
-
config.browser.browserName = 'webkit';
|
|
362
|
-
config.browser.launchOptions.channel = undefined;
|
|
363
|
-
break;
|
|
364
|
-
default:
|
|
365
|
-
// chrome, msedge, chrome-beta, etc.
|
|
366
|
-
config.browser.browserName = 'chromium';
|
|
367
|
-
config.browser.launchOptions.channel = opts.browser;
|
|
368
|
-
break;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
// Persistent profile
|
|
372
|
-
if (opts.persistent || opts.profile) {
|
|
373
|
-
config.browser.userDataDir = opts.profile || undefined;
|
|
374
|
-
}
|
|
375
|
-
else if (!opts.extension) {
|
|
376
|
-
config.browser.isolated = true;
|
|
377
|
-
}
|
|
378
|
-
// CDP connect mode
|
|
379
|
-
if (opts.connect) {
|
|
380
|
-
const port = typeof opts.connect === 'number' ? opts.connect : 9222;
|
|
381
|
-
config.browser.cdpEndpoint = `http://localhost:${port}`;
|
|
382
|
-
config.browser.isolated = false;
|
|
383
|
-
}
|
|
384
|
-
return await deps.resolveConfig(config);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
function formatResult(result) {
|
|
388
|
-
const isError = result.isError;
|
|
389
|
-
let text;
|
|
390
|
-
let image;
|
|
391
|
-
for (const item of result.content) {
|
|
392
|
-
if (item.type === 'text' && !text)
|
|
393
|
-
text = item.text;
|
|
394
|
-
if (item.type === 'image' && !image)
|
|
395
|
-
image = `data:${item.mimeType || 'image/png'};base64,${item.data}`;
|
|
396
|
-
}
|
|
397
|
-
return { isError, text, image };
|
|
398
|
-
}
|
package/dist/engine.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/http-client.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP MCP client — connects the CLI to a shared HTTP MCP server.
|
|
3
|
-
*
|
|
4
|
-
* Usage: playwright-repl --http [url]
|
|
5
|
-
*
|
|
6
|
-
* Implements the same run()/close()/connected interface as BridgeServer
|
|
7
|
-
* so it plugs into the existing bridge REPL loop.
|
|
8
|
-
*/
|
|
9
|
-
import type { EngineResult } from '@playwright-repl/core';
|
|
10
|
-
export declare class HttpMcpClient {
|
|
11
|
-
private url;
|
|
12
|
-
private sessionId;
|
|
13
|
-
private _connected;
|
|
14
|
-
constructor(url?: string);
|
|
15
|
-
get connected(): boolean;
|
|
16
|
-
start(): Promise<void>;
|
|
17
|
-
run(command: string, opts?: {
|
|
18
|
-
includeSnapshot?: boolean;
|
|
19
|
-
}): Promise<EngineResult>;
|
|
20
|
-
runScript(script: string, language?: 'pw' | 'javascript'): Promise<EngineResult>;
|
|
21
|
-
close(): Promise<void>;
|
|
22
|
-
onConnect(_fn: () => void): void;
|
|
23
|
-
onDisconnect(_fn: () => void): void;
|
|
24
|
-
onEvent(_fn: (event: Record<string, unknown>) => void): void;
|
|
25
|
-
private callTool;
|
|
26
|
-
private post;
|
|
27
|
-
private request;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=http-client.d.ts.map
|