@treegress.com/treegress-browser-core 1.59.0-treegress.3

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 (439) hide show
  1. package/README.md +60 -0
  2. package/ThirdPartyNotices.txt +3759 -0
  3. package/bin/install_media_pack.ps1 +5 -0
  4. package/bin/install_webkit_wsl.ps1 +33 -0
  5. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  6. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  7. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  8. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  9. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  10. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  11. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  12. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  13. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  14. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  15. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  16. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  17. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  18. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  19. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  20. package/browsers.json +81 -0
  21. package/cli.js +18 -0
  22. package/index.d.ts +17 -0
  23. package/index.js +32 -0
  24. package/index.mjs +28 -0
  25. package/lib/androidServerImpl.js +65 -0
  26. package/lib/browserServerImpl.js +120 -0
  27. package/lib/cli/client/cli.js +6 -0
  28. package/lib/cli/client/program.js +375 -0
  29. package/lib/cli/client/registry.js +171 -0
  30. package/lib/cli/client/session.js +282 -0
  31. package/lib/cli/client/socketConnection.js +108 -0
  32. package/lib/cli/daemon/command.js +73 -0
  33. package/lib/cli/daemon/commands.js +879 -0
  34. package/lib/cli/daemon/daemon.js +179 -0
  35. package/lib/cli/daemon/helpGenerator.js +173 -0
  36. package/lib/cli/daemon/program.js +123 -0
  37. package/lib/cli/driver.js +98 -0
  38. package/lib/cli/program.js +598 -0
  39. package/lib/cli/programWithTestStub.js +74 -0
  40. package/lib/client/android.js +361 -0
  41. package/lib/client/api.js +137 -0
  42. package/lib/client/artifact.js +79 -0
  43. package/lib/client/browser.js +169 -0
  44. package/lib/client/browserContext.js +590 -0
  45. package/lib/client/browserType.js +153 -0
  46. package/lib/client/cdpSession.js +55 -0
  47. package/lib/client/channelOwner.js +194 -0
  48. package/lib/client/clientHelper.js +64 -0
  49. package/lib/client/clientInstrumentation.js +55 -0
  50. package/lib/client/clientStackTrace.js +69 -0
  51. package/lib/client/clock.js +68 -0
  52. package/lib/client/connect.js +152 -0
  53. package/lib/client/connection.js +322 -0
  54. package/lib/client/consoleMessage.js +61 -0
  55. package/lib/client/coverage.js +44 -0
  56. package/lib/client/dialog.js +56 -0
  57. package/lib/client/disposable.js +76 -0
  58. package/lib/client/download.js +62 -0
  59. package/lib/client/electron.js +138 -0
  60. package/lib/client/elementHandle.js +284 -0
  61. package/lib/client/errors.js +77 -0
  62. package/lib/client/eventEmitter.js +327 -0
  63. package/lib/client/events.js +103 -0
  64. package/lib/client/fetch.js +368 -0
  65. package/lib/client/fileChooser.js +46 -0
  66. package/lib/client/fileUtils.js +34 -0
  67. package/lib/client/frame.js +409 -0
  68. package/lib/client/harRouter.js +99 -0
  69. package/lib/client/input.js +84 -0
  70. package/lib/client/inspector.js +48 -0
  71. package/lib/client/jsHandle.js +109 -0
  72. package/lib/client/jsonPipe.js +39 -0
  73. package/lib/client/localUtils.js +60 -0
  74. package/lib/client/locator.js +373 -0
  75. package/lib/client/network.js +750 -0
  76. package/lib/client/page.js +750 -0
  77. package/lib/client/pageAgent.js +64 -0
  78. package/lib/client/platform.js +77 -0
  79. package/lib/client/playwright.js +71 -0
  80. package/lib/client/selectors.js +55 -0
  81. package/lib/client/stream.js +39 -0
  82. package/lib/client/timeoutSettings.js +79 -0
  83. package/lib/client/tracing.js +124 -0
  84. package/lib/client/types.js +28 -0
  85. package/lib/client/video.js +65 -0
  86. package/lib/client/waiter.js +142 -0
  87. package/lib/client/webError.js +39 -0
  88. package/lib/client/worker.js +85 -0
  89. package/lib/client/writableStream.js +39 -0
  90. package/lib/devtools/appIcon.png +0 -0
  91. package/lib/devtools/devtoolsApp.js +275 -0
  92. package/lib/devtools/devtoolsController.js +289 -0
  93. package/lib/generated/bindingsControllerSource.js +28 -0
  94. package/lib/generated/clockSource.js +28 -0
  95. package/lib/generated/injectedScriptSource.js +28 -0
  96. package/lib/generated/pollingRecorderSource.js +28 -0
  97. package/lib/generated/storageScriptSource.js +28 -0
  98. package/lib/generated/utilityScriptSource.js +28 -0
  99. package/lib/generated/webSocketMockSource.js +336 -0
  100. package/lib/inProcessFactory.js +60 -0
  101. package/lib/inprocess.js +3 -0
  102. package/lib/mcp/browserFactory.js +196 -0
  103. package/lib/mcp/cdpRelay.js +353 -0
  104. package/lib/mcp/config.d.js +16 -0
  105. package/lib/mcp/config.js +399 -0
  106. package/lib/mcp/configIni.js +190 -0
  107. package/lib/mcp/exports.js +42 -0
  108. package/lib/mcp/extensionContextFactory.js +59 -0
  109. package/lib/mcp/index.js +62 -0
  110. package/lib/mcp/log.js +35 -0
  111. package/lib/mcp/program.js +111 -0
  112. package/lib/mcp/protocol.js +28 -0
  113. package/lib/mcp/sdk/http.js +152 -0
  114. package/lib/mcp/sdk/server.js +230 -0
  115. package/lib/mcp/sdk/tool.js +47 -0
  116. package/lib/mcp/watchdog.js +44 -0
  117. package/lib/mcpBundle.js +84 -0
  118. package/lib/mcpBundleImpl/index.js +147 -0
  119. package/lib/outofprocess.js +76 -0
  120. package/lib/protocol/serializers.js +197 -0
  121. package/lib/protocol/validator.js +3064 -0
  122. package/lib/protocol/validatorPrimitives.js +193 -0
  123. package/lib/remote/playwrightConnection.js +129 -0
  124. package/lib/remote/playwrightPipeServer.js +100 -0
  125. package/lib/remote/playwrightServer.js +339 -0
  126. package/lib/remote/playwrightWebSocketServer.js +73 -0
  127. package/lib/remote/serverTransport.js +96 -0
  128. package/lib/server/agent/actionRunner.js +341 -0
  129. package/lib/server/agent/actions.js +128 -0
  130. package/lib/server/agent/codegen.js +111 -0
  131. package/lib/server/agent/context.js +161 -0
  132. package/lib/server/agent/expectTools.js +156 -0
  133. package/lib/server/agent/pageAgent.js +204 -0
  134. package/lib/server/agent/performTools.js +262 -0
  135. package/lib/server/agent/tool.js +109 -0
  136. package/lib/server/android/android.js +465 -0
  137. package/lib/server/android/backendAdb.js +177 -0
  138. package/lib/server/artifact.js +127 -0
  139. package/lib/server/bidi/bidiBrowser.js +560 -0
  140. package/lib/server/bidi/bidiChromium.js +162 -0
  141. package/lib/server/bidi/bidiConnection.js +213 -0
  142. package/lib/server/bidi/bidiDeserializer.js +116 -0
  143. package/lib/server/bidi/bidiExecutionContext.js +267 -0
  144. package/lib/server/bidi/bidiFirefox.js +128 -0
  145. package/lib/server/bidi/bidiInput.js +146 -0
  146. package/lib/server/bidi/bidiNetworkManager.js +411 -0
  147. package/lib/server/bidi/bidiOverCdp.js +102 -0
  148. package/lib/server/bidi/bidiPage.js +598 -0
  149. package/lib/server/bidi/bidiPdf.js +106 -0
  150. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  151. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  152. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  153. package/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  154. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  155. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  156. package/lib/server/bidi/third_party/firefoxPrefs.js +261 -0
  157. package/lib/server/browser.js +217 -0
  158. package/lib/server/browserContext.js +699 -0
  159. package/lib/server/browserType.js +337 -0
  160. package/lib/server/callLog.js +82 -0
  161. package/lib/server/chromium/appIcon.png +0 -0
  162. package/lib/server/chromium/chromium.js +399 -0
  163. package/lib/server/chromium/chromiumSwitches.js +104 -0
  164. package/lib/server/chromium/crBrowser.js +532 -0
  165. package/lib/server/chromium/crConnection.js +197 -0
  166. package/lib/server/chromium/crCoverage.js +235 -0
  167. package/lib/server/chromium/crDevTools.js +111 -0
  168. package/lib/server/chromium/crDragDrop.js +131 -0
  169. package/lib/server/chromium/crExecutionContext.js +146 -0
  170. package/lib/server/chromium/crInput.js +187 -0
  171. package/lib/server/chromium/crNetworkManager.js +708 -0
  172. package/lib/server/chromium/crPage.js +1004 -0
  173. package/lib/server/chromium/crPdf.js +121 -0
  174. package/lib/server/chromium/crProtocolHelper.js +145 -0
  175. package/lib/server/chromium/crServiceWorker.js +136 -0
  176. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  177. package/lib/server/chromium/protocol.d.js +16 -0
  178. package/lib/server/clock.js +149 -0
  179. package/lib/server/codegen/csharp.js +327 -0
  180. package/lib/server/codegen/java.js +274 -0
  181. package/lib/server/codegen/javascript.js +247 -0
  182. package/lib/server/codegen/jsonl.js +52 -0
  183. package/lib/server/codegen/language.js +132 -0
  184. package/lib/server/codegen/languages.js +68 -0
  185. package/lib/server/codegen/python.js +279 -0
  186. package/lib/server/codegen/types.js +16 -0
  187. package/lib/server/console.js +61 -0
  188. package/lib/server/cookieStore.js +206 -0
  189. package/lib/server/debugController.js +197 -0
  190. package/lib/server/debugger.js +119 -0
  191. package/lib/server/deviceDescriptors.js +39 -0
  192. package/lib/server/deviceDescriptorsSource.json +1779 -0
  193. package/lib/server/dialog.js +116 -0
  194. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  195. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  196. package/lib/server/dispatchers/browserContextDispatcher.js +377 -0
  197. package/lib/server/dispatchers/browserDispatcher.js +124 -0
  198. package/lib/server/dispatchers/browserTypeDispatcher.js +71 -0
  199. package/lib/server/dispatchers/cdpSessionDispatcher.js +47 -0
  200. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  201. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  202. package/lib/server/dispatchers/dispatcher.js +364 -0
  203. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  204. package/lib/server/dispatchers/electronDispatcher.js +90 -0
  205. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  206. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  207. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  208. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  209. package/lib/server/dispatchers/localUtilsDispatcher.js +185 -0
  210. package/lib/server/dispatchers/networkDispatchers.js +214 -0
  211. package/lib/server/dispatchers/pageAgentDispatcher.js +106 -0
  212. package/lib/server/dispatchers/pageDispatcher.js +441 -0
  213. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  214. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  215. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  216. package/lib/server/dispatchers/webSocketRouteDispatcher.js +164 -0
  217. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  218. package/lib/server/disposable.js +41 -0
  219. package/lib/server/dom.js +815 -0
  220. package/lib/server/download.js +71 -0
  221. package/lib/server/electron/electron.js +272 -0
  222. package/lib/server/electron/loader.js +30 -0
  223. package/lib/server/errors.js +69 -0
  224. package/lib/server/fetch.js +621 -0
  225. package/lib/server/fileChooser.js +43 -0
  226. package/lib/server/fileUploadUtils.js +84 -0
  227. package/lib/server/firefox/ffBrowser.js +415 -0
  228. package/lib/server/firefox/ffConnection.js +142 -0
  229. package/lib/server/firefox/ffExecutionContext.js +150 -0
  230. package/lib/server/firefox/ffInput.js +159 -0
  231. package/lib/server/firefox/ffNetworkManager.js +256 -0
  232. package/lib/server/firefox/ffPage.js +495 -0
  233. package/lib/server/firefox/firefox.js +114 -0
  234. package/lib/server/firefox/protocol.d.js +16 -0
  235. package/lib/server/formData.js +147 -0
  236. package/lib/server/frameSelectors.js +160 -0
  237. package/lib/server/frames.js +1476 -0
  238. package/lib/server/har/harRecorder.js +147 -0
  239. package/lib/server/har/harTracer.js +608 -0
  240. package/lib/server/harBackend.js +157 -0
  241. package/lib/server/helper.js +96 -0
  242. package/lib/server/index.js +58 -0
  243. package/lib/server/input.js +277 -0
  244. package/lib/server/instrumentation.js +72 -0
  245. package/lib/server/javascript.js +291 -0
  246. package/lib/server/launchApp.js +127 -0
  247. package/lib/server/localUtils.js +214 -0
  248. package/lib/server/macEditingCommands.js +143 -0
  249. package/lib/server/network.js +668 -0
  250. package/lib/server/page.js +915 -0
  251. package/lib/server/pipeTransport.js +89 -0
  252. package/lib/server/playwright.js +69 -0
  253. package/lib/server/progress.js +136 -0
  254. package/lib/server/protocolError.js +52 -0
  255. package/lib/server/recorder/chat.js +161 -0
  256. package/lib/server/recorder/recorderApp.js +367 -0
  257. package/lib/server/recorder/recorderRunner.js +138 -0
  258. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  259. package/lib/server/recorder/recorderUtils.js +157 -0
  260. package/lib/server/recorder/throttledFile.js +57 -0
  261. package/lib/server/recorder.js +533 -0
  262. package/lib/server/registry/browserFetcher.js +177 -0
  263. package/lib/server/registry/dependencies.js +371 -0
  264. package/lib/server/registry/index.js +1395 -0
  265. package/lib/server/registry/nativeDeps.js +1281 -0
  266. package/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  267. package/lib/server/screencast.js +214 -0
  268. package/lib/server/screenshotter.js +333 -0
  269. package/lib/server/selectors.js +112 -0
  270. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  271. package/lib/server/socksInterceptor.js +95 -0
  272. package/lib/server/trace/recorder/snapshotter.js +147 -0
  273. package/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  274. package/lib/server/trace/recorder/tracing.js +607 -0
  275. package/lib/server/trace/viewer/traceParser.js +72 -0
  276. package/lib/server/trace/viewer/traceViewer.js +244 -0
  277. package/lib/server/transport.js +181 -0
  278. package/lib/server/types.js +28 -0
  279. package/lib/server/usKeyboardLayout.js +145 -0
  280. package/lib/server/utils/ascii.js +44 -0
  281. package/lib/server/utils/comparators.js +139 -0
  282. package/lib/server/utils/crypto.js +216 -0
  283. package/lib/server/utils/debug.js +42 -0
  284. package/lib/server/utils/debugLogger.js +122 -0
  285. package/lib/server/utils/env.js +73 -0
  286. package/lib/server/utils/eventsHelper.js +39 -0
  287. package/lib/server/utils/expectUtils.js +123 -0
  288. package/lib/server/utils/fileUtils.js +191 -0
  289. package/lib/server/utils/happyEyeballs.js +207 -0
  290. package/lib/server/utils/hostPlatform.js +123 -0
  291. package/lib/server/utils/httpServer.js +205 -0
  292. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  293. package/lib/server/utils/image_tools/compare.js +109 -0
  294. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  295. package/lib/server/utils/image_tools/stats.js +102 -0
  296. package/lib/server/utils/linuxUtils.js +71 -0
  297. package/lib/server/utils/network.js +244 -0
  298. package/lib/server/utils/nodePlatform.js +154 -0
  299. package/lib/server/utils/pipeTransport.js +84 -0
  300. package/lib/server/utils/processLauncher.js +243 -0
  301. package/lib/server/utils/profiler.js +65 -0
  302. package/lib/server/utils/socksProxy.js +511 -0
  303. package/lib/server/utils/spawnAsync.js +41 -0
  304. package/lib/server/utils/task.js +51 -0
  305. package/lib/server/utils/userAgent.js +98 -0
  306. package/lib/server/utils/wsServer.js +121 -0
  307. package/lib/server/utils/zipFile.js +74 -0
  308. package/lib/server/utils/zones.js +57 -0
  309. package/lib/server/videoRecorder.js +133 -0
  310. package/lib/server/webkit/protocol.d.js +16 -0
  311. package/lib/server/webkit/webkit.js +108 -0
  312. package/lib/server/webkit/wkBrowser.js +331 -0
  313. package/lib/server/webkit/wkConnection.js +144 -0
  314. package/lib/server/webkit/wkExecutionContext.js +154 -0
  315. package/lib/server/webkit/wkInput.js +181 -0
  316. package/lib/server/webkit/wkInterceptableRequest.js +197 -0
  317. package/lib/server/webkit/wkPage.js +1164 -0
  318. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  319. package/lib/server/webkit/wkWorkers.js +106 -0
  320. package/lib/serverRegistry.js +136 -0
  321. package/lib/third_party/pixelmatch.js +255 -0
  322. package/lib/tools/browserServerBackend.js +79 -0
  323. package/lib/tools/common.js +63 -0
  324. package/lib/tools/config.js +41 -0
  325. package/lib/tools/console.js +65 -0
  326. package/lib/tools/context.js +282 -0
  327. package/lib/tools/cookies.js +152 -0
  328. package/lib/tools/customDomLocatorCompiler.js +239 -0
  329. package/lib/tools/customDomResolverDiagnostics.js +100 -0
  330. package/lib/tools/customDomSnapshotFormatter.js +658 -0
  331. package/lib/tools/devtools.js +42 -0
  332. package/lib/tools/dialogs.js +59 -0
  333. package/lib/tools/evaluate.js +61 -0
  334. package/lib/tools/exports.js +57 -0
  335. package/lib/tools/files.js +58 -0
  336. package/lib/tools/form.js +63 -0
  337. package/lib/tools/keyboard.js +151 -0
  338. package/lib/tools/logFile.js +95 -0
  339. package/lib/tools/mouse.js +170 -0
  340. package/lib/tools/navigate.js +105 -0
  341. package/lib/tools/network.js +112 -0
  342. package/lib/tools/pdf.js +48 -0
  343. package/lib/tools/response.js +278 -0
  344. package/lib/tools/route.js +140 -0
  345. package/lib/tools/runCode.js +76 -0
  346. package/lib/tools/screenshot.js +87 -0
  347. package/lib/tools/sessionLog.js +75 -0
  348. package/lib/tools/snapshot.js +209 -0
  349. package/lib/tools/storage.js +67 -0
  350. package/lib/tools/tab.js +596 -0
  351. package/lib/tools/tabs.js +67 -0
  352. package/lib/tools/tool.js +47 -0
  353. package/lib/tools/tools.js +94 -0
  354. package/lib/tools/tracing.js +75 -0
  355. package/lib/tools/utils.js +88 -0
  356. package/lib/tools/verify.js +149 -0
  357. package/lib/tools/video.js +89 -0
  358. package/lib/tools/wait.js +63 -0
  359. package/lib/tools/webstorage.js +223 -0
  360. package/lib/utils/isomorphic/aiSnapshotTypes.js +16 -0
  361. package/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  362. package/lib/utils/isomorphic/assert.js +31 -0
  363. package/lib/utils/isomorphic/colors.js +72 -0
  364. package/lib/utils/isomorphic/cssParser.js +245 -0
  365. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  366. package/lib/utils/isomorphic/headers.js +53 -0
  367. package/lib/utils/isomorphic/imageUtils.js +141 -0
  368. package/lib/utils/isomorphic/locatorGenerators.js +689 -0
  369. package/lib/utils/isomorphic/locatorParser.js +176 -0
  370. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  371. package/lib/utils/isomorphic/lruCache.js +51 -0
  372. package/lib/utils/isomorphic/manualPromise.js +114 -0
  373. package/lib/utils/isomorphic/mimeType.js +464 -0
  374. package/lib/utils/isomorphic/multimap.js +80 -0
  375. package/lib/utils/isomorphic/protocolFormatter.js +81 -0
  376. package/lib/utils/isomorphic/protocolMetainfo.js +345 -0
  377. package/lib/utils/isomorphic/rtti.js +43 -0
  378. package/lib/utils/isomorphic/selectorParser.js +386 -0
  379. package/lib/utils/isomorphic/semaphore.js +54 -0
  380. package/lib/utils/isomorphic/stackTrace.js +158 -0
  381. package/lib/utils/isomorphic/stringUtils.js +204 -0
  382. package/lib/utils/isomorphic/time.js +49 -0
  383. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  384. package/lib/utils/isomorphic/trace/entries.js +16 -0
  385. package/lib/utils/isomorphic/trace/snapshotRenderer.js +502 -0
  386. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  387. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  388. package/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  389. package/lib/utils/isomorphic/trace/traceModel.js +366 -0
  390. package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
  391. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  392. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  393. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  394. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  395. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  396. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  397. package/lib/utils/isomorphic/traceUtils.js +58 -0
  398. package/lib/utils/isomorphic/types.js +16 -0
  399. package/lib/utils/isomorphic/urlMatch.js +243 -0
  400. package/lib/utils/isomorphic/utilityScriptSerializers.js +262 -0
  401. package/lib/utils/isomorphic/yaml.js +84 -0
  402. package/lib/utils.js +111 -0
  403. package/lib/utilsBundle.js +112 -0
  404. package/lib/utilsBundleImpl/index.js +218 -0
  405. package/lib/utilsBundleImpl/xdg-open +1066 -0
  406. package/lib/vite/devtools/assets/index-D3CVnoLM.css +1 -0
  407. package/lib/vite/devtools/assets/index-wqccfruE.js +50 -0
  408. package/lib/vite/devtools/index.html +28 -0
  409. package/lib/vite/htmlReport/index.html +84 -0
  410. package/lib/vite/recorder/assets/codeMirrorModule-4NapTJOb.js +32 -0
  411. package/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  412. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  413. package/lib/vite/recorder/assets/index-BSjZa4pk.css +1 -0
  414. package/lib/vite/recorder/assets/index-CD9lKVjM.js +193 -0
  415. package/lib/vite/recorder/index.html +29 -0
  416. package/lib/vite/recorder/playwright-logo.svg +9 -0
  417. package/lib/vite/traceViewer/assets/codeMirrorModule-RgXeHFoQ.js +32 -0
  418. package/lib/vite/traceViewer/assets/defaultSettingsView-DP6vvJEM.js +269 -0
  419. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  420. package/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  421. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  422. package/lib/vite/traceViewer/defaultSettingsView.DQ9U-ctL.css +1 -0
  423. package/lib/vite/traceViewer/index.BVu7tZDe.css +1 -0
  424. package/lib/vite/traceViewer/index.D8YUXFVt.js +2 -0
  425. package/lib/vite/traceViewer/index.html +43 -0
  426. package/lib/vite/traceViewer/manifest.webmanifest +16 -0
  427. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  428. package/lib/vite/traceViewer/snapshot.html +21 -0
  429. package/lib/vite/traceViewer/sw.bundle.js +5 -0
  430. package/lib/vite/traceViewer/uiMode.BIQFTUME.js +6 -0
  431. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  432. package/lib/vite/traceViewer/uiMode.html +17 -0
  433. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  434. package/lib/zipBundle.js +34 -0
  435. package/lib/zipBundleImpl.js +5 -0
  436. package/package.json +52 -0
  437. package/types/protocol.d.ts +24365 -0
  438. package/types/structs.d.ts +45 -0
  439. package/types/types.d.ts +23724 -0
@@ -0,0 +1,65 @@
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 androidServerImpl_exports = {};
20
+ __export(androidServerImpl_exports, {
21
+ AndroidServerLauncherImpl: () => AndroidServerLauncherImpl
22
+ });
23
+ module.exports = __toCommonJS(androidServerImpl_exports);
24
+ var import_playwrightServer = require("./remote/playwrightServer");
25
+ var import_playwright = require("./server/playwright");
26
+ var import_crypto = require("./server/utils/crypto");
27
+ var import_utilsBundle = require("./utilsBundle");
28
+ var import_progress = require("./server/progress");
29
+ class AndroidServerLauncherImpl {
30
+ async launchServer(options = {}) {
31
+ const playwright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
32
+ const controller = new import_progress.ProgressController();
33
+ let devices = await controller.run((progress) => playwright.android.devices(progress, {
34
+ host: options.adbHost,
35
+ port: options.adbPort,
36
+ omitDriverInstall: options.omitDriverInstall
37
+ }));
38
+ if (devices.length === 0)
39
+ throw new Error("No devices found");
40
+ if (options.deviceSerialNumber) {
41
+ devices = devices.filter((d) => d.serial === options.deviceSerialNumber);
42
+ if (devices.length === 0)
43
+ throw new Error(`No device with serial number '${options.deviceSerialNumber}' was found`);
44
+ }
45
+ if (devices.length > 1)
46
+ throw new Error(`More than one device found. Please specify deviceSerialNumber`);
47
+ const device = devices[0];
48
+ const path = options.wsPath ? options.wsPath.startsWith("/") ? options.wsPath : `/${options.wsPath}` : `/${(0, import_crypto.createGuid)()}`;
49
+ const server = new import_playwrightServer.PlaywrightServer({ mode: "launchServer", path, maxConnections: 1, preLaunchedAndroidDevice: device });
50
+ const wsEndpoint = await server.listen(options.port, options.host);
51
+ const browserServer = new import_utilsBundle.ws.EventEmitter();
52
+ browserServer.wsEndpoint = () => wsEndpoint;
53
+ browserServer.close = () => device.close();
54
+ browserServer.kill = () => device.close();
55
+ device.on("close", () => {
56
+ server.close();
57
+ browserServer.emit("close");
58
+ });
59
+ return browserServer;
60
+ }
61
+ }
62
+ // Annotate the CommonJS export names for ESM import in node:
63
+ 0 && (module.exports = {
64
+ AndroidServerLauncherImpl
65
+ });
@@ -0,0 +1,120 @@
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 browserServerImpl_exports = {};
30
+ __export(browserServerImpl_exports, {
31
+ BrowserServerLauncherImpl: () => BrowserServerLauncherImpl
32
+ });
33
+ module.exports = __toCommonJS(browserServerImpl_exports);
34
+ var import_playwrightServer = require("./remote/playwrightServer");
35
+ var import_helper = require("./server/helper");
36
+ var import_playwright = require("./server/playwright");
37
+ var import_crypto = require("./server/utils/crypto");
38
+ var import_debug = require("./server/utils/debug");
39
+ var import_stackTrace = require("./utils/isomorphic/stackTrace");
40
+ var import_time = require("./utils/isomorphic/time");
41
+ var import_utilsBundle = require("./utilsBundle");
42
+ var validatorPrimitives = __toESM(require("./protocol/validatorPrimitives"));
43
+ var import_progress = require("./server/progress");
44
+ class BrowserServerLauncherImpl {
45
+ constructor(browserName) {
46
+ this._browserName = browserName;
47
+ }
48
+ async launchServer(options = {}) {
49
+ const playwright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
50
+ const metadata = { id: "", startTime: 0, endTime: 0, type: "Internal", method: "", params: {}, log: [], internal: true };
51
+ const validatorContext = {
52
+ tChannelImpl: (names, arg, path2) => {
53
+ throw new validatorPrimitives.ValidationError(`${path2}: channels are not expected in launchServer`);
54
+ },
55
+ binary: "buffer",
56
+ isUnderTest: import_debug.isUnderTest
57
+ };
58
+ let launchOptions = {
59
+ ...options,
60
+ ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
61
+ ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
62
+ env: options.env ? envObjectToArray(options.env) : void 0,
63
+ timeout: options.timeout ?? import_time.DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT
64
+ };
65
+ let browser;
66
+ try {
67
+ const controller = new import_progress.ProgressController(metadata);
68
+ browser = await controller.run(async (progress) => {
69
+ if (options._userDataDir !== void 0) {
70
+ const validator = validatorPrimitives.scheme["BrowserTypeLaunchPersistentContextParams"];
71
+ launchOptions = validator({ ...launchOptions, userDataDir: options._userDataDir }, "", validatorContext);
72
+ const context = await playwright[this._browserName].launchPersistentContext(progress, options._userDataDir, launchOptions);
73
+ return context._browser;
74
+ } else {
75
+ const validator = validatorPrimitives.scheme["BrowserTypeLaunchParams"];
76
+ launchOptions = validator(launchOptions, "", validatorContext);
77
+ return await playwright[this._browserName].launch(progress, launchOptions, toProtocolLogger(options.logger));
78
+ }
79
+ });
80
+ } catch (e) {
81
+ const log = import_helper.helper.formatBrowserLogs(metadata.log);
82
+ (0, import_stackTrace.rewriteErrorMessage)(e, `${e.message} Failed to launch browser.${log}`);
83
+ throw e;
84
+ }
85
+ const path = options.wsPath ? options.wsPath.startsWith("/") ? options.wsPath : `/${options.wsPath}` : `/${(0, import_crypto.createGuid)()}`;
86
+ const server = new import_playwrightServer.PlaywrightServer({ mode: options._sharedBrowser ? "launchServerShared" : "launchServer", path, maxConnections: Infinity, preLaunchedBrowser: browser });
87
+ const wsEndpoint = await server.listen(options.port, options.host);
88
+ const browserServer = new import_utilsBundle.ws.EventEmitter();
89
+ browserServer.process = () => browser.options.browserProcess.process;
90
+ browserServer.wsEndpoint = () => wsEndpoint;
91
+ browserServer.close = () => browser.options.browserProcess.close();
92
+ browserServer[Symbol.asyncDispose] = browserServer.close;
93
+ browserServer.kill = () => browser.options.browserProcess.kill();
94
+ browserServer._disconnectForTest = () => server.close();
95
+ browserServer._userDataDirForTest = browser._userDataDirForTest;
96
+ browser.options.browserProcess.onclose = (exitCode, signal) => {
97
+ server.close();
98
+ browserServer.emit("close", exitCode, signal);
99
+ };
100
+ return browserServer;
101
+ }
102
+ }
103
+ function toProtocolLogger(logger) {
104
+ return logger ? (direction, message) => {
105
+ if (logger.isEnabled("protocol", "verbose"))
106
+ logger.log("protocol", "verbose", (direction === "send" ? "SEND \u25BA " : "\u25C0 RECV ") + JSON.stringify(message), [], {});
107
+ } : void 0;
108
+ }
109
+ function envObjectToArray(env) {
110
+ const result = [];
111
+ for (const name in env) {
112
+ if (!Object.is(env[name], void 0))
113
+ result.push({ name, value: String(env[name]) });
114
+ }
115
+ return result;
116
+ }
117
+ // Annotate the CommonJS export names for ESM import in node:
118
+ 0 && (module.exports = {
119
+ BrowserServerLauncherImpl
120
+ });
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ var import_program = require("./program");
3
+ (0, import_program.program)().catch((e) => {
4
+ console.error(e.message);
5
+ process.exit(1);
6
+ });
@@ -0,0 +1,375 @@
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 program_exports = {};
30
+ __export(program_exports, {
31
+ calculateSha1: () => calculateSha1,
32
+ program: () => program
33
+ });
34
+ module.exports = __toCommonJS(program_exports);
35
+ var import_child_process = require("child_process");
36
+ var import_crypto = __toESM(require("crypto"));
37
+ var import_fs = __toESM(require("fs"));
38
+ var import_os = __toESM(require("os"));
39
+ var import_path = __toESM(require("path"));
40
+ var import_registry = require("./registry");
41
+ var import_session = require("./session");
42
+ var import_serverRegistry = require("../../serverRegistry");
43
+ const globalOptions = [
44
+ "browser",
45
+ "config",
46
+ "extension",
47
+ "headed",
48
+ "help",
49
+ "persistent",
50
+ "profile",
51
+ "session",
52
+ "version"
53
+ ];
54
+ const booleanOptions = [
55
+ "all",
56
+ "help",
57
+ "version"
58
+ ];
59
+ async function program(options) {
60
+ const clientInfo = (0, import_registry.createClientInfo)();
61
+ const help = require("./help.json");
62
+ const argv = process.argv.slice(2);
63
+ const boolean = [...help.booleanOptions, ...booleanOptions];
64
+ const args = require("minimist")(argv, { boolean, string: ["_"] });
65
+ for (const [key, value] of Object.entries(args)) {
66
+ if (key !== "_" && typeof value !== "boolean")
67
+ args[key] = String(value);
68
+ }
69
+ for (let index = 0; index < args._.length; index++)
70
+ args._[index] = String(args._[index]);
71
+ for (const option of boolean) {
72
+ if (!argv.includes(`--${option}`) && !argv.includes(`--no-${option}`))
73
+ delete args[option];
74
+ if (argv.some((arg) => arg.startsWith(`--${option}=`) || arg.startsWith(`--no-${option}=`))) {
75
+ console.error(`boolean option '--${option}' should not be passed with '=value', use '--${option}' or '--no-${option}' instead`);
76
+ process.exit(1);
77
+ }
78
+ }
79
+ if (args.s) {
80
+ args.session = args.s;
81
+ delete args.s;
82
+ }
83
+ const commandName = args._?.[0];
84
+ if (args.version || args.v) {
85
+ console.log(options?.embedderVersion ?? clientInfo.version);
86
+ process.exit(0);
87
+ }
88
+ const command = commandName && help.commands[commandName];
89
+ if (args.help || args.h) {
90
+ if (command) {
91
+ console.log(command);
92
+ } else {
93
+ console.log("playwright-cli - run playwright mcp commands from terminal\n");
94
+ console.log(help.global);
95
+ }
96
+ process.exit(0);
97
+ }
98
+ if (!command) {
99
+ console.error(`Unknown command: ${commandName}
100
+ `);
101
+ console.log(help.global);
102
+ process.exit(1);
103
+ }
104
+ const registry = await import_registry.Registry.load();
105
+ const sessionName = (0, import_registry.resolveSessionName)(args.session);
106
+ switch (commandName) {
107
+ case "list": {
108
+ await listSessions(registry, clientInfo, args.all);
109
+ return;
110
+ }
111
+ case "close-all": {
112
+ const entries = registry.entries(clientInfo);
113
+ for (const entry of entries)
114
+ await new import_session.Session(entry).stop(true);
115
+ return;
116
+ }
117
+ case "delete-data": {
118
+ const entry = registry.entry(clientInfo, sessionName);
119
+ if (!entry) {
120
+ console.log(`No user data found for browser '${sessionName}'.`);
121
+ return;
122
+ }
123
+ await new import_session.Session(entry).deleteData();
124
+ return;
125
+ }
126
+ case "kill-all": {
127
+ await killAllDaemons();
128
+ return;
129
+ }
130
+ case "open": {
131
+ const entry = registry.entry(clientInfo, sessionName);
132
+ if (entry)
133
+ await new import_session.Session(entry).stop(true);
134
+ await import_session.Session.startDaemon(clientInfo, args);
135
+ const newEntry = await registry.loadEntry(clientInfo, sessionName);
136
+ await runInSession(newEntry, clientInfo, args);
137
+ return;
138
+ }
139
+ case "close":
140
+ const closeEntry = registry.entry(clientInfo, sessionName);
141
+ const session = closeEntry ? new import_session.Session(closeEntry) : void 0;
142
+ if (!session || !await session.canConnect()) {
143
+ console.log(`Browser '${sessionName}' is not open.`);
144
+ return;
145
+ }
146
+ await session.stop();
147
+ return;
148
+ case "install":
149
+ await install(args);
150
+ return;
151
+ case "install-browser":
152
+ await installBrowser();
153
+ return;
154
+ case "show": {
155
+ const daemonScript = require.resolve("../../devtools/devtoolsApp.js");
156
+ const child = (0, import_child_process.spawn)(process.execPath, [daemonScript], {
157
+ detached: true,
158
+ stdio: "ignore"
159
+ });
160
+ child.unref();
161
+ return;
162
+ }
163
+ default: {
164
+ const entry = registry.entry(clientInfo, sessionName);
165
+ if (!entry) {
166
+ console.log(`The browser '${sessionName}' is not open, please run open first`);
167
+ console.log("");
168
+ console.log(` playwright-cli${sessionName !== "default" ? ` -s=${sessionName}` : ""} open [params]`);
169
+ process.exit(1);
170
+ }
171
+ await runInSession(entry, clientInfo, args);
172
+ }
173
+ }
174
+ }
175
+ async function runInSession(entry, clientInfo, args) {
176
+ for (const globalOption of globalOptions)
177
+ delete args[globalOption];
178
+ const session = new import_session.Session(entry);
179
+ const result = await session.run(clientInfo, args);
180
+ console.log(result.text);
181
+ }
182
+ async function install(args) {
183
+ const cwd = process.cwd();
184
+ const playwrightDir = import_path.default.join(cwd, ".playwright");
185
+ await import_fs.default.promises.mkdir(playwrightDir, { recursive: true });
186
+ console.log(`\u2705 Workspace initialized at \`${cwd}\`.`);
187
+ if (args.skills) {
188
+ const skillSourceDir = import_path.default.join(__dirname, "../../skill");
189
+ const skillDestDir = import_path.default.join(cwd, ".claude", "skills", "playwright-cli");
190
+ if (!import_fs.default.existsSync(skillSourceDir)) {
191
+ console.error("\u274C Skills source directory not found:", skillSourceDir);
192
+ process.exit(1);
193
+ }
194
+ await import_fs.default.promises.cp(skillSourceDir, skillDestDir, { recursive: true });
195
+ console.log(`\u2705 Skills installed to \`${import_path.default.relative(cwd, skillDestDir)}\`.`);
196
+ }
197
+ await ensureConfiguredBrowserInstalled();
198
+ }
199
+ async function ensureConfiguredBrowserInstalled() {
200
+ if (import_fs.default.existsSync(defaultConfigFile())) {
201
+ const { registry } = await import("../../server/registry/index");
202
+ const data = await import_fs.default.promises.readFile(defaultConfigFile(), "utf-8");
203
+ const config = JSON.parse(data.charCodeAt(0) === 65279 ? data.slice(1) : data);
204
+ const browserName = config.browser?.browserName ?? "chromium";
205
+ const channel = config.browser?.launchOptions?.channel;
206
+ if (!channel || channel.startsWith("chromium")) {
207
+ const executable = registry.findExecutable(channel ?? browserName);
208
+ if (executable && !import_fs.default.existsSync(executable?.executablePath()))
209
+ await registry.install([executable]);
210
+ }
211
+ } else {
212
+ const channel = await findOrInstallDefaultBrowser();
213
+ if (channel !== "chrome")
214
+ await createDefaultConfig(channel);
215
+ }
216
+ }
217
+ async function installBrowser() {
218
+ const { program: program2 } = require("../program");
219
+ const argv = process.argv.map((arg) => arg === "install-browser" ? "install" : arg);
220
+ program2.parse(argv);
221
+ }
222
+ async function createDefaultConfig(channel) {
223
+ const config = {
224
+ browser: {
225
+ browserName: "chromium",
226
+ launchOptions: {
227
+ channel
228
+ }
229
+ }
230
+ };
231
+ await import_fs.default.promises.writeFile(defaultConfigFile(), JSON.stringify(config, null, 2));
232
+ console.log(`\u2705 Created default config for ${channel} at ${import_path.default.relative(process.cwd(), defaultConfigFile())}.`);
233
+ }
234
+ async function findOrInstallDefaultBrowser() {
235
+ const { registry } = await import("../../server/registry/index");
236
+ const channels = ["chrome", "msedge"];
237
+ for (const channel of channels) {
238
+ const executable = registry.findExecutable(channel);
239
+ if (!executable?.executablePath())
240
+ continue;
241
+ console.log(`\u2705 Found ${channel}, will use it as the default browser.`);
242
+ return channel;
243
+ }
244
+ const chromiumExecutable = registry.findExecutable("chromium");
245
+ if (!import_fs.default.existsSync(chromiumExecutable?.executablePath()))
246
+ await registry.install([chromiumExecutable]);
247
+ return "chromium";
248
+ }
249
+ function defaultConfigFile() {
250
+ return import_path.default.resolve(".playwright", "cli.config.json");
251
+ }
252
+ async function killAllDaemons() {
253
+ const platform = import_os.default.platform();
254
+ let killed = 0;
255
+ try {
256
+ if (platform === "win32") {
257
+ const result = (0, import_child_process.execSync)(
258
+ `powershell -NoProfile -NonInteractive -Command "Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like '*run-mcp-server*' -or $_.CommandLine -like '*run-cli-server*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue; $_.ProcessId }"`,
259
+ { encoding: "utf-8" }
260
+ );
261
+ const pids = result.split("\n").map((line) => line.trim()).filter((line) => /^\d+$/.test(line));
262
+ for (const pid of pids)
263
+ console.log(`Killed daemon process ${pid}`);
264
+ killed = pids.length;
265
+ } else {
266
+ const result = (0, import_child_process.execSync)("ps aux", { encoding: "utf-8" });
267
+ const lines = result.split("\n");
268
+ for (const line of lines) {
269
+ if (line.includes("run-mcp-server") || line.includes("run-cli-server")) {
270
+ const parts = line.trim().split(/\s+/);
271
+ const pid = parts[1];
272
+ if (pid && /^\d+$/.test(pid)) {
273
+ try {
274
+ process.kill(parseInt(pid, 10), "SIGKILL");
275
+ console.log(`Killed daemon process ${pid}`);
276
+ killed++;
277
+ } catch {
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ } catch (e) {
284
+ }
285
+ if (killed === 0)
286
+ console.log("No daemon processes found.");
287
+ else if (killed > 0)
288
+ console.log(`Killed ${killed} daemon process${killed === 1 ? "" : "es"}.`);
289
+ }
290
+ async function listSessions(registry, clientInfo, all) {
291
+ if (all) {
292
+ const entries = registry.entryMap();
293
+ const serverEntries = await import_serverRegistry.serverRegistry.list({ gc: true });
294
+ if (entries.size === 0 && serverEntries.size === 0) {
295
+ console.log("No browsers found.");
296
+ return;
297
+ }
298
+ if (entries.size)
299
+ console.log("### Browsers");
300
+ for (const [workspace, list] of entries)
301
+ await gcAndPrintSessions(clientInfo, list.map((entry) => new import_session.Session(entry)), `${import_path.default.relative(process.cwd(), workspace) || "/"}:`);
302
+ if (serverEntries.size) {
303
+ if (entries.size)
304
+ console.log("");
305
+ console.log("### Browser servers available for attach");
306
+ }
307
+ for (const [workspace, list] of serverEntries)
308
+ await gcAndPrintBrowserSessions(workspace, list);
309
+ } else {
310
+ console.log("### Browsers");
311
+ const entries = registry.entries(clientInfo);
312
+ await gcAndPrintSessions(clientInfo, entries.map((entry) => new import_session.Session(entry)));
313
+ }
314
+ }
315
+ async function gcAndPrintSessions(clientInfo, sessions, header) {
316
+ const running = [];
317
+ const stopped = [];
318
+ for (const session of sessions) {
319
+ const canConnect = await session.canConnect();
320
+ if (canConnect) {
321
+ running.push(session);
322
+ } else {
323
+ if (session.config.cli.persistent)
324
+ stopped.push(session);
325
+ else
326
+ await session.deleteSessionConfig();
327
+ }
328
+ }
329
+ if (header && (running.length || stopped.length))
330
+ console.log(header);
331
+ for (const session of running)
332
+ console.log(await renderSessionStatus(clientInfo, session));
333
+ for (const session of stopped)
334
+ console.log(await renderSessionStatus(clientInfo, session));
335
+ if (running.length === 0 && stopped.length === 0)
336
+ console.log(" (no browsers)");
337
+ }
338
+ async function gcAndPrintBrowserSessions(workspace, list) {
339
+ if (!list.length)
340
+ return;
341
+ if (workspace)
342
+ console.log(`${import_path.default.relative(process.cwd(), workspace) || "/"}:`);
343
+ for (const descriptor of list) {
344
+ const text = [];
345
+ text.push(`- browser "${descriptor.title}":`);
346
+ text.push(` - browser: ${descriptor.browser.browserName}`);
347
+ text.push(` - version: v${descriptor.playwrightVersion}`);
348
+ text.push(` - run \`playwright-cli open --attach "${descriptor.title}"\` to attach`);
349
+ console.log(text.join("\n"));
350
+ }
351
+ if (!list.length)
352
+ console.log(" (no browsers)");
353
+ }
354
+ async function renderSessionStatus(clientInfo, session) {
355
+ const text = [];
356
+ const config = session.config;
357
+ const canConnect = await session.canConnect();
358
+ text.push(`- ${session.name}:`);
359
+ text.push(` - status: ${canConnect ? "open" : "closed"}`);
360
+ if (canConnect && !session.isCompatible(clientInfo))
361
+ text.push(` - version: v${config.version} [incompatible please re-open]`);
362
+ if (config.browser)
363
+ text.push(...(0, import_session.renderResolvedConfig)(config));
364
+ return text.join("\n");
365
+ }
366
+ function calculateSha1(buffer) {
367
+ const hash = import_crypto.default.createHash("sha1");
368
+ hash.update(buffer);
369
+ return hash.digest("hex");
370
+ }
371
+ // Annotate the CommonJS export names for ESM import in node:
372
+ 0 && (module.exports = {
373
+ calculateSha1,
374
+ program
375
+ });