playwriter 0.0.7 → 0.0.11
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.map +1 -1
- package/dist/extension/cdp-relay.js +78 -31
- package/dist/extension/cdp-relay.js.map +1 -1
- package/dist/extension/protocol.d.ts +31 -17
- package/dist/extension/protocol.d.ts.map +1 -1
- package/dist/extension/protocol.js.map +1 -1
- package/dist/mcp.js +332 -68
- package/dist/mcp.js.map +1 -1
- package/dist/mcp.test.d.ts +9 -1
- package/dist/mcp.test.d.ts.map +1 -1
- package/dist/mcp.test.js +1014 -6
- package/dist/mcp.test.js.map +1 -1
- package/dist/prompt.md +121 -3
- package/dist/start-relay-server.d.ts.map +1 -1
- package/dist/start-relay-server.js +15 -2
- package/dist/start-relay-server.js.map +1 -1
- package/dist/utils.d.ts +1 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +7 -2
- package/src/extension/cdp-relay.ts +82 -35
- package/src/extension/protocol.ts +31 -15
- package/src/mcp.test.ts +1191 -6
- package/src/mcp.ts +403 -76
- package/src/prompt.md +121 -3
- package/src/snapshots/hacker-news-initial-accessibility.md +64 -277
- package/src/snapshots/shadcn-ui-accessibility.md +81 -283
- package/src/start-relay-server.ts +19 -2
- package/src/utils.ts +2 -2
package/dist/mcp.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../src/mcp.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../src/mcp.test.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt.md
CHANGED
|
@@ -4,6 +4,10 @@ if you get an error Extension not running tell user to install and enable the pl
|
|
|
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
6
|
|
|
7
|
+
you can extract data from your script using `console.log`. But remember that console.log in `page.evaluate` callbacks are run in the browser, so you will not see them. Instead log the evaluate result
|
|
8
|
+
|
|
9
|
+
to keep some variables between calls, you can use `state` global object. constants and variables are reset between runs. Instead use code like `state.newPage = await browser.newPage();` to reuse the created page in later calls
|
|
10
|
+
|
|
7
11
|
you MUST use multiple execute tool calls for running complex logic. this ensures
|
|
8
12
|
- you have clear understanding of intermediate state between interactions
|
|
9
13
|
- you can split finding an element from interacting with it. making it simpler to understand what is the issue when an action is not successful
|
|
@@ -13,17 +17,53 @@ it will control an existing user Chrome window. The js code will be run in a sa
|
|
|
13
17
|
- 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
|
|
14
18
|
- context: the playwright browser context. you can do things like `await context.pages()` to see user connected pages
|
|
15
19
|
- 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
|
|
20
|
+
- require: node's require function to load modules
|
|
21
|
+
- all standard Node.js globals: setTimeout, setInterval, clearTimeout, clearInterval, URL, URLSearchParams, fetch, Buffer, TextEncoder, TextDecoder, crypto, AbortController, AbortSignal, structuredClone
|
|
16
22
|
|
|
17
23
|
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
|
|
18
24
|
|
|
19
25
|
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
|
|
20
26
|
|
|
27
|
+
## capabilities
|
|
28
|
+
|
|
29
|
+
examples of things playwriter MCP can do:
|
|
30
|
+
- monitor logs for a page while the user reproduces a but to let you understand what is causing a bug
|
|
31
|
+
- monitor logs while also controlling the page, then read collected logs and debug an issue
|
|
32
|
+
- monitor xhr network requests while scrolling an infinite scroll page to extract data from a website
|
|
33
|
+
- get accessibility snapshot to see clickable elements on the page, then click or interact with them to automate a task like ordering pizza
|
|
34
|
+
|
|
35
|
+
## finding the page to execute code in
|
|
36
|
+
|
|
37
|
+
if you plan to control a specific page for an url you can store it in `state` so you can reuse it later on:
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
const pages = context.pages().filter(x => x.url().includes('localhost'));
|
|
41
|
+
if (pages.length === 0) throw new Error('No page with URL matching localhost found');
|
|
42
|
+
if (pages.length > 1) throw new Error('Multiple pages with URL matching localhost found');
|
|
43
|
+
state.localhostPage = pages[0];
|
|
44
|
+
// do things with the page
|
|
45
|
+
await state.localhostPage.bringToFront();
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
IMPORTANT! never call bringToFront unless specifically asked by the user. It is very bothering to the user otherwise! you don't need to call bringToFront before being able to interact. you can very well interact without calling it first. on any page in the background you have access to.
|
|
49
|
+
|
|
21
50
|
## rules
|
|
22
51
|
|
|
23
52
|
- 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
|
|
24
53
|
- try to never sleep or run `page.waitForTimeout` unless you have to. there are better ways to wait for an element
|
|
25
54
|
- never close browser or context. NEVER call `browser.close()`
|
|
26
55
|
|
|
56
|
+
## always check the current page state after an action
|
|
57
|
+
|
|
58
|
+
after you click a button or submit a form you ALWAYS have to then check what is the current state of the page. you cannot assume what happened after doing an action. instead run the following code to know what happened after the action:
|
|
59
|
+
|
|
60
|
+
`console.log('url:', page.url()); console.log(await accessibilitySnapshot({ page }).then(x => x.slice(0, 1000)));`
|
|
61
|
+
|
|
62
|
+
if nothing happened you may need to wait before the action completes, using something like `page.waitForNavigation({timeout: 3000})` or `await page.waitForLoadState('networkidle', {timeout: 3000})`
|
|
63
|
+
|
|
64
|
+
if nothing happens it could also means that you clicked the wrong button or link. try to search for other appropriate elements to click or submit
|
|
65
|
+
|
|
66
|
+
|
|
27
67
|
## event listeners
|
|
28
68
|
|
|
29
69
|
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
|
|
@@ -32,8 +72,15 @@ always detach event listener you create at the end of a message using `page.remo
|
|
|
32
72
|
|
|
33
73
|
you have access to some functions in addition to playwright methods:
|
|
34
74
|
|
|
35
|
-
- `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
|
|
36
|
-
- `
|
|
75
|
+
- `async accessibilitySnapshot({ page, search, contextLines, showDiffSinceLastCall })`: 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.
|
|
76
|
+
- `page`: the page object to snapshot
|
|
77
|
+
- `search`: (optional) a string or regex to filter the snapshot. If provided, returns the first 10 matches with surrounding context
|
|
78
|
+
- `contextLines`: (optional) number of lines of context to show around each match (default: 10)
|
|
79
|
+
- `showDiffSinceLastCall`: (optional) if true, returns a unified diff patch showing only changes since the last snapshot call for this page. Disables search when enabled. Useful to see what changed after an action.
|
|
80
|
+
- `getLatestLogs({ page, count, search })`: retrieves browser console logs. The system automatically captures and stores up to 5000 logs per page. Logs are cleared when a page reloads or navigates.
|
|
81
|
+
- `page`: (optional) filter logs by a specific page instance. Only returns logs from that page
|
|
82
|
+
- `count`: (optional) limit number of logs to return. If not specified, returns all available logs
|
|
83
|
+
- `search`: (optional) string or regex to filter logs. Only returns logs that match
|
|
37
84
|
|
|
38
85
|
To bring a tab to front and focus it, use the standard Playwright method `await page.bringToFront()`
|
|
39
86
|
|
|
@@ -57,7 +104,37 @@ example:
|
|
|
57
104
|
|
|
58
105
|
Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a specific `ref` and interact with it.
|
|
59
106
|
|
|
60
|
-
`const componentsLink = page.locator('aria-ref=e14').click()`
|
|
107
|
+
`const componentsLink = page.locator('aria-ref=e14').click()`
|
|
108
|
+
|
|
109
|
+
IMPORTANT: notice that we do not add any quotes in `aria-ref`! it MUST be called without quotes
|
|
110
|
+
|
|
111
|
+
## getting selector for a locator identified by snapshot aria-ref
|
|
112
|
+
|
|
113
|
+
in some cases you want to get a selector for a locator you just identified using `const element = page.locator('aria-ref=${ref}')`. To do so you can use `await getLocatorStringForElement(element)`. This is useful if you need to find other elements of the same type in a list for example. If you know the selector you can usually change a bit the selector to find the other elements of the same type in the list or table
|
|
114
|
+
|
|
115
|
+
```js
|
|
116
|
+
const loc = page.locator('aria-ref=123');
|
|
117
|
+
console.log(await getLocatorStringForElement(loc));
|
|
118
|
+
// => "getByRole('button', { name: 'Save' })" or similar
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## finding specific elements with snapshot
|
|
122
|
+
|
|
123
|
+
You can use `search` to find specific elements in the snapshot without reading the whole page structure. This is useful for finding forms, textareas, or specific text.
|
|
124
|
+
|
|
125
|
+
Example: find a textarea or form using case-insensitive regex:
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
const snapshot = await accessibilitySnapshot({ page, search: /textarea|form/i })
|
|
129
|
+
console.log(snapshot)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Example: find elements containing "Login":
|
|
133
|
+
|
|
134
|
+
```js
|
|
135
|
+
const snapshot = await accessibilitySnapshot({ page, search: "Login" })
|
|
136
|
+
console.log(snapshot)
|
|
137
|
+
```
|
|
61
138
|
|
|
62
139
|
## getting outputs of code execution
|
|
63
140
|
|
|
@@ -98,3 +175,44 @@ later, you can read logs that you care about. For example, to get the last 100 l
|
|
|
98
175
|
`console.log('errors:'); state.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
|
|
99
176
|
|
|
100
177
|
then to reset logs: `state.logs = []` and to stop listening: `page.removeAllListeners('console')`
|
|
178
|
+
|
|
179
|
+
## using getLatestLogs to read browser console logs
|
|
180
|
+
|
|
181
|
+
The system automatically captures and stores up to 5000 browser console logs per page. Logs are automatically cleared when a page reloads or navigates to a new URL. You can retrieve logs using the `getLatestLogs` function:
|
|
182
|
+
|
|
183
|
+
```js
|
|
184
|
+
// Get all browser console logs from all pages (up to 5000 per page)
|
|
185
|
+
const allLogs = await getLatestLogs()
|
|
186
|
+
console.log(allLogs)
|
|
187
|
+
|
|
188
|
+
// Get last 50 browser error logs
|
|
189
|
+
const errorLogs = await getLatestLogs({ count: 50, search: /\[error\]/ })
|
|
190
|
+
console.log(errorLogs)
|
|
191
|
+
|
|
192
|
+
// Get all browser logs from the current page only
|
|
193
|
+
const pageLogs = await getLatestLogs({ page })
|
|
194
|
+
console.log(pageLogs)
|
|
195
|
+
|
|
196
|
+
// Find browser logs containing specific text
|
|
197
|
+
const authLogs = await getLatestLogs({ search: 'authentication failed' })
|
|
198
|
+
console.log(authLogs)
|
|
199
|
+
|
|
200
|
+
// Example output format:
|
|
201
|
+
// [log] User clicked login button
|
|
202
|
+
// [error] Failed to fetch /api/auth
|
|
203
|
+
// [warn] Session expiring soon
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## loading file content into inputs
|
|
207
|
+
|
|
208
|
+
you can use the `require` function to read files and fill inputs with their content:
|
|
209
|
+
|
|
210
|
+
```js
|
|
211
|
+
const fs = require('node:fs'); const content = fs.readFileSync('/path/to/file.txt', 'utf-8'); await page.locator('textarea').fill(content)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
for example, to fill a textarea with the content of a markdown file:
|
|
215
|
+
|
|
216
|
+
```js
|
|
217
|
+
const fs = require('node:fs'); const readme = fs.readFileSync('./README.md', 'utf-8'); await page.locator('#description').fill(readme); console.log('Filled textarea with README content')
|
|
218
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAuCA,wBAAsB,WAAW,CAAC,EAAE,IAAY,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;;GAmBzE"}
|
|
@@ -2,17 +2,30 @@ import { startPlayWriterCDPRelayServer } from './extension/cdp-relay.js';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import util from 'node:util';
|
|
5
6
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
7
|
const logFilePath = path.join(__dirname, '..', 'relay-server.log');
|
|
8
|
+
process.title = 'playwriter-ws-server';
|
|
7
9
|
fs.writeFileSync(logFilePath, '');
|
|
8
10
|
const log = (...args) => {
|
|
9
|
-
const message = args.map(arg => typeof arg === 'string' ? arg :
|
|
10
|
-
fs.
|
|
11
|
+
const message = args.map(arg => typeof arg === 'string' ? arg : util.inspect(arg, { depth: null, colors: false })).join(' ');
|
|
12
|
+
return fs.promises.appendFile(logFilePath, message + '\n');
|
|
11
13
|
};
|
|
12
14
|
const logger = {
|
|
13
15
|
log,
|
|
14
16
|
error: log
|
|
15
17
|
};
|
|
18
|
+
process.on('uncaughtException', async (err) => {
|
|
19
|
+
await logger.error('Uncaught Exception:', err);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
});
|
|
22
|
+
process.on('unhandledRejection', async (reason) => {
|
|
23
|
+
await logger.error('Unhandled Rejection:', reason);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
process.on('exit', async (code) => {
|
|
27
|
+
await logger.log(`Process exiting with code: ${code}`);
|
|
28
|
+
});
|
|
16
29
|
export async function startServer({ port = 19988 } = {}) {
|
|
17
30
|
const server = await startPlayWriterCDPRelayServer({ port, logger });
|
|
18
31
|
console.log('CDP Relay Server running. Press Ctrl+C to stop.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-relay-server.js","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"start-relay-server.js","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,UAGpG"}
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export function getCdpUrl({ port = 19988, host = '127.0.0.1'
|
|
2
|
-
const id =
|
|
1
|
+
export function getCdpUrl({ port = 19988, host = '127.0.0.1' } = {}) {
|
|
2
|
+
const id = `${Math.random().toString(36).substring(2, 15)}_${Date.now()}`;
|
|
3
3
|
return `ws://${host}:${port}/cdp/${id}`;
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +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,
|
|
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,KAAuC,EAAE;IACnG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IACzE,OAAO,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,EAAE,CAAA;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwriter",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.11",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"watch": "tsc -w",
|
|
13
13
|
"typecheck": "tsc --noEmit",
|
|
14
14
|
"mcp": "vite-node src/mcp.ts",
|
|
15
|
-
"test": "vitest run",
|
|
15
|
+
"test": "vitest run -u",
|
|
16
16
|
"test:watch": "vitest"
|
|
17
17
|
},
|
|
18
18
|
"bin": "./bin.js",
|
|
@@ -26,8 +26,11 @@
|
|
|
26
26
|
"author": "Tommaso De Rossi, morse <beats.by.morse@gmail.com>",
|
|
27
27
|
"license": "",
|
|
28
28
|
"devDependencies": {
|
|
29
|
+
"@mizchi/selector-generator": "1.50.0-next",
|
|
30
|
+
"@types/chrome": "^0.0.315",
|
|
29
31
|
"@types/node": "^24.10.1",
|
|
30
32
|
"@vitest/ui": "^4.0.8",
|
|
33
|
+
"mcp-extension": "workspace:*",
|
|
31
34
|
"vite-node": "^5.0.0",
|
|
32
35
|
"vitest": "^4.0.8"
|
|
33
36
|
},
|
|
@@ -37,8 +40,10 @@
|
|
|
37
40
|
"@modelcontextprotocol/sdk": "^1.21.1",
|
|
38
41
|
"chalk": "^5.6.2",
|
|
39
42
|
"devtools-protocol": "^0.0.1543509",
|
|
43
|
+
"diff": "^8.0.2",
|
|
40
44
|
"hono": "^4.10.6",
|
|
41
45
|
"playwright-core": "^1.56.1",
|
|
46
|
+
"string-dedent": "^3.0.2",
|
|
42
47
|
"user-agents": "^1.1.669",
|
|
43
48
|
"ws": "^8.18.3",
|
|
44
49
|
"zod": "^3"
|
|
@@ -137,7 +137,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
async function sendToExtension({ method, params }: { method: string; params?: any }) {
|
|
140
|
+
async function sendToExtension({ method, params, timeout = 30000 }: { method: string; params?: any; timeout?: number }) {
|
|
141
141
|
if (!extensionWs) {
|
|
142
142
|
throw new Error('Extension not connected')
|
|
143
143
|
}
|
|
@@ -148,7 +148,21 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
148
148
|
extensionWs.send(JSON.stringify(message))
|
|
149
149
|
|
|
150
150
|
return new Promise((resolve, reject) => {
|
|
151
|
-
|
|
151
|
+
const timeoutId = setTimeout(() => {
|
|
152
|
+
extensionPendingRequests.delete(id)
|
|
153
|
+
reject(new Error(`Extension request timeout after ${timeout}ms: ${method}`))
|
|
154
|
+
}, timeout)
|
|
155
|
+
|
|
156
|
+
extensionPendingRequests.set(id, {
|
|
157
|
+
resolve: (result) => {
|
|
158
|
+
clearTimeout(timeoutId)
|
|
159
|
+
resolve(result)
|
|
160
|
+
},
|
|
161
|
+
reject: (error) => {
|
|
162
|
+
clearTimeout(timeoutId)
|
|
163
|
+
reject(error)
|
|
164
|
+
}
|
|
165
|
+
})
|
|
152
166
|
})
|
|
153
167
|
}
|
|
154
168
|
|
|
@@ -234,6 +248,18 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
234
248
|
return c.text('OK')
|
|
235
249
|
})
|
|
236
250
|
|
|
251
|
+
app.post('/mcp-log', async (c) => {
|
|
252
|
+
try {
|
|
253
|
+
const { level, args } = await c.req.json()
|
|
254
|
+
const logFn = (logger as any)[level] || logger.log
|
|
255
|
+
const prefix = chalk.red(`[MCP] [${level.toUpperCase()}]`)
|
|
256
|
+
logFn(prefix, ...args)
|
|
257
|
+
return c.json({ ok: true })
|
|
258
|
+
} catch {
|
|
259
|
+
return c.json({ ok: false }, 400)
|
|
260
|
+
}
|
|
261
|
+
})
|
|
262
|
+
|
|
237
263
|
app.get('/cdp/:clientId?', upgradeWebSocket((c) => {
|
|
238
264
|
const clientId = c.req.param('clientId') || 'default'
|
|
239
265
|
|
|
@@ -285,18 +311,20 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
285
311
|
|
|
286
312
|
if (method === 'Target.setAutoAttach' && !sessionId) {
|
|
287
313
|
for (const target of connectedTargets.values()) {
|
|
314
|
+
const attachedPayload = {
|
|
315
|
+
method: 'Target.attachedToTarget',
|
|
316
|
+
params: {
|
|
317
|
+
sessionId: target.sessionId,
|
|
318
|
+
targetInfo: {
|
|
319
|
+
...target.targetInfo,
|
|
320
|
+
attached: true
|
|
321
|
+
},
|
|
322
|
+
waitingForDebugger: false
|
|
323
|
+
}
|
|
324
|
+
} satisfies CDPEvent
|
|
325
|
+
logger.log(chalk.magenta('[Server] Target.attachedToTarget full payload:'), JSON.stringify(attachedPayload))
|
|
288
326
|
sendToPlaywright({
|
|
289
|
-
message:
|
|
290
|
-
method: 'Target.attachedToTarget',
|
|
291
|
-
params: {
|
|
292
|
-
sessionId: target.sessionId,
|
|
293
|
-
targetInfo: {
|
|
294
|
-
...target.targetInfo,
|
|
295
|
-
attached: true
|
|
296
|
-
},
|
|
297
|
-
waitingForDebugger: false
|
|
298
|
-
}
|
|
299
|
-
} satisfies CDPEvent,
|
|
327
|
+
message: attachedPayload,
|
|
300
328
|
clientId,
|
|
301
329
|
source: 'server'
|
|
302
330
|
})
|
|
@@ -335,32 +363,21 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
335
363
|
return {
|
|
336
364
|
onOpen(_event, ws) {
|
|
337
365
|
if (extensionWs) {
|
|
338
|
-
logger.log('
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
logger.log('Extension connecting, resetting server state')
|
|
344
|
-
|
|
345
|
-
// Clear stale targets from previous connections
|
|
346
|
-
const staleTargetCount = connectedTargets.size
|
|
347
|
-
if (staleTargetCount > 0) {
|
|
348
|
-
logger.log(`Clearing ${staleTargetCount} stale targets from previous connection`)
|
|
366
|
+
logger.log(chalk.yellow('Closing existing extension connection to replace with new one'))
|
|
367
|
+
extensionWs.close(4001, 'Extension Replaced')
|
|
368
|
+
|
|
369
|
+
// Clear state from the old connection to prevent leaks
|
|
349
370
|
connectedTargets.clear()
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Reject any pending requests from previous connection
|
|
353
|
-
const pendingRequestCount = extensionPendingRequests.size
|
|
354
|
-
if (pendingRequestCount > 0) {
|
|
355
|
-
logger.log(`Rejecting ${pendingRequestCount} pending requests from previous connection`)
|
|
356
371
|
for (const pending of extensionPendingRequests.values()) {
|
|
357
|
-
pending.reject(new Error('Extension
|
|
372
|
+
pending.reject(new Error('Extension connection replaced'))
|
|
358
373
|
}
|
|
359
374
|
extensionPendingRequests.clear()
|
|
375
|
+
|
|
376
|
+
for (const client of playwrightClients.values()) {
|
|
377
|
+
client.ws.close(1000, 'Extension Replaced')
|
|
378
|
+
}
|
|
379
|
+
playwrightClients.clear()
|
|
360
380
|
}
|
|
361
|
-
|
|
362
|
-
// Reset message ID counter
|
|
363
|
-
extensionMessageId = 0
|
|
364
381
|
|
|
365
382
|
extensionWs = ws
|
|
366
383
|
logger.log('Extension connected with clean state')
|
|
@@ -390,6 +407,11 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
390
407
|
} else {
|
|
391
408
|
pending.resolve(message.result)
|
|
392
409
|
}
|
|
410
|
+
} else if (message.method === 'log') {
|
|
411
|
+
const { level, args } = message.params
|
|
412
|
+
const logFn = (logger as any)[level] || logger.log
|
|
413
|
+
const prefix = chalk.yellow(`[Extension] [${level.toUpperCase()}]`)
|
|
414
|
+
logFn(prefix, ...args)
|
|
393
415
|
} else {
|
|
394
416
|
const extensionEvent = message as ExtensionEventMessage
|
|
395
417
|
|
|
@@ -409,6 +431,8 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
409
431
|
if (method === 'Target.attachedToTarget') {
|
|
410
432
|
const targetParams = params as Protocol.Target.AttachedToTargetEvent
|
|
411
433
|
|
|
434
|
+
logger.log(chalk.yellow('[Extension] Target.attachedToTarget full payload:'), JSON.stringify({ method, params: targetParams, sessionId }))
|
|
435
|
+
|
|
412
436
|
// Check if we already sent this target to clients (e.g., from Target.setAutoAttach response)
|
|
413
437
|
const alreadyConnected = connectedTargets.has(targetParams.sessionId)
|
|
414
438
|
|
|
@@ -440,6 +464,22 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
440
464
|
} as CDPEvent,
|
|
441
465
|
source: 'extension'
|
|
442
466
|
})
|
|
467
|
+
} else if (method === 'Target.targetInfoChanged') {
|
|
468
|
+
const infoParams = params as Protocol.Target.TargetInfoChangedEvent
|
|
469
|
+
for (const target of connectedTargets.values()) {
|
|
470
|
+
if (target.targetId === infoParams.targetInfo.targetId) {
|
|
471
|
+
target.targetInfo = infoParams.targetInfo
|
|
472
|
+
break
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
sendToPlaywright({
|
|
477
|
+
message: {
|
|
478
|
+
method: 'Target.targetInfoChanged',
|
|
479
|
+
params: infoParams
|
|
480
|
+
} as CDPEvent,
|
|
481
|
+
source: 'extension'
|
|
482
|
+
})
|
|
443
483
|
} else {
|
|
444
484
|
sendToPlaywright({
|
|
445
485
|
message: {
|
|
@@ -453,9 +493,16 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.
|
|
|
453
493
|
}
|
|
454
494
|
},
|
|
455
495
|
|
|
456
|
-
onClose() {
|
|
496
|
+
onClose(event, ws) {
|
|
457
497
|
logger.log('Extension disconnected')
|
|
458
498
|
|
|
499
|
+
// If this is an old connection closing after we've already established a new one,
|
|
500
|
+
// don't clear the global state
|
|
501
|
+
if (extensionWs && extensionWs !== ws) {
|
|
502
|
+
logger.log('Old extension connection closed, keeping new one active')
|
|
503
|
+
return
|
|
504
|
+
}
|
|
505
|
+
|
|
459
506
|
for (const pending of extensionPendingRequests.values()) {
|
|
460
507
|
pending.reject(new Error('Extension connection closed'))
|
|
461
508
|
}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
+
import { CDPCommand, CDPEvent, ProtocolMapping } from '../cdp-types.js'
|
|
2
|
+
|
|
1
3
|
export const VERSION = 1
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
method: 'attachToTab'
|
|
7
|
-
params?: object
|
|
8
|
-
}
|
|
9
|
-
| {
|
|
5
|
+
type ForwardCDPCommand =
|
|
6
|
+
{
|
|
7
|
+
[K in keyof ProtocolMapping.Commands]: {
|
|
10
8
|
id: number
|
|
11
9
|
method: 'forwardCDPCommand'
|
|
12
10
|
params: {
|
|
13
|
-
method:
|
|
11
|
+
method: K
|
|
14
12
|
sessionId?: string
|
|
15
|
-
params?:
|
|
13
|
+
params?: ProtocolMapping.Commands[K]['paramsType'][0]
|
|
16
14
|
}
|
|
17
15
|
}
|
|
16
|
+
}[keyof ProtocolMapping.Commands]
|
|
17
|
+
|
|
18
|
+
export type ExtensionCommandMessage = ForwardCDPCommand
|
|
18
19
|
|
|
19
20
|
export type ExtensionResponseMessage = {
|
|
20
21
|
id: number
|
|
@@ -22,13 +23,28 @@ export type ExtensionResponseMessage = {
|
|
|
22
23
|
error?: string
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* This produces a discriminated union for narrowing, similar to ForwardCDPCommand,
|
|
28
|
+
* but for forwarded CDP events. Uses CDPEvent to maintain proper type extraction.
|
|
29
|
+
*/
|
|
30
|
+
export type ExtensionEventMessage =
|
|
31
|
+
{
|
|
32
|
+
[K in keyof ProtocolMapping.Events]: {
|
|
33
|
+
method: 'forwardCDPEvent'
|
|
34
|
+
params: {
|
|
35
|
+
method: CDPEvent<K>['method']
|
|
36
|
+
sessionId?: string
|
|
37
|
+
params?: CDPEvent<K>['params']
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}[keyof ProtocolMapping.Events]
|
|
41
|
+
|
|
42
|
+
export type ExtensionLogMessage = {
|
|
43
|
+
method: 'log'
|
|
27
44
|
params: {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
params?: any
|
|
45
|
+
level: 'log' | 'debug' | 'info' | 'warn' | 'error'
|
|
46
|
+
args: string[]
|
|
31
47
|
}
|
|
32
48
|
}
|
|
33
49
|
|
|
34
|
-
export type ExtensionMessage = ExtensionResponseMessage | ExtensionEventMessage
|
|
50
|
+
export type ExtensionMessage = ExtensionResponseMessage | ExtensionEventMessage | ExtensionLogMessage
|