@stablyai/internal-playwright 0.1.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/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +168 -0
- package/ThirdPartyNotices.txt +6277 -0
- package/cli.js +19 -0
- package/index.d.ts +17 -0
- package/index.js +17 -0
- package/index.mjs +18 -0
- package/jsx-runtime.js +42 -0
- package/jsx-runtime.mjs +21 -0
- package/lib/agents/generateAgents.js +265 -0
- package/lib/agents/generator.md +102 -0
- package/lib/agents/healer.md +78 -0
- package/lib/agents/planner.md +135 -0
- package/lib/cli.js +274 -0
- package/lib/common/config.js +274 -0
- package/lib/common/config.js.map +7 -0
- package/lib/common/configLoader.js +377 -0
- package/lib/common/configLoader.js.map +7 -0
- package/lib/common/esmLoaderHost.js +102 -0
- package/lib/common/esmLoaderHost.js.map +7 -0
- package/lib/common/expectBundle.js +52 -0
- package/lib/common/expectBundle.js.map +7 -0
- package/lib/common/expectBundleImpl.js +389 -0
- package/lib/common/expectBundleImpl.js.map +7 -0
- package/lib/common/fixtures.js +302 -0
- package/lib/common/fixtures.js.map +7 -0
- package/lib/common/globals.js +58 -0
- package/lib/common/globals.js.map +7 -0
- package/lib/common/ipc.js +60 -0
- package/lib/common/ipc.js.map +7 -0
- package/lib/common/poolBuilder.js +85 -0
- package/lib/common/poolBuilder.js.map +7 -0
- package/lib/common/process.js +104 -0
- package/lib/common/process.js.map +7 -0
- package/lib/common/suiteUtils.js +140 -0
- package/lib/common/suiteUtils.js.map +7 -0
- package/lib/common/test.js +321 -0
- package/lib/common/test.js.map +7 -0
- package/lib/common/testLoader.js +100 -0
- package/lib/common/testLoader.js.map +7 -0
- package/lib/common/testType.js +310 -0
- package/lib/common/testType.js.map +7 -0
- package/lib/fsWatcher.js +67 -0
- package/lib/fsWatcher.js.map +7 -0
- package/lib/index.js +696 -0
- package/lib/index.js.map +7 -0
- package/lib/internalsForTest.js +42 -0
- package/lib/internalsForTest.js.map +7 -0
- package/lib/isomorphic/events.js +77 -0
- package/lib/isomorphic/events.js.map +7 -0
- package/lib/isomorphic/folders.js +30 -0
- package/lib/isomorphic/folders.js.map +7 -0
- package/lib/isomorphic/stringInternPool.js +69 -0
- package/lib/isomorphic/stringInternPool.js.map +7 -0
- package/lib/isomorphic/teleReceiver.js +507 -0
- package/lib/isomorphic/teleReceiver.js.map +7 -0
- package/lib/isomorphic/teleSuiteUpdater.js +137 -0
- package/lib/isomorphic/teleSuiteUpdater.js.map +7 -0
- package/lib/isomorphic/testServerConnection.js +211 -0
- package/lib/isomorphic/testServerConnection.js.map +7 -0
- package/lib/isomorphic/testServerInterface.js +16 -0
- package/lib/isomorphic/testServerInterface.js.map +7 -0
- package/lib/isomorphic/testTree.js +334 -0
- package/lib/isomorphic/testTree.js.map +7 -0
- package/lib/isomorphic/types.d.js +16 -0
- package/lib/isomorphic/types.d.js.map +7 -0
- package/lib/loader/loaderMain.js +59 -0
- package/lib/loader/loaderMain.js.map +7 -0
- package/lib/matchers/expect.js +325 -0
- package/lib/matchers/expect.js.map +7 -0
- package/lib/matchers/matcherHint.js +87 -0
- package/lib/matchers/matcherHint.js.map +7 -0
- package/lib/matchers/matchers.js +366 -0
- package/lib/matchers/matchers.js.map +7 -0
- package/lib/matchers/toBeTruthy.js +73 -0
- package/lib/matchers/toBeTruthy.js.map +7 -0
- package/lib/matchers/toEqual.js +99 -0
- package/lib/matchers/toEqual.js.map +7 -0
- package/lib/matchers/toHaveURL.js +102 -0
- package/lib/matchers/toHaveURL.js.map +7 -0
- package/lib/matchers/toMatchAriaSnapshot.js +159 -0
- package/lib/matchers/toMatchAriaSnapshot.js.map +7 -0
- package/lib/matchers/toMatchSnapshot.js +359 -0
- package/lib/matchers/toMatchSnapshot.js.map +7 -0
- package/lib/matchers/toMatchText.js +99 -0
- package/lib/matchers/toMatchText.js.map +7 -0
- package/lib/mcp/browser/actions.d.js +16 -0
- package/lib/mcp/browser/backend.js +93 -0
- package/lib/mcp/browser/backend.js.map +7 -0
- package/lib/mcp/browser/browserContextFactory.js +296 -0
- package/lib/mcp/browser/browserServerBackend.js +76 -0
- package/lib/mcp/browser/codegen.js +66 -0
- package/lib/mcp/browser/config.js +385 -0
- package/lib/mcp/browser/context.js +287 -0
- package/lib/mcp/browser/response.js +228 -0
- package/lib/mcp/browser/sessionLog.js +160 -0
- package/lib/mcp/browser/tab.js +277 -0
- package/lib/mcp/browser/tool.js +30 -0
- package/lib/mcp/browser/tool.js.map +7 -0
- package/lib/mcp/browser/tools/common.js +63 -0
- package/lib/mcp/browser/tools/console.js +44 -0
- package/lib/mcp/browser/tools/dialogs.js +60 -0
- package/lib/mcp/browser/tools/evaluate.js +70 -0
- package/lib/mcp/browser/tools/files.js +58 -0
- package/lib/mcp/browser/tools/form.js +74 -0
- package/lib/mcp/browser/tools/install.js +69 -0
- package/lib/mcp/browser/tools/keyboard.js +85 -0
- package/lib/mcp/browser/tools/mouse.js +107 -0
- package/lib/mcp/browser/tools/navigate.js +62 -0
- package/lib/mcp/browser/tools/network.js +54 -0
- package/lib/mcp/browser/tools/pdf.js +59 -0
- package/lib/mcp/browser/tools/screenshot.js +88 -0
- package/lib/mcp/browser/tools/snapshot.js +182 -0
- package/lib/mcp/browser/tools/tabs.js +67 -0
- package/lib/mcp/browser/tools/tool.js +49 -0
- package/lib/mcp/browser/tools/tracing.js +74 -0
- package/lib/mcp/browser/tools/utils.js +100 -0
- package/lib/mcp/browser/tools/verify.js +154 -0
- package/lib/mcp/browser/tools/wait.js +63 -0
- package/lib/mcp/browser/tools.js +80 -0
- package/lib/mcp/browser/tools.js.map +7 -0
- package/lib/mcp/browser/watchdog.js +44 -0
- package/lib/mcp/config.d.js +16 -0
- package/lib/mcp/extension/cdpRelay.js +351 -0
- package/lib/mcp/extension/extensionContextFactory.js +75 -0
- package/lib/mcp/extension/protocol.js +28 -0
- package/lib/mcp/index.js +61 -0
- package/lib/mcp/log.js +35 -0
- package/lib/mcp/program.js +96 -0
- package/lib/mcp/sdk/bundle.js +81 -0
- package/lib/mcp/sdk/bundle.js.map +7 -0
- package/lib/mcp/sdk/call.js +49 -0
- package/lib/mcp/sdk/call.js.map +7 -0
- package/lib/mcp/sdk/exports.js +32 -0
- package/lib/mcp/sdk/exports.js.map +7 -0
- package/lib/mcp/sdk/http.js +187 -0
- package/lib/mcp/sdk/http.js.map +7 -0
- package/lib/mcp/sdk/inProcessTransport.js +71 -0
- package/lib/mcp/sdk/inProcessTransport.js.map +7 -0
- package/lib/mcp/sdk/mdb.js +206 -0
- package/lib/mcp/sdk/mdb.js.map +7 -0
- package/lib/mcp/sdk/proxyBackend.js +128 -0
- package/lib/mcp/sdk/proxyBackend.js.map +7 -0
- package/lib/mcp/sdk/server.js +189 -0
- package/lib/mcp/sdk/server.js.map +7 -0
- package/lib/mcp/sdk/tool.js +51 -0
- package/lib/mcp/sdk/tool.js.map +7 -0
- package/lib/mcp/test/backend.js +67 -0
- package/lib/mcp/test/backend.js.map +7 -0
- package/lib/mcp/test/browserBackend.js +98 -0
- package/lib/mcp/test/context.js +48 -0
- package/lib/mcp/test/context.js.map +7 -0
- package/lib/mcp/test/generatorTools.js +122 -0
- package/lib/mcp/test/plannerTools.js +46 -0
- package/lib/mcp/test/seed.js +72 -0
- package/lib/mcp/test/streams.js +39 -0
- package/lib/mcp/test/streams.js.map +7 -0
- package/lib/mcp/test/testBackend.js +97 -0
- package/lib/mcp/test/testContext.js +176 -0
- package/lib/mcp/test/testTool.js +30 -0
- package/lib/mcp/test/testTools.js +115 -0
- package/lib/mcp/test/tool.js +30 -0
- package/lib/mcp/test/tool.js.map +7 -0
- package/lib/mcp/test/tools.js +150 -0
- package/lib/mcp/test/tools.js.map +7 -0
- package/lib/mcp/vscode/host.js +187 -0
- package/lib/mcp/vscode/main.js +77 -0
- package/lib/mcpBundleImpl.js +41 -0
- package/lib/mcpBundleImpl.js.map +7 -0
- package/lib/plugins/gitCommitInfoPlugin.js +198 -0
- package/lib/plugins/gitCommitInfoPlugin.js.map +7 -0
- package/lib/plugins/index.js +28 -0
- package/lib/plugins/index.js.map +7 -0
- package/lib/plugins/webServerPlugin.js +209 -0
- package/lib/plugins/webServerPlugin.js.map +7 -0
- package/lib/program.js +412 -0
- package/lib/program.js.map +7 -0
- package/lib/reporters/base.js +609 -0
- package/lib/reporters/base.js.map +7 -0
- package/lib/reporters/blob.js +135 -0
- package/lib/reporters/blob.js.map +7 -0
- package/lib/reporters/dot.js +82 -0
- package/lib/reporters/dot.js.map +7 -0
- package/lib/reporters/empty.js +32 -0
- package/lib/reporters/empty.js.map +7 -0
- package/lib/reporters/github.js +128 -0
- package/lib/reporters/github.js.map +7 -0
- package/lib/reporters/html.js +644 -0
- package/lib/reporters/html.js.map +7 -0
- package/lib/reporters/internalReporter.js +130 -0
- package/lib/reporters/internalReporter.js.map +7 -0
- package/lib/reporters/json.js +254 -0
- package/lib/reporters/json.js.map +7 -0
- package/lib/reporters/junit.js +230 -0
- package/lib/reporters/junit.js.map +7 -0
- package/lib/reporters/line.js +113 -0
- package/lib/reporters/line.js.map +7 -0
- package/lib/reporters/list.js +235 -0
- package/lib/reporters/list.js.map +7 -0
- package/lib/reporters/listModeReporter.js +69 -0
- package/lib/reporters/listModeReporter.js.map +7 -0
- package/lib/reporters/markdown.js +144 -0
- package/lib/reporters/markdown.js.map +7 -0
- package/lib/reporters/merge.js +535 -0
- package/lib/reporters/merge.js.map +7 -0
- package/lib/reporters/multiplexer.js +104 -0
- package/lib/reporters/multiplexer.js.map +7 -0
- package/lib/reporters/reporterV2.js +102 -0
- package/lib/reporters/reporterV2.js.map +7 -0
- package/lib/reporters/teleEmitter.js +297 -0
- package/lib/reporters/teleEmitter.js.map +7 -0
- package/lib/reporters/versions/blobV1.js +16 -0
- package/lib/reporters/versions/blobV1.js.map +7 -0
- package/lib/runner/dispatcher.js +491 -0
- package/lib/runner/dispatcher.js.map +7 -0
- package/lib/runner/failureTracker.js +72 -0
- package/lib/runner/failureTracker.js.map +7 -0
- package/lib/runner/lastRun.js +77 -0
- package/lib/runner/lastRun.js.map +7 -0
- package/lib/runner/loadUtils.js +333 -0
- package/lib/runner/loadUtils.js.map +7 -0
- package/lib/runner/loaderHost.js +89 -0
- package/lib/runner/loaderHost.js.map +7 -0
- package/lib/runner/processHost.js +161 -0
- package/lib/runner/processHost.js.map +7 -0
- package/lib/runner/projectUtils.js +241 -0
- package/lib/runner/projectUtils.js.map +7 -0
- package/lib/runner/rebase.js +189 -0
- package/lib/runner/rebase.js.map +7 -0
- package/lib/runner/reporters.js +137 -0
- package/lib/runner/reporters.js.map +7 -0
- package/lib/runner/runner.js +173 -0
- package/lib/runner/sigIntWatcher.js +96 -0
- package/lib/runner/sigIntWatcher.js.map +7 -0
- package/lib/runner/taskRunner.js +127 -0
- package/lib/runner/taskRunner.js.map +7 -0
- package/lib/runner/tasks.js +410 -0
- package/lib/runner/tasks.js.map +7 -0
- package/lib/runner/testGroups.js +117 -0
- package/lib/runner/testGroups.js.map +7 -0
- package/lib/runner/testRunner.js +390 -0
- package/lib/runner/testRunner.js.map +7 -0
- package/lib/runner/testServer.js +264 -0
- package/lib/runner/testServer.js.map +7 -0
- package/lib/runner/uiMode.js +271 -0
- package/lib/runner/uiModeReporter.js +30 -0
- package/lib/runner/uiModeReporter.js.map +7 -0
- package/lib/runner/vcs.js +72 -0
- package/lib/runner/vcs.js.map +7 -0
- package/lib/runner/watchMode.js +395 -0
- package/lib/runner/watchMode.js.map +7 -0
- package/lib/runner/workerHost.js +95 -0
- package/lib/runner/workerHost.js.map +7 -0
- package/lib/store.js +98 -0
- package/lib/third_party/pirates.js +62 -0
- package/lib/third_party/pirates.js.map +7 -0
- package/lib/third_party/tsconfig-loader.js +103 -0
- package/lib/third_party/tsconfig-loader.js.map +7 -0
- package/lib/transform/babelBundle.js +43 -0
- package/lib/transform/babelBundle.js.map +7 -0
- package/lib/transform/babelBundleImpl.js +461 -0
- package/lib/transform/babelBundleImpl.js.map +7 -0
- package/lib/transform/compilationCache.js +272 -0
- package/lib/transform/compilationCache.js.map +7 -0
- package/lib/transform/esmLoader.js +104 -0
- package/lib/transform/esmLoader.js.map +7 -0
- package/lib/transform/esmUtils.js +32 -0
- package/lib/transform/portTransport.js +67 -0
- package/lib/transform/portTransport.js.map +7 -0
- package/lib/transform/transform.js +293 -0
- package/lib/transform/transform.js.map +7 -0
- package/lib/util.js +403 -0
- package/lib/util.js.map +7 -0
- package/lib/utilsBundle.js +43 -0
- package/lib/utilsBundle.js.map +7 -0
- package/lib/utilsBundleImpl.js +100 -0
- package/lib/utilsBundleImpl.js.map +7 -0
- package/lib/worker/fixtureRunner.js +258 -0
- package/lib/worker/fixtureRunner.js.map +7 -0
- package/lib/worker/stepContext.js +34 -0
- package/lib/worker/testInfo.js +508 -0
- package/lib/worker/testInfo.js.map +7 -0
- package/lib/worker/testTracing.js +344 -0
- package/lib/worker/testTracing.js.map +7 -0
- package/lib/worker/timeoutManager.js +174 -0
- package/lib/worker/timeoutManager.js.map +7 -0
- package/lib/worker/util.js +31 -0
- package/lib/worker/util.js.map +7 -0
- package/lib/worker/workerMain.js +520 -0
- package/lib/worker/workerMain.js.map +7 -0
- package/package.json +74 -0
- package/test.d.ts +18 -0
- package/test.js +24 -0
- package/test.mjs +33 -0
- package/types/test.d.ts +10217 -0
- package/types/testReporter.d.ts +816 -0
@@ -0,0 +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 common_exports = {};
|
20
|
+
__export(common_exports, {
|
21
|
+
default: () => common_default
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(common_exports);
|
24
|
+
var import_bundle = require("../../sdk/bundle");
|
25
|
+
var import_tool = require("./tool");
|
26
|
+
const close = (0, import_tool.defineTool)({
|
27
|
+
capability: "core",
|
28
|
+
schema: {
|
29
|
+
name: "browser_close",
|
30
|
+
title: "Close browser",
|
31
|
+
description: "Close the page",
|
32
|
+
inputSchema: import_bundle.z.object({}),
|
33
|
+
type: "action"
|
34
|
+
},
|
35
|
+
handle: async (context, params, response) => {
|
36
|
+
await context.closeBrowserContext();
|
37
|
+
response.setIncludeTabs();
|
38
|
+
response.addCode(`await page.close()`);
|
39
|
+
}
|
40
|
+
});
|
41
|
+
const resize = (0, import_tool.defineTabTool)({
|
42
|
+
capability: "core",
|
43
|
+
schema: {
|
44
|
+
name: "browser_resize",
|
45
|
+
title: "Resize browser window",
|
46
|
+
description: "Resize the browser window",
|
47
|
+
inputSchema: import_bundle.z.object({
|
48
|
+
width: import_bundle.z.number().describe("Width of the browser window"),
|
49
|
+
height: import_bundle.z.number().describe("Height of the browser window")
|
50
|
+
}),
|
51
|
+
type: "action"
|
52
|
+
},
|
53
|
+
handle: async (tab, params, response) => {
|
54
|
+
response.addCode(`await page.setViewportSize({ width: ${params.width}, height: ${params.height} });`);
|
55
|
+
await tab.waitForCompletion(async () => {
|
56
|
+
await tab.page.setViewportSize({ width: params.width, height: params.height });
|
57
|
+
});
|
58
|
+
}
|
59
|
+
});
|
60
|
+
var common_default = [
|
61
|
+
close,
|
62
|
+
resize
|
63
|
+
];
|
@@ -0,0 +1,44 @@
|
|
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 console_exports = {};
|
20
|
+
__export(console_exports, {
|
21
|
+
default: () => console_default
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(console_exports);
|
24
|
+
var import_bundle = require("../../sdk/bundle");
|
25
|
+
var import_tool = require("./tool");
|
26
|
+
const console = (0, import_tool.defineTabTool)({
|
27
|
+
capability: "core",
|
28
|
+
schema: {
|
29
|
+
name: "browser_console_messages",
|
30
|
+
title: "Get console messages",
|
31
|
+
description: "Returns all console messages",
|
32
|
+
inputSchema: import_bundle.z.object({
|
33
|
+
onlyErrors: import_bundle.z.boolean().optional().describe("Only return error messages")
|
34
|
+
}),
|
35
|
+
type: "readOnly"
|
36
|
+
},
|
37
|
+
handle: async (tab, params, response) => {
|
38
|
+
const messages = await tab.consoleMessages(params.onlyErrors ? "error" : void 0);
|
39
|
+
messages.map((message) => response.addResult(message.toString()));
|
40
|
+
}
|
41
|
+
});
|
42
|
+
var console_default = [
|
43
|
+
console
|
44
|
+
];
|
@@ -0,0 +1,60 @@
|
|
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 dialogs_exports = {};
|
20
|
+
__export(dialogs_exports, {
|
21
|
+
default: () => dialogs_default,
|
22
|
+
handleDialog: () => handleDialog
|
23
|
+
});
|
24
|
+
module.exports = __toCommonJS(dialogs_exports);
|
25
|
+
var import_bundle = require("../../sdk/bundle");
|
26
|
+
var import_tool = require("./tool");
|
27
|
+
const handleDialog = (0, import_tool.defineTabTool)({
|
28
|
+
capability: "core",
|
29
|
+
schema: {
|
30
|
+
name: "browser_handle_dialog",
|
31
|
+
title: "Handle a dialog",
|
32
|
+
description: "Handle a dialog",
|
33
|
+
inputSchema: import_bundle.z.object({
|
34
|
+
accept: import_bundle.z.boolean().describe("Whether to accept the dialog."),
|
35
|
+
promptText: import_bundle.z.string().optional().describe("The text of the prompt in case of a prompt dialog.")
|
36
|
+
}),
|
37
|
+
type: "action"
|
38
|
+
},
|
39
|
+
handle: async (tab, params, response) => {
|
40
|
+
response.setIncludeSnapshot();
|
41
|
+
const dialogState = tab.modalStates().find((state) => state.type === "dialog");
|
42
|
+
if (!dialogState)
|
43
|
+
throw new Error("No dialog visible");
|
44
|
+
tab.clearModalState(dialogState);
|
45
|
+
await tab.waitForCompletion(async () => {
|
46
|
+
if (params.accept)
|
47
|
+
await dialogState.dialog.accept(params.promptText);
|
48
|
+
else
|
49
|
+
await dialogState.dialog.dismiss();
|
50
|
+
});
|
51
|
+
},
|
52
|
+
clearsModalState: "dialog"
|
53
|
+
});
|
54
|
+
var dialogs_default = [
|
55
|
+
handleDialog
|
56
|
+
];
|
57
|
+
// Annotate the CommonJS export names for ESM import in node:
|
58
|
+
0 && (module.exports = {
|
59
|
+
handleDialog
|
60
|
+
});
|
@@ -0,0 +1,70 @@
|
|
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 evaluate_exports = {};
|
30
|
+
__export(evaluate_exports, {
|
31
|
+
default: () => evaluate_default
|
32
|
+
});
|
33
|
+
module.exports = __toCommonJS(evaluate_exports);
|
34
|
+
var import_bundle = require("../../sdk/bundle");
|
35
|
+
var import_tool = require("./tool");
|
36
|
+
var javascript = __toESM(require("../codegen"));
|
37
|
+
var import_utils = require("./utils");
|
38
|
+
const evaluateSchema = import_bundle.z.object({
|
39
|
+
function: import_bundle.z.string().describe("() => { /* code */ } or (element) => { /* code */ } when element is provided"),
|
40
|
+
element: import_bundle.z.string().optional().describe("Human-readable element description used to obtain permission to interact with the element"),
|
41
|
+
ref: import_bundle.z.string().optional().describe("Exact target element reference from the page snapshot")
|
42
|
+
});
|
43
|
+
const evaluate = (0, import_tool.defineTabTool)({
|
44
|
+
capability: "core",
|
45
|
+
schema: {
|
46
|
+
name: "browser_evaluate",
|
47
|
+
title: "Evaluate JavaScript",
|
48
|
+
description: "Evaluate JavaScript expression on page or element",
|
49
|
+
inputSchema: evaluateSchema,
|
50
|
+
type: "action"
|
51
|
+
},
|
52
|
+
handle: async (tab, params, response) => {
|
53
|
+
response.setIncludeSnapshot();
|
54
|
+
let locator;
|
55
|
+
if (params.ref && params.element) {
|
56
|
+
locator = await tab.refLocator({ ref: params.ref, element: params.element });
|
57
|
+
response.addCode(`await page.${await (0, import_utils.generateLocator)(locator)}.evaluate(${javascript.quote(params.function)});`);
|
58
|
+
} else {
|
59
|
+
response.addCode(`await page.evaluate(${javascript.quote(params.function)});`);
|
60
|
+
}
|
61
|
+
await tab.waitForCompletion(async () => {
|
62
|
+
const receiver = locator ?? tab.page;
|
63
|
+
const result = await receiver._evaluateFunction(params.function);
|
64
|
+
response.addResult(JSON.stringify(result, null, 2) || "undefined");
|
65
|
+
});
|
66
|
+
}
|
67
|
+
});
|
68
|
+
var evaluate_default = [
|
69
|
+
evaluate
|
70
|
+
];
|
@@ -0,0 +1,58 @@
|
|
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 files_exports = {};
|
20
|
+
__export(files_exports, {
|
21
|
+
default: () => files_default,
|
22
|
+
uploadFile: () => uploadFile
|
23
|
+
});
|
24
|
+
module.exports = __toCommonJS(files_exports);
|
25
|
+
var import_bundle = require("../../sdk/bundle");
|
26
|
+
var import_tool = require("./tool");
|
27
|
+
const uploadFile = (0, import_tool.defineTabTool)({
|
28
|
+
capability: "core",
|
29
|
+
schema: {
|
30
|
+
name: "browser_file_upload",
|
31
|
+
title: "Upload files",
|
32
|
+
description: "Upload one or multiple files",
|
33
|
+
inputSchema: import_bundle.z.object({
|
34
|
+
paths: import_bundle.z.array(import_bundle.z.string()).optional().describe("The absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled.")
|
35
|
+
}),
|
36
|
+
type: "action"
|
37
|
+
},
|
38
|
+
handle: async (tab, params, response) => {
|
39
|
+
response.setIncludeSnapshot();
|
40
|
+
const modalState = tab.modalStates().find((state) => state.type === "fileChooser");
|
41
|
+
if (!modalState)
|
42
|
+
throw new Error("No file chooser visible");
|
43
|
+
response.addCode(`await fileChooser.setFiles(${JSON.stringify(params.paths)})`);
|
44
|
+
tab.clearModalState(modalState);
|
45
|
+
await tab.waitForCompletion(async () => {
|
46
|
+
if (params.paths)
|
47
|
+
await modalState.fileChooser.setFiles(params.paths);
|
48
|
+
});
|
49
|
+
},
|
50
|
+
clearsModalState: "fileChooser"
|
51
|
+
});
|
52
|
+
var files_default = [
|
53
|
+
uploadFile
|
54
|
+
];
|
55
|
+
// Annotate the CommonJS export names for ESM import in node:
|
56
|
+
0 && (module.exports = {
|
57
|
+
uploadFile
|
58
|
+
});
|
@@ -0,0 +1,74 @@
|
|
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 form_exports = {};
|
30
|
+
__export(form_exports, {
|
31
|
+
default: () => form_default
|
32
|
+
});
|
33
|
+
module.exports = __toCommonJS(form_exports);
|
34
|
+
var import_bundle = require("../../sdk/bundle");
|
35
|
+
var import_tool = require("./tool");
|
36
|
+
var import_utils = require("./utils");
|
37
|
+
var codegen = __toESM(require("../codegen"));
|
38
|
+
const fillForm = (0, import_tool.defineTabTool)({
|
39
|
+
capability: "core",
|
40
|
+
schema: {
|
41
|
+
name: "browser_fill_form",
|
42
|
+
title: "Fill form",
|
43
|
+
description: "Fill multiple form fields",
|
44
|
+
inputSchema: import_bundle.z.object({
|
45
|
+
fields: import_bundle.z.array(import_bundle.z.object({
|
46
|
+
name: import_bundle.z.string().describe("Human-readable field name"),
|
47
|
+
type: import_bundle.z.enum(["textbox", "checkbox", "radio", "combobox", "slider"]).describe("Type of the field"),
|
48
|
+
ref: import_bundle.z.string().describe("Exact target field reference from the page snapshot"),
|
49
|
+
value: import_bundle.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.")
|
50
|
+
})).describe("Fields to fill in")
|
51
|
+
}),
|
52
|
+
type: "input"
|
53
|
+
},
|
54
|
+
handle: async (tab, params, response) => {
|
55
|
+
for (const field of params.fields) {
|
56
|
+
const locator = await tab.refLocator({ element: field.name, ref: field.ref });
|
57
|
+
const locatorSource = `await page.${await (0, import_utils.generateLocator)(locator)}`;
|
58
|
+
if (field.type === "textbox" || field.type === "slider") {
|
59
|
+
const secret = tab.context.lookupSecret(field.value);
|
60
|
+
await locator.fill(secret.value);
|
61
|
+
response.addCode(`${locatorSource}.fill(${secret.code});`);
|
62
|
+
} else if (field.type === "checkbox" || field.type === "radio") {
|
63
|
+
await locator.setChecked(field.value === "true");
|
64
|
+
response.addCode(`${locatorSource}.setChecked(${field.value});`);
|
65
|
+
} else if (field.type === "combobox") {
|
66
|
+
await locator.selectOption({ label: field.value });
|
67
|
+
response.addCode(`${locatorSource}.selectOption(${codegen.quote(field.value)});`);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
});
|
72
|
+
var form_default = [
|
73
|
+
fillForm
|
74
|
+
];
|
@@ -0,0 +1,69 @@
|
|
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_bundle = require("../../sdk/bundle");
|
37
|
+
var import_tool = require("./tool");
|
38
|
+
const install = (0, import_tool.defineTool)({
|
39
|
+
capability: "core-install",
|
40
|
+
schema: {
|
41
|
+
name: "browser_install",
|
42
|
+
title: "Install the browser specified in the config",
|
43
|
+
description: "Install the browser specified in the config. Call this if you get an error about the browser not being installed.",
|
44
|
+
inputSchema: import_bundle.z.object({}),
|
45
|
+
type: "action"
|
46
|
+
},
|
47
|
+
handle: async (context, params, response) => {
|
48
|
+
const channel = context.config.browser?.launchOptions?.channel ?? context.config.browser?.browserName ?? "chrome";
|
49
|
+
const cliPath = import_path.default.join(require.resolve("playwright/package.json"), "../cli.js");
|
50
|
+
const child = (0, import_child_process.fork)(cliPath, ["install", channel], {
|
51
|
+
stdio: "pipe"
|
52
|
+
});
|
53
|
+
const output = [];
|
54
|
+
child.stdout?.on("data", (data) => output.push(data.toString()));
|
55
|
+
child.stderr?.on("data", (data) => output.push(data.toString()));
|
56
|
+
await new Promise((resolve, reject) => {
|
57
|
+
child.on("close", (code) => {
|
58
|
+
if (code === 0)
|
59
|
+
resolve();
|
60
|
+
else
|
61
|
+
reject(new Error(`Failed to install browser: ${output.join("")}`));
|
62
|
+
});
|
63
|
+
});
|
64
|
+
response.setIncludeTabs();
|
65
|
+
}
|
66
|
+
});
|
67
|
+
var install_default = [
|
68
|
+
install
|
69
|
+
];
|
@@ -0,0 +1,85 @@
|
|
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_bundle = require("../../sdk/bundle");
|
25
|
+
var import_tool = require("./tool");
|
26
|
+
var import_snapshot = require("./snapshot");
|
27
|
+
var import_utils = require("./utils");
|
28
|
+
const pressKey = (0, import_tool.defineTabTool)({
|
29
|
+
capability: "core",
|
30
|
+
schema: {
|
31
|
+
name: "browser_press_key",
|
32
|
+
title: "Press a key",
|
33
|
+
description: "Press a key on the keyboard",
|
34
|
+
inputSchema: import_bundle.z.object({
|
35
|
+
key: import_bundle.z.string().describe("Name of the key to press or a character to generate, such as `ArrowLeft` or `a`")
|
36
|
+
}),
|
37
|
+
type: "input"
|
38
|
+
},
|
39
|
+
handle: async (tab, params, response) => {
|
40
|
+
response.setIncludeSnapshot();
|
41
|
+
response.addCode(`// Press ${params.key}`);
|
42
|
+
response.addCode(`await page.keyboard.press('${params.key}');`);
|
43
|
+
await tab.waitForCompletion(async () => {
|
44
|
+
await tab.page.keyboard.press(params.key);
|
45
|
+
});
|
46
|
+
}
|
47
|
+
});
|
48
|
+
const typeSchema = import_snapshot.elementSchema.extend({
|
49
|
+
text: import_bundle.z.string().describe("Text to type into the element"),
|
50
|
+
submit: import_bundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)"),
|
51
|
+
slowly: import_bundle.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.")
|
52
|
+
});
|
53
|
+
const type = (0, import_tool.defineTabTool)({
|
54
|
+
capability: "core",
|
55
|
+
schema: {
|
56
|
+
name: "browser_type",
|
57
|
+
title: "Type text",
|
58
|
+
description: "Type text into editable element",
|
59
|
+
inputSchema: typeSchema,
|
60
|
+
type: "input"
|
61
|
+
},
|
62
|
+
handle: async (tab, params, response) => {
|
63
|
+
const locator = await tab.refLocator(params);
|
64
|
+
const secret = tab.context.lookupSecret(params.text);
|
65
|
+
await tab.waitForCompletion(async () => {
|
66
|
+
if (params.slowly) {
|
67
|
+
response.setIncludeSnapshot();
|
68
|
+
response.addCode(`await page.${await (0, import_utils.generateLocator)(locator)}.pressSequentially(${secret.code});`);
|
69
|
+
await locator.pressSequentially(secret.value);
|
70
|
+
} else {
|
71
|
+
response.addCode(`await page.${await (0, import_utils.generateLocator)(locator)}.fill(${secret.code});`);
|
72
|
+
await locator.fill(secret.value);
|
73
|
+
}
|
74
|
+
if (params.submit) {
|
75
|
+
response.setIncludeSnapshot();
|
76
|
+
response.addCode(`await page.${await (0, import_utils.generateLocator)(locator)}.press('Enter');`);
|
77
|
+
await locator.press("Enter");
|
78
|
+
}
|
79
|
+
});
|
80
|
+
}
|
81
|
+
});
|
82
|
+
var keyboard_default = [
|
83
|
+
pressKey,
|
84
|
+
type
|
85
|
+
];
|
@@ -0,0 +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 mouse_exports = {};
|
20
|
+
__export(mouse_exports, {
|
21
|
+
default: () => mouse_default
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(mouse_exports);
|
24
|
+
var import_bundle = require("../../sdk/bundle");
|
25
|
+
var import_tool = require("./tool");
|
26
|
+
const elementSchema = import_bundle.z.object({
|
27
|
+
element: import_bundle.z.string().describe("Human-readable element description used to obtain permission to interact with the element")
|
28
|
+
});
|
29
|
+
const mouseMove = (0, import_tool.defineTabTool)({
|
30
|
+
capability: "vision",
|
31
|
+
schema: {
|
32
|
+
name: "browser_mouse_move_xy",
|
33
|
+
title: "Move mouse",
|
34
|
+
description: "Move mouse to a given position",
|
35
|
+
inputSchema: elementSchema.extend({
|
36
|
+
x: import_bundle.z.number().describe("X coordinate"),
|
37
|
+
y: import_bundle.z.number().describe("Y coordinate")
|
38
|
+
}),
|
39
|
+
type: "input"
|
40
|
+
},
|
41
|
+
handle: async (tab, params, response) => {
|
42
|
+
response.addCode(`// Move mouse to (${params.x}, ${params.y})`);
|
43
|
+
response.addCode(`await page.mouse.move(${params.x}, ${params.y});`);
|
44
|
+
await tab.waitForCompletion(async () => {
|
45
|
+
await tab.page.mouse.move(params.x, params.y);
|
46
|
+
});
|
47
|
+
}
|
48
|
+
});
|
49
|
+
const mouseClick = (0, import_tool.defineTabTool)({
|
50
|
+
capability: "vision",
|
51
|
+
schema: {
|
52
|
+
name: "browser_mouse_click_xy",
|
53
|
+
title: "Click",
|
54
|
+
description: "Click left mouse button at a given position",
|
55
|
+
inputSchema: elementSchema.extend({
|
56
|
+
x: import_bundle.z.number().describe("X coordinate"),
|
57
|
+
y: import_bundle.z.number().describe("Y coordinate")
|
58
|
+
}),
|
59
|
+
type: "input"
|
60
|
+
},
|
61
|
+
handle: async (tab, params, response) => {
|
62
|
+
response.setIncludeSnapshot();
|
63
|
+
response.addCode(`// Click mouse at coordinates (${params.x}, ${params.y})`);
|
64
|
+
response.addCode(`await page.mouse.move(${params.x}, ${params.y});`);
|
65
|
+
response.addCode(`await page.mouse.down();`);
|
66
|
+
response.addCode(`await page.mouse.up();`);
|
67
|
+
await tab.waitForCompletion(async () => {
|
68
|
+
await tab.page.mouse.move(params.x, params.y);
|
69
|
+
await tab.page.mouse.down();
|
70
|
+
await tab.page.mouse.up();
|
71
|
+
});
|
72
|
+
}
|
73
|
+
});
|
74
|
+
const mouseDrag = (0, import_tool.defineTabTool)({
|
75
|
+
capability: "vision",
|
76
|
+
schema: {
|
77
|
+
name: "browser_mouse_drag_xy",
|
78
|
+
title: "Drag mouse",
|
79
|
+
description: "Drag left mouse button to a given position",
|
80
|
+
inputSchema: elementSchema.extend({
|
81
|
+
startX: import_bundle.z.number().describe("Start X coordinate"),
|
82
|
+
startY: import_bundle.z.number().describe("Start Y coordinate"),
|
83
|
+
endX: import_bundle.z.number().describe("End X coordinate"),
|
84
|
+
endY: import_bundle.z.number().describe("End Y coordinate")
|
85
|
+
}),
|
86
|
+
type: "input"
|
87
|
+
},
|
88
|
+
handle: async (tab, params, response) => {
|
89
|
+
response.setIncludeSnapshot();
|
90
|
+
response.addCode(`// Drag mouse from (${params.startX}, ${params.startY}) to (${params.endX}, ${params.endY})`);
|
91
|
+
response.addCode(`await page.mouse.move(${params.startX}, ${params.startY});`);
|
92
|
+
response.addCode(`await page.mouse.down();`);
|
93
|
+
response.addCode(`await page.mouse.move(${params.endX}, ${params.endY});`);
|
94
|
+
response.addCode(`await page.mouse.up();`);
|
95
|
+
await tab.waitForCompletion(async () => {
|
96
|
+
await tab.page.mouse.move(params.startX, params.startY);
|
97
|
+
await tab.page.mouse.down();
|
98
|
+
await tab.page.mouse.move(params.endX, params.endY);
|
99
|
+
await tab.page.mouse.up();
|
100
|
+
});
|
101
|
+
}
|
102
|
+
});
|
103
|
+
var mouse_default = [
|
104
|
+
mouseMove,
|
105
|
+
mouseClick,
|
106
|
+
mouseDrag
|
107
|
+
];
|