playwright-e2e-mcp 0.6.1 → 0.8.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.
Files changed (104) hide show
  1. package/README.md +150 -24
  2. package/dist/cli/ci.js +3 -0
  3. package/dist/cli/ci.js.map +1 -1
  4. package/dist/cli/doctor.d.ts +12 -1
  5. package/dist/cli/doctor.js +34 -4
  6. package/dist/cli/doctor.js.map +1 -1
  7. package/dist/cli/guard.d.ts +11 -0
  8. package/dist/cli/guard.js +80 -0
  9. package/dist/cli/guard.js.map +1 -0
  10. package/dist/cli/upload.d.ts +14 -0
  11. package/dist/cli/upload.js +81 -0
  12. package/dist/cli/upload.js.map +1 -0
  13. package/dist/discovery.d.ts +61 -0
  14. package/dist/discovery.js +108 -0
  15. package/dist/discovery.js.map +1 -0
  16. package/dist/http.d.ts +10 -1
  17. package/dist/http.js +50 -4
  18. package/dist/http.js.map +1 -1
  19. package/dist/index.js +28 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/oauth.d.ts +2 -0
  22. package/dist/oauth.js +1 -1
  23. package/dist/oauth.js.map +1 -1
  24. package/dist/server.d.ts +24 -4
  25. package/dist/server.js +98 -15
  26. package/dist/server.js.map +1 -1
  27. package/dist/skills.d.ts +23 -0
  28. package/dist/skills.js +101 -0
  29. package/dist/skills.js.map +1 -0
  30. package/dist/tools/analyze-history.d.ts +15 -0
  31. package/dist/tools/analyze-history.js +44 -9
  32. package/dist/tools/analyze-history.js.map +1 -1
  33. package/dist/tools/audit-accessibility.d.ts +6 -0
  34. package/dist/tools/audit-performance.d.ts +6 -0
  35. package/dist/tools/check-test-change.d.ts +44 -0
  36. package/dist/tools/check-test-change.js +132 -0
  37. package/dist/tools/check-test-change.js.map +1 -0
  38. package/dist/tools/compare-visual-state.d.ts +6 -0
  39. package/dist/tools/diagnose-flaky.js +5 -1
  40. package/dist/tools/diagnose-flaky.js.map +1 -1
  41. package/dist/tools/generate-e2e-test.d.ts +3 -0
  42. package/dist/tools/generate-e2e-test.js +3 -0
  43. package/dist/tools/generate-e2e-test.js.map +1 -1
  44. package/dist/tools/get-failure.js +3 -1
  45. package/dist/tools/get-failure.js.map +1 -1
  46. package/dist/tools/get-run-status.js +8 -2
  47. package/dist/tools/get-run-status.js.map +1 -1
  48. package/dist/tools/inspect-page.d.ts +6 -0
  49. package/dist/tools/inspect-page.js +3 -1
  50. package/dist/tools/inspect-page.js.map +1 -1
  51. package/dist/tools/list-tests.js +16 -12
  52. package/dist/tools/list-tests.js.map +1 -1
  53. package/dist/tools/probe-script.js +181 -15
  54. package/dist/tools/probe-script.js.map +1 -1
  55. package/dist/tools/quarantine.d.ts +61 -0
  56. package/dist/tools/quarantine.js +133 -0
  57. package/dist/tools/quarantine.js.map +1 -0
  58. package/dist/tools/run-test.d.ts +10 -1
  59. package/dist/tools/run-test.js +38 -6
  60. package/dist/tools/run-test.js.map +1 -1
  61. package/dist/tools/save-login.d.ts +145 -0
  62. package/dist/tools/save-login.js +264 -0
  63. package/dist/tools/save-login.js.map +1 -0
  64. package/dist/tools/shared.d.ts +49 -2
  65. package/dist/tools/shared.js +57 -6
  66. package/dist/tools/shared.js.map +1 -1
  67. package/dist/tools/structured.d.ts +8 -1
  68. package/dist/tools/structured.js +8 -1
  69. package/dist/tools/structured.js.map +1 -1
  70. package/dist/tools/suggest-fix.js +4 -0
  71. package/dist/tools/suggest-fix.js.map +1 -1
  72. package/dist/tools/validate-selector.d.ts +6 -0
  73. package/dist/tools/validate-selector.js +10 -2
  74. package/dist/tools/validate-selector.js.map +1 -1
  75. package/dist/types/index.d.ts +1 -1
  76. package/dist/utils/live-reporter.d.ts +29 -0
  77. package/dist/utils/live-reporter.js +145 -0
  78. package/dist/utils/live-reporter.js.map +1 -0
  79. package/dist/utils/playwright-runner.js +36 -14
  80. package/dist/utils/playwright-runner.js.map +1 -1
  81. package/dist/utils/pro-client.d.ts +29 -0
  82. package/dist/utils/pro-client.js +114 -0
  83. package/dist/utils/pro-client.js.map +1 -0
  84. package/dist/utils/pytest-runner.d.ts +102 -0
  85. package/dist/utils/pytest-runner.js +715 -0
  86. package/dist/utils/pytest-runner.js.map +1 -0
  87. package/dist/utils/quarantine.d.ts +64 -0
  88. package/dist/utils/quarantine.js +106 -0
  89. package/dist/utils/quarantine.js.map +1 -0
  90. package/dist/utils/test-change-guard.d.ts +90 -0
  91. package/dist/utils/test-change-guard.js +516 -0
  92. package/dist/utils/test-change-guard.js.map +1 -0
  93. package/dist/utils/totp.d.ts +26 -0
  94. package/dist/utils/totp.js +84 -0
  95. package/dist/utils/totp.js.map +1 -0
  96. package/dist/utils/update-check.d.ts +50 -0
  97. package/dist/utils/update-check.js +75 -0
  98. package/dist/utils/update-check.js.map +1 -0
  99. package/examples/github-actions/playwright-e2e.yml +80 -0
  100. package/examples/gitlab-ci/playwright-e2e.yml +71 -0
  101. package/package.json +2 -2
  102. package/skill/playwright-e2e-mcp/SKILL.md +45 -7
  103. package/skill/playwright-e2e-mcp/references/setup.md +12 -1
  104. package/skill/playwright-e2e-mcp/references/tools.md +42 -1
@@ -1 +1 @@
1
- {"version":3,"file":"run-test.js","sourceRoot":"","sources":["../../src/tools/run-test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-test.js","sourceRoot":"","sources":["../../src/tools/run-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Tool — save-login: log in once and save the session as a Playwright
3
+ * storageState file that tests and the page tools reuse. Before logging in
4
+ * again it checks whether the saved session still works, so expired logins
5
+ * refresh themselves and valid ones are left alone.
6
+ *
7
+ * Passwords and one-time codes never pass through the chat: fill values
8
+ * may say {{env:E2E_PASSWORD}} (read from the server's environment) and
9
+ * {{totp}} (an authenticator code generated from a secret in an
10
+ * environment variable at the moment it is typed).
11
+ */
12
+ import { z } from 'zod';
13
+ import type { ToolContext, ToolResponse } from '../types/index.js';
14
+ declare const saveLoginInput: z.ZodObject<{
15
+ url: z.ZodString;
16
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
17
+ type: z.ZodEnum<{
18
+ check: "check";
19
+ click: "click";
20
+ dblclick: "dblclick";
21
+ fill: "fill";
22
+ goto: "goto";
23
+ hover: "hover";
24
+ press: "press";
25
+ select: "select";
26
+ switchTab: "switchTab";
27
+ uncheck: "uncheck";
28
+ wait: "wait";
29
+ }>;
30
+ locator: z.ZodOptional<z.ZodString>;
31
+ value: z.ZodOptional<z.ZodString>;
32
+ url: z.ZodOptional<z.ZodString>;
33
+ ms: z.ZodOptional<z.ZodNumber>;
34
+ }, z.core.$strip>>>;
35
+ verify: z.ZodOptional<z.ZodObject<{
36
+ url: z.ZodOptional<z.ZodString>;
37
+ visible: z.ZodOptional<z.ZodString>;
38
+ notUrl: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>>;
40
+ name: z.ZodOptional<z.ZodString>;
41
+ path: z.ZodOptional<z.ZodString>;
42
+ totpSecretEnv: z.ZodOptional<z.ZodString>;
43
+ reuse: z.ZodOptional<z.ZodBoolean>;
44
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
45
+ viewport: z.ZodOptional<z.ZodObject<{
46
+ width: z.ZodNumber;
47
+ height: z.ZodNumber;
48
+ }, z.core.$strip>>;
49
+ actionTimeoutMs: z.ZodOptional<z.ZodNumber>;
50
+ projectRoot: z.ZodOptional<z.ZodString>;
51
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
52
+ }, z.core.$strip>;
53
+ export type SaveLoginInput = z.infer<typeof saveLoginInput>;
54
+ export declare const saveLoginSchema: z.ZodObject<{
55
+ url: z.ZodString;
56
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
57
+ type: z.ZodEnum<{
58
+ check: "check";
59
+ click: "click";
60
+ dblclick: "dblclick";
61
+ fill: "fill";
62
+ goto: "goto";
63
+ hover: "hover";
64
+ press: "press";
65
+ select: "select";
66
+ switchTab: "switchTab";
67
+ uncheck: "uncheck";
68
+ wait: "wait";
69
+ }>;
70
+ locator: z.ZodOptional<z.ZodString>;
71
+ value: z.ZodOptional<z.ZodString>;
72
+ url: z.ZodOptional<z.ZodString>;
73
+ ms: z.ZodOptional<z.ZodNumber>;
74
+ }, z.core.$strip>>>;
75
+ verify: z.ZodOptional<z.ZodObject<{
76
+ url: z.ZodOptional<z.ZodString>;
77
+ visible: z.ZodOptional<z.ZodString>;
78
+ notUrl: z.ZodOptional<z.ZodString>;
79
+ }, z.core.$strip>>;
80
+ name: z.ZodOptional<z.ZodString>;
81
+ path: z.ZodOptional<z.ZodString>;
82
+ totpSecretEnv: z.ZodOptional<z.ZodString>;
83
+ reuse: z.ZodOptional<z.ZodBoolean>;
84
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
85
+ viewport: z.ZodOptional<z.ZodObject<{
86
+ width: z.ZodNumber;
87
+ height: z.ZodNumber;
88
+ }, z.core.$strip>>;
89
+ actionTimeoutMs: z.ZodOptional<z.ZodNumber>;
90
+ projectRoot: z.ZodOptional<z.ZodString>;
91
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
92
+ }, z.core.$strip>;
93
+ /**
94
+ * Environment variables a login may read. A page the agent visits could
95
+ * ask it to type {{env:AWS_SECRET_ACCESS_KEY}} into a form, so only names
96
+ * that are plainly test logins are allowed, plus any the user lists.
97
+ */
98
+ export declare function loginEnvAllowed(name: string): boolean;
99
+ /** The environment values the fill steps ask for, checked and read. */
100
+ export declare function resolveLoginValues(actions: SaveLoginInput['actions']): Record<string, string>;
101
+ export declare const saveLoginTool: {
102
+ name: string;
103
+ description: string;
104
+ inputSchema: z.ZodObject<{
105
+ url: z.ZodString;
106
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
+ type: z.ZodEnum<{
108
+ check: "check";
109
+ click: "click";
110
+ dblclick: "dblclick";
111
+ fill: "fill";
112
+ goto: "goto";
113
+ hover: "hover";
114
+ press: "press";
115
+ select: "select";
116
+ switchTab: "switchTab";
117
+ uncheck: "uncheck";
118
+ wait: "wait";
119
+ }>;
120
+ locator: z.ZodOptional<z.ZodString>;
121
+ value: z.ZodOptional<z.ZodString>;
122
+ url: z.ZodOptional<z.ZodString>;
123
+ ms: z.ZodOptional<z.ZodNumber>;
124
+ }, z.core.$strip>>>;
125
+ verify: z.ZodOptional<z.ZodObject<{
126
+ url: z.ZodOptional<z.ZodString>;
127
+ visible: z.ZodOptional<z.ZodString>;
128
+ notUrl: z.ZodOptional<z.ZodString>;
129
+ }, z.core.$strip>>;
130
+ name: z.ZodOptional<z.ZodString>;
131
+ path: z.ZodOptional<z.ZodString>;
132
+ totpSecretEnv: z.ZodOptional<z.ZodString>;
133
+ reuse: z.ZodOptional<z.ZodBoolean>;
134
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
135
+ viewport: z.ZodOptional<z.ZodObject<{
136
+ width: z.ZodNumber;
137
+ height: z.ZodNumber;
138
+ }, z.core.$strip>>;
139
+ actionTimeoutMs: z.ZodOptional<z.ZodNumber>;
140
+ projectRoot: z.ZodOptional<z.ZodString>;
141
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
142
+ }, z.core.$strip>;
143
+ handler: (args: SaveLoginInput, ctx: ToolContext) => Promise<ToolResponse>;
144
+ };
145
+ export {};
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Tool — save-login: log in once and save the session as a Playwright
3
+ * storageState file that tests and the page tools reuse. Before logging in
4
+ * again it checks whether the saved session still works, so expired logins
5
+ * refresh themselves and valid ones are left alone.
6
+ *
7
+ * Passwords and one-time codes never pass through the chat: fill values
8
+ * may say {{env:E2E_PASSWORD}} (read from the server's environment) and
9
+ * {{totp}} (an authenticator code generated from a secret in an
10
+ * environment variable at the moment it is typed).
11
+ */
12
+ import { readFile, stat } from 'node:fs/promises';
13
+ import path from 'node:path';
14
+ import { z } from 'zod';
15
+ import { PlaywrightMcpError } from '../types/index.js';
16
+ import { relativeToRoot, sanitizeUserPath, toNativePath, writeFileInsideRoot } from '../utils/path-utils.js';
17
+ import { parseLocator } from '../utils/locator-expr.js';
18
+ import { parseTotpSecret } from '../utils/totp.js';
19
+ import { assertUrlAllowed } from '../utils/url-policy.js';
20
+ import { assertHttpUrl, guard, pageActionSchema, resolvePageState, resolveProjectRoot, runBrowserScript, toolError, toolText, } from './shared.js';
21
+ const saveLoginInput = z.object({
22
+ url: z.string().describe('Login page URL (http/https)'),
23
+ actions: z
24
+ .array(pageActionSchema)
25
+ .max(20)
26
+ .optional()
27
+ .describe("Login steps. In fill values write {{env:E2E_PASSWORD}} for a secret from the environment and {{totp}} for an authenticator code, never the secret itself. End with a 'wait' on something only signed-in users see"),
28
+ verify: z
29
+ .object({
30
+ url: z.string().optional().describe('Page to open to check the session, e.g. /account (default: where login ends)'),
31
+ visible: z.string().optional().describe("Locator only a signed-in user sees, e.g. getByRole('button', { name: 'Sign out' })"),
32
+ notUrl: z.string().optional().describe("The session is bad if the page lands on a URL containing this, e.g. '/login'"),
33
+ })
34
+ .optional()
35
+ .describe('How to tell the session works; also used to decide whether a saved session is still valid'),
36
+ name: z
37
+ .string()
38
+ .regex(/^[\w.-]{1,40}$/)
39
+ .optional()
40
+ .describe("Session name, e.g. 'admin' (default 'user'); saved to playwright/.auth/<name>.json"),
41
+ path: z.string().optional().describe('Where to save the storageState JSON inside the project (overrides name)'),
42
+ totpSecretEnv: z
43
+ .string()
44
+ .optional()
45
+ .describe('Environment variable holding the authenticator secret (base32 or otpauth:// URI), for {{totp}}'),
46
+ reuse: z.boolean().optional().describe('Keep a saved session that still passes verify instead of logging in again (default true)'),
47
+ headers: z.record(z.string(), z.string()).optional().describe('Extra HTTP headers'),
48
+ viewport: z.object({ width: z.number().int().min(200).max(4_000), height: z.number().int().min(200).max(4_000) }).optional(),
49
+ actionTimeoutMs: z.number().int().min(1_000).max(120_000).optional().describe('How long each step waits for its element (default 10000)'),
50
+ projectRoot: z.string().optional().describe('Project directory (default: server root)'),
51
+ timeoutMs: z.number().int().min(5_000).max(300_000).optional().describe('Overall limit in ms (default 60000)'),
52
+ });
53
+ export const saveLoginSchema = saveLoginInput;
54
+ const ENV_TOKEN_RE = /\{\{\s*env:([A-Za-z0-9_]+)\s*\}\}/g;
55
+ const TOTP_TOKEN_RE = /\{\{\s*totp\s*\}\}/;
56
+ /**
57
+ * Environment variables a login may read. A page the agent visits could
58
+ * ask it to type {{env:AWS_SECRET_ACCESS_KEY}} into a form, so only names
59
+ * that are plainly test logins are allowed, plus any the user lists.
60
+ */
61
+ export function loginEnvAllowed(name) {
62
+ if (/^(E2E|TEST|PW|PLAYWRIGHT|LOGIN)_[A-Z0-9_]+$/.test(name) && name !== 'PW_MCP_HTTP_TOKEN')
63
+ return true;
64
+ const extra = (process.env.PW_MCP_LOGIN_ENV ?? '')
65
+ .split(',')
66
+ .map((entry) => entry.trim())
67
+ .filter(Boolean);
68
+ return extra.includes(name);
69
+ }
70
+ /** The environment values the fill steps ask for, checked and read. */
71
+ export function resolveLoginValues(actions) {
72
+ const names = new Set();
73
+ for (const action of actions ?? []) {
74
+ if (action.type !== 'fill' || !action.value)
75
+ continue;
76
+ for (const match of action.value.matchAll(ENV_TOKEN_RE))
77
+ names.add(match[1]);
78
+ }
79
+ const values = {};
80
+ const missing = [];
81
+ for (const name of names) {
82
+ if (!loginEnvAllowed(name)) {
83
+ throw new PlaywrightMcpError(`{{env:${name}}} is not an allowed login variable`, 'INVALID_INPUT', {
84
+ hint: 'Name login secrets E2E_*, TEST_*, PW_*, PLAYWRIGHT_* or LOGIN_* (e.g. E2E_PASSWORD), or list the name in PW_MCP_LOGIN_ENV.',
85
+ });
86
+ }
87
+ const value = process.env[name];
88
+ if (value === undefined || value === '')
89
+ missing.push(name);
90
+ else
91
+ values[name] = value;
92
+ }
93
+ if (missing.length > 0) {
94
+ throw new PlaywrightMcpError(`Not set in the server's environment: ${missing.join(', ')}`, 'INVALID_INPUT', {
95
+ hint: 'Set them where the MCP server starts (the env block of your MCP client config, or the shell), then restart the server.',
96
+ });
97
+ }
98
+ return values;
99
+ }
100
+ /** A literal typed into a password field: worth moving into an env variable. */
101
+ function literalPasswordStep(actions) {
102
+ return (actions ?? []).some((a) => a.type === 'fill' && /pass(word|code)?|pin\b/i.test(a.locator ?? '') && !!a.value && !a.value.includes('{{'));
103
+ }
104
+ function expiryText(scan) {
105
+ if (scan.firstExpiry === null)
106
+ return scan.cookies > 0 ? 'session cookies only (they end when the browser closes)' : 'no cookies';
107
+ const seconds = scan.firstExpiry - Date.now() / 1000;
108
+ const when = new Date(scan.firstExpiry * 1000).toISOString().replace('T', ' ').slice(0, 16) + ' UTC';
109
+ if (seconds <= 0)
110
+ return `a cookie already expired (${when})`;
111
+ const hours = seconds / 3600;
112
+ const span = hours < 48 ? `${Math.max(1, Math.round(hours))} h` : `${Math.round(hours / 24)} days`;
113
+ return `first cookie expires in ${span} (${when})`;
114
+ }
115
+ /** Is the session file covered by .gitignore? A rough check that catches the common miss. */
116
+ async function ignoredByGit(root, relative) {
117
+ const text = await readFile(toNativePath(path.posix.join(root, '.gitignore')), 'utf8').catch(() => '');
118
+ const lines = text.split(/\r?\n/).map((line) => line.trim().replace(/^\//, '').replace(/\/$/, ''));
119
+ const parts = relative.split('/');
120
+ for (let i = 1; i <= parts.length; i += 1) {
121
+ const prefix = parts.slice(0, i).join('/');
122
+ if (lines.includes(prefix) || lines.includes(`${prefix}/*`) || lines.includes(`${prefix}/**`))
123
+ return true;
124
+ }
125
+ return lines.some((line) => line === '*.auth.json' || line === '.auth' || (line.endsWith('.json') && relative.endsWith(line)));
126
+ }
127
+ function scanLines(scan) {
128
+ return [
129
+ `**Session:** ${scan.cookies} cookie${scan.cookies === 1 ? '' : 's'}, ${scan.origins} origin${scan.origins === 1 ? '' : 's'} with local storage · ${expiryText(scan)}`,
130
+ ];
131
+ }
132
+ export const saveLoginTool = {
133
+ name: 'save-login',
134
+ description: "Log in once and save the session as a storageState file (default playwright/.auth/<name>.json) for tests and the page tools. If a saved session still passes verify it is reused; expired ones log in again. Secrets stay out of chat: fill values use {{env:E2E_PASSWORD}} and {{totp}} (authenticator code from totpSecretEnv).",
135
+ inputSchema: saveLoginSchema,
136
+ handler: async (args, ctx) => guard('save-login', async () => {
137
+ if (ctx.restricted) {
138
+ throw new PlaywrightMcpError('save-login is not available on this server', 'INVALID_PATH', {
139
+ hint: 'It writes a session file into the project. Run the server locally.',
140
+ });
141
+ }
142
+ const url = assertHttpUrl(args.url);
143
+ await assertUrlAllowed(url);
144
+ const root = await resolveProjectRoot(args.projectRoot, ctx);
145
+ const timeoutMs = args.timeoutMs ?? 60_000;
146
+ const relativeTarget = args.path?.trim() || `playwright/.auth/${args.name ?? 'user'}.json`;
147
+ const target = sanitizeUserPath(relativeTarget, root);
148
+ if (!target.endsWith('.json')) {
149
+ throw new PlaywrightMcpError(`path must end in .json: ${relativeTarget}`, 'INVALID_PATH');
150
+ }
151
+ const shown = relativeToRoot(root, target);
152
+ let verifyUrl;
153
+ if (args.verify?.url) {
154
+ verifyUrl = new URL(args.verify.url, url).toString();
155
+ assertHttpUrl(verifyUrl);
156
+ await assertUrlAllowed(verifyUrl);
157
+ }
158
+ const visible = args.verify?.visible ? parseLocator(args.verify.visible) : undefined;
159
+ const loginVerify = args.verify ? { url: verifyUrl, visible, notUrl: args.verify.notUrl } : undefined;
160
+ const hasCheck = !!(visible || args.verify?.notUrl);
161
+ // A fresh login never starts from a session (PW_MCP_STORAGE_STATE included).
162
+ const { storageState: _default, ...base } = await resolvePageState({ headers: args.headers, viewport: args.viewport, actionTimeoutMs: args.actionTimeoutMs, actions: args.actions }, root, url, ctx);
163
+ const common = (state) => ({
164
+ ...state,
165
+ projectRoot: root,
166
+ loginVerify,
167
+ gotoTimeout: Math.min(30_000, Math.max(5_000, timeoutMs - 5_000)),
168
+ waitTimeout: 10_000,
169
+ startedAt: Date.now(),
170
+ });
171
+ // 1. A saved session that still works is kept.
172
+ const existing = await stat(toNativePath(target)).catch(() => null);
173
+ if (existing?.isFile() && args.reuse !== false && hasCheck) {
174
+ const check = await runBrowserScript({
175
+ ...common({ headers: base.headers, viewport: base.viewport }),
176
+ loginVerify: { ...loginVerify, url: undefined },
177
+ mode: 'login',
178
+ url: verifyUrl ?? url,
179
+ storageState: toNativePath(target),
180
+ loginCheckOnly: true,
181
+ }, { timeoutMs, signal: ctx.signal });
182
+ const scan = check.ok ? check.data?.login : undefined;
183
+ if (scan?.verified === true) {
184
+ return toolText([
185
+ `## ✅ STILL VALID — \`${shown}\``,
186
+ '',
187
+ `The saved session passed the check at ${verifyUrl ?? url}, so no new login was needed.`,
188
+ '',
189
+ ...scanLines(scan),
190
+ '',
191
+ `Use it with \`storageState: '${shown}'\` in the page tools, or \`use: { storageState: '${shown}' }\` in playwright.config.`,
192
+ ].join('\n'), { status: 'valid', valid: true, path: shown, url: verifyUrl ?? url, ...(scan.firstExpiry ? { expiresAt: new Date(scan.firstExpiry * 1000).toISOString() } : {}) });
193
+ }
194
+ }
195
+ if (!args.actions?.length) {
196
+ throw new PlaywrightMcpError('Pass the login steps in actions', 'INVALID_INPUT', {
197
+ hint: existing?.isFile()
198
+ ? `The saved session \`${shown}\` ${hasCheck ? 'failed the check' : 'cannot be checked without verify.visible or verify.notUrl'}, so a new login is needed.`
199
+ : "E.g. fill getByLabel('Email') with {{env:E2E_USER}}, fill getByLabel('Password') with {{env:E2E_PASSWORD}}, click getByRole('button', { name: 'Sign in' }).",
200
+ });
201
+ }
202
+ // 2. Log in, check, save.
203
+ const env = {};
204
+ const values = resolveLoginValues(args.actions);
205
+ if (Object.keys(values).length > 0)
206
+ env.PW_MCP_FILL_VALUES = JSON.stringify(values);
207
+ const wantsTotp = args.actions.some((a) => a.type === 'fill' && TOTP_TOKEN_RE.test(a.value ?? ''));
208
+ if (wantsTotp) {
209
+ const name = args.totpSecretEnv;
210
+ if (!name)
211
+ throw new PlaywrightMcpError('{{totp}} needs totpSecretEnv', 'INVALID_INPUT', { hint: 'Name the environment variable that holds the authenticator secret, e.g. E2E_TOTP_SECRET.' });
212
+ if (!loginEnvAllowed(name)) {
213
+ throw new PlaywrightMcpError(`${name} is not an allowed login variable`, 'INVALID_INPUT', {
214
+ hint: 'Name it E2E_*, TEST_*, PW_*, PLAYWRIGHT_* or LOGIN_* (e.g. E2E_TOTP_SECRET), or list it in PW_MCP_LOGIN_ENV.',
215
+ });
216
+ }
217
+ const secret = process.env[name];
218
+ if (!secret)
219
+ throw new PlaywrightMcpError(`${name} is not set in the server's environment`, 'INVALID_INPUT');
220
+ const totp = parseTotpSecret(secret);
221
+ env.PW_MCP_TOTP = JSON.stringify({ key: totp.key.toString('hex'), digits: totp.digits, period: totp.period, algorithm: totp.algorithm });
222
+ }
223
+ const outcome = await runBrowserScript({ ...common(base), mode: 'login', url }, { timeoutMs, signal: ctx.signal, env });
224
+ if (!outcome.ok) {
225
+ const done = outcome.actionsDone?.length ? `\nSteps done: ${outcome.actionsDone.join(' → ')}` : '';
226
+ return toolError(outcome.kind ?? 'UNKNOWN', `Login on ${url} failed: ${outcome.error ?? 'unknown error'}${done}`, outcome.hint, outcome.stderrTail);
227
+ }
228
+ const scan = outcome.data?.login;
229
+ if (!scan)
230
+ return toolError('UNKNOWN', 'The browser returned no session.', undefined, outcome.stderrTail);
231
+ if (scan.verified === false) {
232
+ return toolText([
233
+ `## ❌ LOGIN FAILED — nothing saved`,
234
+ '',
235
+ `The steps ran, but the check failed: ${scan.verifyNote || 'the session did not work'}. Ended on ${outcome.data?.finalUrl ?? url}.`,
236
+ '',
237
+ '**How to fix:** check the credentials in the environment, add a `wait` step for the page after sign-in, or run **inspect-page** with the same actions to see where the login stops (an MFA prompt, a consent screen, an error message).',
238
+ ].join('\n'), { ok: false, status: 'failed', valid: false, path: shown, url });
239
+ }
240
+ await writeFileInsideRoot(target, `${JSON.stringify(scan.state, null, 2)}\n`, root);
241
+ const lines = [`## ✅ SAVED — \`${shown}\``, ''];
242
+ lines.push(scan.verified === true
243
+ ? `Logged in and checked: the session works${verifyUrl ? ` on ${verifyUrl}` : ''}.`
244
+ : 'Logged in. No check was given, so the session was saved without one; add `verify` so expired sessions are caught next time.', '', ...scanLines(scan));
245
+ if (scan.cookies === 0 && scan.origins === 0) {
246
+ lines.push('', '> ⚠️ The session is empty: no cookies or local storage were set. The login may not have finished; end the steps with a `wait` on the signed-in page.');
247
+ }
248
+ if (literalPasswordStep(args.actions)) {
249
+ lines.push('', '> 🔐 A password was typed as plain text, so it is now in this chat. Put it in an environment variable (E2E_PASSWORD) and write `{{env:E2E_PASSWORD}}` instead.');
250
+ }
251
+ if (!(await ignoredByGit(root, shown))) {
252
+ lines.push('', `> ⚠️ \`${shown}\` holds live session cookies and is not in .gitignore. Add \`${path.posix.dirname(shown)}/\` to .gitignore so it is never committed.`);
253
+ }
254
+ lines.push('', `**Use it:** \`storageState: '${shown}'\` in inspect-page, validate-selector and the audits, or \`use: { storageState: '${shown}' }\` in playwright.config. Call save-login again before a run: it keeps the session while it works and logs in again when it expires.`);
255
+ return toolText(lines.join('\n'), {
256
+ status: 'saved',
257
+ valid: true,
258
+ path: shown,
259
+ url,
260
+ ...(scan.firstExpiry ? { expiresAt: new Date(scan.firstExpiry * 1000).toISOString() } : {}),
261
+ });
262
+ }),
263
+ };
264
+ //# sourceMappingURL=save-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-login.js","sourceRoot":"","sources":["../../src/tools/save-login.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,6 @@ export declare function resolveProjectRoot(input: string | undefined, ctx: ToolC
36
36
  * (with a numbered menu) when the project has several and none chosen.
37
37
  */
38
38
  export declare function resolveConfigSelection(detection: ProjectDetection, selection?: string): string | undefined;
39
- /** Validate a user-supplied test path (supports the `file:line` suffix). */
40
39
  export declare function sanitizeTestPathArgument(input: string, root: string): string;
41
40
  /** True when the path portion of a `file:line` argument exists. */
42
41
  export declare function testPathExists(argument: string, root: string): Promise<boolean>;
@@ -63,6 +62,7 @@ export declare const pageActionSchema: z.ZodObject<{
63
62
  hover: "hover";
64
63
  press: "press";
65
64
  select: "select";
65
+ switchTab: "switchTab";
66
66
  uncheck: "uncheck";
67
67
  wait: "wait";
68
68
  }>;
@@ -105,6 +105,7 @@ export declare const pageStateShape: {
105
105
  hover: "hover";
106
106
  press: "press";
107
107
  select: "select";
108
+ switchTab: "switchTab";
108
109
  uncheck: "uncheck";
109
110
  wait: "wait";
110
111
  }>;
@@ -129,6 +130,7 @@ export declare const pageStateShape: {
129
130
  width: z.ZodNumber;
130
131
  height: z.ZodNumber;
131
132
  }, z.core.$strip>>;
133
+ blockWrites: z.ZodOptional<z.ZodBoolean>;
132
134
  har: z.ZodOptional<z.ZodObject<{
133
135
  path: z.ZodString;
134
136
  mode: z.ZodOptional<z.ZodEnum<{
@@ -164,6 +166,7 @@ export interface PageStateInput {
164
166
  width: number;
165
167
  height: number;
166
168
  };
169
+ blockWrites?: boolean;
167
170
  har?: {
168
171
  path: string;
169
172
  mode?: 'replay' | 'record';
@@ -205,6 +208,8 @@ export interface ResolvedPageState {
205
208
  width: number;
206
209
  height: number;
207
210
  };
211
+ /** Abort write requests (POST/PUT/PATCH/DELETE) that no mock or HAR answers. */
212
+ blockWrites?: boolean;
208
213
  har?: {
209
214
  path: string;
210
215
  mode: 'replay' | 'record';
@@ -231,7 +236,7 @@ export declare function describeRouteHits(state: ResolvedPageState, hits: number
231
236
  /** A hint when an unauthenticated page landed on a login screen. */
232
237
  export declare function loginHint(finalUrl: string | undefined, state: ResolvedPageState): string | undefined;
233
238
  export interface BrowserScriptConfig extends Omit<ResolvedPageState, never> {
234
- mode: 'inspect' | 'validate' | 'screenshot' | 'heal' | 'a11y' | 'perf';
239
+ mode: 'inspect' | 'validate' | 'screenshot' | 'heal' | 'a11y' | 'perf' | 'login';
235
240
  projectRoot: string;
236
241
  /** Page to open; omitted when rendering a snapshot. */
237
242
  url?: string;
@@ -268,6 +273,13 @@ export interface BrowserScriptConfig extends Omit<ResolvedPageState, never> {
268
273
  mobile?: boolean;
269
274
  /** perf: ms to keep observing after load so late shifts and LCP land. */
270
275
  settleMs?: number;
276
+ /** login: how to tell the session works, and whether to only check it. */
277
+ loginVerify?: {
278
+ url?: string;
279
+ visible?: LocatorCall[];
280
+ notUrl?: string;
281
+ };
282
+ loginCheckOnly?: boolean;
271
283
  startedAt: number;
272
284
  }
273
285
  /** Network emulation in Chrome DevTools terms (throughput in bytes/s). */
@@ -293,6 +305,16 @@ export interface BrowserScriptData {
293
305
  consoleMessages?: import('../types/index.js').ConsoleMessageInfo[];
294
306
  /** Page actions that completed before inspection. */
295
307
  actionsDone?: string[];
308
+ /** blockWrites: the write requests that were aborted (first 20) and how many in all. */
309
+ blockedWrites?: {
310
+ total: number;
311
+ requests: Array<{
312
+ method: string;
313
+ url: string;
314
+ }>;
315
+ };
316
+ /** Every open tab, when an action opened more than one; `active` is the one inspected. */
317
+ tabs?: BrowserTab[];
296
318
  durationMs?: number;
297
319
  /** mode 'a11y': axe-core violations; node.element indexes `elements`. */
298
320
  a11y?: AccessibilityScan;
@@ -305,6 +327,30 @@ export interface BrowserScriptData {
305
327
  routeHits?: number[];
306
328
  /** HTTP status of the page's main document, when it was fetched over the network. */
307
329
  httpStatus?: number;
330
+ /** mode 'login': the session check and what the session holds. */
331
+ login?: LoginScan;
332
+ }
333
+ export interface BrowserTab {
334
+ url: string;
335
+ title: string;
336
+ active: boolean;
337
+ }
338
+ /** Markdown lines naming the write requests blockWrites aborted. */
339
+ export declare function describeBlockedWrites(blocked: BrowserScriptData['blockedWrites']): string[];
340
+ /** Markdown lines listing the open tabs; empty when there is only one. */
341
+ export declare function describeTabs(tabs: BrowserTab[] | undefined): string[];
342
+ export interface LoginScan {
343
+ /** null when no check was asked for. */
344
+ verified: boolean | null;
345
+ verifyNote?: string;
346
+ /** The storageState to save; absent when checking only or the check failed. */
347
+ state?: unknown;
348
+ cookies: number;
349
+ sessionCookies: number;
350
+ origins: number;
351
+ /** Earliest cookie expiry, in Unix seconds. */
352
+ firstExpiry: number | null;
353
+ expired: number;
308
354
  }
309
355
  export interface PerformanceResource {
310
356
  url: string;
@@ -386,6 +432,7 @@ export interface BrowserScriptOutcome {
386
432
  export declare function runBrowserScript(config: BrowserScriptConfig, options: {
387
433
  timeoutMs?: number;
388
434
  signal?: AbortSignal;
435
+ env?: Record<string, string>;
389
436
  }): Promise<BrowserScriptOutcome>;
390
437
  /** Accept only http(s) URLs for page-facing tools. */
391
438
  export declare function assertHttpUrl(url: string): string;