patchright-core 1.57.0 → 1.59.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 (307) hide show
  1. package/ThirdPartyNotices.txt +2688 -297
  2. package/browsers.json +23 -22
  3. package/lib/bootstrap.js +77 -0
  4. package/lib/cli/browserActions.js +308 -0
  5. package/lib/cli/driver.js +3 -2
  6. package/lib/cli/installActions.js +171 -0
  7. package/lib/cli/program.js +48 -413
  8. package/lib/client/android.js +4 -4
  9. package/lib/client/api.js +3 -0
  10. package/lib/client/browser.js +11 -5
  11. package/lib/client/browserContext.js +20 -23
  12. package/lib/client/browserType.js +23 -54
  13. package/lib/client/cdpSession.js +6 -2
  14. package/lib/client/channelOwner.js +1 -1
  15. package/lib/client/clientHelper.js +2 -1
  16. package/lib/client/clock.js +0 -1
  17. package/lib/client/{webSocket.js → connect.js} +57 -7
  18. package/lib/client/connection.js +8 -0
  19. package/lib/client/consoleMessage.js +3 -0
  20. package/lib/client/debugger.js +57 -0
  21. package/lib/client/dialog.js +8 -1
  22. package/lib/client/disposable.js +76 -0
  23. package/lib/client/electron.js +1 -0
  24. package/lib/client/elementHandle.js +1 -1
  25. package/lib/client/events.js +3 -0
  26. package/lib/client/fetch.js +2 -4
  27. package/lib/client/frame.js +9 -13
  28. package/lib/client/harRouter.js +13 -1
  29. package/lib/client/jsHandle.js +4 -8
  30. package/lib/client/locator.js +13 -36
  31. package/lib/client/network.js +14 -11
  32. package/lib/client/page.js +44 -50
  33. package/lib/client/screencast.js +88 -0
  34. package/lib/client/selectors.js +3 -1
  35. package/lib/client/tracing.js +11 -5
  36. package/lib/client/video.js +13 -20
  37. package/lib/client/worker.js +6 -6
  38. package/lib/generated/bindingsControllerSource.js +1 -1
  39. package/lib/generated/clockSource.js +1 -1
  40. package/lib/generated/injectedScriptSource.js +1 -1
  41. package/lib/generated/pollingRecorderSource.js +1 -1
  42. package/lib/generated/storageScriptSource.js +1 -1
  43. package/lib/generated/utilityScriptSource.js +1 -1
  44. package/lib/mcpBundle.js +78 -0
  45. package/lib/mcpBundleImpl.js +91 -0
  46. package/lib/protocol/serializers.js +5 -0
  47. package/lib/protocol/validator.js +228 -58
  48. package/lib/protocol/validatorPrimitives.js +1 -1
  49. package/lib/remote/playwrightConnection.js +10 -8
  50. package/lib/remote/playwrightPipeServer.js +100 -0
  51. package/lib/remote/playwrightServer.js +14 -10
  52. package/lib/remote/playwrightWebSocketServer.js +73 -0
  53. package/lib/remote/serverTransport.js +96 -0
  54. package/lib/server/android/android.js +2 -2
  55. package/lib/server/artifact.js +1 -1
  56. package/lib/server/bidi/bidiBrowser.js +80 -14
  57. package/lib/server/bidi/bidiChromium.js +23 -14
  58. package/lib/server/bidi/bidiConnection.js +1 -0
  59. package/lib/server/bidi/bidiDeserializer.js +116 -0
  60. package/lib/server/bidi/bidiExecutionContext.js +75 -29
  61. package/lib/server/bidi/bidiFirefox.js +6 -8
  62. package/lib/server/bidi/bidiNetworkManager.js +40 -12
  63. package/lib/server/bidi/bidiPage.js +67 -40
  64. package/lib/server/bidi/third_party/bidiProtocolCore.js +1 -0
  65. package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
  66. package/lib/server/browser.js +84 -21
  67. package/lib/server/browserContext.js +137 -77
  68. package/lib/server/browserType.js +26 -16
  69. package/lib/server/chromium/chromium.js +28 -31
  70. package/lib/server/chromium/chromiumSwitches.js +16 -4
  71. package/lib/server/chromium/crBrowser.js +40 -27
  72. package/lib/server/chromium/crConnection.js +0 -5
  73. package/lib/server/chromium/crDevTools.js +1 -2
  74. package/lib/server/chromium/crNetworkManager.js +54 -229
  75. package/lib/server/chromium/crPage.js +74 -260
  76. package/lib/server/chromium/crServiceWorker.js +7 -14
  77. package/lib/server/clock.js +33 -41
  78. package/lib/server/codegen/javascript.js +6 -29
  79. package/lib/server/console.js +5 -1
  80. package/lib/server/debugController.js +12 -6
  81. package/lib/server/debugger.js +40 -47
  82. package/lib/server/deviceDescriptorsSource.json +137 -137
  83. package/lib/server/dispatchers/browserContextDispatcher.js +30 -30
  84. package/lib/server/dispatchers/browserDispatcher.js +11 -5
  85. package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
  86. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
  87. package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
  88. package/lib/server/dispatchers/dispatcher.js +7 -14
  89. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  90. package/lib/server/dispatchers/electronDispatcher.js +2 -1
  91. package/lib/server/dispatchers/frameDispatcher.js +7 -7
  92. package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
  93. package/lib/server/dispatchers/networkDispatchers.js +6 -5
  94. package/lib/server/dispatchers/pageDispatcher.js +101 -34
  95. package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
  96. package/lib/server/disposable.js +41 -0
  97. package/lib/server/dom.js +56 -29
  98. package/lib/server/download.js +3 -2
  99. package/lib/server/electron/electron.js +17 -9
  100. package/lib/server/firefox/ffBrowser.js +9 -29
  101. package/lib/server/firefox/ffConnection.js +0 -5
  102. package/lib/server/firefox/ffInput.js +21 -5
  103. package/lib/server/firefox/ffNetworkManager.js +4 -4
  104. package/lib/server/firefox/ffPage.js +27 -33
  105. package/lib/server/firefox/firefox.js +6 -8
  106. package/lib/server/frameSelectors.js +14 -169
  107. package/lib/server/frames.js +263 -551
  108. package/lib/server/har/harRecorder.js +2 -2
  109. package/lib/server/har/harTracer.js +5 -4
  110. package/lib/server/input.js +49 -4
  111. package/lib/server/instrumentation.js +8 -0
  112. package/lib/server/javascript.js +6 -22
  113. package/lib/server/launchApp.js +0 -1
  114. package/lib/server/localUtils.js +6 -6
  115. package/lib/server/network.js +59 -20
  116. package/lib/server/overlay.js +138 -0
  117. package/lib/server/page.js +179 -157
  118. package/lib/server/progress.js +32 -6
  119. package/lib/server/recorder/recorderApp.js +84 -104
  120. package/lib/server/recorder.js +76 -40
  121. package/lib/server/registry/browserFetcher.js +6 -4
  122. package/lib/server/registry/index.js +222 -226
  123. package/lib/server/registry/nativeDeps.js +1 -0
  124. package/lib/server/registry/oopDownloadBrowserMain.js +3 -0
  125. package/lib/server/screencast.js +137 -0
  126. package/lib/server/trace/recorder/snapshotter.js +2 -2
  127. package/lib/server/trace/recorder/snapshotterInjected.js +21 -1
  128. package/lib/server/trace/recorder/tracing.js +98 -47
  129. package/lib/server/trace/viewer/traceViewer.js +24 -21
  130. package/lib/server/usKeyboardLayout.js +7 -0
  131. package/lib/server/utils/comparators.js +1 -1
  132. package/lib/server/utils/disposable.js +32 -0
  133. package/lib/server/utils/eventsHelper.js +3 -1
  134. package/lib/server/utils/expectUtils.js +87 -2
  135. package/lib/server/utils/fileUtils.js +16 -2
  136. package/lib/server/utils/happyEyeballs.js +15 -12
  137. package/lib/server/utils/httpServer.js +10 -23
  138. package/lib/server/utils/network.js +39 -29
  139. package/lib/server/utils/processLauncher.js +8 -6
  140. package/lib/server/utils/zipFile.js +2 -2
  141. package/lib/server/videoRecorder.js +194 -0
  142. package/lib/server/webkit/webkit.js +4 -6
  143. package/lib/server/webkit/wkBrowser.js +1 -10
  144. package/lib/server/webkit/wkConnection.js +1 -6
  145. package/lib/server/webkit/wkInterceptableRequest.js +29 -1
  146. package/lib/server/webkit/wkPage.js +88 -57
  147. package/lib/server/webkit/wkWorkers.js +2 -1
  148. package/lib/serverRegistry.js +156 -0
  149. package/lib/tools/backend/browserBackend.js +79 -0
  150. package/lib/tools/backend/common.js +63 -0
  151. package/lib/tools/backend/config.js +41 -0
  152. package/lib/tools/backend/console.js +66 -0
  153. package/lib/tools/backend/context.js +296 -0
  154. package/lib/tools/backend/cookies.js +152 -0
  155. package/lib/tools/backend/devtools.js +69 -0
  156. package/lib/tools/backend/dialogs.js +59 -0
  157. package/lib/tools/backend/evaluate.js +64 -0
  158. package/lib/tools/backend/files.js +60 -0
  159. package/lib/tools/backend/form.js +64 -0
  160. package/lib/tools/backend/keyboard.js +155 -0
  161. package/lib/tools/backend/logFile.js +95 -0
  162. package/lib/tools/backend/mouse.js +168 -0
  163. package/lib/tools/backend/navigate.js +106 -0
  164. package/lib/tools/backend/network.js +135 -0
  165. package/lib/tools/backend/pdf.js +48 -0
  166. package/lib/tools/backend/response.js +305 -0
  167. package/lib/tools/backend/route.js +140 -0
  168. package/lib/tools/backend/runCode.js +77 -0
  169. package/lib/tools/backend/screenshot.js +88 -0
  170. package/lib/tools/backend/sessionLog.js +74 -0
  171. package/lib/tools/backend/snapshot.js +208 -0
  172. package/lib/tools/backend/storage.js +68 -0
  173. package/lib/tools/backend/tab.js +445 -0
  174. package/lib/tools/backend/tabs.js +67 -0
  175. package/lib/tools/backend/tool.js +47 -0
  176. package/lib/tools/backend/tools.js +102 -0
  177. package/lib/tools/backend/tracing.js +78 -0
  178. package/lib/tools/backend/utils.js +83 -0
  179. package/lib/tools/backend/verify.js +151 -0
  180. package/lib/tools/backend/video.js +98 -0
  181. package/lib/tools/backend/wait.js +63 -0
  182. package/lib/tools/backend/webstorage.js +223 -0
  183. package/lib/tools/cli-client/cli.js +6 -0
  184. package/lib/tools/cli-client/help.json +399 -0
  185. package/lib/tools/cli-client/minimist.js +128 -0
  186. package/lib/tools/cli-client/program.js +350 -0
  187. package/lib/tools/cli-client/registry.js +176 -0
  188. package/lib/tools/cli-client/session.js +289 -0
  189. package/lib/tools/cli-client/skill/SKILL.md +328 -0
  190. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  191. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  192. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  193. package/lib/tools/cli-client/skill/references/running-code.md +231 -0
  194. package/lib/tools/cli-client/skill/references/session-management.md +169 -0
  195. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  196. package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
  197. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  198. package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
  199. package/lib/tools/cli-daemon/command.js +73 -0
  200. package/lib/tools/cli-daemon/commands.js +956 -0
  201. package/lib/tools/cli-daemon/daemon.js +157 -0
  202. package/lib/tools/cli-daemon/helpGenerator.js +177 -0
  203. package/lib/tools/cli-daemon/program.js +129 -0
  204. package/lib/tools/dashboard/appIcon.png +0 -0
  205. package/lib/tools/dashboard/dashboardApp.js +284 -0
  206. package/lib/tools/dashboard/dashboardController.js +296 -0
  207. package/lib/tools/exports.js +60 -0
  208. package/lib/tools/mcp/browserFactory.js +233 -0
  209. package/lib/tools/mcp/cdpRelay.js +352 -0
  210. package/lib/tools/mcp/cli-stub.js +7 -0
  211. package/lib/tools/mcp/config.d.js +16 -0
  212. package/lib/tools/mcp/config.js +446 -0
  213. package/lib/tools/mcp/configIni.js +189 -0
  214. package/lib/tools/mcp/extensionContextFactory.js +55 -0
  215. package/lib/tools/mcp/index.js +62 -0
  216. package/lib/tools/mcp/log.js +35 -0
  217. package/lib/tools/mcp/program.js +107 -0
  218. package/lib/tools/mcp/protocol.js +28 -0
  219. package/lib/tools/mcp/watchdog.js +44 -0
  220. package/lib/tools/trace/SKILL.md +171 -0
  221. package/lib/tools/trace/installSkill.js +48 -0
  222. package/lib/tools/trace/traceActions.js +142 -0
  223. package/lib/tools/trace/traceAttachments.js +69 -0
  224. package/lib/tools/trace/traceCli.js +87 -0
  225. package/lib/tools/trace/traceConsole.js +97 -0
  226. package/lib/tools/trace/traceErrors.js +55 -0
  227. package/lib/tools/trace/traceOpen.js +69 -0
  228. package/lib/tools/trace/traceParser.js +96 -0
  229. package/lib/tools/trace/traceRequests.js +182 -0
  230. package/lib/tools/trace/traceScreenshot.js +68 -0
  231. package/lib/tools/trace/traceSnapshot.js +149 -0
  232. package/lib/tools/trace/traceUtils.js +153 -0
  233. package/lib/tools/utils/connect.js +32 -0
  234. package/lib/tools/utils/mcp/http.js +152 -0
  235. package/lib/tools/utils/mcp/server.js +230 -0
  236. package/lib/tools/utils/mcp/tool.js +47 -0
  237. package/lib/tools/utils/socketConnection.js +108 -0
  238. package/lib/utils/isomorphic/ariaSnapshot.js +60 -2
  239. package/lib/utils/isomorphic/formatUtils.js +64 -0
  240. package/lib/utils/isomorphic/jsonSchema.js +89 -0
  241. package/lib/utils/isomorphic/lruCache.js +51 -0
  242. package/lib/utils/isomorphic/mimeType.js +7 -2
  243. package/lib/utils/isomorphic/protocolFormatter.js +2 -2
  244. package/lib/utils/isomorphic/protocolMetainfo.js +127 -98
  245. package/lib/utils/isomorphic/stringUtils.js +49 -0
  246. package/lib/utils/isomorphic/timeoutRunner.js +3 -3
  247. package/lib/utils/isomorphic/trace/entries.js +16 -0
  248. package/lib/utils/isomorphic/trace/snapshotRenderer.js +492 -0
  249. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  250. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  251. package/lib/utils/isomorphic/trace/traceLoader.js +132 -0
  252. package/lib/utils/isomorphic/trace/traceModel.js +366 -0
  253. package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
  254. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  255. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  256. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  257. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  258. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  259. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  260. package/lib/utils/isomorphic/urlMatch.js +54 -1
  261. package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
  262. package/lib/utils/isomorphic/yaml.js +84 -0
  263. package/lib/utils.js +8 -2
  264. package/lib/utilsBundle.js +5 -26
  265. package/lib/utilsBundleImpl/index.js +172 -173
  266. package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
  267. package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
  268. package/lib/vite/dashboard/index.html +28 -0
  269. package/lib/vite/htmlReport/index.html +2 -70
  270. package/lib/vite/htmlReport/report.css +1 -0
  271. package/lib/vite/htmlReport/report.js +72 -0
  272. package/lib/vite/recorder/assets/codeMirrorModule-C8KMvO9L.js +32 -0
  273. package/lib/vite/recorder/assets/{codeMirrorModule-C3UTv-Ge.css → codeMirrorModule-DYBRYzYX.css} +1 -1
  274. package/lib/vite/recorder/assets/{index-Ri0uHF7I.css → index-BSjZa4pk.css} +1 -1
  275. package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
  276. package/lib/vite/recorder/index.html +2 -2
  277. package/lib/vite/traceViewer/assets/codeMirrorModule-DS0FLvoc.js +32 -0
  278. package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
  279. package/lib/vite/traceViewer/{codeMirrorModule.C3UTv-Ge.css → codeMirrorModule.DYBRYzYX.css} +1 -1
  280. package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
  281. package/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
  282. package/lib/vite/traceViewer/index.Dtstcb7U.js +2 -0
  283. package/lib/vite/traceViewer/index.html +4 -4
  284. package/lib/vite/traceViewer/sw.bundle.js +5 -3
  285. package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
  286. package/lib/vite/traceViewer/uiMode.html +3 -3
  287. package/lib/zipBundleImpl.js +2 -2
  288. package/lib/zodBundle.js +39 -0
  289. package/lib/zodBundleImpl.js +40 -0
  290. package/package.json +7 -1
  291. package/types/protocol.d.ts +1696 -221
  292. package/types/types.d.ts +879 -112
  293. package/lib/server/bidi/third_party/bidiDeserializer.js +0 -98
  294. package/lib/server/chromium/videoRecorder.js +0 -115
  295. package/lib/server/pageBinding.js +0 -87
  296. package/lib/server/trace/test/inMemorySnapshotter.js +0 -87
  297. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
  298. package/lib/vite/recorder/assets/codeMirrorModule-CBbSe-ZI.js +0 -25
  299. package/lib/vite/recorder/assets/index-CpZVd2nA.js +0 -193
  300. package/lib/vite/traceViewer/assets/codeMirrorModule-DHz0wP2C.js +0 -25
  301. package/lib/vite/traceViewer/assets/defaultSettingsView-WsZP88O6.js +0 -266
  302. package/lib/vite/traceViewer/defaultSettingsView.ConWv5KN.css +0 -1
  303. package/lib/vite/traceViewer/index.C4Y3Aw8n.css +0 -1
  304. package/lib/vite/traceViewer/index.C8xAeo93.js +0 -2
  305. package/lib/vite/traceViewer/uiMode.BltraIJB.js +0 -5
  306. /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
  307. /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
@@ -0,0 +1,152 @@
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 cookies_exports = {};
20
+ __export(cookies_exports, {
21
+ default: () => cookies_default
22
+ });
23
+ module.exports = __toCommonJS(cookies_exports);
24
+ var import_zodBundle = require("../../zodBundle");
25
+ var import_tool = require("./tool");
26
+ const cookieList = (0, import_tool.defineTool)({
27
+ capability: "storage",
28
+ schema: {
29
+ name: "browser_cookie_list",
30
+ title: "List cookies",
31
+ description: "List all cookies (optionally filtered by domain/path)",
32
+ inputSchema: import_zodBundle.z.object({
33
+ domain: import_zodBundle.z.string().optional().describe("Filter cookies by domain"),
34
+ path: import_zodBundle.z.string().optional().describe("Filter cookies by path")
35
+ }),
36
+ type: "readOnly"
37
+ },
38
+ handle: async (context, params, response) => {
39
+ const browserContext = await context.ensureBrowserContext();
40
+ let cookies = await browserContext.cookies();
41
+ if (params.domain)
42
+ cookies = cookies.filter((c) => c.domain.includes(params.domain));
43
+ if (params.path)
44
+ cookies = cookies.filter((c) => c.path.startsWith(params.path));
45
+ if (cookies.length === 0)
46
+ response.addTextResult("No cookies found");
47
+ else
48
+ response.addTextResult(cookies.map((c) => `${c.name}=${c.value} (domain: ${c.domain}, path: ${c.path})`).join("\n"));
49
+ response.addCode(`await page.context().cookies();`);
50
+ }
51
+ });
52
+ const cookieGet = (0, import_tool.defineTool)({
53
+ capability: "storage",
54
+ schema: {
55
+ name: "browser_cookie_get",
56
+ title: "Get cookie",
57
+ description: "Get a specific cookie by name",
58
+ inputSchema: import_zodBundle.z.object({
59
+ name: import_zodBundle.z.string().describe("Cookie name to get")
60
+ }),
61
+ type: "readOnly"
62
+ },
63
+ handle: async (context, params, response) => {
64
+ const browserContext = await context.ensureBrowserContext();
65
+ const cookies = await browserContext.cookies();
66
+ const cookie = cookies.find((c) => c.name === params.name);
67
+ if (!cookie)
68
+ response.addTextResult(`Cookie '${params.name}' not found`);
69
+ else
70
+ response.addTextResult(`${cookie.name}=${cookie.value} (domain: ${cookie.domain}, path: ${cookie.path}, httpOnly: ${cookie.httpOnly}, secure: ${cookie.secure}, sameSite: ${cookie.sameSite})`);
71
+ response.addCode(`await page.context().cookies();`);
72
+ }
73
+ });
74
+ const cookieSet = (0, import_tool.defineTool)({
75
+ capability: "storage",
76
+ schema: {
77
+ name: "browser_cookie_set",
78
+ title: "Set cookie",
79
+ description: "Set a cookie with optional flags (domain, path, expires, httpOnly, secure, sameSite)",
80
+ inputSchema: import_zodBundle.z.object({
81
+ name: import_zodBundle.z.string().describe("Cookie name"),
82
+ value: import_zodBundle.z.string().describe("Cookie value"),
83
+ domain: import_zodBundle.z.string().optional().describe("Cookie domain"),
84
+ path: import_zodBundle.z.string().optional().describe("Cookie path"),
85
+ expires: import_zodBundle.z.number().optional().describe("Cookie expiration as Unix timestamp"),
86
+ httpOnly: import_zodBundle.z.boolean().optional().describe("Whether the cookie is HTTP only"),
87
+ secure: import_zodBundle.z.boolean().optional().describe("Whether the cookie is secure"),
88
+ sameSite: import_zodBundle.z.enum(["Strict", "Lax", "None"]).optional().describe("Cookie SameSite attribute")
89
+ }),
90
+ type: "action"
91
+ },
92
+ handle: async (context, params, response) => {
93
+ const browserContext = await context.ensureBrowserContext();
94
+ const tab = await context.ensureTab();
95
+ const url = new URL(tab.page.url());
96
+ const cookie = {
97
+ name: params.name,
98
+ value: params.value,
99
+ domain: params.domain || url.hostname,
100
+ path: params.path || "/"
101
+ };
102
+ if (params.expires !== void 0)
103
+ cookie.expires = params.expires;
104
+ if (params.httpOnly !== void 0)
105
+ cookie.httpOnly = params.httpOnly;
106
+ if (params.secure !== void 0)
107
+ cookie.secure = params.secure;
108
+ if (params.sameSite !== void 0)
109
+ cookie.sameSite = params.sameSite;
110
+ await browserContext.addCookies([cookie]);
111
+ response.addCode(`await page.context().addCookies([${JSON.stringify(cookie)}]);`);
112
+ }
113
+ });
114
+ const cookieDelete = (0, import_tool.defineTool)({
115
+ capability: "storage",
116
+ schema: {
117
+ name: "browser_cookie_delete",
118
+ title: "Delete cookie",
119
+ description: "Delete a specific cookie",
120
+ inputSchema: import_zodBundle.z.object({
121
+ name: import_zodBundle.z.string().describe("Cookie name to delete")
122
+ }),
123
+ type: "action"
124
+ },
125
+ handle: async (context, params, response) => {
126
+ const browserContext = await context.ensureBrowserContext();
127
+ await browserContext.clearCookies({ name: params.name });
128
+ response.addCode(`await page.context().clearCookies({ name: '${params.name}' });`);
129
+ }
130
+ });
131
+ const cookieClear = (0, import_tool.defineTool)({
132
+ capability: "storage",
133
+ schema: {
134
+ name: "browser_cookie_clear",
135
+ title: "Clear cookies",
136
+ description: "Clear all cookies",
137
+ inputSchema: import_zodBundle.z.object({}),
138
+ type: "action"
139
+ },
140
+ handle: async (context, params, response) => {
141
+ const browserContext = await context.ensureBrowserContext();
142
+ await browserContext.clearCookies();
143
+ response.addCode(`await page.context().clearCookies();`);
144
+ }
145
+ });
146
+ var cookies_default = [
147
+ cookieList,
148
+ cookieGet,
149
+ cookieSet,
150
+ cookieDelete,
151
+ cookieClear
152
+ ];
@@ -0,0 +1,69 @@
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 devtools_exports = {};
20
+ __export(devtools_exports, {
21
+ default: () => devtools_default
22
+ });
23
+ module.exports = __toCommonJS(devtools_exports);
24
+ var import_zodBundle = require("../../zodBundle");
25
+ var import_tool = require("./tool");
26
+ const resume = (0, import_tool.defineTool)({
27
+ capability: "devtools",
28
+ schema: {
29
+ name: "browser_resume",
30
+ title: "Resume paused script execution",
31
+ description: "Resume script execution after it was paused. When called with step set to true, execution will pause again before the next action.",
32
+ inputSchema: import_zodBundle.z.object({
33
+ step: import_zodBundle.z.boolean().optional().describe("When true, execution will pause again before the next action, allowing step-by-step debugging."),
34
+ location: import_zodBundle.z.string().optional().describe('Pause execution at a specific <file>:<line>, e.g. "example.spec.ts:42".')
35
+ }),
36
+ type: "action"
37
+ },
38
+ handle: async (context, params, response) => {
39
+ const browserContext = await context.ensureBrowserContext();
40
+ const pausedPromise = new Promise((resolve) => {
41
+ const listener = () => {
42
+ if (browserContext.debugger.pausedDetails()) {
43
+ browserContext.debugger.off("pausedstatechanged", listener);
44
+ resolve();
45
+ }
46
+ };
47
+ browserContext.debugger.on("pausedstatechanged", listener);
48
+ });
49
+ if (params.location) {
50
+ const [file, lineStr] = params.location.split(":");
51
+ let location;
52
+ if (lineStr) {
53
+ const line = Number(lineStr);
54
+ if (isNaN(line))
55
+ throw new Error(`Invalid location "${params.location}", expected format is <file>:<line>, e.g. "example.spec.ts:42"`);
56
+ location = { file, line };
57
+ } else {
58
+ location = { file: params.location };
59
+ }
60
+ await browserContext.debugger.runTo(location);
61
+ } else if (params.step) {
62
+ await browserContext.debugger.next();
63
+ } else {
64
+ await browserContext.debugger.resume();
65
+ }
66
+ await pausedPromise;
67
+ }
68
+ });
69
+ var devtools_default = [resume];
@@ -0,0 +1,59 @@
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_zodBundle = require("../../zodBundle");
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_zodBundle.z.object({
34
+ accept: import_zodBundle.z.boolean().describe("Whether to accept the dialog."),
35
+ promptText: import_zodBundle.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
+ const dialogState = tab.modalStates().find((state) => state.type === "dialog");
41
+ if (!dialogState)
42
+ throw new Error("No dialog visible");
43
+ tab.clearModalState(dialogState);
44
+ await tab.waitForCompletion(async () => {
45
+ if (params.accept)
46
+ await dialogState.dialog.accept(params.promptText);
47
+ else
48
+ await dialogState.dialog.dismiss();
49
+ });
50
+ },
51
+ clearsModalState: "dialog"
52
+ });
53
+ var dialogs_default = [
54
+ handleDialog
55
+ ];
56
+ // Annotate the CommonJS export names for ESM import in node:
57
+ 0 && (module.exports = {
58
+ handleDialog
59
+ });
@@ -0,0 +1,64 @@
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 evaluate_exports = {};
20
+ __export(evaluate_exports, {
21
+ default: () => evaluate_default
22
+ });
23
+ module.exports = __toCommonJS(evaluate_exports);
24
+ var import_zodBundle = require("../../zodBundle");
25
+ var import_stringUtils = require("../../utils/isomorphic/stringUtils");
26
+ var import_tool = require("./tool");
27
+ const evaluateSchema = import_zodBundle.z.object({
28
+ function: import_zodBundle.z.string().describe("() => { /* code */ } or (element) => { /* code */ } when element is provided"),
29
+ element: import_zodBundle.z.string().optional().describe("Human-readable element description used to obtain permission to interact with the element"),
30
+ ref: import_zodBundle.z.string().optional().describe("Exact target element reference from the page snapshot"),
31
+ selector: import_zodBundle.z.string().optional().describe('CSS or role selector for the target element, when "ref" is not available.'),
32
+ filename: import_zodBundle.z.string().optional().describe("Filename to save the result to. If not provided, result is returned as text.")
33
+ });
34
+ const evaluate = (0, import_tool.defineTabTool)({
35
+ capability: "core",
36
+ schema: {
37
+ name: "browser_evaluate",
38
+ title: "Evaluate JavaScript",
39
+ description: "Evaluate JavaScript expression on page or element",
40
+ inputSchema: evaluateSchema,
41
+ type: "action"
42
+ },
43
+ handle: async (tab, params, response) => {
44
+ let locator;
45
+ if (!params.function.includes("=>"))
46
+ params.function = `() => (${params.function})`;
47
+ if (params.ref) {
48
+ locator = await tab.refLocator({ ref: params.ref, selector: params.selector, element: params.element || "element" });
49
+ response.addCode(`await page.${locator.resolved}.evaluate(${(0, import_stringUtils.escapeWithQuotes)(params.function)});`);
50
+ } else {
51
+ response.addCode(`await page.evaluate(${(0, import_stringUtils.escapeWithQuotes)(params.function)});`);
52
+ }
53
+ await tab.waitForCompletion(async () => {
54
+ const func = new Function();
55
+ func.toString = () => params.function;
56
+ const result = locator?.locator ? await locator?.locator.evaluate(func) : await tab.page.evaluate(func);
57
+ const text = JSON.stringify(result, null, 2) || "undefined";
58
+ await response.addResult("Evaluation result", text, { prefix: "result", ext: "json", suggestedFilename: params.filename });
59
+ });
60
+ }
61
+ });
62
+ var evaluate_default = [
63
+ evaluate
64
+ ];
@@ -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 files_exports = {};
20
+ __export(files_exports, {
21
+ default: () => files_default,
22
+ uploadFile: () => uploadFile
23
+ });
24
+ module.exports = __toCommonJS(files_exports);
25
+ var import_zodBundle = require("../../zodBundle");
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_zodBundle.z.object({
34
+ paths: import_zodBundle.z.array(import_zodBundle.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
+ if (params.paths)
44
+ await Promise.all(params.paths.map((filePath) => response.resolveClientFilename(filePath)));
45
+ response.addCode(`await fileChooser.setFiles(${JSON.stringify(params.paths)})`);
46
+ tab.clearModalState(modalState);
47
+ await tab.waitForCompletion(async () => {
48
+ if (params.paths)
49
+ await modalState.fileChooser.setFiles(params.paths);
50
+ });
51
+ },
52
+ clearsModalState: "fileChooser"
53
+ });
54
+ var files_default = [
55
+ uploadFile
56
+ ];
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ uploadFile
60
+ });
@@ -0,0 +1,64 @@
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_zodBundle = require("../../zodBundle");
25
+ var import_stringUtils = require("../../utils/isomorphic/stringUtils");
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_zodBundle.z.object({
34
+ fields: import_zodBundle.z.array(import_zodBundle.z.object({
35
+ name: import_zodBundle.z.string().describe("Human-readable field name"),
36
+ type: import_zodBundle.z.enum(["textbox", "checkbox", "radio", "combobox", "slider"]).describe("Type of the field"),
37
+ ref: import_zodBundle.z.string().describe("Exact target field reference from the page snapshot"),
38
+ selector: import_zodBundle.z.string().optional().describe('CSS or role selector for the field element, when "ref" is not available. Either "selector" or "ref" is required.'),
39
+ value: import_zodBundle.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.")
40
+ })).describe("Fields to fill in")
41
+ }),
42
+ type: "input"
43
+ },
44
+ handle: async (tab, params, response) => {
45
+ for (const field of params.fields) {
46
+ const { locator, resolved } = await tab.refLocator({ element: field.name, ref: field.ref, selector: field.selector });
47
+ const locatorSource = `await page.${resolved}`;
48
+ if (field.type === "textbox" || field.type === "slider") {
49
+ const secret = tab.context.lookupSecret(field.value);
50
+ await locator.fill(secret.value, tab.actionTimeoutOptions);
51
+ response.addCode(`${locatorSource}.fill(${secret.code});`);
52
+ } else if (field.type === "checkbox" || field.type === "radio") {
53
+ await locator.setChecked(field.value === "true", tab.actionTimeoutOptions);
54
+ response.addCode(`${locatorSource}.setChecked(${field.value});`);
55
+ } else if (field.type === "combobox") {
56
+ await locator.selectOption({ label: field.value }, tab.actionTimeoutOptions);
57
+ response.addCode(`${locatorSource}.selectOption(${(0, import_stringUtils.escapeWithQuotes)(field.value)});`);
58
+ }
59
+ }
60
+ }
61
+ });
62
+ var form_default = [
63
+ fillForm
64
+ ];
@@ -0,0 +1,155 @@
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_zodBundle = require("../../zodBundle");
25
+ var import_tool = require("./tool");
26
+ var import_snapshot = require("./snapshot");
27
+ const press = (0, import_tool.defineTabTool)({
28
+ capability: "core-input",
29
+ schema: {
30
+ name: "browser_press_key",
31
+ title: "Press a key",
32
+ description: "Press a key on the keyboard",
33
+ inputSchema: import_zodBundle.z.object({
34
+ key: import_zodBundle.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
+ if (params.key === "Enter") {
42
+ response.setIncludeSnapshot();
43
+ await tab.waitForCompletion(async () => {
44
+ await tab.page.keyboard.press("Enter");
45
+ });
46
+ } else {
47
+ await tab.page.keyboard.press(params.key);
48
+ }
49
+ }
50
+ });
51
+ const pressSequentially = (0, import_tool.defineTabTool)({
52
+ capability: "core-input",
53
+ skillOnly: true,
54
+ schema: {
55
+ name: "browser_press_sequentially",
56
+ title: "Type text key by key",
57
+ description: "Type text key by key on the keyboard",
58
+ inputSchema: import_zodBundle.z.object({
59
+ text: import_zodBundle.z.string().describe("Text to type"),
60
+ submit: import_zodBundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)")
61
+ }),
62
+ type: "input"
63
+ },
64
+ handle: async (tab, params, response) => {
65
+ response.addCode(`// Press ${params.text}`);
66
+ response.addCode(`await page.keyboard.type('${params.text}');`);
67
+ await tab.page.keyboard.type(params.text);
68
+ if (params.submit) {
69
+ response.addCode(`await page.keyboard.press('Enter');`);
70
+ response.setIncludeSnapshot();
71
+ await tab.waitForCompletion(async () => {
72
+ await tab.page.keyboard.press("Enter");
73
+ });
74
+ }
75
+ }
76
+ });
77
+ const typeSchema = import_snapshot.elementSchema.extend({
78
+ text: import_zodBundle.z.string().describe("Text to type into the element"),
79
+ submit: import_zodBundle.z.boolean().optional().describe("Whether to submit entered text (press Enter after)"),
80
+ slowly: import_zodBundle.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.")
81
+ });
82
+ const type = (0, import_tool.defineTabTool)({
83
+ capability: "core-input",
84
+ schema: {
85
+ name: "browser_type",
86
+ title: "Type text",
87
+ description: "Type text into editable element",
88
+ inputSchema: typeSchema,
89
+ type: "input"
90
+ },
91
+ handle: async (tab, params, response) => {
92
+ const { locator, resolved } = await tab.refLocator(params);
93
+ const secret = tab.context.lookupSecret(params.text);
94
+ const action = async () => {
95
+ if (params.slowly) {
96
+ response.setIncludeSnapshot();
97
+ response.addCode(`await page.${resolved}.pressSequentially(${secret.code});`);
98
+ await locator.pressSequentially(secret.value, tab.actionTimeoutOptions);
99
+ } else {
100
+ response.addCode(`await page.${resolved}.fill(${secret.code});`);
101
+ await locator.fill(secret.value, tab.actionTimeoutOptions);
102
+ }
103
+ if (params.submit) {
104
+ response.setIncludeSnapshot();
105
+ response.addCode(`await page.${resolved}.press('Enter');`);
106
+ await locator.press("Enter", tab.actionTimeoutOptions);
107
+ }
108
+ };
109
+ if (params.submit || params.slowly)
110
+ await tab.waitForCompletion(action);
111
+ else
112
+ await action();
113
+ }
114
+ });
115
+ const keydown = (0, import_tool.defineTabTool)({
116
+ capability: "core-input",
117
+ skillOnly: true,
118
+ schema: {
119
+ name: "browser_keydown",
120
+ title: "Press a key down",
121
+ description: "Press a key down on the keyboard",
122
+ inputSchema: import_zodBundle.z.object({
123
+ key: import_zodBundle.z.string().describe("Name of the key to press or a character to generate, such as `ArrowLeft` or `a`")
124
+ }),
125
+ type: "input"
126
+ },
127
+ handle: async (tab, params, response) => {
128
+ response.addCode(`await page.keyboard.down('${params.key}');`);
129
+ await tab.page.keyboard.down(params.key);
130
+ }
131
+ });
132
+ const keyup = (0, import_tool.defineTabTool)({
133
+ capability: "core-input",
134
+ skillOnly: true,
135
+ schema: {
136
+ name: "browser_keyup",
137
+ title: "Press a key up",
138
+ description: "Press a key up on the keyboard",
139
+ inputSchema: import_zodBundle.z.object({
140
+ key: import_zodBundle.z.string().describe("Name of the key to press or a character to generate, such as `ArrowLeft` or `a`")
141
+ }),
142
+ type: "input"
143
+ },
144
+ handle: async (tab, params, response) => {
145
+ response.addCode(`await page.keyboard.up('${params.key}');`);
146
+ await tab.page.keyboard.up(params.key);
147
+ }
148
+ });
149
+ var keyboard_default = [
150
+ press,
151
+ type,
152
+ pressSequentially,
153
+ keydown,
154
+ keyup
155
+ ];