playwright-e2e-mcp 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +255 -35
- package/dist/cli/ci.d.ts +29 -0
- package/dist/cli/ci.js +145 -0
- package/dist/cli/ci.js.map +1 -0
- package/dist/cli/init.d.ts +40 -0
- package/dist/cli/init.js +218 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +15 -0
- package/dist/server.js +54 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/diagnose-flaky.d.ts +42 -4
- package/dist/tools/diagnose-flaky.js +342 -98
- package/dist/tools/diagnose-flaky.js.map +1 -1
- package/dist/types/index.d.ts +29 -0
- package/dist/utils/attempts-reporter.d.ts +19 -0
- package/dist/utils/attempts-reporter.js +96 -0
- package/dist/utils/attempts-reporter.js.map +1 -0
- package/dist/utils/playwright-runner.js +16 -1
- package/dist/utils/playwright-runner.js.map +1 -1
- package/dist/utils/report-parser.d.ts +1 -0
- package/dist/utils/report-parser.js +1 -1
- package/dist/utils/report-parser.js.map +1 -1
- package/package.json +18 -6
- package/skill/README.md +34 -0
- package/skill/playwright-e2e-mcp/SKILL.md +196 -0
- package/skill/playwright-e2e-mcp/references/example-session.md +53 -0
- package/skill/playwright-e2e-mcp/references/failure-kinds.md +32 -0
- package/skill/playwright-e2e-mcp/references/setup.md +120 -0
- package/skill/playwright-e2e-mcp/references/tools.md +161 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `playwright-e2e-mcp init`: one command an agent (or a person) runs to wire
|
|
3
|
+
* the server and the agent skill into a project, for whichever clients the
|
|
4
|
+
* project uses. Config files are merged, never replaced: other servers and
|
|
5
|
+
* settings stay as they are, an existing playwright-e2e entry is updated in
|
|
6
|
+
* place, and a file that is not valid JSON is left untouched and reported.
|
|
7
|
+
*
|
|
8
|
+
* Exit codes: 0 done (or nothing to do), 1 a file could not be updated,
|
|
9
|
+
* 2 bad arguments.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SERVER_NAME = "playwright-e2e";
|
|
12
|
+
export declare const SKILL_NAME = "playwright-e2e-mcp";
|
|
13
|
+
export declare const CLIENTS: readonly ["claude", "cursor", "vscode", "gemini", "codex", "windsurf"];
|
|
14
|
+
export type Client = (typeof CLIENTS)[number];
|
|
15
|
+
export declare const INIT_USAGE: string;
|
|
16
|
+
export interface InitOptions {
|
|
17
|
+
projectRoot: string;
|
|
18
|
+
clients?: Client[];
|
|
19
|
+
tools?: string;
|
|
20
|
+
skill: boolean;
|
|
21
|
+
dryRun: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function parseInitArgs(argv: string[], cwd?: string): InitOptions;
|
|
24
|
+
/** Clients whose project folder or config file already exists. */
|
|
25
|
+
export declare function detectClients(root: string): Client[];
|
|
26
|
+
export interface PlannedChange {
|
|
27
|
+
client: Client | 'skill';
|
|
28
|
+
file: string;
|
|
29
|
+
action: 'create' | 'update' | 'unchanged' | 'error';
|
|
30
|
+
content?: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function planInit(options: InitOptions, home?: string): {
|
|
34
|
+
clients: Client[];
|
|
35
|
+
changes: PlannedChange[];
|
|
36
|
+
};
|
|
37
|
+
/** The skill folder shipped in the npm package (dist/cli → ../../skill). */
|
|
38
|
+
export declare function bundledSkillDir(): string;
|
|
39
|
+
export declare function applyInit(changes: PlannedChange[], skillSource?: string): void;
|
|
40
|
+
export declare function runInit(argv: string[], out?: (line: string) => void): number;
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `playwright-e2e-mcp init`: one command an agent (or a person) runs to wire
|
|
3
|
+
* the server and the agent skill into a project, for whichever clients the
|
|
4
|
+
* project uses. Config files are merged, never replaced: other servers and
|
|
5
|
+
* settings stay as they are, an existing playwright-e2e entry is updated in
|
|
6
|
+
* place, and a file that is not valid JSON is left untouched and reported.
|
|
7
|
+
*
|
|
8
|
+
* Exit codes: 0 done (or nothing to do), 1 a file could not be updated,
|
|
9
|
+
* 2 bad arguments.
|
|
10
|
+
*/
|
|
11
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
12
|
+
import os from 'node:os';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { parseArgs } from 'node:util';
|
|
16
|
+
export const SERVER_NAME = 'playwright-e2e';
|
|
17
|
+
export const SKILL_NAME = 'playwright-e2e-mcp';
|
|
18
|
+
export const CLIENTS = ['claude', 'cursor', 'vscode', 'gemini', 'codex', 'windsurf'];
|
|
19
|
+
export const INIT_USAGE = [
|
|
20
|
+
'Usage: playwright-e2e-mcp init [options]',
|
|
21
|
+
'',
|
|
22
|
+
'Adds the playwright-e2e MCP server and the playwright-e2e-mcp agent skill to a',
|
|
23
|
+
'project. Existing config files are merged, never overwritten.',
|
|
24
|
+
'',
|
|
25
|
+
' --client <list> comma separated: claude, cursor, vscode, gemini, codex,',
|
|
26
|
+
' windsurf, or all (default: the clients the project already',
|
|
27
|
+
' uses, or claude,cursor,vscode when none is found)',
|
|
28
|
+
' --project-root <dir> project directory (default: cwd)',
|
|
29
|
+
' --tools <list> expose only these tools/profiles (e.g. core), see --help',
|
|
30
|
+
' --no-skill do not install the agent skill',
|
|
31
|
+
' --dry-run print what would change without writing',
|
|
32
|
+
'',
|
|
33
|
+
'Files (project scope): claude .mcp.json · cursor .cursor/mcp.json ·',
|
|
34
|
+
'vscode .vscode/mcp.json · gemini .gemini/settings.json · codex .codex/config.toml.',
|
|
35
|
+
'windsurf has no project file; it writes ~/.codeium/windsurf/mcp_config.json.',
|
|
36
|
+
'Skill: .agents/skills/ (read by Codex, Gemini, Cursor and others) and',
|
|
37
|
+
'.claude/skills/ when claude is selected.',
|
|
38
|
+
'',
|
|
39
|
+
].join('\n');
|
|
40
|
+
export function parseInitArgs(argv, cwd = process.cwd()) {
|
|
41
|
+
const { values } = parseArgs({
|
|
42
|
+
args: argv,
|
|
43
|
+
strict: true,
|
|
44
|
+
options: {
|
|
45
|
+
client: { type: 'string' },
|
|
46
|
+
'project-root': { type: 'string' },
|
|
47
|
+
tools: { type: 'string' },
|
|
48
|
+
'no-skill': { type: 'boolean' },
|
|
49
|
+
'dry-run': { type: 'boolean' },
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
let clients;
|
|
53
|
+
if (values.client !== undefined) {
|
|
54
|
+
const names = values.client.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean);
|
|
55
|
+
if (names.includes('all'))
|
|
56
|
+
clients = [...CLIENTS];
|
|
57
|
+
else {
|
|
58
|
+
const unknown = names.filter((n) => !CLIENTS.includes(n));
|
|
59
|
+
if (unknown.length || !names.length) {
|
|
60
|
+
throw new Error(`--client must list ${CLIENTS.join(', ')} or all (got: ${unknown.join(', ') || 'nothing'})`);
|
|
61
|
+
}
|
|
62
|
+
clients = [...new Set(names)];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
projectRoot: path.resolve(cwd, values['project-root'] ?? '.'),
|
|
67
|
+
clients,
|
|
68
|
+
tools: values.tools,
|
|
69
|
+
skill: !values['no-skill'],
|
|
70
|
+
dryRun: Boolean(values['dry-run']),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Clients whose project folder or config file already exists. */
|
|
74
|
+
export function detectClients(root) {
|
|
75
|
+
const has = (p) => existsSync(path.join(root, p));
|
|
76
|
+
const found = [];
|
|
77
|
+
if (has('.mcp.json') || has('.claude') || has('CLAUDE.md'))
|
|
78
|
+
found.push('claude');
|
|
79
|
+
if (has('.cursor'))
|
|
80
|
+
found.push('cursor');
|
|
81
|
+
if (has('.vscode'))
|
|
82
|
+
found.push('vscode');
|
|
83
|
+
if (has('.gemini') || has('GEMINI.md'))
|
|
84
|
+
found.push('gemini');
|
|
85
|
+
if (has('.codex'))
|
|
86
|
+
found.push('codex');
|
|
87
|
+
return found;
|
|
88
|
+
}
|
|
89
|
+
function serverArgs(tools) {
|
|
90
|
+
return tools ? ['-y', 'playwright-e2e-mcp', `--tools=${tools}`] : ['-y', 'playwright-e2e-mcp'];
|
|
91
|
+
}
|
|
92
|
+
/** Merges our entry into a JSON config under `key`, keeping everything else. */
|
|
93
|
+
function planJson(file, key, entry, client) {
|
|
94
|
+
let data = {};
|
|
95
|
+
let existed = false;
|
|
96
|
+
if (existsSync(file)) {
|
|
97
|
+
existed = true;
|
|
98
|
+
const raw = readFileSync(file, 'utf8');
|
|
99
|
+
if (raw.trim()) {
|
|
100
|
+
try {
|
|
101
|
+
const parsed = JSON.parse(raw);
|
|
102
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
103
|
+
throw new Error('not a JSON object');
|
|
104
|
+
data = parsed;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
return { client, file, action: 'error', error: `not valid JSON (${err.message}); left unchanged` };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const current = data[key];
|
|
112
|
+
const servers = current && typeof current === 'object' && !Array.isArray(current) ? { ...current } : {};
|
|
113
|
+
const before = JSON.stringify(servers[SERVER_NAME]);
|
|
114
|
+
servers[SERVER_NAME] = entry;
|
|
115
|
+
if (existed && before === JSON.stringify(entry))
|
|
116
|
+
return { client, file, action: 'unchanged' };
|
|
117
|
+
return { client, file, action: existed ? 'update' : 'create', content: `${JSON.stringify({ ...data, [key]: servers }, null, 2)}\n` };
|
|
118
|
+
}
|
|
119
|
+
/** Codex reads TOML; append our table unless one is already there. */
|
|
120
|
+
function planCodex(file, args) {
|
|
121
|
+
const table = `[mcp_servers.${SERVER_NAME}]`;
|
|
122
|
+
const block = `${table}\ncommand = "npx"\nargs = [${args.map((a) => JSON.stringify(a)).join(', ')}]\n`;
|
|
123
|
+
if (!existsSync(file))
|
|
124
|
+
return { client: 'codex', file, action: 'create', content: block };
|
|
125
|
+
const raw = readFileSync(file, 'utf8');
|
|
126
|
+
if (raw.includes(table))
|
|
127
|
+
return { client: 'codex', file, action: 'unchanged' };
|
|
128
|
+
const sep = raw.length === 0 || raw.endsWith('\n\n') ? '' : raw.endsWith('\n') ? '\n' : '\n\n';
|
|
129
|
+
return { client: 'codex', file, action: 'update', content: `${raw}${sep}${block}` };
|
|
130
|
+
}
|
|
131
|
+
export function planInit(options, home = os.homedir()) {
|
|
132
|
+
const root = options.projectRoot;
|
|
133
|
+
let clients = options.clients ?? detectClients(root);
|
|
134
|
+
if (!clients.length)
|
|
135
|
+
clients = ['claude', 'cursor', 'vscode'];
|
|
136
|
+
const args = serverArgs(options.tools);
|
|
137
|
+
const stdio = { command: 'npx', args };
|
|
138
|
+
const changes = [];
|
|
139
|
+
for (const client of clients) {
|
|
140
|
+
switch (client) {
|
|
141
|
+
case 'claude':
|
|
142
|
+
changes.push(planJson(path.join(root, '.mcp.json'), 'mcpServers', { type: 'stdio', ...stdio }, client));
|
|
143
|
+
break;
|
|
144
|
+
case 'cursor':
|
|
145
|
+
changes.push(planJson(path.join(root, '.cursor', 'mcp.json'), 'mcpServers', stdio, client));
|
|
146
|
+
break;
|
|
147
|
+
case 'vscode':
|
|
148
|
+
changes.push(planJson(path.join(root, '.vscode', 'mcp.json'), 'servers', { type: 'stdio', ...stdio }, client));
|
|
149
|
+
break;
|
|
150
|
+
case 'gemini':
|
|
151
|
+
changes.push(planJson(path.join(root, '.gemini', 'settings.json'), 'mcpServers', stdio, client));
|
|
152
|
+
break;
|
|
153
|
+
case 'codex':
|
|
154
|
+
changes.push(planCodex(path.join(root, '.codex', 'config.toml'), args));
|
|
155
|
+
break;
|
|
156
|
+
case 'windsurf':
|
|
157
|
+
changes.push(planJson(path.join(home, '.codeium', 'windsurf', 'mcp_config.json'), 'mcpServers', stdio, client));
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (options.skill) {
|
|
162
|
+
const targets = [path.join(root, '.agents', 'skills', SKILL_NAME)];
|
|
163
|
+
if (clients.includes('claude'))
|
|
164
|
+
targets.push(path.join(root, '.claude', 'skills', SKILL_NAME));
|
|
165
|
+
for (const dir of targets) {
|
|
166
|
+
changes.push({ client: 'skill', file: dir, action: existsSync(path.join(dir, 'SKILL.md')) ? 'update' : 'create' });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return { clients, changes };
|
|
170
|
+
}
|
|
171
|
+
/** The skill folder shipped in the npm package (dist/cli → ../../skill). */
|
|
172
|
+
export function bundledSkillDir() {
|
|
173
|
+
return fileURLToPath(new URL(`../../skill/${SKILL_NAME}/`, import.meta.url));
|
|
174
|
+
}
|
|
175
|
+
export function applyInit(changes, skillSource = bundledSkillDir()) {
|
|
176
|
+
for (const change of changes) {
|
|
177
|
+
if (change.action === 'error' || change.action === 'unchanged')
|
|
178
|
+
continue;
|
|
179
|
+
if (change.client === 'skill') {
|
|
180
|
+
mkdirSync(change.file, { recursive: true });
|
|
181
|
+
cpSync(skillSource, change.file, { recursive: true, force: true });
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
mkdirSync(path.dirname(change.file), { recursive: true });
|
|
185
|
+
writeFileSync(change.file, change.content ?? '');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
export function runInit(argv, out = (l) => process.stdout.write(`${l}\n`)) {
|
|
189
|
+
let options;
|
|
190
|
+
try {
|
|
191
|
+
options = parseInitArgs(argv);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
out(`init: ${err.message}\n`);
|
|
195
|
+
out(INIT_USAGE);
|
|
196
|
+
return 2;
|
|
197
|
+
}
|
|
198
|
+
const { clients, changes } = planInit(options);
|
|
199
|
+
if (options.skill && !existsSync(path.join(bundledSkillDir(), 'SKILL.md'))) {
|
|
200
|
+
out('init: the skill files are missing from this install; skipping the skill.');
|
|
201
|
+
for (const c of changes)
|
|
202
|
+
if (c.client === 'skill')
|
|
203
|
+
c.action = 'unchanged';
|
|
204
|
+
}
|
|
205
|
+
if (!options.dryRun)
|
|
206
|
+
applyInit(changes);
|
|
207
|
+
const rel = (p) => (p.startsWith(options.projectRoot) ? path.relative(options.projectRoot, p) || '.' : p);
|
|
208
|
+
out(`${options.dryRun ? 'Would set up' : 'Set up'} playwright-e2e for: ${clients.join(', ')}`);
|
|
209
|
+
for (const c of changes) {
|
|
210
|
+
const what = c.client === 'skill' ? 'skill' : c.client;
|
|
211
|
+
out(` ${c.action.padEnd(9)} ${rel(c.file)} (${what})${c.error ? `: ${c.error}` : ''}`);
|
|
212
|
+
}
|
|
213
|
+
out('');
|
|
214
|
+
out('Next: make sure browsers are installed (npx playwright install chromium), then');
|
|
215
|
+
out('restart or reload the agent so it picks up the new server.');
|
|
216
|
+
return changes.some((c) => c.action === 'error') ? 1 : 0;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
* tests and tooling can construct a server without side effects.
|
|
8
8
|
*/
|
|
9
9
|
import { logger } from './utils/logger.js';
|
|
10
|
-
export { createServer, startServer, SERVER_NAME, SERVER_VERSION } from './server.js';
|
|
10
|
+
export { createServer, startServer, resolveToolSelection, TOOL_PROFILES, SERVER_NAME, SERVER_VERSION } from './server.js';
|
|
11
11
|
export { createMcpHttpHandler, handleNodeRequest, MAX_BODY_BYTES } from './http.js';
|
|
12
12
|
export { logger };
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,24 @@ function isMainModule() {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
async function main() {
|
|
25
|
+
if (process.argv[2] === 'ci') {
|
|
26
|
+
const { runCi, CI_USAGE } = await import('./cli/ci.js');
|
|
27
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
28
|
+
process.stdout.write(CI_USAGE);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
process.exitCode = await runCi(process.argv.slice(3));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (process.argv[2] === 'init') {
|
|
35
|
+
const { runInit, INIT_USAGE } = await import('./cli/init.js');
|
|
36
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
37
|
+
process.stdout.write(INIT_USAGE);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
process.exitCode = runInit(process.argv.slice(3));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
25
43
|
if (process.argv.includes('--version') || process.argv.includes('-v')) {
|
|
26
44
|
process.stdout.write(`${SERVER_VERSION}\n`);
|
|
27
45
|
return;
|
|
@@ -30,10 +48,14 @@ async function main() {
|
|
|
30
48
|
process.stdout.write([
|
|
31
49
|
'playwright-e2e-mcp — MCP server for running and debugging Playwright tests',
|
|
32
50
|
'',
|
|
33
|
-
'Usage: playwright-e2e-mcp [--version] [--help]',
|
|
51
|
+
'Usage: playwright-e2e-mcp [--tools=<list>] [--version] [--help]',
|
|
52
|
+
' playwright-e2e-mcp ci [options] run the suite and print a Markdown diagnosis (ci --help)',
|
|
53
|
+
' playwright-e2e-mcp init [options] add the server + agent skill to a project (init --help)',
|
|
34
54
|
'',
|
|
35
55
|
'Connects over stdio (MCP). Configuration via environment:',
|
|
36
56
|
' PW_MCP_PROJECT_ROOT default project root (default: cwd)',
|
|
57
|
+
' PW_MCP_TOOLS tools to expose: names and/or profiles, comma separated',
|
|
58
|
+
' (all | core | triage | inspect | author); same as --tools',
|
|
37
59
|
' PW_MCP_ALLOWED_ROOTS extra roots callers may pass as projectRoot',
|
|
38
60
|
' PW_MCP_BLOCK_PRIVATE_URLS 1 = URL tools refuse private/loopback/metadata addresses',
|
|
39
61
|
' LOG_LEVEL / MCP_LOG_LEVEL debug | info | warn | error | silent (default: info)',
|
|
@@ -48,6 +70,9 @@ async function main() {
|
|
|
48
70
|
].join('\n'));
|
|
49
71
|
return;
|
|
50
72
|
}
|
|
73
|
+
const toolsFlag = process.argv.find((arg) => arg.startsWith('--tools='));
|
|
74
|
+
if (toolsFlag)
|
|
75
|
+
process.env.PW_MCP_TOOLS = toolsFlag.slice('--tools='.length);
|
|
51
76
|
const { startServer } = await import('./server.js');
|
|
52
77
|
await startServer();
|
|
53
78
|
}
|
|
@@ -58,7 +83,7 @@ if (isMainModule()) {
|
|
|
58
83
|
process.exit(1);
|
|
59
84
|
});
|
|
60
85
|
}
|
|
61
|
-
export { createServer, startServer, SERVER_NAME, SERVER_VERSION } from './server.js';
|
|
86
|
+
export { createServer, startServer, resolveToolSelection, TOOL_PROFILES, SERVER_NAME, SERVER_VERSION } from './server.js';
|
|
62
87
|
export { createMcpHttpHandler, handleNodeRequest, MAX_BODY_BYTES } from './http.js';
|
|
63
88
|
export { logger };
|
|
64
89
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;YACE,4EAA4E;YAC5E,EAAE;YACF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -29,6 +29,21 @@ export interface CreateServerOptions {
|
|
|
29
29
|
* Playwright (which would execute the project's config and spec files).
|
|
30
30
|
*/
|
|
31
31
|
export declare const READ_ONLY_TOOLS: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* Named tool sets for PW_MCP_TOOLS / --tools. Every tool definition costs
|
|
34
|
+
* context on each request (all eleven are ~5k tokens), so a client that
|
|
35
|
+
* only fixes failing suites can load the core loop alone.
|
|
36
|
+
*/
|
|
37
|
+
export declare const TOOL_PROFILES: Readonly<Record<string, readonly string[]>>;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve a comma-separated list of tool names and profile names
|
|
40
|
+
* (`core,inspect-page`). Returns undefined (all tools) for an empty spec;
|
|
41
|
+
* unknown entries are reported, not fatal.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveToolSelection(spec: string | undefined): {
|
|
44
|
+
tools?: string[];
|
|
45
|
+
unknown: string[];
|
|
46
|
+
};
|
|
32
47
|
export declare function resolveDefaultProjectRoot(): string;
|
|
33
48
|
export declare function createServer(options?: CreateServerOptions): McpServer;
|
|
34
49
|
/** Close the server, kill orphaned children, and exit. */
|
package/dist/server.js
CHANGED
|
@@ -177,6 +177,47 @@ const TOOLS = [
|
|
|
177
177
|
* Playwright (which would execute the project's config and spec files).
|
|
178
178
|
*/
|
|
179
179
|
export const READ_ONLY_TOOLS = ['list-tests', 'get-failure', 'analyze-history'];
|
|
180
|
+
/**
|
|
181
|
+
* Named tool sets for PW_MCP_TOOLS / --tools. Every tool definition costs
|
|
182
|
+
* context on each request (all eleven are ~5k tokens), so a client that
|
|
183
|
+
* only fixes failing suites can load the core loop alone.
|
|
184
|
+
*/
|
|
185
|
+
export const TOOL_PROFILES = {
|
|
186
|
+
all: TOOLS.map((tool) => tool.name),
|
|
187
|
+
core: ['run-test', 'get-run-status', 'get-failure', 'suggest-fix', 'diagnose-flaky', 'list-tests'],
|
|
188
|
+
triage: ['run-test', 'get-run-status', 'get-failure', 'diagnose-flaky', 'analyze-history', 'list-tests'],
|
|
189
|
+
inspect: ['inspect-page', 'validate-selector', 'compare-visual-state'],
|
|
190
|
+
author: ['list-tests', 'inspect-page', 'validate-selector', 'generate-e2e-test', 'run-test'],
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Resolve a comma-separated list of tool names and profile names
|
|
194
|
+
* (`core,inspect-page`). Returns undefined (all tools) for an empty spec;
|
|
195
|
+
* unknown entries are reported, not fatal.
|
|
196
|
+
*/
|
|
197
|
+
export function resolveToolSelection(spec) {
|
|
198
|
+
const entries = (spec ?? '')
|
|
199
|
+
.split(',')
|
|
200
|
+
.map((entry) => entry.trim())
|
|
201
|
+
.filter(Boolean);
|
|
202
|
+
if (entries.length === 0)
|
|
203
|
+
return { unknown: [] };
|
|
204
|
+
const known = new Set(TOOLS.map((tool) => tool.name));
|
|
205
|
+
const selected = new Set();
|
|
206
|
+
const unknown = [];
|
|
207
|
+
for (const entry of entries) {
|
|
208
|
+
const profile = TOOL_PROFILES[entry.toLowerCase()];
|
|
209
|
+
if (profile)
|
|
210
|
+
profile.forEach((name) => selected.add(name));
|
|
211
|
+
else if (known.has(entry))
|
|
212
|
+
selected.add(entry);
|
|
213
|
+
else
|
|
214
|
+
unknown.push(entry);
|
|
215
|
+
}
|
|
216
|
+
if (selected.size === 0)
|
|
217
|
+
return { unknown };
|
|
218
|
+
// Keep the registry's order so tools/list is stable.
|
|
219
|
+
return { tools: TOOLS.map((tool) => tool.name).filter((name) => selected.has(name)), unknown };
|
|
220
|
+
}
|
|
180
221
|
export function resolveDefaultProjectRoot() {
|
|
181
222
|
const fromEnv = process.env.PW_MCP_PROJECT_ROOT;
|
|
182
223
|
// A host that collects PW_MCP_PROJECT_ROOT via MCPB user_config but does
|
|
@@ -203,7 +244,18 @@ export function createServer(options = {}) {
|
|
|
203
244
|
const projectRoot = options.projectRoot ?? resolveDefaultProjectRoot();
|
|
204
245
|
const store = options.store ?? createToolStore();
|
|
205
246
|
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION });
|
|
206
|
-
|
|
247
|
+
let selection = options.tools;
|
|
248
|
+
if (!selection && process.env.PW_MCP_TOOLS) {
|
|
249
|
+
const resolved = resolveToolSelection(process.env.PW_MCP_TOOLS);
|
|
250
|
+
if (resolved.unknown.length > 0) {
|
|
251
|
+
logger.warn('PW_MCP_TOOLS names unknown tools or profiles; ignoring them', {
|
|
252
|
+
unknown: resolved.unknown,
|
|
253
|
+
profiles: Object.keys(TOOL_PROFILES),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
selection = resolved.tools;
|
|
257
|
+
}
|
|
258
|
+
const enabled = selection ? TOOLS.filter((tool) => selection.includes(tool.name)) : TOOLS;
|
|
207
259
|
for (const tool of enabled) {
|
|
208
260
|
server.registerTool(tool.name, {
|
|
209
261
|
title: tool.title,
|
|
@@ -290,7 +342,7 @@ export async function startServer() {
|
|
|
290
342
|
logger.info('connected over stdio', {
|
|
291
343
|
version: SERVER_VERSION,
|
|
292
344
|
projectRoot: resolveDefaultProjectRoot(),
|
|
293
|
-
tools: TOOLS.map((tool) => tool.name),
|
|
345
|
+
tools: resolveToolSelection(process.env.PW_MCP_TOOLS).tools ?? TOOLS.map((tool) => tool.name),
|
|
294
346
|
});
|
|
295
347
|
}
|
|
296
348
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tool 8 — diagnose-flaky: run
|
|
3
|
-
*
|
|
2
|
+
* Tool 8 — diagnose-flaky: run failing tests several times with retries
|
|
3
|
+
* disabled and decide, per test and from evidence, whether each one is
|
|
4
4
|
* genuinely flaky, consistently broken, or no longer reproducible.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* By default all repetitions run in one Playwright process
|
|
7
|
+
* (`--repeat-each`), which skips N-1 process and browser start-ups. A
|
|
8
|
+
* small attempts reporter records every repetition, since the JSON report
|
|
9
|
+
* keeps only one result per test. `isolate` adds a second pass with one
|
|
10
|
+
* worker so failures caused by parallelism (shared state, test-order
|
|
11
|
+
* coupling, contention) are told apart from flakiness inside the test.
|
|
12
|
+
*
|
|
13
|
+
* The verdict logic is pure functions (exported for unit tests).
|
|
7
14
|
*/
|
|
8
15
|
import { z } from 'zod';
|
|
9
|
-
import type { TestFailure, ToolContext, ToolResponse } from '../types/index.js';
|
|
16
|
+
import type { RunTestResult, TestAttempt, TestFailure, ToolContext, ToolResponse } from '../types/index.js';
|
|
10
17
|
declare const diagnoseFlakyInput: z.ZodObject<{
|
|
11
18
|
projectRoot: z.ZodOptional<z.ZodString>;
|
|
12
19
|
testFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -18,6 +25,8 @@ declare const diagnoseFlakyInput: z.ZodObject<{
|
|
|
18
25
|
}>>;
|
|
19
26
|
headed: z.ZodOptional<z.ZodBoolean>;
|
|
20
27
|
workers: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
isolate: z.ZodOptional<z.ZodBoolean>;
|
|
29
|
+
separateProcesses: z.ZodOptional<z.ZodBoolean>;
|
|
21
30
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
22
31
|
config: z.ZodOptional<z.ZodString>;
|
|
23
32
|
}, z.core.$strip>;
|
|
@@ -33,6 +42,8 @@ export declare const diagnoseFlakySchema: z.ZodObject<{
|
|
|
33
42
|
}>>;
|
|
34
43
|
headed: z.ZodOptional<z.ZodBoolean>;
|
|
35
44
|
workers: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
isolate: z.ZodOptional<z.ZodBoolean>;
|
|
46
|
+
separateProcesses: z.ZodOptional<z.ZodBoolean>;
|
|
36
47
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
37
48
|
config: z.ZodOptional<z.ZodString>;
|
|
38
49
|
}, z.core.$strip>;
|
|
@@ -65,6 +76,31 @@ export interface FlakySummary {
|
|
|
65
76
|
export declare function failureSignature(failure: TestFailure | undefined): string | undefined;
|
|
66
77
|
/** Decide the verdict from the per-run outcomes. */
|
|
67
78
|
export declare function summarizeFlaky(runs: FlakyRunOutcome[]): FlakySummary;
|
|
79
|
+
/** Every attempt of one test, in the order they finished. */
|
|
80
|
+
export interface TestEvidence {
|
|
81
|
+
file: string;
|
|
82
|
+
line?: number;
|
|
83
|
+
title: string;
|
|
84
|
+
project?: string;
|
|
85
|
+
outcomes: FlakyRunOutcome[];
|
|
86
|
+
}
|
|
87
|
+
/** `file:line` (or just the file) — what run-test and diagnose-flaky accept. */
|
|
88
|
+
export declare function evidenceTarget(evidence: Pick<TestEvidence, 'file' | 'line'>): string;
|
|
89
|
+
/** Group reporter attempts per test (file, line, title, project). */
|
|
90
|
+
export declare function groupAttempts(attempts: TestAttempt[]): TestEvidence[];
|
|
91
|
+
export type IsolationReading = 'PARALLEL ONLY' | 'FLAKY ALONE TOO' | 'FAILS EITHER WAY' | 'NOT REPRODUCING';
|
|
92
|
+
/**
|
|
93
|
+
* Compare a test's parallel evidence with its one-worker evidence.
|
|
94
|
+
* `isolated` is undefined when the test passed every parallel attempt and
|
|
95
|
+
* was therefore not re-run.
|
|
96
|
+
*/
|
|
97
|
+
export declare function isolationReading(parallel: FlakySummary, isolated: FlakySummary | undefined): IsolationReading;
|
|
98
|
+
/**
|
|
99
|
+
* Split one --repeat-each run into one run per repetition, so run history
|
|
100
|
+
* (analyze-history) counts every repetition as its own run, exactly as it
|
|
101
|
+
* did when each repetition was a separate process.
|
|
102
|
+
*/
|
|
103
|
+
export declare function splitRepetitions(result: RunTestResult, attempts: TestAttempt[]): RunTestResult[];
|
|
68
104
|
export declare const diagnoseFlakyTool: {
|
|
69
105
|
name: string;
|
|
70
106
|
description: string;
|
|
@@ -79,6 +115,8 @@ export declare const diagnoseFlakyTool: {
|
|
|
79
115
|
}>>;
|
|
80
116
|
headed: z.ZodOptional<z.ZodBoolean>;
|
|
81
117
|
workers: z.ZodOptional<z.ZodNumber>;
|
|
118
|
+
isolate: z.ZodOptional<z.ZodBoolean>;
|
|
119
|
+
separateProcesses: z.ZodOptional<z.ZodBoolean>;
|
|
82
120
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
83
121
|
config: z.ZodOptional<z.ZodString>;
|
|
84
122
|
}, z.core.$strip>;
|