playwright-e2e-mcp 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +208 -54
- package/dist/http.d.ts +1 -1
- package/dist/http.js +1 -1
- package/dist/prompts.d.ts +6 -0
- package/dist/prompts.js +39 -0
- package/dist/prompts.js.map +1 -0
- package/dist/server.d.ts +4 -3
- package/dist/server.js +63 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/analyze-history.d.ts +48 -0
- package/dist/tools/analyze-history.js +132 -0
- package/dist/tools/analyze-history.js.map +1 -0
- package/dist/tools/compare-visual-state.d.ts +89 -17
- package/dist/tools/compare-visual-state.js +10 -3
- package/dist/tools/compare-visual-state.js.map +1 -1
- package/dist/tools/diagnose-flaky.js +5 -2
- package/dist/tools/diagnose-flaky.js.map +1 -1
- package/dist/tools/generate-e2e-test.d.ts +11 -0
- package/dist/tools/generate-e2e-test.js +50 -3
- package/dist/tools/generate-e2e-test.js.map +1 -1
- package/dist/tools/get-failure.d.ts +6 -1
- package/dist/tools/get-failure.js +17 -11
- package/dist/tools/get-failure.js.map +1 -1
- package/dist/tools/get-run-status.d.ts +28 -0
- package/dist/tools/get-run-status.js +75 -0
- package/dist/tools/get-run-status.js.map +1 -0
- package/dist/tools/inspect-page.d.ts +102 -14
- package/dist/tools/inspect-page.js +50 -10
- package/dist/tools/inspect-page.js.map +1 -1
- package/dist/tools/probe-script.d.ts +20 -0
- package/dist/tools/probe-script.js +641 -0
- package/dist/tools/probe-script.js.map +1 -0
- package/dist/tools/run-test.d.ts +5 -1
- package/dist/tools/run-test.js +30 -3
- package/dist/tools/run-test.js.map +1 -1
- package/dist/tools/shared.d.ts +117 -3
- package/dist/tools/shared.js +154 -285
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/suggest-fix.d.ts +89 -0
- package/dist/tools/suggest-fix.js +437 -0
- package/dist/tools/suggest-fix.js.map +1 -0
- package/dist/tools/validate-selector.d.ts +83 -6
- package/dist/tools/validate-selector.js +71 -32
- package/dist/tools/validate-selector.js.map +1 -1
- package/dist/types/index.d.ts +40 -0
- package/dist/utils/locator-expr.d.ts +38 -0
- package/dist/utils/locator-expr.js +280 -0
- package/dist/utils/locator-expr.js.map +1 -0
- package/dist/utils/playwright-runner.d.ts +9 -1
- package/dist/utils/playwright-runner.js +60 -4
- package/dist/utils/playwright-runner.js.map +1 -1
- package/dist/utils/report-parser.d.ts +3 -1
- package/dist/utils/report-parser.js +22 -0
- package/dist/utils/report-parser.js.map +1 -1
- package/dist/utils/run-history.d.ts +103 -0
- package/dist/utils/run-history.js +219 -0
- package/dist/utils/run-history.js.map +1 -0
- package/dist/utils/run-registry.d.ts +34 -0
- package/dist/utils/run-registry.js +86 -0
- package/dist/utils/run-registry.js.map +1 -0
- package/dist/utils/trace-reader.d.ts +23 -2
- package/dist/utils/trace-reader.js +86 -15
- package/dist/utils/trace-reader.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/run-test.js
CHANGED
|
@@ -7,6 +7,8 @@ import { PlaywrightMcpError } from '../types/index.js';
|
|
|
7
7
|
import { detectProject, missingPlaywrightMessage } from '../utils/project-detector.js';
|
|
8
8
|
import { runTests } from '../utils/playwright-runner.js';
|
|
9
9
|
import { normalizePath, relativeToRoot } from '../utils/path-utils.js';
|
|
10
|
+
import { recordRun } from '../utils/run-history.js';
|
|
11
|
+
import { startBackgroundRun } from '../utils/run-registry.js';
|
|
10
12
|
import { codeFence, clipLines, formatDuration, guard, renderFailure, resolveConfigSelection, resolveProjectRoot, sanitizeTestPathArgument, testPathExists, toolError, toolText, } from './shared.js';
|
|
11
13
|
const runTestInput = z.object({
|
|
12
14
|
projectRoot: z
|
|
@@ -55,9 +57,13 @@ const runTestInput = z.object({
|
|
|
55
57
|
.array(z.string())
|
|
56
58
|
.optional()
|
|
57
59
|
.describe('Extra Playwright flags from an allowlist, as --flag or --flag=value (e.g. --repeat-each=3, --shard=1/2, --trace=on)'),
|
|
60
|
+
background: z
|
|
61
|
+
.boolean()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe('Return a run id at once; poll get-run-status'),
|
|
58
64
|
});
|
|
59
65
|
export const runTestSchema = runTestInput;
|
|
60
|
-
function renderRunResult(result, root) {
|
|
66
|
+
export function renderRunResult(result, root) {
|
|
61
67
|
const flakyCount = result.stats?.flaky ?? 0;
|
|
62
68
|
const status = result.ok
|
|
63
69
|
? flakyCount > 0
|
|
@@ -116,7 +122,7 @@ function renderRunResult(result, root) {
|
|
|
116
122
|
}
|
|
117
123
|
export const runTestTool = {
|
|
118
124
|
name: 'run-test',
|
|
119
|
-
description: 'Run
|
|
125
|
+
description: 'Run the project\'s Playwright tests: stats plus each failure\'s file:line, kind and message. Diagnoses missing installs, dead dev servers, syntax errors, crashes and timeouts (kills the tree, keeps partial results). Reports progress; background: true returns a run id for long suites. Runs are recorded for analyze-history.',
|
|
120
126
|
inputSchema: runTestSchema,
|
|
121
127
|
handler: async (args, ctx) => guard('run-test', async () => {
|
|
122
128
|
const root = await resolveProjectRoot(args.projectRoot, ctx);
|
|
@@ -155,8 +161,29 @@ export const runTestTool = {
|
|
|
155
161
|
extraArgs: args.args,
|
|
156
162
|
signal: ctx.signal,
|
|
157
163
|
};
|
|
158
|
-
|
|
164
|
+
if (args.background) {
|
|
165
|
+
const { signal: _signal, ...rest } = options;
|
|
166
|
+
const label = sanitized.length > 0 ? sanitized.map((f) => relativeToRoot(root, f)).join(', ') : 'whole suite';
|
|
167
|
+
const run = startBackgroundRun(rest, label, async (result) => {
|
|
168
|
+
ctx.store.setLastRun({ projectRoot: root, result, at: Date.now() });
|
|
169
|
+
await recordRun(root, result, 'run-test');
|
|
170
|
+
});
|
|
171
|
+
return toolText([
|
|
172
|
+
`## ▶️ Run started in the background — \`${run.id}\``,
|
|
173
|
+
'',
|
|
174
|
+
`**Tests:** ${label}`,
|
|
175
|
+
'',
|
|
176
|
+
`> Next: call **get-run-status** with \`runId: "${run.id}"\` (add \`waitSeconds\` to wait for it). The result also becomes the last run for **get-failure** and **suggest-fix** when it finishes.`,
|
|
177
|
+
].join('\n'));
|
|
178
|
+
}
|
|
179
|
+
const result = await runTests({
|
|
180
|
+
...options,
|
|
181
|
+
onProgress: ctx.progress
|
|
182
|
+
? (p) => ctx.progress?.(p.done, p.total, `${p.done}${p.total ? `/${p.total}` : ''} tests done${p.failed ? `, ${p.failed} failed` : ''}${p.last ? ` · ${p.last}` : ''}`)
|
|
183
|
+
: undefined,
|
|
184
|
+
});
|
|
159
185
|
ctx.store.setLastRun({ projectRoot: root, result, at: Date.now() });
|
|
186
|
+
await recordRun(root, result, 'run-test').catch((err) => ctx.logger.warn('could not record run history', { error: err }));
|
|
160
187
|
ctx.logger.info('run-test finished', {
|
|
161
188
|
ok: result.ok,
|
|
162
189
|
exitCode: result.exitCode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-test.js","sourceRoot":"","sources":["../../src/tools/run-test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EACL,SAAS,EACT,SAAS,EACT,cAAc,EACd,KAAK,EACL,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACd,SAAS,EACT,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,6GAA6G,CAC9G;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACrF,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SACvC,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC5E,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,KAAK,CAAC;SACV,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,QAAQ,CAAC,8FAA8F,CAAC;IAC3G,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,KAAK,CAAC;SACV,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnD,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,oGAAoG,CAAC;IACjH,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,2GAA2G,CAAC;IACxH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,qHAAqH,CAAC;
|
|
1
|
+
{"version":3,"file":"run-test.js","sourceRoot":"","sources":["../../src/tools/run-test.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/shared.d.ts
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* (This file is an implementation detail; the five tool modules remain
|
|
7
7
|
* the public surface documented in the README.)
|
|
8
8
|
*/
|
|
9
|
+
import { z } from 'zod';
|
|
9
10
|
import type { ErrorKind, FailureKind, ProjectDetection, TestFailure, ToolContext, ToolResponse, ToolStore } from '../types/index.js';
|
|
11
|
+
import type { LocatorCall } from '../utils/locator-expr.js';
|
|
10
12
|
export declare function createToolStore(): ToolStore;
|
|
11
13
|
export declare function toolText(markdown: string): ToolResponse;
|
|
12
14
|
export declare function toolError(kind: ErrorKind | 'ERROR', message: string, hint?: string, details?: string): ToolResponse;
|
|
@@ -37,19 +39,125 @@ export declare function testPathExists(argument: string, root: string): Promise<
|
|
|
37
39
|
export declare function formatDuration(ms: number): string;
|
|
38
40
|
export declare function codeFence(text: string, lang?: string): string;
|
|
39
41
|
export declare function clipLines(text: string, maxLines: number, maxChars?: number): string;
|
|
42
|
+
/**
|
|
43
|
+
* Escape a value so it cannot break out of a Markdown table cell.
|
|
44
|
+
*
|
|
45
|
+
* Backslashes are escaped before pipes: escaping only `|` lets an input that
|
|
46
|
+
* ends in `\` consume the inserted backslash, leaving a live `|` that splits
|
|
47
|
+
* the row (CodeQL js/incomplete-sanitization).
|
|
48
|
+
*/
|
|
49
|
+
export declare function markdownCell(text: string): string;
|
|
40
50
|
export declare function renderFailure(failure: TestFailure, index: number, total: number): string;
|
|
41
51
|
export declare function failureHint(kind: FailureKind): string;
|
|
42
|
-
export
|
|
43
|
-
|
|
52
|
+
export declare const pageActionSchema: z.ZodObject<{
|
|
53
|
+
type: z.ZodEnum<{
|
|
54
|
+
fill: "fill";
|
|
55
|
+
goto: "goto";
|
|
56
|
+
click: "click";
|
|
57
|
+
dblclick: "dblclick";
|
|
58
|
+
hover: "hover";
|
|
59
|
+
press: "press";
|
|
60
|
+
check: "check";
|
|
61
|
+
uncheck: "uncheck";
|
|
62
|
+
select: "select";
|
|
63
|
+
wait: "wait";
|
|
64
|
+
}>;
|
|
65
|
+
locator: z.ZodOptional<z.ZodString>;
|
|
66
|
+
value: z.ZodOptional<z.ZodString>;
|
|
67
|
+
url: z.ZodOptional<z.ZodString>;
|
|
68
|
+
ms: z.ZodOptional<z.ZodNumber>;
|
|
69
|
+
}, z.core.$strip>;
|
|
70
|
+
/** Signed-in session inputs. */
|
|
71
|
+
export declare const sessionShape: {
|
|
72
|
+
storageState: z.ZodOptional<z.ZodString>;
|
|
73
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
74
|
+
};
|
|
75
|
+
/** Inputs shared by every tool that opens a page. */
|
|
76
|
+
export declare const pageStateShape: {
|
|
77
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
78
|
+
type: z.ZodEnum<{
|
|
79
|
+
fill: "fill";
|
|
80
|
+
goto: "goto";
|
|
81
|
+
click: "click";
|
|
82
|
+
dblclick: "dblclick";
|
|
83
|
+
hover: "hover";
|
|
84
|
+
press: "press";
|
|
85
|
+
check: "check";
|
|
86
|
+
uncheck: "uncheck";
|
|
87
|
+
select: "select";
|
|
88
|
+
wait: "wait";
|
|
89
|
+
}>;
|
|
90
|
+
locator: z.ZodOptional<z.ZodString>;
|
|
91
|
+
value: z.ZodOptional<z.ZodString>;
|
|
92
|
+
url: z.ZodOptional<z.ZodString>;
|
|
93
|
+
ms: z.ZodOptional<z.ZodNumber>;
|
|
94
|
+
}, z.core.$strip>>>;
|
|
95
|
+
viewport: z.ZodOptional<z.ZodObject<{
|
|
96
|
+
width: z.ZodNumber;
|
|
97
|
+
height: z.ZodNumber;
|
|
98
|
+
}, z.core.$strip>>;
|
|
99
|
+
storageState: z.ZodOptional<z.ZodString>;
|
|
100
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
101
|
+
};
|
|
102
|
+
export interface PageStateInput {
|
|
103
|
+
storageState?: string;
|
|
104
|
+
headers?: Record<string, string>;
|
|
105
|
+
actions?: Array<z.infer<typeof pageActionSchema>>;
|
|
106
|
+
viewport?: {
|
|
107
|
+
width: number;
|
|
108
|
+
height: number;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface ResolvedPageState {
|
|
112
|
+
storageState?: string;
|
|
113
|
+
headers?: Record<string, string>;
|
|
114
|
+
actions?: Array<{
|
|
115
|
+
type: string;
|
|
116
|
+
label: string;
|
|
117
|
+
locator?: LocatorCall[];
|
|
118
|
+
value?: string;
|
|
119
|
+
url?: string;
|
|
120
|
+
ms?: number;
|
|
121
|
+
}>;
|
|
122
|
+
viewport?: {
|
|
123
|
+
width: number;
|
|
124
|
+
height: number;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Validate page-state inputs: the storageState file must sit inside the
|
|
129
|
+
* project root (symlinks resolved) and parse as JSON, every goto URL passes
|
|
130
|
+
* the same URL policy as the entry URL, and locators are parsed into
|
|
131
|
+
* whitelisted call chains (never evaluated as code).
|
|
132
|
+
*/
|
|
133
|
+
export declare function resolvePageState(input: PageStateInput, root: string, entryUrl: string, ctx: ToolContext): Promise<ResolvedPageState>;
|
|
134
|
+
/** One line describing the page state, for tool output headers. */
|
|
135
|
+
export declare function describePageState(state: ResolvedPageState, root: string): string | undefined;
|
|
136
|
+
/** A hint when an unauthenticated page landed on a login screen. */
|
|
137
|
+
export declare function loginHint(finalUrl: string | undefined, state: ResolvedPageState): string | undefined;
|
|
138
|
+
export interface BrowserScriptConfig extends Omit<ResolvedPageState, never> {
|
|
139
|
+
mode: 'inspect' | 'validate' | 'screenshot' | 'heal';
|
|
44
140
|
projectRoot: string;
|
|
45
|
-
|
|
141
|
+
/** Page to open; omitted when rendering a snapshot. */
|
|
142
|
+
url?: string;
|
|
143
|
+
/** Render this DOM snapshot file instead of navigating (all requests blocked). */
|
|
144
|
+
snapshotHtmlPath?: string;
|
|
145
|
+
/** CSS selector for inspect mode. */
|
|
46
146
|
selector?: string;
|
|
147
|
+
/** Parsed locator chain for validate / screenshot modes. */
|
|
148
|
+
selectorChain?: LocatorCall[];
|
|
149
|
+
/** inspect: 'elements' (DOM inventory) or 'locators' (compact locator map). */
|
|
150
|
+
view?: 'elements' | 'locators';
|
|
151
|
+
/** heal: words from the broken locator, and its role when it had one. */
|
|
152
|
+
healTokens?: string[];
|
|
153
|
+
healRole?: string;
|
|
47
154
|
waitFor?: string;
|
|
48
155
|
waitUntil?: 'load' | 'domcontentloaded' | 'networkidle';
|
|
49
156
|
includeHtml?: boolean;
|
|
50
157
|
maxHtmlChars?: number;
|
|
51
158
|
gotoTimeout?: number;
|
|
52
159
|
waitTimeout?: number;
|
|
160
|
+
actionTimeout?: number;
|
|
53
161
|
/** Screenshot target path (mode: 'screenshot'). */
|
|
54
162
|
screenshotPath?: string;
|
|
55
163
|
/** Capture the full scrollable page (mode: 'screenshot'). */
|
|
@@ -71,10 +179,16 @@ export interface BrowserScriptData {
|
|
|
71
179
|
};
|
|
72
180
|
parseError?: string;
|
|
73
181
|
consoleMessages?: import('../types/index.js').ConsoleMessageInfo[];
|
|
182
|
+
/** Page actions that completed before inspection. */
|
|
183
|
+
actionsDone?: string[];
|
|
74
184
|
durationMs?: number;
|
|
75
185
|
}
|
|
186
|
+
/** Best verified locator for an element, as source text. */
|
|
187
|
+
export declare function bestLocator(element: import('../types/index.js').ElementInfo): string | undefined;
|
|
76
188
|
export interface BrowserScriptOutcome {
|
|
77
189
|
ok: boolean;
|
|
190
|
+
/** Page actions that completed before a failure. */
|
|
191
|
+
actionsDone?: string[];
|
|
78
192
|
data?: BrowserScriptData;
|
|
79
193
|
kind?: ErrorKind;
|
|
80
194
|
error?: string;
|