playwriter 0.0.4 โ 0.0.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.
- package/dist/extension/cdp-relay.d.ts +2 -3
- package/dist/extension/cdp-relay.d.ts.map +1 -1
- package/dist/extension/cdp-relay.js +11 -5
- package/dist/extension/cdp-relay.js.map +1 -1
- package/dist/extension/protocol.d.ts +6 -0
- package/dist/extension/protocol.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +68 -5
- package/dist/mcp.js.map +1 -1
- package/dist/prompt.md +24 -22
- package/dist/start-relay-server.d.ts +0 -2
- package/dist/start-relay-server.d.ts.map +1 -1
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +5 -0
- package/dist/utils.js.map +1 -0
- package/package.json +4 -2
- package/src/extension/cdp-relay.ts +12 -5
- package/src/extension/protocol.ts +7 -0
- package/src/index.ts +1 -0
- package/src/mcp.ts +97 -5
- package/src/prompt.md +24 -22
- package/src/utils.ts +4 -0
- package/README.md +0 -60
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
export declare function startPlayWriterCDPRelayServer({ port, logger }?: {
|
|
1
|
+
export declare function startPlayWriterCDPRelayServer({ port, host, logger }?: {
|
|
2
2
|
port?: number;
|
|
3
|
+
host?: string;
|
|
3
4
|
logger?: {
|
|
4
5
|
log(...args: any[]): void;
|
|
5
6
|
error(...args: any[]): void;
|
|
6
7
|
};
|
|
7
8
|
}): Promise<{
|
|
8
|
-
cdpEndpoint: string;
|
|
9
|
-
extensionEndpoint: string;
|
|
10
9
|
close(): void;
|
|
11
10
|
}>;
|
|
12
11
|
//# sourceMappingURL=cdp-relay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-relay.d.ts","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"AAsBA,wBAAsB,6BAA6B,CAAC,EAAE,IAAY,EAAE,MAAgB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;KAAE,CAAA;CAAO
|
|
1
|
+
{"version":3,"file":"cdp-relay.d.ts","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"AAsBA,wBAAsB,6BAA6B,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,MAAgB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;KAAE,CAAA;CAAO;;GAgdrN"}
|
|
@@ -2,7 +2,7 @@ import { Hono } from 'hono';
|
|
|
2
2
|
import { serve } from '@hono/node-server';
|
|
3
3
|
import { createNodeWebSocket } from '@hono/node-ws';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
|
-
export async function startPlayWriterCDPRelayServer({ port = 19988, logger = console } = {}) {
|
|
5
|
+
export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.0.0.1', logger = console } = {}) {
|
|
6
6
|
const connectedTargets = new Map();
|
|
7
7
|
const playwrightClients = new Map();
|
|
8
8
|
let extensionWs = null;
|
|
@@ -149,6 +149,12 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
|
|
|
149
149
|
params: { method, params }
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
|
+
case 'Playwriter.activateTab': {
|
|
153
|
+
return await sendToExtension({
|
|
154
|
+
method: 'activateTab',
|
|
155
|
+
params
|
|
156
|
+
});
|
|
157
|
+
}
|
|
152
158
|
}
|
|
153
159
|
return await sendToExtension({
|
|
154
160
|
method: 'forwardCDPCommand',
|
|
@@ -354,17 +360,17 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
|
|
|
354
360
|
}
|
|
355
361
|
};
|
|
356
362
|
}));
|
|
357
|
-
const server = serve({ fetch: app.fetch, port });
|
|
363
|
+
const server = serve({ fetch: app.fetch, port, hostname: host });
|
|
358
364
|
injectWebSocket(server);
|
|
359
|
-
const wsHost = `ws
|
|
365
|
+
const wsHost = `ws://${host}:${port}`;
|
|
360
366
|
const cdpEndpoint = `${wsHost}/cdp`;
|
|
361
367
|
const extensionEndpoint = `${wsHost}/extension`;
|
|
362
368
|
logger.log('CDP relay server started');
|
|
369
|
+
logger.log('Host:', host);
|
|
370
|
+
logger.log('Port:', port);
|
|
363
371
|
logger.log('Extension endpoint:', extensionEndpoint);
|
|
364
372
|
logger.log('CDP endpoint:', cdpEndpoint);
|
|
365
373
|
return {
|
|
366
|
-
cdpEndpoint,
|
|
367
|
-
extensionEndpoint,
|
|
368
374
|
close() {
|
|
369
375
|
for (const client of playwrightClients.values()) {
|
|
370
376
|
client.ws.close(1000, 'Server stopped');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-relay.js","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdp-relay.js","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/extension/protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,IAAI,CAAA;AAExB,MAAM,MAAM,uBAAuB,GAC/B;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACD;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,mBAAmB,CAAA;IAC3B,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/extension/protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,IAAI,CAAA;AAExB,MAAM,MAAM,uBAAuB,GAC/B;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACD;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,mBAAmB,CAAA;IAC3B,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,GACD;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,qBAAqB,CAAA"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,YAAY,CAAA"}
|
package/dist/mcp.js
CHANGED
|
@@ -7,6 +7,7 @@ import path from 'node:path';
|
|
|
7
7
|
import { spawn } from 'node:child_process';
|
|
8
8
|
import { createRequire } from 'node:module';
|
|
9
9
|
import vm from 'node:vm';
|
|
10
|
+
import { getCdpUrl } from './utils.js';
|
|
10
11
|
const require = createRequire(import.meta.url);
|
|
11
12
|
const state = {
|
|
12
13
|
isConnected: false,
|
|
@@ -46,7 +47,7 @@ async function ensureConnection() {
|
|
|
46
47
|
return { browser: state.browser, page: state.page };
|
|
47
48
|
}
|
|
48
49
|
await ensureRelayServer();
|
|
49
|
-
const cdpEndpoint =
|
|
50
|
+
const cdpEndpoint = getCdpUrl({ port: RELAY_PORT });
|
|
50
51
|
const browser = await chromium.connectOverCDP(cdpEndpoint);
|
|
51
52
|
const contexts = browser.contexts();
|
|
52
53
|
const context = contexts.length > 0 ? contexts[0] : await browser.newContext();
|
|
@@ -75,16 +76,42 @@ async function getCurrentPage() {
|
|
|
75
76
|
}
|
|
76
77
|
throw new Error('No page available');
|
|
77
78
|
}
|
|
79
|
+
async function resetConnection() {
|
|
80
|
+
if (state.browser) {
|
|
81
|
+
try {
|
|
82
|
+
await state.browser.close();
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
console.error('Error closing browser:', e);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
state.browser = null;
|
|
89
|
+
state.page = null;
|
|
90
|
+
state.context = null;
|
|
91
|
+
state.isConnected = false;
|
|
92
|
+
await ensureRelayServer();
|
|
93
|
+
const cdpEndpoint = getCdpUrl({ port: RELAY_PORT });
|
|
94
|
+
const browser = await chromium.connectOverCDP(cdpEndpoint);
|
|
95
|
+
const contexts = browser.contexts();
|
|
96
|
+
const context = contexts.length > 0 ? contexts[0] : await browser.newContext();
|
|
97
|
+
const pages = context.pages();
|
|
98
|
+
const page = pages.length > 0 ? pages[0] : await context.newPage();
|
|
99
|
+
state.browser = browser;
|
|
100
|
+
state.page = page;
|
|
101
|
+
state.context = context;
|
|
102
|
+
state.isConnected = true;
|
|
103
|
+
return { browser, page, context };
|
|
104
|
+
}
|
|
78
105
|
const server = new McpServer({
|
|
79
106
|
name: 'playwriter',
|
|
80
|
-
title: '
|
|
107
|
+
title: 'The better playwright MCP: works as a browser extension. No context bloat. More capable.',
|
|
81
108
|
version: '1.0.0',
|
|
82
109
|
});
|
|
83
110
|
const promptContent = fs.readFileSync(path.join(path.dirname(new URL(import.meta.url).pathname), 'prompt.md'), 'utf-8');
|
|
84
111
|
server.tool('execute', promptContent, {
|
|
85
112
|
code: z
|
|
86
113
|
.string()
|
|
87
|
-
.describe('JavaScript code to execute with page
|
|
114
|
+
.describe('JavaScript code to execute with page, state, context in scope. Should be one line, using ; to execute multiple statements. To execute complex actions call execute multiple times. '),
|
|
88
115
|
timeout: z.number().default(3000).describe('Timeout in milliseconds for code execution (default: 3000ms)'),
|
|
89
116
|
}, async ({ code, timeout }) => {
|
|
90
117
|
await ensureConnection();
|
|
@@ -110,12 +137,48 @@ server.tool('execute', promptContent, {
|
|
|
110
137
|
consoleLogs.push({ method: 'debug', args });
|
|
111
138
|
},
|
|
112
139
|
};
|
|
113
|
-
const
|
|
140
|
+
const accessibilitySnapshot = async (targetPage) => {
|
|
141
|
+
if (targetPage._snapshotForAI) {
|
|
142
|
+
const snapshot = await targetPage._snapshotForAI();
|
|
143
|
+
const snapshotStr = typeof snapshot === 'string'
|
|
144
|
+
? snapshot
|
|
145
|
+
: JSON.stringify(snapshot, null, 2);
|
|
146
|
+
return snapshotStr;
|
|
147
|
+
}
|
|
148
|
+
throw new Error('accessibilitySnapshot is not available on this page');
|
|
149
|
+
};
|
|
150
|
+
const activateTab = async (targetPage) => {
|
|
151
|
+
const cdp = await context.newCDPSession(targetPage);
|
|
152
|
+
const { targetInfo } = await cdp.send('Target.getTargetInfo');
|
|
153
|
+
const targetId = targetInfo.targetId;
|
|
154
|
+
await cdp.send('Playwriter.activateTab', { targetId });
|
|
155
|
+
await cdp.detach();
|
|
156
|
+
};
|
|
157
|
+
let vmContextObj = {
|
|
114
158
|
page,
|
|
115
159
|
context,
|
|
116
160
|
state,
|
|
117
161
|
console: customConsole,
|
|
118
|
-
|
|
162
|
+
accessibilitySnapshot,
|
|
163
|
+
activateTab,
|
|
164
|
+
resetPlaywright: async () => {
|
|
165
|
+
const { page: newPage, context: newContext } = await resetConnection();
|
|
166
|
+
Object.keys(state).forEach(key => delete state[key]);
|
|
167
|
+
const resetObj = {
|
|
168
|
+
page: newPage,
|
|
169
|
+
context: newContext,
|
|
170
|
+
state,
|
|
171
|
+
console: customConsole,
|
|
172
|
+
accessibilitySnapshot,
|
|
173
|
+
activateTab,
|
|
174
|
+
resetPlaywright: vmContextObj.resetPlaywright
|
|
175
|
+
};
|
|
176
|
+
Object.keys(vmContextObj).forEach(key => delete vmContextObj[key]);
|
|
177
|
+
Object.assign(vmContextObj, resetObj);
|
|
178
|
+
return { page: newPage, context: newContext };
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
const vmContext = vm.createContext(vmContextObj);
|
|
119
182
|
const wrappedCode = `(async () => { ${code} })()`;
|
|
120
183
|
const result = await Promise.race([
|
|
121
184
|
vm.runInContext(wrappedCode, vmContext, {
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAiC,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAiC,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAyB9C,MAAM,KAAK,GAAU;IACnB,WAAW,EAAE,KAAK;IAClB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;CACd,CAAA;AAED,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,GAAG,CAAC,CAAA;QACzD,OAAO,QAAQ,CAAC,EAAE,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAA;IAE/C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAE7C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAA;IAEnE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;QAC1D,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAA;IAEF,aAAa,CAAC,KAAK,EAAE,CAAA;IAErB,gCAAgC;IAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IAEzD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;AAC3C,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IACrD,CAAC;IAED,MAAM,iBAAiB,EAAE,CAAA;IAEzB,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IAE1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;IAE9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IAElE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAA;IAExB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAA;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAEjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACrB,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC9C,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;AACtC,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAA;IAEzB,MAAM,iBAAiB,EAAE,CAAA;IAEzB,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IAE1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;IAE9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IAElE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAA;IAExB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,0FAA0F;IACjG,OAAO,EAAE,OAAO;CACjB,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAA;AAEvH,MAAM,CAAC,IAAI,CACT,SAAS,EACT,aAAa,EACb;IACE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CACP,qLAAqL,CACtL;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;CAC3G,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IAC1B,MAAM,gBAAgB,EAAE,CAAA;IAExB,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;IAE/C,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,WAAW,GAA2C,EAAE,CAAA;QAE9D,MAAM,aAAa,GAAG;YACpB,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gBACtB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3C,CAAC;YACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gBACvB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5C,CAAC;YACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gBACvB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5C,CAAC;YACD,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gBACxB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC7C,CAAC;YACD,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gBACxB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC7C,CAAC;SACF,CAAA;QAED,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAgB,EAAE,EAAE;YACvD,IAAK,UAAkB,CAAC,cAAc,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,MAAO,UAAkB,CAAC,cAAc,EAAE,CAAA;gBAC3D,MAAM,WAAW,GACf,OAAO,QAAQ,KAAK,QAAQ;oBAC1B,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACvC,OAAO,WAAW,CAAA;YACpB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACxE,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,KAAK,EAAE,UAAgB,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;YACnD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YAC7D,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;YACpC,MAAM,GAAG,CAAC,IAAI,CAAC,wBAA+B,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC7D,MAAM,GAAG,CAAC,MAAM,EAAE,CAAA;QACpB,CAAC,CAAA;QAED,IAAI,YAAY,GAAc;YAC5B,IAAI;YACJ,OAAO;YACP,KAAK;YACL,OAAO,EAAE,aAAa;YACtB,qBAAqB;YACrB,WAAW;YACX,eAAe,EAAE,KAAK,IAAI,EAAE;gBAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,eAAe,EAAE,CAAA;gBAEtE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;gBAEpD,MAAM,QAAQ,GAAc;oBAC1B,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,UAAU;oBACnB,KAAK;oBACL,OAAO,EAAE,aAAa;oBACtB,qBAAqB;oBACrB,WAAW;oBACX,eAAe,EAAE,YAAY,CAAC,eAAe;iBAC9C,CAAA;gBACD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAQ,YAAoB,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC3E,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;gBACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;YAC/C,CAAC;SACF,CAAA;QAED,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAEhD,MAAM,WAAW,GAAG,kBAAkB,IAAI,OAAO,CAAA;QAEjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE;gBACtC,OAAO;gBACP,aAAa,EAAE,IAAI;aACpB,CAAC;YACF,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACxB,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAC5F;SACF,CAAC,CAAA;QAEF,IAAI,YAAY,GAAG,EAAE,CAAA;QAErB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,YAAY,IAAI,mBAAmB,CAAA;YACnC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;gBACvC,MAAM,aAAa,GAAG,IAAI;qBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;wBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACrC,CAAC;oBACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;gBACpB,CAAC,CAAC;qBACD,IAAI,CAAC,GAAG,CAAC,CAAA;gBACZ,YAAY,IAAI,IAAI,MAAM,KAAK,aAAa,IAAI,CAAA;YAClD,CAAC,CAAC,CAAA;YACF,YAAY,IAAI,IAAI,CAAA;QACtB,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,YAAY,IAAI,iBAAiB,CAAA;YACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,YAAY,IAAI,MAAM,CAAA;YACxB,CAAC;iBAAM,CAAC;gBACN,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,YAAY,IAAI,wCAAwC,CAAA;QAC1D,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAA;QACvB,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;QACnC,IAAI,SAAS,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YAClC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,qBAAqB,UAAU,8EAA8E,CAAA;QAC5J,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS;iBAChB;aACF;SACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAAyB,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;iBACrE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;AACH,CAAC,CACF,CAAA;AAED,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;AACzD,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAE5C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC9B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACtB,2DAA2D;AAC7D,CAAC,CAAC,CAAA;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA"}
|
package/dist/prompt.md
CHANGED
|
@@ -1,24 +1,36 @@
|
|
|
1
|
-
execute tool
|
|
1
|
+
playwriter execute is a tool to control the user browser instance via extension also called playwriter MCP.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
if you get an error Extension not running tell user to install and enable the playwriter extension first, clicking on the extension icon on the tab the user wants to control
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
execute tool let you run playwright js code snippets to control user Chrome window, these js code snippets are preferred to be in a single line to make them more readable in agent interface. separating statements with semicolons
|
|
6
|
+
|
|
7
|
+
it will control an existing user Chrome window. The js code will be run in a sandbox with some variables in context:
|
|
8
|
+
|
|
9
|
+
- state: an object shared between runs that you can mutate to persist functions and objects. for example `state.requests = []` to monitor network requests between runs
|
|
10
|
+
- context: the playwright browser context. you can do things like `await context.pages()` to see user connected pages
|
|
6
11
|
- page, the first page the user opened and made it accessible to this MCP. do things like `page.url()` to see current url. assume the user wants you to use this page for your playwright code
|
|
7
12
|
|
|
8
|
-
the window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`
|
|
13
|
+
the chrome window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`. you can also open and close pages: `state.newPage = await context.newPage()`. store the page in state so that you can reuse it later
|
|
9
14
|
|
|
10
|
-
you can control the browser in collaboration with the user.
|
|
15
|
+
you can control the browser in collaboration with the user. the user can help you get unstuck from captchas or difficult to find elements or reproducing a bug
|
|
11
16
|
|
|
12
17
|
## rules
|
|
13
18
|
|
|
14
19
|
- only call `page.close()` if the user asks you so or if you previously created this page yourself with `newPage`. do not close user created pages unless asked
|
|
15
|
-
-
|
|
20
|
+
- try to never sleep or run `page.waitForTimeout` unless you have to. there are better ways to wait for an element
|
|
21
|
+
- never close browser or context. NEVER call `browser.close()`
|
|
22
|
+
|
|
23
|
+
## event listeners
|
|
24
|
+
|
|
25
|
+
always detach event listener you create at the end of a message using `page.removeAllListeners()` or similar so that you never leak them in future messages
|
|
16
26
|
|
|
17
27
|
## utility functions
|
|
18
28
|
|
|
19
29
|
you have access to some functions in addition to playwright methods:
|
|
20
30
|
|
|
21
31
|
- `async accessibilitySnapshot(page)`: gets a human readable snapshot of clickable elements on the page. useful to see the overall structure of the page and what elements you can interact with
|
|
32
|
+
- `async activateTab(page)`: activates (brings to front and focuses) the browser tab for the given page
|
|
33
|
+
- `async resetPlaywright()`: recreates the CDP connection and resets the browser/page/context. Use this when the MCP stops responding, you get connection errors, assertion failures, or timeout issues. After calling this, the page and context variables are automatically updated in the execution environment. IMPORTANT: this completely resets the execution context, removing any custom properties you may have added to the global scope AND clearing all keys from the `state` object. Only `page`, `context`, `state` (empty), `console`, and utility functions will remain
|
|
22
34
|
|
|
23
35
|
example:
|
|
24
36
|
|
|
@@ -36,14 +48,6 @@ example:
|
|
|
36
48
|
- /url: /docs/installation
|
|
37
49
|
- link "Components" [ref=e14] [cursor=pointer]:
|
|
38
50
|
- /url: /docs/components
|
|
39
|
-
- link "Blocks" [ref=e15] [cursor=pointer]:
|
|
40
|
-
- /url: /blocks
|
|
41
|
-
- link "Charts" [ref=e16] [cursor=pointer]:
|
|
42
|
-
- /url: /charts/area
|
|
43
|
-
- link "Themes" [ref=e17] [cursor=pointer]:
|
|
44
|
-
- /url: /themes
|
|
45
|
-
- link "Colors" [ref=e18] [cursor=pointer]:
|
|
46
|
-
- /url: /colors
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a specific `ref` and interact with it.
|
|
@@ -52,7 +56,7 @@ Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a spec
|
|
|
52
56
|
|
|
53
57
|
## getting outputs of code execution
|
|
54
58
|
|
|
55
|
-
You can use `console.log` to print values you want to see in the tool call result
|
|
59
|
+
You can use `console.log` to print values you want to see in the tool call result. For seeing logs across runs you can store then in `state.logs` and then print them later, filtering and paginating them too.
|
|
56
60
|
|
|
57
61
|
## using page.evaluate
|
|
58
62
|
|
|
@@ -71,12 +75,10 @@ const pageInfo = await page.evaluate(() => ({
|
|
|
71
75
|
buttonCount: document.querySelectorAll('button').length,
|
|
72
76
|
readyState: document.readyState,
|
|
73
77
|
}))
|
|
74
|
-
console.log(
|
|
75
|
-
console.log('Number of buttons:', pageInfo.buttonCount)
|
|
76
|
-
console.log('Page ready state:', pageInfo.readyState)
|
|
78
|
+
console.log(pageInfo)
|
|
77
79
|
```
|
|
78
80
|
|
|
79
|
-
## read
|
|
81
|
+
## read logs during interactions
|
|
80
82
|
|
|
81
83
|
you can see logs during interactions with `page.on('console', msg => console.log(`Browser log: [${msg.type()}] ${msg.text()}`))`
|
|
82
84
|
|
|
@@ -84,10 +86,10 @@ then remember to call `context.removeAllListeners()` or `page.removeAllListeners
|
|
|
84
86
|
|
|
85
87
|
## reading past logs
|
|
86
88
|
|
|
87
|
-
you can keep track of logs using `
|
|
89
|
+
you can keep track of logs using `state.logs = []; page.on('console', msg => state.logs.push({ type: msg.type(), text: msg.text() }))`
|
|
88
90
|
|
|
89
91
|
later, you can read logs that you care about. For example, to get the last 100 logs that contain the word "error":
|
|
90
92
|
|
|
91
|
-
`console.log('errors:');
|
|
93
|
+
`console.log('errors:'); state.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
|
|
92
94
|
|
|
93
|
-
then to reset logs: `
|
|
95
|
+
then to reset logs: `state.logs = []` and to stop listening: `page.removeAllListeners('console')`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,WAAW,CAAC,EAAE,IAAY,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO
|
|
1
|
+
{"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,WAAW,CAAC,EAAE,IAAY,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;;GAmBzE"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,QAAQ,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,UAGjI"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,QAAQ,KAA0D,EAAE;IAChI,MAAM,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC5C,OAAO,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,EAAE,CAAA;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwriter",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.6",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"repository": "https://github.com/remorses/playwriter",
|
|
7
9
|
"scripts": {
|
|
8
10
|
"build": "rm -rf dist *.tsbuildinfo && mkdir dist && cp src/resource.md src/prompt.md dist/ && tsc",
|
|
9
11
|
"prepublishOnly": "pnpm build",
|
|
@@ -20,7 +20,7 @@ type PlaywrightClient = {
|
|
|
20
20
|
ws: WSContext
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export async function startPlayWriterCDPRelayServer({ port = 19988, logger = console }: { port?: number; logger?: { log(...args: any[]): void; error(...args: any[]): void } } = {}) {
|
|
23
|
+
export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.0.0.1', logger = console }: { port?: number; host?: string; logger?: { log(...args: any[]): void; error(...args: any[]): void } } = {}) {
|
|
24
24
|
const connectedTargets = new Map<string, ConnectedTarget>()
|
|
25
25
|
|
|
26
26
|
const playwrightClients = new Map<string, PlaywrightClient>()
|
|
@@ -219,6 +219,13 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
|
|
|
219
219
|
params: { method, params }
|
|
220
220
|
})
|
|
221
221
|
}
|
|
222
|
+
|
|
223
|
+
case 'Playwriter.activateTab': {
|
|
224
|
+
return await sendToExtension({
|
|
225
|
+
method: 'activateTab',
|
|
226
|
+
params
|
|
227
|
+
})
|
|
228
|
+
}
|
|
222
229
|
}
|
|
223
230
|
|
|
224
231
|
return await sendToExtension({
|
|
@@ -454,20 +461,20 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
|
|
|
454
461
|
}
|
|
455
462
|
}))
|
|
456
463
|
|
|
457
|
-
const server = serve({ fetch: app.fetch, port })
|
|
464
|
+
const server = serve({ fetch: app.fetch, port, hostname: host })
|
|
458
465
|
injectWebSocket(server)
|
|
459
466
|
|
|
460
|
-
const wsHost = `ws
|
|
467
|
+
const wsHost = `ws://${host}:${port}`
|
|
461
468
|
const cdpEndpoint = `${wsHost}/cdp`
|
|
462
469
|
const extensionEndpoint = `${wsHost}/extension`
|
|
463
470
|
|
|
464
471
|
logger.log('CDP relay server started')
|
|
472
|
+
logger.log('Host:', host)
|
|
473
|
+
logger.log('Port:', port)
|
|
465
474
|
logger.log('Extension endpoint:', extensionEndpoint)
|
|
466
475
|
logger.log('CDP endpoint:', cdpEndpoint)
|
|
467
476
|
|
|
468
477
|
return {
|
|
469
|
-
cdpEndpoint,
|
|
470
|
-
extensionEndpoint,
|
|
471
478
|
close() {
|
|
472
479
|
for (const client of playwrightClients.values()) {
|
|
473
480
|
client.ws.close(1000, 'Server stopped')
|
package/src/index.ts
CHANGED
package/src/mcp.ts
CHANGED
|
@@ -7,6 +7,7 @@ import path from 'node:path'
|
|
|
7
7
|
import { spawn } from 'node:child_process'
|
|
8
8
|
import { createRequire } from 'node:module'
|
|
9
9
|
import vm from 'node:vm'
|
|
10
|
+
import { getCdpUrl } from './utils.js'
|
|
10
11
|
|
|
11
12
|
const require = createRequire(import.meta.url)
|
|
12
13
|
|
|
@@ -17,6 +18,22 @@ interface State {
|
|
|
17
18
|
context: BrowserContext | null
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
interface VMContext {
|
|
22
|
+
page: Page
|
|
23
|
+
context: BrowserContext
|
|
24
|
+
state: Record<string, any>
|
|
25
|
+
console: {
|
|
26
|
+
log: (...args: any[]) => void
|
|
27
|
+
info: (...args: any[]) => void
|
|
28
|
+
warn: (...args: any[]) => void
|
|
29
|
+
error: (...args: any[]) => void
|
|
30
|
+
debug: (...args: any[]) => void
|
|
31
|
+
}
|
|
32
|
+
accessibilitySnapshot: (page: Page) => Promise<string>
|
|
33
|
+
activateTab: (page: Page) => Promise<void>
|
|
34
|
+
resetPlaywright: () => Promise<{ page: Page; context: BrowserContext }>
|
|
35
|
+
}
|
|
36
|
+
|
|
20
37
|
const state: State = {
|
|
21
38
|
isConnected: false,
|
|
22
39
|
page: null,
|
|
@@ -67,7 +84,7 @@ async function ensureConnection(): Promise<{ browser: Browser; page: Page }> {
|
|
|
67
84
|
|
|
68
85
|
await ensureRelayServer()
|
|
69
86
|
|
|
70
|
-
const cdpEndpoint =
|
|
87
|
+
const cdpEndpoint = getCdpUrl({ port: RELAY_PORT })
|
|
71
88
|
const browser = await chromium.connectOverCDP(cdpEndpoint)
|
|
72
89
|
|
|
73
90
|
const contexts = browser.contexts()
|
|
@@ -105,9 +122,42 @@ async function getCurrentPage() {
|
|
|
105
122
|
throw new Error('No page available')
|
|
106
123
|
}
|
|
107
124
|
|
|
125
|
+
async function resetConnection(): Promise<{ browser: Browser; page: Page; context: BrowserContext }> {
|
|
126
|
+
if (state.browser) {
|
|
127
|
+
try {
|
|
128
|
+
await state.browser.close()
|
|
129
|
+
} catch (e) {
|
|
130
|
+
console.error('Error closing browser:', e)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
state.browser = null
|
|
135
|
+
state.page = null
|
|
136
|
+
state.context = null
|
|
137
|
+
state.isConnected = false
|
|
138
|
+
|
|
139
|
+
await ensureRelayServer()
|
|
140
|
+
|
|
141
|
+
const cdpEndpoint = getCdpUrl({ port: RELAY_PORT })
|
|
142
|
+
const browser = await chromium.connectOverCDP(cdpEndpoint)
|
|
143
|
+
|
|
144
|
+
const contexts = browser.contexts()
|
|
145
|
+
const context = contexts.length > 0 ? contexts[0] : await browser.newContext()
|
|
146
|
+
|
|
147
|
+
const pages = context.pages()
|
|
148
|
+
const page = pages.length > 0 ? pages[0] : await context.newPage()
|
|
149
|
+
|
|
150
|
+
state.browser = browser
|
|
151
|
+
state.page = page
|
|
152
|
+
state.context = context
|
|
153
|
+
state.isConnected = true
|
|
154
|
+
|
|
155
|
+
return { browser, page, context }
|
|
156
|
+
}
|
|
157
|
+
|
|
108
158
|
const server = new McpServer({
|
|
109
159
|
name: 'playwriter',
|
|
110
|
-
title: '
|
|
160
|
+
title: 'The better playwright MCP: works as a browser extension. No context bloat. More capable.',
|
|
111
161
|
version: '1.0.0',
|
|
112
162
|
})
|
|
113
163
|
|
|
@@ -120,7 +170,7 @@ server.tool(
|
|
|
120
170
|
code: z
|
|
121
171
|
.string()
|
|
122
172
|
.describe(
|
|
123
|
-
'JavaScript code to execute with page
|
|
173
|
+
'JavaScript code to execute with page, state, context in scope. Should be one line, using ; to execute multiple statements. To execute complex actions call execute multiple times. ',
|
|
124
174
|
),
|
|
125
175
|
timeout: z.number().default(3000).describe('Timeout in milliseconds for code execution (default: 3000ms)'),
|
|
126
176
|
},
|
|
@@ -152,12 +202,54 @@ server.tool(
|
|
|
152
202
|
},
|
|
153
203
|
}
|
|
154
204
|
|
|
155
|
-
const
|
|
205
|
+
const accessibilitySnapshot = async (targetPage: Page) => {
|
|
206
|
+
if ((targetPage as any)._snapshotForAI) {
|
|
207
|
+
const snapshot = await (targetPage as any)._snapshotForAI()
|
|
208
|
+
const snapshotStr =
|
|
209
|
+
typeof snapshot === 'string'
|
|
210
|
+
? snapshot
|
|
211
|
+
: JSON.stringify(snapshot, null, 2)
|
|
212
|
+
return snapshotStr
|
|
213
|
+
}
|
|
214
|
+
throw new Error('accessibilitySnapshot is not available on this page')
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const activateTab = async (targetPage: Page) => {
|
|
218
|
+
const cdp = await context.newCDPSession(targetPage)
|
|
219
|
+
const { targetInfo } = await cdp.send('Target.getTargetInfo')
|
|
220
|
+
const targetId = targetInfo.targetId
|
|
221
|
+
await cdp.send('Playwriter.activateTab' as any, { targetId })
|
|
222
|
+
await cdp.detach()
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
let vmContextObj: VMContext = {
|
|
156
226
|
page,
|
|
157
227
|
context,
|
|
158
228
|
state,
|
|
159
229
|
console: customConsole,
|
|
160
|
-
|
|
230
|
+
accessibilitySnapshot,
|
|
231
|
+
activateTab,
|
|
232
|
+
resetPlaywright: async () => {
|
|
233
|
+
const { page: newPage, context: newContext } = await resetConnection()
|
|
234
|
+
|
|
235
|
+
Object.keys(state).forEach(key => delete state[key])
|
|
236
|
+
|
|
237
|
+
const resetObj: VMContext = {
|
|
238
|
+
page: newPage,
|
|
239
|
+
context: newContext,
|
|
240
|
+
state,
|
|
241
|
+
console: customConsole,
|
|
242
|
+
accessibilitySnapshot,
|
|
243
|
+
activateTab,
|
|
244
|
+
resetPlaywright: vmContextObj.resetPlaywright
|
|
245
|
+
}
|
|
246
|
+
Object.keys(vmContextObj).forEach(key => delete (vmContextObj as any)[key])
|
|
247
|
+
Object.assign(vmContextObj, resetObj)
|
|
248
|
+
return { page: newPage, context: newContext }
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const vmContext = vm.createContext(vmContextObj)
|
|
161
253
|
|
|
162
254
|
const wrappedCode = `(async () => { ${code} })()`
|
|
163
255
|
|
package/src/prompt.md
CHANGED
|
@@ -1,24 +1,36 @@
|
|
|
1
|
-
execute tool
|
|
1
|
+
playwriter execute is a tool to control the user browser instance via extension also called playwriter MCP.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
if you get an error Extension not running tell user to install and enable the playwriter extension first, clicking on the extension icon on the tab the user wants to control
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
execute tool let you run playwright js code snippets to control user Chrome window, these js code snippets are preferred to be in a single line to make them more readable in agent interface. separating statements with semicolons
|
|
6
|
+
|
|
7
|
+
it will control an existing user Chrome window. The js code will be run in a sandbox with some variables in context:
|
|
8
|
+
|
|
9
|
+
- state: an object shared between runs that you can mutate to persist functions and objects. for example `state.requests = []` to monitor network requests between runs
|
|
10
|
+
- context: the playwright browser context. you can do things like `await context.pages()` to see user connected pages
|
|
6
11
|
- page, the first page the user opened and made it accessible to this MCP. do things like `page.url()` to see current url. assume the user wants you to use this page for your playwright code
|
|
7
12
|
|
|
8
|
-
the window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`
|
|
13
|
+
the chrome window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`. you can also open and close pages: `state.newPage = await context.newPage()`. store the page in state so that you can reuse it later
|
|
9
14
|
|
|
10
|
-
you can control the browser in collaboration with the user.
|
|
15
|
+
you can control the browser in collaboration with the user. the user can help you get unstuck from captchas or difficult to find elements or reproducing a bug
|
|
11
16
|
|
|
12
17
|
## rules
|
|
13
18
|
|
|
14
19
|
- only call `page.close()` if the user asks you so or if you previously created this page yourself with `newPage`. do not close user created pages unless asked
|
|
15
|
-
-
|
|
20
|
+
- try to never sleep or run `page.waitForTimeout` unless you have to. there are better ways to wait for an element
|
|
21
|
+
- never close browser or context. NEVER call `browser.close()`
|
|
22
|
+
|
|
23
|
+
## event listeners
|
|
24
|
+
|
|
25
|
+
always detach event listener you create at the end of a message using `page.removeAllListeners()` or similar so that you never leak them in future messages
|
|
16
26
|
|
|
17
27
|
## utility functions
|
|
18
28
|
|
|
19
29
|
you have access to some functions in addition to playwright methods:
|
|
20
30
|
|
|
21
31
|
- `async accessibilitySnapshot(page)`: gets a human readable snapshot of clickable elements on the page. useful to see the overall structure of the page and what elements you can interact with
|
|
32
|
+
- `async activateTab(page)`: activates (brings to front and focuses) the browser tab for the given page
|
|
33
|
+
- `async resetPlaywright()`: recreates the CDP connection and resets the browser/page/context. Use this when the MCP stops responding, you get connection errors, assertion failures, or timeout issues. After calling this, the page and context variables are automatically updated in the execution environment. IMPORTANT: this completely resets the execution context, removing any custom properties you may have added to the global scope AND clearing all keys from the `state` object. Only `page`, `context`, `state` (empty), `console`, and utility functions will remain
|
|
22
34
|
|
|
23
35
|
example:
|
|
24
36
|
|
|
@@ -36,14 +48,6 @@ example:
|
|
|
36
48
|
- /url: /docs/installation
|
|
37
49
|
- link "Components" [ref=e14] [cursor=pointer]:
|
|
38
50
|
- /url: /docs/components
|
|
39
|
-
- link "Blocks" [ref=e15] [cursor=pointer]:
|
|
40
|
-
- /url: /blocks
|
|
41
|
-
- link "Charts" [ref=e16] [cursor=pointer]:
|
|
42
|
-
- /url: /charts/area
|
|
43
|
-
- link "Themes" [ref=e17] [cursor=pointer]:
|
|
44
|
-
- /url: /themes
|
|
45
|
-
- link "Colors" [ref=e18] [cursor=pointer]:
|
|
46
|
-
- /url: /colors
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a specific `ref` and interact with it.
|
|
@@ -52,7 +56,7 @@ Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a spec
|
|
|
52
56
|
|
|
53
57
|
## getting outputs of code execution
|
|
54
58
|
|
|
55
|
-
You can use `console.log` to print values you want to see in the tool call result
|
|
59
|
+
You can use `console.log` to print values you want to see in the tool call result. For seeing logs across runs you can store then in `state.logs` and then print them later, filtering and paginating them too.
|
|
56
60
|
|
|
57
61
|
## using page.evaluate
|
|
58
62
|
|
|
@@ -71,12 +75,10 @@ const pageInfo = await page.evaluate(() => ({
|
|
|
71
75
|
buttonCount: document.querySelectorAll('button').length,
|
|
72
76
|
readyState: document.readyState,
|
|
73
77
|
}))
|
|
74
|
-
console.log(
|
|
75
|
-
console.log('Number of buttons:', pageInfo.buttonCount)
|
|
76
|
-
console.log('Page ready state:', pageInfo.readyState)
|
|
78
|
+
console.log(pageInfo)
|
|
77
79
|
```
|
|
78
80
|
|
|
79
|
-
## read
|
|
81
|
+
## read logs during interactions
|
|
80
82
|
|
|
81
83
|
you can see logs during interactions with `page.on('console', msg => console.log(`Browser log: [${msg.type()}] ${msg.text()}`))`
|
|
82
84
|
|
|
@@ -84,10 +86,10 @@ then remember to call `context.removeAllListeners()` or `page.removeAllListeners
|
|
|
84
86
|
|
|
85
87
|
## reading past logs
|
|
86
88
|
|
|
87
|
-
you can keep track of logs using `
|
|
89
|
+
you can keep track of logs using `state.logs = []; page.on('console', msg => state.logs.push({ type: msg.type(), text: msg.text() }))`
|
|
88
90
|
|
|
89
91
|
later, you can read logs that you care about. For example, to get the last 100 logs that contain the word "error":
|
|
90
92
|
|
|
91
|
-
`console.log('errors:');
|
|
93
|
+
`console.log('errors:'); state.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
|
|
92
94
|
|
|
93
|
-
then to reset logs: `
|
|
95
|
+
then to reset logs: `state.logs = []` and to stop listening: `page.removeAllListeners('console')`
|
package/src/utils.ts
ADDED
package/README.md
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# PlayWriter MCP
|
|
2
|
-
|
|
3
|
-
A powerful browser automation MCP (Model Context Protocol) server that provides persistent browser sessions with advanced automation capabilities through Playwright.
|
|
4
|
-
|
|
5
|
-
## Key Differences from playwright-mcp
|
|
6
|
-
|
|
7
|
-
### ๐ Persistent Data Directory
|
|
8
|
-
PlayWriter MCP maintains a persistent user data directory between runs. This enables:
|
|
9
|
-
- Login sessions with Google and other OAuth providers
|
|
10
|
-
- Website authentication that persists across sessions
|
|
11
|
-
- Test automation without repeated logins
|
|
12
|
-
- Preserved cookies, local storage, and browser state
|
|
13
|
-
|
|
14
|
-
### ๐ก๏ธ Anti-Detection Features
|
|
15
|
-
Built-in detection prevention mechanisms allow automation on websites with bot protection:
|
|
16
|
-
- Works seamlessly with Google and other major platforms
|
|
17
|
-
- User-agent rotation
|
|
18
|
-
- Automation flag removal
|
|
19
|
-
- Realistic browser fingerprinting
|
|
20
|
-
|
|
21
|
-
### ๐ Shared Chrome Instance
|
|
22
|
-
- Single Chrome instance shared between all agents
|
|
23
|
-
- Each agent operates in its own tab
|
|
24
|
-
- Can reuse existing pages/tabs via `context.pages()` in the execute tool
|
|
25
|
-
- Find and switch between pages by URL or other criteria
|
|
26
|
-
- Efficient resource usage
|
|
27
|
-
- Better performance for multi-agent workflows
|
|
28
|
-
|
|
29
|
-
### ๐ Single Powerful Execute Tool
|
|
30
|
-
Instead of many granular tools, PlayWriter provides one flexible `execute` tool:
|
|
31
|
-
- Direct access to Playwright `page` and `context` objects
|
|
32
|
-
- Write complex automation logic with loops and conditions
|
|
33
|
-
- Full JavaScript execution capabilities
|
|
34
|
-
- Custom wait conditions and complex interactions
|
|
35
|
-
|
|
36
|
-
Example:
|
|
37
|
-
```javascript
|
|
38
|
-
// Complex wait logic with custom conditions
|
|
39
|
-
while (!(await page.isVisible('.success-message'))) {
|
|
40
|
-
await page.click('.retry-button');
|
|
41
|
-
await page.waitForTimeout(1000);
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### ๐ง Additional Tools
|
|
46
|
-
- `new_page` - Create a new browser tab/page
|
|
47
|
-
- `accessibility_snapshot` - Get page structure as JSON
|
|
48
|
-
- `console_logs` - Retrieve browser console messages
|
|
49
|
-
- `network_history` - Monitor network requests
|
|
50
|
-
|
|
51
|
-
## Roadmap
|
|
52
|
-
|
|
53
|
-
- โ๏ธ Cloud service integration for shared persistent state
|
|
54
|
-
- ๐งช Quality assertion tests in CI/CD pipelines
|
|
55
|
-
- ๐ค Multi-agent collaboration features
|
|
56
|
-
- ๐ Advanced debugging and monitoring capabilities
|
|
57
|
-
|
|
58
|
-
## Installation
|
|
59
|
-
|
|
60
|
-
See the main project documentation for installation and setup instructions.
|