patchright-bun 1.58.1 → 1.58.2
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 +225 -225
- package/ThirdPartyNotices.txt +5041 -5041
- package/cli.js +19 -19
- package/index.d.ts +17 -17
- package/index.js +17 -17
- package/index.mjs +18 -18
- package/jsx-runtime.js +42 -42
- package/jsx-runtime.mjs +21 -21
- package/lib/agents/agentParser.js +89 -89
- package/lib/agents/copilot-setup-steps.yml +34 -34
- package/lib/agents/generateAgents.js +348 -348
- package/lib/agents/playwright-test-coverage.prompt.md +31 -31
- package/lib/agents/playwright-test-generate.prompt.md +8 -8
- package/lib/agents/playwright-test-generator.agent.md +88 -88
- package/lib/agents/playwright-test-heal.prompt.md +6 -6
- package/lib/agents/playwright-test-healer.agent.md +55 -55
- package/lib/agents/playwright-test-plan.prompt.md +9 -9
- package/lib/agents/playwright-test-planner.agent.md +73 -73
- package/lib/common/config.js +282 -282
- package/lib/common/configLoader.js +344 -344
- package/lib/common/esmLoaderHost.js +104 -104
- package/lib/common/expectBundle.js +28 -28
- package/lib/common/expectBundleImpl.js +407 -407
- package/lib/common/fixtures.js +302 -302
- package/lib/common/globals.js +58 -58
- package/lib/common/ipc.js +60 -60
- package/lib/common/poolBuilder.js +85 -85
- package/lib/common/process.js +132 -132
- package/lib/common/suiteUtils.js +140 -140
- package/lib/common/test.js +321 -321
- package/lib/common/testLoader.js +101 -101
- package/lib/common/testType.js +298 -298
- package/lib/common/validators.js +68 -68
- package/lib/fsWatcher.js +67 -67
- package/lib/index.js +726 -726
- package/lib/internalsForTest.js +42 -42
- package/lib/isomorphic/events.js +77 -77
- package/lib/isomorphic/folders.js +30 -30
- package/lib/isomorphic/stringInternPool.js +69 -69
- package/lib/isomorphic/teleReceiver.js +521 -521
- package/lib/isomorphic/teleSuiteUpdater.js +157 -157
- package/lib/isomorphic/testServerConnection.js +225 -225
- package/lib/isomorphic/testServerInterface.js +16 -16
- package/lib/isomorphic/testTree.js +329 -329
- package/lib/isomorphic/types.d.js +16 -16
- package/lib/loader/loaderMain.js +59 -59
- package/lib/matchers/expect.js +311 -311
- package/lib/matchers/matcherHint.js +44 -44
- package/lib/matchers/matchers.js +383 -383
- package/lib/matchers/toBeTruthy.js +75 -75
- package/lib/matchers/toEqual.js +100 -100
- package/lib/matchers/toHaveURL.js +101 -101
- package/lib/matchers/toMatchAriaSnapshot.js +159 -159
- package/lib/matchers/toMatchSnapshot.js +342 -342
- package/lib/matchers/toMatchText.js +99 -99
- package/lib/mcp/browser/browserContextFactory.js +329 -329
- package/lib/mcp/browser/browserServerBackend.js +84 -84
- package/lib/mcp/browser/config.js +421 -421
- package/lib/mcp/browser/context.js +244 -244
- package/lib/mcp/browser/response.js +278 -278
- package/lib/mcp/browser/sessionLog.js +75 -75
- package/lib/mcp/browser/tab.js +343 -343
- package/lib/mcp/browser/tools/common.js +65 -65
- package/lib/mcp/browser/tools/console.js +46 -46
- package/lib/mcp/browser/tools/dialogs.js +60 -60
- package/lib/mcp/browser/tools/evaluate.js +61 -61
- package/lib/mcp/browser/tools/files.js +58 -58
- package/lib/mcp/browser/tools/form.js +63 -63
- package/lib/mcp/browser/tools/install.js +72 -72
- package/lib/mcp/browser/tools/keyboard.js +107 -107
- package/lib/mcp/browser/tools/mouse.js +107 -107
- package/lib/mcp/browser/tools/navigate.js +71 -71
- package/lib/mcp/browser/tools/network.js +63 -63
- package/lib/mcp/browser/tools/open.js +57 -57
- package/lib/mcp/browser/tools/pdf.js +49 -49
- package/lib/mcp/browser/tools/runCode.js +78 -78
- package/lib/mcp/browser/tools/screenshot.js +93 -93
- package/lib/mcp/browser/tools/snapshot.js +173 -173
- package/lib/mcp/browser/tools/tabs.js +67 -67
- package/lib/mcp/browser/tools/tool.js +47 -47
- package/lib/mcp/browser/tools/tracing.js +74 -74
- package/lib/mcp/browser/tools/utils.js +94 -94
- package/lib/mcp/browser/tools/verify.js +143 -143
- package/lib/mcp/browser/tools/wait.js +63 -63
- package/lib/mcp/browser/tools.js +84 -84
- package/lib/mcp/browser/watchdog.js +44 -44
- package/lib/mcp/config.d.js +16 -16
- package/lib/mcp/extension/cdpRelay.js +351 -351
- package/lib/mcp/extension/extensionContextFactory.js +76 -76
- package/lib/mcp/extension/protocol.js +28 -28
- package/lib/mcp/index.js +61 -61
- package/lib/mcp/log.js +35 -35
- package/lib/mcp/program.js +111 -111
- package/lib/mcp/sdk/exports.js +28 -28
- package/lib/mcp/sdk/http.js +152 -152
- package/lib/mcp/sdk/inProcessTransport.js +71 -71
- package/lib/mcp/sdk/server.js +223 -223
- package/lib/mcp/sdk/tool.js +47 -47
- package/lib/mcp/terminal/cli.js +296 -296
- package/lib/mcp/terminal/command.js +56 -56
- package/lib/mcp/terminal/commands.js +333 -333
- package/lib/mcp/terminal/daemon.js +129 -129
- package/lib/mcp/terminal/help.json +31 -31
- package/lib/mcp/terminal/helpGenerator.js +88 -88
- package/lib/mcp/terminal/socketConnection.js +80 -80
- package/lib/mcp/test/browserBackend.js +98 -98
- package/lib/mcp/test/generatorTools.js +122 -122
- package/lib/mcp/test/plannerTools.js +145 -145
- package/lib/mcp/test/seed.js +82 -82
- package/lib/mcp/test/streams.js +44 -44
- package/lib/mcp/test/testBackend.js +99 -99
- package/lib/mcp/test/testContext.js +285 -285
- package/lib/mcp/test/testTool.js +30 -30
- package/lib/mcp/test/testTools.js +108 -108
- package/lib/plugins/gitCommitInfoPlugin.js +198 -198
- package/lib/plugins/index.js +28 -28
- package/lib/plugins/webServerPlugin.js +237 -237
- package/lib/program.js +417 -417
- package/lib/reporters/base.js +634 -634
- package/lib/reporters/blob.js +138 -138
- package/lib/reporters/dot.js +99 -99
- package/lib/reporters/empty.js +32 -32
- package/lib/reporters/github.js +128 -128
- package/lib/reporters/html.js +633 -633
- package/lib/reporters/internalReporter.js +138 -138
- package/lib/reporters/json.js +254 -254
- package/lib/reporters/junit.js +232 -232
- package/lib/reporters/line.js +131 -131
- package/lib/reporters/list.js +253 -253
- package/lib/reporters/listModeReporter.js +69 -69
- package/lib/reporters/markdown.js +144 -144
- package/lib/reporters/merge.js +558 -558
- package/lib/reporters/multiplexer.js +112 -112
- package/lib/reporters/reporterV2.js +102 -102
- package/lib/reporters/teleEmitter.js +317 -317
- package/lib/reporters/versions/blobV1.js +16 -16
- package/lib/runner/dispatcher.js +530 -530
- package/lib/runner/failureTracker.js +72 -72
- package/lib/runner/lastRun.js +77 -77
- package/lib/runner/loadUtils.js +334 -334
- package/lib/runner/loaderHost.js +89 -89
- package/lib/runner/processHost.js +180 -180
- package/lib/runner/projectUtils.js +241 -241
- package/lib/runner/rebase.js +189 -189
- package/lib/runner/reporters.js +138 -138
- package/lib/runner/sigIntWatcher.js +96 -96
- package/lib/runner/storage.js +91 -91
- package/lib/runner/taskRunner.js +127 -127
- package/lib/runner/tasks.js +410 -410
- package/lib/runner/testGroups.js +125 -125
- package/lib/runner/testRunner.js +398 -398
- package/lib/runner/testServer.js +269 -269
- package/lib/runner/uiModeReporter.js +30 -30
- package/lib/runner/vcs.js +72 -72
- package/lib/runner/watchMode.js +396 -396
- package/lib/runner/workerHost.js +104 -104
- package/lib/third_party/pirates.js +62 -62
- package/lib/third_party/tsconfig-loader.js +103 -103
- package/lib/transform/babelBundle.js +46 -46
- package/lib/transform/babelBundleImpl.js +461 -461
- package/lib/transform/compilationCache.js +274 -274
- package/lib/transform/esmLoader.js +103 -103
- package/lib/transform/md.js +221 -221
- package/lib/transform/portTransport.js +67 -67
- package/lib/transform/transform.js +303 -303
- package/lib/util.js +400 -400
- package/lib/utilsBundle.js +50 -50
- package/lib/utilsBundleImpl.js +103 -103
- package/lib/worker/fixtureRunner.js +262 -262
- package/lib/worker/testInfo.js +536 -536
- package/lib/worker/testTracing.js +345 -345
- package/lib/worker/timeoutManager.js +174 -174
- package/lib/worker/util.js +31 -31
- package/lib/worker/workerMain.js +530 -530
- package/package.json +2 -2
- package/test.d.ts +18 -18
- package/test.js +24 -24
- package/test.mjs +34 -34
- package/types/test.d.ts +10251 -10251
- package/types/testReporter.d.ts +822 -822
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var form_exports = {};
|
|
20
|
-
__export(form_exports, {
|
|
21
|
-
default: () => form_default
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(form_exports);
|
|
24
|
-
var import_mcpBundle = require("patchright-core/lib/mcpBundle");
|
|
25
|
-
var import_utils = require("patchright-core/lib/utils");
|
|
26
|
-
var import_tool = require("./tool");
|
|
27
|
-
const fillForm = (0, import_tool.defineTabTool)({
|
|
28
|
-
capability: "core",
|
|
29
|
-
schema: {
|
|
30
|
-
name: "browser_fill_form",
|
|
31
|
-
title: "Fill form",
|
|
32
|
-
description: "Fill multiple form fields",
|
|
33
|
-
inputSchema: import_mcpBundle.z.object({
|
|
34
|
-
fields: import_mcpBundle.z.array(import_mcpBundle.z.object({
|
|
35
|
-
name: import_mcpBundle.z.string().describe("Human-readable field name"),
|
|
36
|
-
type: import_mcpBundle.z.enum(["textbox", "checkbox", "radio", "combobox", "slider"]).describe("Type of the field"),
|
|
37
|
-
ref: import_mcpBundle.z.string().describe("Exact target field reference from the page snapshot"),
|
|
38
|
-
value: import_mcpBundle.z.string().describe("Value to fill in the field. If the field is a checkbox, the value should be `true` or `false`. If the field is a combobox, the value should be the text of the option.")
|
|
39
|
-
})).describe("Fields to fill in")
|
|
40
|
-
}),
|
|
41
|
-
type: "input"
|
|
42
|
-
},
|
|
43
|
-
handle: async (tab, params, response) => {
|
|
44
|
-
for (const field of params.fields) {
|
|
45
|
-
const { locator, resolved } = await tab.refLocator({ element: field.name, ref: field.ref });
|
|
46
|
-
const locatorSource = `await page.${resolved}`;
|
|
47
|
-
if (field.type === "textbox" || field.type === "slider") {
|
|
48
|
-
const secret = tab.context.lookupSecret(field.value);
|
|
49
|
-
await locator.fill(secret.value);
|
|
50
|
-
response.addCode(`${locatorSource}.fill(${secret.code});`);
|
|
51
|
-
} else if (field.type === "checkbox" || field.type === "radio") {
|
|
52
|
-
await locator.setChecked(field.value === "true");
|
|
53
|
-
response.addCode(`${locatorSource}.setChecked(${field.value});`);
|
|
54
|
-
} else if (field.type === "combobox") {
|
|
55
|
-
await locator.selectOption({ label: field.value });
|
|
56
|
-
response.addCode(`${locatorSource}.selectOption(${(0, import_utils.escapeWithQuotes)(field.value)});`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
var form_default = [
|
|
62
|
-
fillForm
|
|
63
|
-
];
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var form_exports = {};
|
|
20
|
+
__export(form_exports, {
|
|
21
|
+
default: () => form_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(form_exports);
|
|
24
|
+
var import_mcpBundle = require("patchright-bun-core/lib/mcpBundle");
|
|
25
|
+
var import_utils = require("patchright-bun-core/lib/utils");
|
|
26
|
+
var import_tool = require("./tool");
|
|
27
|
+
const fillForm = (0, import_tool.defineTabTool)({
|
|
28
|
+
capability: "core",
|
|
29
|
+
schema: {
|
|
30
|
+
name: "browser_fill_form",
|
|
31
|
+
title: "Fill form",
|
|
32
|
+
description: "Fill multiple form fields",
|
|
33
|
+
inputSchema: import_mcpBundle.z.object({
|
|
34
|
+
fields: import_mcpBundle.z.array(import_mcpBundle.z.object({
|
|
35
|
+
name: import_mcpBundle.z.string().describe("Human-readable field name"),
|
|
36
|
+
type: import_mcpBundle.z.enum(["textbox", "checkbox", "radio", "combobox", "slider"]).describe("Type of the field"),
|
|
37
|
+
ref: import_mcpBundle.z.string().describe("Exact target field reference from the page snapshot"),
|
|
38
|
+
value: import_mcpBundle.z.string().describe("Value to fill in the field. If the field is a checkbox, the value should be `true` or `false`. If the field is a combobox, the value should be the text of the option.")
|
|
39
|
+
})).describe("Fields to fill in")
|
|
40
|
+
}),
|
|
41
|
+
type: "input"
|
|
42
|
+
},
|
|
43
|
+
handle: async (tab, params, response) => {
|
|
44
|
+
for (const field of params.fields) {
|
|
45
|
+
const { locator, resolved } = await tab.refLocator({ element: field.name, ref: field.ref });
|
|
46
|
+
const locatorSource = `await page.${resolved}`;
|
|
47
|
+
if (field.type === "textbox" || field.type === "slider") {
|
|
48
|
+
const secret = tab.context.lookupSecret(field.value);
|
|
49
|
+
await locator.fill(secret.value);
|
|
50
|
+
response.addCode(`${locatorSource}.fill(${secret.code});`);
|
|
51
|
+
} else if (field.type === "checkbox" || field.type === "radio") {
|
|
52
|
+
await locator.setChecked(field.value === "true");
|
|
53
|
+
response.addCode(`${locatorSource}.setChecked(${field.value});`);
|
|
54
|
+
} else if (field.type === "combobox") {
|
|
55
|
+
await locator.selectOption({ label: field.value });
|
|
56
|
+
response.addCode(`${locatorSource}.selectOption(${(0, import_utils.escapeWithQuotes)(field.value)});`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
var form_default = [
|
|
62
|
+
fillForm
|
|
63
|
+
];
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var install_exports = {};
|
|
30
|
-
__export(install_exports, {
|
|
31
|
-
default: () => install_default
|
|
32
|
-
});
|
|
33
|
-
module.exports = __toCommonJS(install_exports);
|
|
34
|
-
var import_child_process = require("child_process");
|
|
35
|
-
var import_path = __toESM(require("path"));
|
|
36
|
-
var import_mcpBundle = require("patchright-core/lib/mcpBundle");
|
|
37
|
-
var import_tool = require("./tool");
|
|
38
|
-
var import_response = require("../response");
|
|
39
|
-
const install = (0, import_tool.defineTool)({
|
|
40
|
-
capability: "core-install",
|
|
41
|
-
schema: {
|
|
42
|
-
name: "browser_install",
|
|
43
|
-
title: "Install the browser specified in the config",
|
|
44
|
-
description: "Install the browser specified in the config. Call this if you get an error about the browser not being installed.",
|
|
45
|
-
inputSchema: import_mcpBundle.z.object({}),
|
|
46
|
-
type: "action"
|
|
47
|
-
},
|
|
48
|
-
handle: async (context, params, response) => {
|
|
49
|
-
const channel = context.config.browser?.launchOptions?.channel ?? context.config.browser?.browserName ?? "chrome";
|
|
50
|
-
const cliPath = import_path.default.join(require.resolve("patchright/package.json"), "../cli.js");
|
|
51
|
-
const child = (0, import_child_process.fork)(cliPath, ["install", channel], {
|
|
52
|
-
stdio: "pipe"
|
|
53
|
-
});
|
|
54
|
-
const output = [];
|
|
55
|
-
child.stdout?.on("data", (data) => output.push(data.toString()));
|
|
56
|
-
child.stderr?.on("data", (data) => output.push(data.toString()));
|
|
57
|
-
await new Promise((resolve, reject) => {
|
|
58
|
-
child.on("close", (code) => {
|
|
59
|
-
if (code === 0)
|
|
60
|
-
resolve();
|
|
61
|
-
else
|
|
62
|
-
reject(new Error(`Failed to install browser: ${output.join("")}`));
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
const tabHeaders = await Promise.all(context.tabs().map((tab) => tab.headerSnapshot()));
|
|
66
|
-
const result = (0, import_response.renderTabsMarkdown)(tabHeaders);
|
|
67
|
-
response.addTextResult(result.join("\n"));
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
var install_default = [
|
|
71
|
-
install
|
|
72
|
-
];
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var install_exports = {};
|
|
30
|
+
__export(install_exports, {
|
|
31
|
+
default: () => install_default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(install_exports);
|
|
34
|
+
var import_child_process = require("child_process");
|
|
35
|
+
var import_path = __toESM(require("path"));
|
|
36
|
+
var import_mcpBundle = require("patchright-bun-core/lib/mcpBundle");
|
|
37
|
+
var import_tool = require("./tool");
|
|
38
|
+
var import_response = require("../response");
|
|
39
|
+
const install = (0, import_tool.defineTool)({
|
|
40
|
+
capability: "core-install",
|
|
41
|
+
schema: {
|
|
42
|
+
name: "browser_install",
|
|
43
|
+
title: "Install the browser specified in the config",
|
|
44
|
+
description: "Install the browser specified in the config. Call this if you get an error about the browser not being installed.",
|
|
45
|
+
inputSchema: import_mcpBundle.z.object({}),
|
|
46
|
+
type: "action"
|
|
47
|
+
},
|
|
48
|
+
handle: async (context, params, response) => {
|
|
49
|
+
const channel = context.config.browser?.launchOptions?.channel ?? context.config.browser?.browserName ?? "chrome";
|
|
50
|
+
const cliPath = import_path.default.join(require.resolve("patchright/package.json"), "../cli.js");
|
|
51
|
+
const child = (0, import_child_process.fork)(cliPath, ["install", channel], {
|
|
52
|
+
stdio: "pipe"
|
|
53
|
+
});
|
|
54
|
+
const output = [];
|
|
55
|
+
child.stdout?.on("data", (data) => output.push(data.toString()));
|
|
56
|
+
child.stderr?.on("data", (data) => output.push(data.toString()));
|
|
57
|
+
await new Promise((resolve, reject) => {
|
|
58
|
+
child.on("close", (code) => {
|
|
59
|
+
if (code === 0)
|
|
60
|
+
resolve();
|
|
61
|
+
else
|
|
62
|
+
reject(new Error(`Failed to install browser: ${output.join("")}`));
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
const tabHeaders = await Promise.all(context.tabs().map((tab) => tab.headerSnapshot()));
|
|
66
|
+
const result = (0, import_response.renderTabsMarkdown)(tabHeaders);
|
|
67
|
+
response.addTextResult(result.join("\n"));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
var install_default = [
|
|
71
|
+
install
|
|
72
|
+
];
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var keyboard_exports = {};
|
|
20
|
-
__export(keyboard_exports, {
|
|
21
|
-
default: () => keyboard_default
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(keyboard_exports);
|
|
24
|
-
var import_mcpBundle = require("patchright-core/lib/mcpBundle");
|
|
25
|
-
var import_tool = require("./tool");
|
|
26
|
-
var import_snapshot = require("./snapshot");
|
|
27
|
-
const pressKey = (0, import_tool.defineTabTool)({
|
|
28
|
-
capability: "core",
|
|
29
|
-
schema: {
|
|
30
|
-
name: "browser_press_key",
|
|
31
|
-
title: "Press a key",
|
|
32
|
-
description: "Press a key on the keyboard",
|
|
33
|
-
inputSchema: import_mcpBundle.z.object({
|
|
34
|
-
key: import_mcpBundle.z.string().describe("Name of the key to press or a character to generate, such as `ArrowLeft` or `a`")
|
|
35
|
-
}),
|
|
36
|
-
type: "input"
|
|
37
|
-
},
|
|
38
|
-
handle: async (tab, params, response) => {
|
|
39
|
-
response.addCode(`// Press ${params.key}`);
|
|
40
|
-
response.addCode(`await page.keyboard.press('${params.key}');`);
|
|
41
|
-
await tab.page.keyboard.press(params.key);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
const pressSequentially = (0, import_tool.defineTabTool)({
|
|
45
|
-
capability: "internal",
|
|
46
|
-
schema: {
|
|
47
|
-
name: "browser_press_sequentially",
|
|
48
|
-
title: "Press sequentially",
|
|
49
|
-
description: "Press text sequentially on the keyboard",
|
|
50
|
-
inputSchema: import_mcpBundle.z.object({
|
|
51
|
-
text: import_mcpBundle.z.string().describe("Text to press sequentially"),
|
|
52
|
-
submit: import_mcpBundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)")
|
|
53
|
-
}),
|
|
54
|
-
type: "input"
|
|
55
|
-
},
|
|
56
|
-
handle: async (tab, params, response) => {
|
|
57
|
-
response.addCode(`// Press ${params.text}`);
|
|
58
|
-
response.addCode(`await page.keyboard.type('${params.text}');`);
|
|
59
|
-
await tab.page.keyboard.type(params.text);
|
|
60
|
-
if (params.submit) {
|
|
61
|
-
response.addCode(`await page.keyboard.press('Enter');`);
|
|
62
|
-
response.setIncludeSnapshot();
|
|
63
|
-
await tab.waitForCompletion(async () => {
|
|
64
|
-
await tab.page.keyboard.press("Enter");
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
const typeSchema = import_snapshot.elementSchema.extend({
|
|
70
|
-
text: import_mcpBundle.z.string().describe("Text to type into the element"),
|
|
71
|
-
submit: import_mcpBundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)"),
|
|
72
|
-
slowly: import_mcpBundle.z.boolean().optional().describe("Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.")
|
|
73
|
-
});
|
|
74
|
-
const type = (0, import_tool.defineTabTool)({
|
|
75
|
-
capability: "core",
|
|
76
|
-
schema: {
|
|
77
|
-
name: "browser_type",
|
|
78
|
-
title: "Type text",
|
|
79
|
-
description: "Type text into editable element",
|
|
80
|
-
inputSchema: typeSchema,
|
|
81
|
-
type: "input"
|
|
82
|
-
},
|
|
83
|
-
handle: async (tab, params, response) => {
|
|
84
|
-
const { locator, resolved } = await tab.refLocator(params);
|
|
85
|
-
const secret = tab.context.lookupSecret(params.text);
|
|
86
|
-
await tab.waitForCompletion(async () => {
|
|
87
|
-
if (params.slowly) {
|
|
88
|
-
response.setIncludeSnapshot();
|
|
89
|
-
response.addCode(`await page.${resolved}.pressSequentially(${secret.code});`);
|
|
90
|
-
await locator.pressSequentially(secret.value);
|
|
91
|
-
} else {
|
|
92
|
-
response.addCode(`await page.${resolved}.fill(${secret.code});`);
|
|
93
|
-
await locator.fill(secret.value);
|
|
94
|
-
}
|
|
95
|
-
if (params.submit) {
|
|
96
|
-
response.setIncludeSnapshot();
|
|
97
|
-
response.addCode(`await page.${resolved}.press('Enter');`);
|
|
98
|
-
await locator.press("Enter");
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
var keyboard_default = [
|
|
104
|
-
pressKey,
|
|
105
|
-
type,
|
|
106
|
-
pressSequentially
|
|
107
|
-
];
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var keyboard_exports = {};
|
|
20
|
+
__export(keyboard_exports, {
|
|
21
|
+
default: () => keyboard_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(keyboard_exports);
|
|
24
|
+
var import_mcpBundle = require("patchright-bun-core/lib/mcpBundle");
|
|
25
|
+
var import_tool = require("./tool");
|
|
26
|
+
var import_snapshot = require("./snapshot");
|
|
27
|
+
const pressKey = (0, import_tool.defineTabTool)({
|
|
28
|
+
capability: "core",
|
|
29
|
+
schema: {
|
|
30
|
+
name: "browser_press_key",
|
|
31
|
+
title: "Press a key",
|
|
32
|
+
description: "Press a key on the keyboard",
|
|
33
|
+
inputSchema: import_mcpBundle.z.object({
|
|
34
|
+
key: import_mcpBundle.z.string().describe("Name of the key to press or a character to generate, such as `ArrowLeft` or `a`")
|
|
35
|
+
}),
|
|
36
|
+
type: "input"
|
|
37
|
+
},
|
|
38
|
+
handle: async (tab, params, response) => {
|
|
39
|
+
response.addCode(`// Press ${params.key}`);
|
|
40
|
+
response.addCode(`await page.keyboard.press('${params.key}');`);
|
|
41
|
+
await tab.page.keyboard.press(params.key);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const pressSequentially = (0, import_tool.defineTabTool)({
|
|
45
|
+
capability: "internal",
|
|
46
|
+
schema: {
|
|
47
|
+
name: "browser_press_sequentially",
|
|
48
|
+
title: "Press sequentially",
|
|
49
|
+
description: "Press text sequentially on the keyboard",
|
|
50
|
+
inputSchema: import_mcpBundle.z.object({
|
|
51
|
+
text: import_mcpBundle.z.string().describe("Text to press sequentially"),
|
|
52
|
+
submit: import_mcpBundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)")
|
|
53
|
+
}),
|
|
54
|
+
type: "input"
|
|
55
|
+
},
|
|
56
|
+
handle: async (tab, params, response) => {
|
|
57
|
+
response.addCode(`// Press ${params.text}`);
|
|
58
|
+
response.addCode(`await page.keyboard.type('${params.text}');`);
|
|
59
|
+
await tab.page.keyboard.type(params.text);
|
|
60
|
+
if (params.submit) {
|
|
61
|
+
response.addCode(`await page.keyboard.press('Enter');`);
|
|
62
|
+
response.setIncludeSnapshot();
|
|
63
|
+
await tab.waitForCompletion(async () => {
|
|
64
|
+
await tab.page.keyboard.press("Enter");
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const typeSchema = import_snapshot.elementSchema.extend({
|
|
70
|
+
text: import_mcpBundle.z.string().describe("Text to type into the element"),
|
|
71
|
+
submit: import_mcpBundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)"),
|
|
72
|
+
slowly: import_mcpBundle.z.boolean().optional().describe("Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.")
|
|
73
|
+
});
|
|
74
|
+
const type = (0, import_tool.defineTabTool)({
|
|
75
|
+
capability: "core",
|
|
76
|
+
schema: {
|
|
77
|
+
name: "browser_type",
|
|
78
|
+
title: "Type text",
|
|
79
|
+
description: "Type text into editable element",
|
|
80
|
+
inputSchema: typeSchema,
|
|
81
|
+
type: "input"
|
|
82
|
+
},
|
|
83
|
+
handle: async (tab, params, response) => {
|
|
84
|
+
const { locator, resolved } = await tab.refLocator(params);
|
|
85
|
+
const secret = tab.context.lookupSecret(params.text);
|
|
86
|
+
await tab.waitForCompletion(async () => {
|
|
87
|
+
if (params.slowly) {
|
|
88
|
+
response.setIncludeSnapshot();
|
|
89
|
+
response.addCode(`await page.${resolved}.pressSequentially(${secret.code});`);
|
|
90
|
+
await locator.pressSequentially(secret.value);
|
|
91
|
+
} else {
|
|
92
|
+
response.addCode(`await page.${resolved}.fill(${secret.code});`);
|
|
93
|
+
await locator.fill(secret.value);
|
|
94
|
+
}
|
|
95
|
+
if (params.submit) {
|
|
96
|
+
response.setIncludeSnapshot();
|
|
97
|
+
response.addCode(`await page.${resolved}.press('Enter');`);
|
|
98
|
+
await locator.press("Enter");
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
var keyboard_default = [
|
|
104
|
+
pressKey,
|
|
105
|
+
type,
|
|
106
|
+
pressSequentially
|
|
107
|
+
];
|