tabwright 1.0.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 (599) hide show
  1. package/LICENSE +21 -0
  2. package/bin.js +4 -0
  3. package/dist/a11y-client.js +204 -0
  4. package/dist/agent-skills/tabwright/SKILL.md +119 -0
  5. package/dist/aria-snapshot.d.ts +262 -0
  6. package/dist/aria-snapshot.d.ts.map +1 -0
  7. package/dist/aria-snapshot.js +1256 -0
  8. package/dist/aria-snapshot.js.map +1 -0
  9. package/dist/aria-snapshot.test.d.ts +2 -0
  10. package/dist/aria-snapshot.test.d.ts.map +1 -0
  11. package/dist/aria-snapshot.test.js +270 -0
  12. package/dist/aria-snapshot.test.js.map +1 -0
  13. package/dist/aria-snapshot.unit.test.d.ts +2 -0
  14. package/dist/aria-snapshot.unit.test.d.ts.map +1 -0
  15. package/dist/aria-snapshot.unit.test.js +542 -0
  16. package/dist/aria-snapshot.unit.test.js.map +1 -0
  17. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
  18. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
  19. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
  20. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
  21. package/dist/bippy.js +894 -0
  22. package/dist/browser-config.d.ts +13 -0
  23. package/dist/browser-config.d.ts.map +1 -0
  24. package/dist/browser-config.js +126 -0
  25. package/dist/browser-config.js.map +1 -0
  26. package/dist/browser-install.d.ts +16 -0
  27. package/dist/browser-install.d.ts.map +1 -0
  28. package/dist/browser-install.js +238 -0
  29. package/dist/browser-install.js.map +1 -0
  30. package/dist/browser-launch.d.ts +17 -0
  31. package/dist/browser-launch.d.ts.map +1 -0
  32. package/dist/browser-launch.js +44 -0
  33. package/dist/browser-launch.js.map +1 -0
  34. package/dist/builtin-capabilities.d.ts +28 -0
  35. package/dist/builtin-capabilities.d.ts.map +1 -0
  36. package/dist/builtin-capabilities.js +2673 -0
  37. package/dist/builtin-capabilities.js.map +1 -0
  38. package/dist/capability-agent-skill.d.ts +60 -0
  39. package/dist/capability-agent-skill.d.ts.map +1 -0
  40. package/dist/capability-agent-skill.js +225 -0
  41. package/dist/capability-agent-skill.js.map +1 -0
  42. package/dist/capability-auth-state.d.ts +34 -0
  43. package/dist/capability-auth-state.d.ts.map +1 -0
  44. package/dist/capability-auth-state.js +157 -0
  45. package/dist/capability-auth-state.js.map +1 -0
  46. package/dist/capability-auth.d.ts +36 -0
  47. package/dist/capability-auth.d.ts.map +1 -0
  48. package/dist/capability-auth.js +198 -0
  49. package/dist/capability-auth.js.map +1 -0
  50. package/dist/capability-cli-confirmation.test.d.ts +2 -0
  51. package/dist/capability-cli-confirmation.test.d.ts.map +1 -0
  52. package/dist/capability-cli-confirmation.test.js +79 -0
  53. package/dist/capability-cli-confirmation.test.js.map +1 -0
  54. package/dist/capability-options.d.ts +20 -0
  55. package/dist/capability-options.d.ts.map +1 -0
  56. package/dist/capability-options.js +31 -0
  57. package/dist/capability-options.js.map +1 -0
  58. package/dist/capability-options.test.d.ts +2 -0
  59. package/dist/capability-options.test.d.ts.map +1 -0
  60. package/dist/capability-options.test.js +81 -0
  61. package/dist/capability-options.test.js.map +1 -0
  62. package/dist/capability-package.d.ts +27 -0
  63. package/dist/capability-package.d.ts.map +1 -0
  64. package/dist/capability-package.js +444 -0
  65. package/dist/capability-package.js.map +1 -0
  66. package/dist/capability-package.test.d.ts +2 -0
  67. package/dist/capability-package.test.d.ts.map +1 -0
  68. package/dist/capability-package.test.js +179 -0
  69. package/dist/capability-package.test.js.map +1 -0
  70. package/dist/capability-registry.d.ts +262 -0
  71. package/dist/capability-registry.d.ts.map +1 -0
  72. package/dist/capability-registry.js +931 -0
  73. package/dist/capability-registry.js.map +1 -0
  74. package/dist/capability-registry.test.d.ts +2 -0
  75. package/dist/capability-registry.test.d.ts.map +1 -0
  76. package/dist/capability-registry.test.js +1683 -0
  77. package/dist/capability-registry.test.js.map +1 -0
  78. package/dist/capability-runner.d.ts +99 -0
  79. package/dist/capability-runner.d.ts.map +1 -0
  80. package/dist/capability-runner.js +608 -0
  81. package/dist/capability-runner.js.map +1 -0
  82. package/dist/capability-search-relevance.test.d.ts +2 -0
  83. package/dist/capability-search-relevance.test.d.ts.map +1 -0
  84. package/dist/capability-search-relevance.test.js +67 -0
  85. package/dist/capability-search-relevance.test.js.map +1 -0
  86. package/dist/capability-studio.d.ts +11 -0
  87. package/dist/capability-studio.d.ts.map +1 -0
  88. package/dist/capability-studio.js +593 -0
  89. package/dist/capability-studio.js.map +1 -0
  90. package/dist/capability-studio.test.d.ts +2 -0
  91. package/dist/capability-studio.test.d.ts.map +1 -0
  92. package/dist/capability-studio.test.js +41 -0
  93. package/dist/capability-studio.test.js.map +1 -0
  94. package/dist/cdp-log.d.ts +19 -0
  95. package/dist/cdp-log.d.ts.map +1 -0
  96. package/dist/cdp-log.js +83 -0
  97. package/dist/cdp-log.js.map +1 -0
  98. package/dist/cdp-log.test.d.ts +2 -0
  99. package/dist/cdp-log.test.d.ts.map +1 -0
  100. package/dist/cdp-log.test.js +109 -0
  101. package/dist/cdp-log.test.js.map +1 -0
  102. package/dist/cdp-relay.d.ts +19 -0
  103. package/dist/cdp-relay.d.ts.map +1 -0
  104. package/dist/cdp-relay.js +2375 -0
  105. package/dist/cdp-relay.js.map +1 -0
  106. package/dist/cdp-session.d.ts +37 -0
  107. package/dist/cdp-session.d.ts.map +1 -0
  108. package/dist/cdp-session.js +36 -0
  109. package/dist/cdp-session.js.map +1 -0
  110. package/dist/cdp-types.d.ts +65 -0
  111. package/dist/cdp-types.d.ts.map +1 -0
  112. package/dist/cdp-types.js +91 -0
  113. package/dist/cdp-types.js.map +1 -0
  114. package/dist/channel-owner-inspect.test.d.ts +2 -0
  115. package/dist/channel-owner-inspect.test.d.ts.map +1 -0
  116. package/dist/channel-owner-inspect.test.js +75 -0
  117. package/dist/channel-owner-inspect.test.js.map +1 -0
  118. package/dist/chrome-discovery.d.ts +65 -0
  119. package/dist/chrome-discovery.d.ts.map +1 -0
  120. package/dist/chrome-discovery.js +173 -0
  121. package/dist/chrome-discovery.js.map +1 -0
  122. package/dist/chrome-discovery.test.d.ts +2 -0
  123. package/dist/chrome-discovery.test.d.ts.map +1 -0
  124. package/dist/chrome-discovery.test.js +41 -0
  125. package/dist/chrome-discovery.test.js.map +1 -0
  126. package/dist/clean-html.d.ts +11 -0
  127. package/dist/clean-html.d.ts.map +1 -0
  128. package/dist/clean-html.js +106 -0
  129. package/dist/clean-html.js.map +1 -0
  130. package/dist/cli-help.test.d.ts +2 -0
  131. package/dist/cli-help.test.d.ts.map +1 -0
  132. package/dist/cli-help.test.js +98 -0
  133. package/dist/cli-help.test.js.map +1 -0
  134. package/dist/cli.d.ts +3 -0
  135. package/dist/cli.d.ts.map +1 -0
  136. package/dist/cli.js +2709 -0
  137. package/dist/cli.js.map +1 -0
  138. package/dist/cloud-client.d.ts +56 -0
  139. package/dist/cloud-client.d.ts.map +1 -0
  140. package/dist/cloud-client.js +127 -0
  141. package/dist/cloud-client.js.map +1 -0
  142. package/dist/create-logger.d.ts +9 -0
  143. package/dist/create-logger.d.ts.map +1 -0
  144. package/dist/create-logger.js +27 -0
  145. package/dist/create-logger.js.map +1 -0
  146. package/dist/debugger-api.md +458 -0
  147. package/dist/debugger-examples-types.d.ts +24 -0
  148. package/dist/debugger-examples-types.d.ts.map +1 -0
  149. package/dist/debugger-examples-types.js +2 -0
  150. package/dist/debugger-examples-types.js.map +1 -0
  151. package/dist/debugger-examples.d.ts +6 -0
  152. package/dist/debugger-examples.d.ts.map +1 -0
  153. package/dist/debugger-examples.js +53 -0
  154. package/dist/debugger-examples.js.map +1 -0
  155. package/dist/debugger.d.ts +381 -0
  156. package/dist/debugger.d.ts.map +1 -0
  157. package/dist/debugger.js +630 -0
  158. package/dist/debugger.js.map +1 -0
  159. package/dist/diff-utils.d.ts +20 -0
  160. package/dist/diff-utils.d.ts.map +1 -0
  161. package/dist/diff-utils.js +50 -0
  162. package/dist/diff-utils.js.map +1 -0
  163. package/dist/diff-utils.test.d.ts +2 -0
  164. package/dist/diff-utils.test.d.ts.map +1 -0
  165. package/dist/diff-utils.test.js +137 -0
  166. package/dist/diff-utils.test.js.map +1 -0
  167. package/dist/doctor.d.ts +44 -0
  168. package/dist/doctor.d.ts.map +1 -0
  169. package/dist/doctor.js +246 -0
  170. package/dist/doctor.js.map +1 -0
  171. package/dist/doctor.test.d.ts +2 -0
  172. package/dist/doctor.test.d.ts.map +1 -0
  173. package/dist/doctor.test.js +208 -0
  174. package/dist/doctor.test.js.map +1 -0
  175. package/dist/editor-api.md +374 -0
  176. package/dist/editor-examples.d.ts +11 -0
  177. package/dist/editor-examples.d.ts.map +1 -0
  178. package/dist/editor-examples.js +124 -0
  179. package/dist/editor-examples.js.map +1 -0
  180. package/dist/editor.d.ts +203 -0
  181. package/dist/editor.d.ts.map +1 -0
  182. package/dist/editor.js +363 -0
  183. package/dist/editor.js.map +1 -0
  184. package/dist/env-compat.d.ts +2 -0
  185. package/dist/env-compat.d.ts.map +1 -0
  186. package/dist/env-compat.js +27 -0
  187. package/dist/env-compat.js.map +1 -0
  188. package/dist/executor.d.ts +229 -0
  189. package/dist/executor.d.ts.map +1 -0
  190. package/dist/executor.js +1465 -0
  191. package/dist/executor.js.map +1 -0
  192. package/dist/executor.unit.test.d.ts +2 -0
  193. package/dist/executor.unit.test.d.ts.map +1 -0
  194. package/dist/executor.unit.test.js +143 -0
  195. package/dist/executor.unit.test.js.map +1 -0
  196. package/dist/extension/_locales/en/messages.json +278 -0
  197. package/dist/extension/_locales/zh_CN/messages.json +256 -0
  198. package/dist/extension/assets/options-CYH96Lcx.css +1349 -0
  199. package/dist/extension/background.js +3994 -0
  200. package/dist/extension/icons/SolarCursorSquareBold.png +0 -0
  201. package/dist/extension/icons/icon-black-128.png +0 -0
  202. package/dist/extension/icons/icon-black-16.png +0 -0
  203. package/dist/extension/icons/icon-black-32.png +0 -0
  204. package/dist/extension/icons/icon-black-48.png +0 -0
  205. package/dist/extension/icons/icon-gray-128.png +0 -0
  206. package/dist/extension/icons/icon-gray-16.png +0 -0
  207. package/dist/extension/icons/icon-gray-32.png +0 -0
  208. package/dist/extension/icons/icon-gray-48.png +0 -0
  209. package/dist/extension/icons/icon-green-128.png +0 -0
  210. package/dist/extension/icons/icon-green-16.png +0 -0
  211. package/dist/extension/icons/icon-green-32.png +0 -0
  212. package/dist/extension/icons/icon-green-48.png +0 -0
  213. package/dist/extension/icons/tabwright-icon-black.png +0 -0
  214. package/dist/extension/icons/tabwright-icon-gray-disabled.png +0 -0
  215. package/dist/extension/icons/tabwright-icon-gray-disabled.svg +1 -0
  216. package/dist/extension/manifest.json +54 -0
  217. package/dist/extension/options.js +16145 -0
  218. package/dist/extension/rrweb-recorder.js +12952 -0
  219. package/dist/extension/src/options.html +165 -0
  220. package/dist/extension/src/prism-bash.min.js +1 -0
  221. package/dist/extension/src/prism.min.js +1 -0
  222. package/dist/extension/src/welcome.html +396 -0
  223. package/dist/extension-connection.test.d.ts +2 -0
  224. package/dist/extension-connection.test.d.ts.map +1 -0
  225. package/dist/extension-connection.test.js +708 -0
  226. package/dist/extension-connection.test.js.map +1 -0
  227. package/dist/extension-icon-warning.test.d.ts +2 -0
  228. package/dist/extension-icon-warning.test.d.ts.map +1 -0
  229. package/dist/extension-icon-warning.test.js +33 -0
  230. package/dist/extension-icon-warning.test.js.map +1 -0
  231. package/dist/ghost-browser.d.ts +62 -0
  232. package/dist/ghost-browser.d.ts.map +1 -0
  233. package/dist/ghost-browser.js +107 -0
  234. package/dist/ghost-browser.js.map +1 -0
  235. package/dist/ghost-cursor-client.js +374 -0
  236. package/dist/ghost-cursor-controller.d.ts +46 -0
  237. package/dist/ghost-cursor-controller.d.ts.map +1 -0
  238. package/dist/ghost-cursor-controller.js +98 -0
  239. package/dist/ghost-cursor-controller.js.map +1 -0
  240. package/dist/ghost-cursor.d.ts +27 -0
  241. package/dist/ghost-cursor.d.ts.map +1 -0
  242. package/dist/ghost-cursor.js +79 -0
  243. package/dist/ghost-cursor.js.map +1 -0
  244. package/dist/htmlrewrite.d.ts +8 -0
  245. package/dist/htmlrewrite.d.ts.map +1 -0
  246. package/dist/htmlrewrite.js +339 -0
  247. package/dist/htmlrewrite.js.map +1 -0
  248. package/dist/htmlrewrite.test.d.ts +2 -0
  249. package/dist/htmlrewrite.test.d.ts.map +1 -0
  250. package/dist/htmlrewrite.test.js +7975 -0
  251. package/dist/htmlrewrite.test.js.map +1 -0
  252. package/dist/index.d.ts +20 -0
  253. package/dist/index.d.ts.map +1 -0
  254. package/dist/index.js +11 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/kill-port.d.ts +29 -0
  257. package/dist/kill-port.d.ts.map +1 -0
  258. package/dist/kill-port.js +190 -0
  259. package/dist/kill-port.js.map +1 -0
  260. package/dist/kitty-graphics.d.ts +22 -0
  261. package/dist/kitty-graphics.d.ts.map +1 -0
  262. package/dist/kitty-graphics.js +71 -0
  263. package/dist/kitty-graphics.js.map +1 -0
  264. package/dist/kitty-graphics.test.d.ts +2 -0
  265. package/dist/kitty-graphics.test.d.ts.map +1 -0
  266. package/dist/kitty-graphics.test.js +125 -0
  267. package/dist/kitty-graphics.test.js.map +1 -0
  268. package/dist/locator-selector.test.d.ts +2 -0
  269. package/dist/locator-selector.test.d.ts.map +1 -0
  270. package/dist/locator-selector.test.js +98 -0
  271. package/dist/locator-selector.test.js.map +1 -0
  272. package/dist/mcp-client.d.ts +20 -0
  273. package/dist/mcp-client.d.ts.map +1 -0
  274. package/dist/mcp-client.js +56 -0
  275. package/dist/mcp-client.js.map +1 -0
  276. package/dist/mcp.d.ts +6 -0
  277. package/dist/mcp.d.ts.map +1 -0
  278. package/dist/mcp.js +511 -0
  279. package/dist/mcp.js.map +1 -0
  280. package/dist/on-mouse-action.test.d.ts +2 -0
  281. package/dist/on-mouse-action.test.d.ts.map +1 -0
  282. package/dist/on-mouse-action.test.js +180 -0
  283. package/dist/on-mouse-action.test.js.map +1 -0
  284. package/dist/options-page.test.d.ts +2 -0
  285. package/dist/options-page.test.d.ts.map +1 -0
  286. package/dist/options-page.test.js +773 -0
  287. package/dist/options-page.test.js.map +1 -0
  288. package/dist/package-paths.d.ts +4 -0
  289. package/dist/package-paths.d.ts.map +1 -0
  290. package/dist/package-paths.js +30 -0
  291. package/dist/package-paths.js.map +1 -0
  292. package/dist/page-markdown.d.ts +40 -0
  293. package/dist/page-markdown.d.ts.map +1 -0
  294. package/dist/page-markdown.js +181 -0
  295. package/dist/page-markdown.js.map +1 -0
  296. package/dist/performance-examples.d.ts +5 -0
  297. package/dist/performance-examples.d.ts.map +1 -0
  298. package/dist/performance-examples.js +112 -0
  299. package/dist/performance-examples.js.map +1 -0
  300. package/dist/performance-profiling.md +417 -0
  301. package/dist/playwright-import.d.ts +19 -0
  302. package/dist/playwright-import.d.ts.map +1 -0
  303. package/dist/playwright-import.js +40 -0
  304. package/dist/playwright-import.js.map +1 -0
  305. package/dist/popup-relocation.test.d.ts +7 -0
  306. package/dist/popup-relocation.test.d.ts.map +1 -0
  307. package/dist/popup-relocation.test.js +139 -0
  308. package/dist/popup-relocation.test.js.map +1 -0
  309. package/dist/product-paths.d.ts +9 -0
  310. package/dist/product-paths.d.ts.map +1 -0
  311. package/dist/product-paths.js +24 -0
  312. package/dist/product-paths.js.map +1 -0
  313. package/dist/product-paths.test.d.ts +2 -0
  314. package/dist/product-paths.test.d.ts.map +1 -0
  315. package/dist/product-paths.test.js +39 -0
  316. package/dist/product-paths.test.js.map +1 -0
  317. package/dist/prompt.md +1004 -0
  318. package/dist/protocol.d.ts +248 -0
  319. package/dist/protocol.d.ts.map +1 -0
  320. package/dist/protocol.js +59 -0
  321. package/dist/protocol.js.map +1 -0
  322. package/dist/protocol.test.d.ts +2 -0
  323. package/dist/protocol.test.d.ts.map +1 -0
  324. package/dist/protocol.test.js +31 -0
  325. package/dist/protocol.test.js.map +1 -0
  326. package/dist/react-source.d.ts +57 -0
  327. package/dist/react-source.d.ts.map +1 -0
  328. package/dist/react-source.js +254 -0
  329. package/dist/react-source.js.map +1 -0
  330. package/dist/readability.js +1674 -0
  331. package/dist/relay-client.d.ts +104 -0
  332. package/dist/relay-client.d.ts.map +1 -0
  333. package/dist/relay-client.js +426 -0
  334. package/dist/relay-client.js.map +1 -0
  335. package/dist/relay-client.test.d.ts +2 -0
  336. package/dist/relay-client.test.d.ts.map +1 -0
  337. package/dist/relay-client.test.js +305 -0
  338. package/dist/relay-client.test.js.map +1 -0
  339. package/dist/relay-core.test.d.ts +2 -0
  340. package/dist/relay-core.test.d.ts.map +1 -0
  341. package/dist/relay-core.test.js +1427 -0
  342. package/dist/relay-core.test.js.map +1 -0
  343. package/dist/relay-navigation.test.d.ts +2 -0
  344. package/dist/relay-navigation.test.d.ts.map +1 -0
  345. package/dist/relay-navigation.test.js +661 -0
  346. package/dist/relay-navigation.test.js.map +1 -0
  347. package/dist/relay-session.test.d.ts +2 -0
  348. package/dist/relay-session.test.d.ts.map +1 -0
  349. package/dist/relay-session.test.js +1121 -0
  350. package/dist/relay-session.test.js.map +1 -0
  351. package/dist/relay-state.d.ts +178 -0
  352. package/dist/relay-state.d.ts.map +1 -0
  353. package/dist/relay-state.js +346 -0
  354. package/dist/relay-state.js.map +1 -0
  355. package/dist/relay-state.test.d.ts +2 -0
  356. package/dist/relay-state.test.d.ts.map +1 -0
  357. package/dist/relay-state.test.js +594 -0
  358. package/dist/relay-state.test.js.map +1 -0
  359. package/dist/replay-ai-index.d.ts +99 -0
  360. package/dist/replay-ai-index.d.ts.map +1 -0
  361. package/dist/replay-ai-index.js +677 -0
  362. package/dist/replay-ai-index.js.map +1 -0
  363. package/dist/replay-ai-index.test.d.ts +2 -0
  364. package/dist/replay-ai-index.test.d.ts.map +1 -0
  365. package/dist/replay-ai-index.test.js +255 -0
  366. package/dist/replay-ai-index.test.js.map +1 -0
  367. package/dist/replay-cli.test.d.ts +2 -0
  368. package/dist/replay-cli.test.d.ts.map +1 -0
  369. package/dist/replay-cli.test.js +275 -0
  370. package/dist/replay-cli.test.js.map +1 -0
  371. package/dist/replay-eval.d.ts +44 -0
  372. package/dist/replay-eval.d.ts.map +1 -0
  373. package/dist/replay-eval.js +902 -0
  374. package/dist/replay-eval.js.map +1 -0
  375. package/dist/replay-handoff.d.ts +29 -0
  376. package/dist/replay-handoff.d.ts.map +1 -0
  377. package/dist/replay-handoff.js +83 -0
  378. package/dist/replay-handoff.js.map +1 -0
  379. package/dist/replay-handoff.test.d.ts +2 -0
  380. package/dist/replay-handoff.test.d.ts.map +1 -0
  381. package/dist/replay-handoff.test.js +123 -0
  382. package/dist/replay-handoff.test.js.map +1 -0
  383. package/dist/replay-workflow-compiler.d.ts +44 -0
  384. package/dist/replay-workflow-compiler.d.ts.map +1 -0
  385. package/dist/replay-workflow-compiler.js +601 -0
  386. package/dist/replay-workflow-compiler.js.map +1 -0
  387. package/dist/replay-workflow-compiler.test.d.ts +2 -0
  388. package/dist/replay-workflow-compiler.test.d.ts.map +1 -0
  389. package/dist/replay-workflow-compiler.test.js +223 -0
  390. package/dist/replay-workflow-compiler.test.js.map +1 -0
  391. package/dist/rrweb-recording-relay.d.ts +56 -0
  392. package/dist/rrweb-recording-relay.d.ts.map +1 -0
  393. package/dist/rrweb-recording-relay.js +299 -0
  394. package/dist/rrweb-recording-relay.js.map +1 -0
  395. package/dist/rrweb-recording-relay.test.d.ts +2 -0
  396. package/dist/rrweb-recording-relay.test.d.ts.map +1 -0
  397. package/dist/rrweb-recording-relay.test.js +85 -0
  398. package/dist/rrweb-recording-relay.test.js.map +1 -0
  399. package/dist/rrweb-recording.d.ts +104 -0
  400. package/dist/rrweb-recording.d.ts.map +1 -0
  401. package/dist/rrweb-recording.js +180 -0
  402. package/dist/rrweb-recording.js.map +1 -0
  403. package/dist/scoped-fs.d.ts +95 -0
  404. package/dist/scoped-fs.d.ts.map +1 -0
  405. package/dist/scoped-fs.js +358 -0
  406. package/dist/scoped-fs.js.map +1 -0
  407. package/dist/scoped-fs.test.d.ts +5 -0
  408. package/dist/scoped-fs.test.d.ts.map +1 -0
  409. package/dist/scoped-fs.test.js +73 -0
  410. package/dist/scoped-fs.test.js.map +1 -0
  411. package/dist/selector-generator.js +7378 -0
  412. package/dist/skill-stub.test.d.ts +2 -0
  413. package/dist/skill-stub.test.d.ts.map +1 -0
  414. package/dist/skill-stub.test.js +22 -0
  415. package/dist/skill-stub.test.js.map +1 -0
  416. package/dist/snapshot-tools.test.d.ts +2 -0
  417. package/dist/snapshot-tools.test.d.ts.map +1 -0
  418. package/dist/snapshot-tools.test.js +856 -0
  419. package/dist/snapshot-tools.test.js.map +1 -0
  420. package/dist/start-relay-server.d.ts +6 -0
  421. package/dist/start-relay-server.d.ts.map +1 -0
  422. package/dist/start-relay-server.js +57 -0
  423. package/dist/start-relay-server.js.map +1 -0
  424. package/dist/styles-api.md +124 -0
  425. package/dist/styles-examples.d.ts +8 -0
  426. package/dist/styles-examples.d.ts.map +1 -0
  427. package/dist/styles-examples.js +64 -0
  428. package/dist/styles-examples.js.map +1 -0
  429. package/dist/styles.d.ts +27 -0
  430. package/dist/styles.d.ts.map +1 -0
  431. package/dist/styles.js +231 -0
  432. package/dist/styles.js.map +1 -0
  433. package/dist/tabwright-agent-skill.d.ts +30 -0
  434. package/dist/tabwright-agent-skill.d.ts.map +1 -0
  435. package/dist/tabwright-agent-skill.js +74 -0
  436. package/dist/tabwright-agent-skill.js.map +1 -0
  437. package/dist/tabwright-agent-skill.test.d.ts +2 -0
  438. package/dist/tabwright-agent-skill.test.d.ts.map +1 -0
  439. package/dist/tabwright-agent-skill.test.js +51 -0
  440. package/dist/tabwright-agent-skill.test.js.map +1 -0
  441. package/dist/test-declarations.d.ts +13 -0
  442. package/dist/test-declarations.d.ts.map +1 -0
  443. package/dist/test-declarations.js +2 -0
  444. package/dist/test-declarations.js.map +1 -0
  445. package/dist/test-utils.d.ts +69 -0
  446. package/dist/test-utils.d.ts.map +1 -0
  447. package/dist/test-utils.js +448 -0
  448. package/dist/test-utils.js.map +1 -0
  449. package/dist/test-utils.test.d.ts +2 -0
  450. package/dist/test-utils.test.d.ts.map +1 -0
  451. package/dist/test-utils.test.js +55 -0
  452. package/dist/test-utils.test.js.map +1 -0
  453. package/dist/utils.d.ts +26 -0
  454. package/dist/utils.d.ts.map +1 -0
  455. package/dist/utils.js +60 -0
  456. package/dist/utils.js.map +1 -0
  457. package/dist/wait-for-page-load.d.ts +16 -0
  458. package/dist/wait-for-page-load.d.ts.map +1 -0
  459. package/dist/wait-for-page-load.js +146 -0
  460. package/dist/wait-for-page-load.js.map +1 -0
  461. package/dist/workflow-capability.d.ts +72 -0
  462. package/dist/workflow-capability.d.ts.map +1 -0
  463. package/dist/workflow-capability.js +316 -0
  464. package/dist/workflow-capability.js.map +1 -0
  465. package/dist/workflow-script-flow.test.d.ts +2 -0
  466. package/dist/workflow-script-flow.test.d.ts.map +1 -0
  467. package/dist/workflow-script-flow.test.js +285 -0
  468. package/dist/workflow-script-flow.test.js.map +1 -0
  469. package/package.json +80 -0
  470. package/src/__snapshots__/x.com.processed.html +1003 -0
  471. package/src/__snapshots__/x.com.processed.withStyles.html +2720 -0
  472. package/src/a11y-client.ts +241 -0
  473. package/src/agent-skills/conan-config/SKILL.md +141 -0
  474. package/src/agent-skills/conan-config/agents/openai.yaml +4 -0
  475. package/src/aria-snapshot.test.ts +311 -0
  476. package/src/aria-snapshot.ts +1681 -0
  477. package/src/aria-snapshot.unit.test.ts +615 -0
  478. package/src/aria-snapshots/github-interactive.txt +193 -0
  479. package/src/aria-snapshots/github-raw.txt +309 -0
  480. package/src/aria-snapshots/hackernews-interactive.txt +477 -0
  481. package/src/aria-snapshots/hackernews-raw.txt +428 -0
  482. package/src/aria-snapshots/prosemirror-interactive.txt +66 -0
  483. package/src/aria-snapshots/prosemirror-raw.txt +145 -0
  484. package/src/assets/aria-labels-hacker-news.png +0 -0
  485. package/src/assets/aria-labels-old-reddit.png +0 -0
  486. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
  487. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
  488. package/src/assets/x.com.html +32946 -0
  489. package/src/browser-config.ts +179 -0
  490. package/src/browser-install.ts +284 -0
  491. package/src/browser-launch.ts +75 -0
  492. package/src/builtin-capabilities.ts +2765 -0
  493. package/src/capability-agent-skill.ts +305 -0
  494. package/src/capability-auth-state.ts +197 -0
  495. package/src/capability-auth.ts +249 -0
  496. package/src/capability-cli-confirmation.test.ts +90 -0
  497. package/src/capability-options.test.ts +89 -0
  498. package/src/capability-options.ts +57 -0
  499. package/src/capability-package.test.ts +204 -0
  500. package/src/capability-package.ts +555 -0
  501. package/src/capability-registry.test.ts +1905 -0
  502. package/src/capability-registry.ts +1234 -0
  503. package/src/capability-runner.ts +801 -0
  504. package/src/capability-search-relevance.test.ts +73 -0
  505. package/src/capability-studio.test.ts +45 -0
  506. package/src/capability-studio.ts +641 -0
  507. package/src/cdp-log.test.ts +131 -0
  508. package/src/cdp-log.ts +112 -0
  509. package/src/cdp-relay.ts +2944 -0
  510. package/src/cdp-session.ts +77 -0
  511. package/src/cdp-types.ts +158 -0
  512. package/src/channel-owner-inspect.test.ts +94 -0
  513. package/src/chrome-discovery.test.ts +50 -0
  514. package/src/chrome-discovery.ts +220 -0
  515. package/src/clean-html.ts +141 -0
  516. package/src/cli-help.test.ts +123 -0
  517. package/src/cli.ts +3181 -0
  518. package/src/cloud-client.ts +179 -0
  519. package/src/create-logger.ts +38 -0
  520. package/src/debugger-examples-types.ts +16 -0
  521. package/src/debugger-examples.ts +66 -0
  522. package/src/debugger.ts +708 -0
  523. package/src/diff-utils.test.ts +152 -0
  524. package/src/diff-utils.ts +70 -0
  525. package/src/doctor.test.ts +244 -0
  526. package/src/doctor.ts +321 -0
  527. package/src/editor-examples.ts +158 -0
  528. package/src/editor.ts +426 -0
  529. package/src/env-compat.ts +28 -0
  530. package/src/executor.ts +1824 -0
  531. package/src/executor.unit.test.ts +168 -0
  532. package/src/extension-connection.test.ts +855 -0
  533. package/src/extension-icon-warning.test.ts +45 -0
  534. package/src/ghost-browser.ts +149 -0
  535. package/src/ghost-cursor-client.ts +494 -0
  536. package/src/ghost-cursor-controller.ts +129 -0
  537. package/src/ghost-cursor.ts +123 -0
  538. package/src/htmlrewrite.test.ts +8008 -0
  539. package/src/htmlrewrite.ts +390 -0
  540. package/src/index.ts +53 -0
  541. package/src/kill-port.ts +219 -0
  542. package/src/kitty-graphics.test.ts +139 -0
  543. package/src/kitty-graphics.ts +79 -0
  544. package/src/locator-selector.test.ts +119 -0
  545. package/src/mcp-client.ts +78 -0
  546. package/src/mcp.ts +629 -0
  547. package/src/on-mouse-action.test.ts +226 -0
  548. package/src/options-page.test.ts +839 -0
  549. package/src/package-paths.ts +38 -0
  550. package/src/page-markdown.ts +240 -0
  551. package/src/performance-examples.ts +186 -0
  552. package/src/playwright-import.ts +59 -0
  553. package/src/popup-relocation.test.ts +163 -0
  554. package/src/product-paths.test.ts +47 -0
  555. package/src/product-paths.ts +28 -0
  556. package/src/protocol.test.ts +52 -0
  557. package/src/protocol.ts +351 -0
  558. package/src/react-source.ts +379 -0
  559. package/src/relay-client.test.ts +375 -0
  560. package/src/relay-client.ts +572 -0
  561. package/src/relay-core.test.ts +1603 -0
  562. package/src/relay-navigation.test.ts +790 -0
  563. package/src/relay-session.test.ts +1375 -0
  564. package/src/relay-state.test.ts +729 -0
  565. package/src/relay-state.ts +561 -0
  566. package/src/replay-ai-index.test.ts +278 -0
  567. package/src/replay-ai-index.ts +872 -0
  568. package/src/replay-cli.test.ts +325 -0
  569. package/src/replay-eval.ts +1039 -0
  570. package/src/replay-handoff.test.ts +163 -0
  571. package/src/replay-handoff.ts +109 -0
  572. package/src/replay-workflow-compiler.test.ts +250 -0
  573. package/src/replay-workflow-compiler.ts +700 -0
  574. package/src/resource.md +409 -0
  575. package/src/rrweb-recording-relay.test.ts +99 -0
  576. package/src/rrweb-recording-relay.ts +400 -0
  577. package/src/rrweb-recording.ts +322 -0
  578. package/src/scoped-fs.test.ts +80 -0
  579. package/src/scoped-fs.ts +420 -0
  580. package/src/skill-stub.test.ts +24 -0
  581. package/src/skill.md +1413 -0
  582. package/src/snapshot-tools.test.ts +1017 -0
  583. package/src/snapshots/hacker-news-accessibility-full.md +81 -0
  584. package/src/snapshots/hacker-news-accessibility-interactive.md +43 -0
  585. package/src/snapshots/page-markdown-output.txt +16 -0
  586. package/src/snapshots/shadcn-ui-accessibility-full.md +201 -0
  587. package/src/snapshots/shadcn-ui-accessibility-interactive.md +109 -0
  588. package/src/start-relay-server.ts +69 -0
  589. package/src/styles-examples.ts +84 -0
  590. package/src/styles.ts +343 -0
  591. package/src/tabwright-agent-skill.test.ts +61 -0
  592. package/src/tabwright-agent-skill.ts +105 -0
  593. package/src/test-declarations.ts +13 -0
  594. package/src/test-utils.test.ts +70 -0
  595. package/src/test-utils.ts +566 -0
  596. package/src/utils.ts +78 -0
  597. package/src/wait-for-page-load.ts +198 -0
  598. package/src/workflow-capability.ts +417 -0
  599. package/src/workflow-script-flow.test.ts +388 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Shared utilities for connecting to the relay server.
3
+ * Used by both MCP and CLI.
4
+ */
5
+ export declare const RELAY_PORT: number;
6
+ export declare const LOCAL_RELAY_HOSTS: readonly ["127.0.0.1", "localhost", "[::1]"];
7
+ export type ExtensionStatus = {
8
+ extensionId: string;
9
+ stableKey?: string;
10
+ browser: string | null;
11
+ profile: {
12
+ email: string;
13
+ id: string;
14
+ } | null;
15
+ activeTargets: number;
16
+ playwriterVersion: string | null;
17
+ protocolVersion?: number;
18
+ features?: string[];
19
+ connectionHealth?: 'ready' | 'limited' | 'legacy';
20
+ missingFeatures?: string[];
21
+ };
22
+ /**
23
+ * Select an extension only when the choice is unambiguous.
24
+ * A single connection remains the backward-compatible default. With multiple
25
+ * connections, an enabled tab is a useful signal only when exactly one
26
+ * extension has one.
27
+ */
28
+ export declare function selectImplicitExtension(extensions: ExtensionStatus[]): ExtensionStatus | null;
29
+ export declare function getLocalRelayHttpBaseUrls(port?: number): string[];
30
+ export declare function getLocalRelayHttpBaseUrl(port?: number): Promise<string>;
31
+ export declare function getRelayServerVersion(port?: number): Promise<string | null>;
32
+ export declare function getRelayServerFeatures(port?: number): Promise<string[] | null>;
33
+ export declare function supportsRelayFeatures(options: {
34
+ features: readonly string[] | null;
35
+ requiredFeatures?: readonly string[];
36
+ }): boolean;
37
+ /**
38
+ * Poll /version until a relay responds or timeout expires.
39
+ * Used during startup races where a relay may have bound the port
40
+ * but isn't serving HTTP yet (issue #75).
41
+ */
42
+ export declare function waitForRelayVersion({ port, timeoutMs, intervalMs, expectedVersion, minimumVersion, }?: {
43
+ port?: number;
44
+ timeoutMs?: number;
45
+ intervalMs?: number;
46
+ /** Keep polling until this exact relay version responds. Takes precedence over minimumVersion. */
47
+ expectedVersion?: string;
48
+ /** Keep polling until this relay version or a newer one responds. */
49
+ minimumVersion?: string;
50
+ }): Promise<string | null>;
51
+ export declare function getExtensionStatus(port?: number): Promise<{
52
+ connected: boolean;
53
+ activeTargets: number;
54
+ playwriterVersion: string | null;
55
+ protocolVersion?: number;
56
+ features?: string[];
57
+ connectionHealth?: 'ready' | 'limited' | 'legacy';
58
+ missingFeatures?: string[];
59
+ } | null>;
60
+ export declare function getExtensionsStatus(port?: number): Promise<ExtensionStatus[]>;
61
+ /**
62
+ * Wait for at least one extension to appear in extensions status.
63
+ * Returns connected extension entries, or [] on timeout.
64
+ */
65
+ export declare function waitForConnectedExtensions(options?: {
66
+ port?: number;
67
+ timeoutMs?: number;
68
+ pollIntervalMs?: number;
69
+ /** Wait for the connection snapshot to remain unchanged before returning. Default: 0. */
70
+ settleMs?: number;
71
+ logger?: {
72
+ log: (...args: any[]) => void;
73
+ };
74
+ }): Promise<ExtensionStatus[]>;
75
+ /**
76
+ * Compare two semver versions. Returns:
77
+ * - negative if v1 < v2
78
+ * - 0 if v1 === v2
79
+ * - positive if v1 > v2
80
+ */
81
+ export declare function compareVersions(v1: string, v2: string): number;
82
+ /**
83
+ * Check if the running Tabwright package is older than the version the extension was built with.
84
+ * The extension bundles the Tabwright version at build time. If the extension reports a newer
85
+ * version, it means the user's CLI/MCP needs updating.
86
+ * Returns a warning message if outdated, null otherwise.
87
+ */
88
+ export declare function getExtensionOutdatedWarning(extensionTabwrightVersion: string | null | undefined): string | null;
89
+ export interface EnsureRelayServerOptions {
90
+ logger?: {
91
+ log: (...args: any[]) => void;
92
+ };
93
+ /** If true, will kill and restart server on version mismatch. Default: true */
94
+ restartOnVersionMismatch?: boolean;
95
+ /** Pass additional environment variables to the relay server process */
96
+ env?: Record<string, string>;
97
+ }
98
+ /**
99
+ * Ensures the relay server is running. Starts it if not running.
100
+ * Optionally restarts on version mismatch.
101
+ * Concurrent calls within the same process are deduplicated.
102
+ */
103
+ export declare function ensureRelayServer(options?: EnsureRelayServerOptions): Promise<true | undefined>;
104
+ //# sourceMappingURL=relay-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../src/relay-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,eAAO,MAAM,UAAU,QAA6E,CAAA;AACpG,eAAO,MAAM,iBAAiB,8CAA+C,CAAA;AAE7E,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC7C,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;IACjD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI,CAa7F;AAED,wBAAgB,yBAAyB,CAAC,IAAI,GAAE,MAAmB,GAAG,MAAM,EAAE,CAI7E;AAkCD,wBAAsB,wBAAwB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAazF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAc7F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAqBhG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAClC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,GAAG,OAAO,CASV;AAuBD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,IAAiB,EACjB,SAAgB,EAChB,UAAgB,EAChB,eAAe,EACf,cAAc,GACf,GAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU9B;AAyBD,wBAAsB,kBAAkB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC;IAC3E,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;IACjD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B,GAAG,IAAI,CAAC,CAqBR;AAED,wBAAsB,mBAAmB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA0D/F;AAeD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;KAAE,CAAA;CACtC,GACL,OAAO,CAAC,eAAe,EAAE,CAAC,CAsC5B;AAqBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAa9D;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQ/G;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;KAAE,CAAA;IAC1C,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7B;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAQzG"}
@@ -0,0 +1,426 @@
1
+ /**
2
+ * Shared utilities for connecting to the relay server.
3
+ * Used by both MCP and CLI.
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import pc from 'picocolors';
9
+ import { getListeningPidsForPort, killPortProcess } from './kill-port.js';
10
+ import { RELAY_FEATURES } from './protocol.js';
11
+ import { VERSION, sleep, LOG_FILE_PATH } from './utils.js';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ export const RELAY_PORT = Number(process.env.TABWRIGHT_PORT || process.env.PLAYWRITER_PORT) || 19988;
15
+ export const LOCAL_RELAY_HOSTS = ['127.0.0.1', 'localhost', '[::1]'];
16
+ /**
17
+ * Select an extension only when the choice is unambiguous.
18
+ * A single connection remains the backward-compatible default. With multiple
19
+ * connections, an enabled tab is a useful signal only when exactly one
20
+ * extension has one.
21
+ */
22
+ export function selectImplicitExtension(extensions) {
23
+ if (extensions.length === 1) {
24
+ return extensions[0];
25
+ }
26
+ const activeExtensions = extensions.filter((extension) => {
27
+ return extension.activeTargets > 0;
28
+ });
29
+ if (activeExtensions.length === 1) {
30
+ return activeExtensions[0];
31
+ }
32
+ return null;
33
+ }
34
+ export function getLocalRelayHttpBaseUrls(port = RELAY_PORT) {
35
+ return LOCAL_RELAY_HOSTS.map((host) => {
36
+ return `http://${host}:${port}`;
37
+ });
38
+ }
39
+ async function fetchLocalRelayPath({ path, port = RELAY_PORT, timeoutMs = 2000, init, accept = () => {
40
+ return true;
41
+ }, }) {
42
+ const attempts = getLocalRelayHttpBaseUrls(port);
43
+ for (const httpBaseUrl of attempts) {
44
+ try {
45
+ const response = await fetch(`${httpBaseUrl}${path}`, {
46
+ ...init,
47
+ signal: AbortSignal.timeout(timeoutMs),
48
+ });
49
+ if (accept(response)) {
50
+ return { response, httpBaseUrl };
51
+ }
52
+ }
53
+ catch { }
54
+ }
55
+ return null;
56
+ }
57
+ export async function getLocalRelayHttpBaseUrl(port = RELAY_PORT) {
58
+ const result = await fetchLocalRelayPath({
59
+ path: '/version',
60
+ port,
61
+ timeoutMs: 500,
62
+ accept: (response) => {
63
+ return response.ok;
64
+ },
65
+ });
66
+ if (result) {
67
+ return result.httpBaseUrl;
68
+ }
69
+ return getLocalRelayHttpBaseUrls(port)[0];
70
+ }
71
+ export async function getRelayServerVersion(port = RELAY_PORT) {
72
+ const result = await fetchLocalRelayPath({
73
+ path: '/version',
74
+ port,
75
+ timeoutMs: 2000,
76
+ accept: (response) => {
77
+ return response.ok;
78
+ },
79
+ });
80
+ if (!result) {
81
+ return null;
82
+ }
83
+ const data = (await result.response.json());
84
+ return data.version;
85
+ }
86
+ export async function getRelayServerFeatures(port = RELAY_PORT) {
87
+ const result = await fetchLocalRelayPath({
88
+ path: '/features',
89
+ port,
90
+ timeoutMs: 2000,
91
+ accept: (response) => {
92
+ return response.ok;
93
+ },
94
+ });
95
+ if (!result) {
96
+ return null;
97
+ }
98
+ const data = await result.response.json();
99
+ if (!data || typeof data !== 'object') {
100
+ return null;
101
+ }
102
+ const features = data.features;
103
+ if (!Array.isArray(features) || !features.every((feature) => typeof feature === 'string')) {
104
+ return null;
105
+ }
106
+ return features;
107
+ }
108
+ export function supportsRelayFeatures(options) {
109
+ const requiredFeatures = options.requiredFeatures || RELAY_FEATURES;
110
+ const features = options.features;
111
+ if (!features) {
112
+ return false;
113
+ }
114
+ return requiredFeatures.every((feature) => {
115
+ return features.includes(feature);
116
+ });
117
+ }
118
+ function acceptsRelayVersion({ version, expectedVersion, minimumVersion, }) {
119
+ if (!version) {
120
+ return false;
121
+ }
122
+ if (expectedVersion) {
123
+ return version === expectedVersion;
124
+ }
125
+ if (minimumVersion) {
126
+ return compareVersions(version, minimumVersion) >= 0;
127
+ }
128
+ return true;
129
+ }
130
+ /**
131
+ * Poll /version until a relay responds or timeout expires.
132
+ * Used during startup races where a relay may have bound the port
133
+ * but isn't serving HTTP yet (issue #75).
134
+ */
135
+ export async function waitForRelayVersion({ port = RELAY_PORT, timeoutMs = 2000, intervalMs = 200, expectedVersion, minimumVersion, } = {}) {
136
+ const end = Date.now() + timeoutMs;
137
+ while (Date.now() < end) {
138
+ const version = await getRelayServerVersion(port);
139
+ if (acceptsRelayVersion({ version, expectedVersion, minimumVersion })) {
140
+ return version;
141
+ }
142
+ await sleep(intervalMs);
143
+ }
144
+ return null;
145
+ }
146
+ async function waitForCurrentRelayReadiness(options) {
147
+ const end = Date.now() + options.timeoutMs;
148
+ const intervalMs = options.intervalMs || 200;
149
+ while (Date.now() < end) {
150
+ const version = await getRelayServerVersion(options.port);
151
+ if (version && compareVersions(version, VERSION) > 0) {
152
+ return version;
153
+ }
154
+ if (version === VERSION) {
155
+ const features = await getRelayServerFeatures(options.port);
156
+ if (supportsRelayFeatures({ features })) {
157
+ return version;
158
+ }
159
+ }
160
+ await sleep(intervalMs);
161
+ }
162
+ return null;
163
+ }
164
+ export async function getExtensionStatus(port = RELAY_PORT) {
165
+ const result = await fetchLocalRelayPath({
166
+ path: '/extension/status',
167
+ port,
168
+ timeoutMs: 500,
169
+ accept: (response) => {
170
+ return response.ok;
171
+ },
172
+ });
173
+ if (!result) {
174
+ return null;
175
+ }
176
+ return (await result.response.json());
177
+ }
178
+ export async function getExtensionsStatus(port = RELAY_PORT) {
179
+ const result = await fetchLocalRelayPath({
180
+ path: '/extensions/status',
181
+ port,
182
+ timeoutMs: 2000,
183
+ accept: (response) => {
184
+ return response.ok;
185
+ },
186
+ });
187
+ if (result) {
188
+ const data = (await result.response.json());
189
+ return data.extensions || [];
190
+ }
191
+ const fallbackResult = await fetchLocalRelayPath({
192
+ path: '/extension/status',
193
+ port,
194
+ timeoutMs: 2000,
195
+ accept: (response) => {
196
+ return response.ok;
197
+ },
198
+ });
199
+ if (!fallbackResult) {
200
+ return [];
201
+ }
202
+ const fallbackData = (await fallbackResult.response.json());
203
+ if (!fallbackData?.connected) {
204
+ return [];
205
+ }
206
+ return [
207
+ {
208
+ extensionId: 'default',
209
+ stableKey: undefined,
210
+ browser: fallbackData.browser,
211
+ profile: fallbackData.profile,
212
+ activeTargets: fallbackData.activeTargets,
213
+ playwriterVersion: fallbackData.playwriterVersion || null,
214
+ protocolVersion: fallbackData.protocolVersion,
215
+ features: fallbackData.features,
216
+ connectionHealth: fallbackData.connectionHealth,
217
+ missingFeatures: fallbackData.missingFeatures,
218
+ },
219
+ ];
220
+ }
221
+ function getExtensionSettleSignature(extensions) {
222
+ return extensions
223
+ .map((extension) => {
224
+ return JSON.stringify({
225
+ extensionId: extension.extensionId,
226
+ stableKey: extension.stableKey ?? null,
227
+ activeTargets: extension.activeTargets,
228
+ });
229
+ })
230
+ .sort()
231
+ .join('\n');
232
+ }
233
+ /**
234
+ * Wait for at least one extension to appear in extensions status.
235
+ * Returns connected extension entries, or [] on timeout.
236
+ */
237
+ export async function waitForConnectedExtensions(options = {}) {
238
+ const { port = RELAY_PORT, timeoutMs = 5000, pollIntervalMs = 200, settleMs = 0, logger } = options;
239
+ const startTime = Date.now();
240
+ let latestNonEmpty = [];
241
+ let latestSnapshotWasConnected = false;
242
+ let stableSignature = null;
243
+ let stableSince = 0;
244
+ logger?.log(pc.dim('Waiting for extension to connect...'));
245
+ while (Date.now() - startTime < timeoutMs) {
246
+ const extensions = await getExtensionsStatus(port);
247
+ if (extensions.length > 0) {
248
+ latestSnapshotWasConnected = true;
249
+ latestNonEmpty = extensions;
250
+ const signature = getExtensionSettleSignature(extensions);
251
+ if (signature !== stableSignature) {
252
+ stableSignature = signature;
253
+ stableSince = Date.now();
254
+ }
255
+ if (settleMs === 0 || Date.now() - stableSince >= settleMs) {
256
+ logger?.log(pc.green('Extension connected'));
257
+ return latestNonEmpty;
258
+ }
259
+ }
260
+ else if (latestNonEmpty.length > 0) {
261
+ latestSnapshotWasConnected = false;
262
+ stableSignature = null;
263
+ }
264
+ await sleep(pollIntervalMs);
265
+ }
266
+ if (latestSnapshotWasConnected && latestNonEmpty.length > 0) {
267
+ logger?.log(pc.green('Extension connected'));
268
+ return latestNonEmpty;
269
+ }
270
+ logger?.log(pc.yellow('Extension did not connect within timeout'));
271
+ return [];
272
+ }
273
+ async function killRelayServer(options) {
274
+ const { port, waitForFreeMs = 3000 } = options;
275
+ try {
276
+ await killPortProcess({ port });
277
+ }
278
+ catch {
279
+ return;
280
+ }
281
+ const startTime = Date.now();
282
+ while (Date.now() - startTime < waitForFreeMs) {
283
+ const pids = await getListeningPidsForPort({ port }).catch(() => []);
284
+ if (pids.length === 0) {
285
+ return;
286
+ }
287
+ await sleep(100);
288
+ }
289
+ }
290
+ /**
291
+ * Compare two semver versions. Returns:
292
+ * - negative if v1 < v2
293
+ * - 0 if v1 === v2
294
+ * - positive if v1 > v2
295
+ */
296
+ export function compareVersions(v1, v2) {
297
+ const parts1 = v1.split('.').map(Number);
298
+ const parts2 = v2.split('.').map(Number);
299
+ const len = Math.max(parts1.length, parts2.length);
300
+ for (let i = 0; i < len; i++) {
301
+ const p1 = parts1[i] || 0;
302
+ const p2 = parts2[i] || 0;
303
+ if (p1 !== p2) {
304
+ return p1 - p2;
305
+ }
306
+ }
307
+ return 0;
308
+ }
309
+ /**
310
+ * Check if the running Tabwright package is older than the version the extension was built with.
311
+ * The extension bundles the Tabwright version at build time. If the extension reports a newer
312
+ * version, it means the user's CLI/MCP needs updating.
313
+ * Returns a warning message if outdated, null otherwise.
314
+ */
315
+ export function getExtensionOutdatedWarning(extensionTabwrightVersion) {
316
+ if (!extensionTabwrightVersion) {
317
+ return null;
318
+ }
319
+ if (compareVersions(extensionTabwrightVersion, VERSION) > 0) {
320
+ return `Tabwright ${VERSION} is outdated (extension requires ${extensionTabwrightVersion}). Run \`npm install -g tabwright@latest\` or update the tabwright package in your project.`;
321
+ }
322
+ return null;
323
+ }
324
+ // Module-level dedup: if ensureRelayServer is called concurrently within the
325
+ // same process (e.g. two MCP tool handlers at once), only one spawn runs.
326
+ let pendingEnsure = null;
327
+ /**
328
+ * Ensures the relay server is running. Starts it if not running.
329
+ * Optionally restarts on version mismatch.
330
+ * Concurrent calls within the same process are deduplicated.
331
+ */
332
+ export async function ensureRelayServer(options = {}) {
333
+ if (pendingEnsure) {
334
+ return pendingEnsure;
335
+ }
336
+ pendingEnsure = ensureRelayServerImpl(options).finally(() => {
337
+ pendingEnsure = null;
338
+ });
339
+ return pendingEnsure;
340
+ }
341
+ async function ensureRelayServerImpl(options = {}) {
342
+ const { logger, restartOnVersionMismatch = true, env: additionalEnv } = options;
343
+ const serverVersion = await getRelayServerVersion(RELAY_PORT);
344
+ const sameVersionFeatures = serverVersion === VERSION ? await getRelayServerFeatures(RELAY_PORT) : null;
345
+ if (serverVersion === VERSION && supportsRelayFeatures({ features: sameVersionFeatures })) {
346
+ return;
347
+ }
348
+ // Don't restart if server version is higher than our version.
349
+ // This prevents older clients from killing a newer server.
350
+ if (serverVersion !== null && compareVersions(serverVersion, VERSION) > 0) {
351
+ return;
352
+ }
353
+ if (serverVersion !== null) {
354
+ if (restartOnVersionMismatch) {
355
+ const reason = serverVersion === VERSION
356
+ ? `CDP relay server is missing current features (${RELAY_FEATURES.join(', ')}), restarting...`
357
+ : `CDP relay server version mismatch (server: ${serverVersion}, client: ${VERSION}), restarting...`;
358
+ logger?.log(pc.yellow(reason));
359
+ await killRelayServer({ port: RELAY_PORT });
360
+ }
361
+ else {
362
+ // Server is running but different version, just use it
363
+ return;
364
+ }
365
+ }
366
+ else {
367
+ const listeningPids = await getListeningPidsForPort({ port: RELAY_PORT }).catch(() => []);
368
+ if (listeningPids.length > 0) {
369
+ // Something is on the port but /version didn't respond. It might be a
370
+ // relay that's still starting (race with another CLI/MCP instance).
371
+ // Poll /version briefly before deciding to kill it (issue #75).
372
+ const foundVersion = await waitForRelayVersion({ port: RELAY_PORT });
373
+ if (foundVersion) {
374
+ // A relay came up while we waited; only reuse the current version when
375
+ // it also exposes the feature contract expected by this build.
376
+ if (compareVersions(foundVersion, VERSION) > 0) {
377
+ return;
378
+ }
379
+ if (foundVersion === VERSION) {
380
+ const features = await getRelayServerFeatures(RELAY_PORT);
381
+ if (supportsRelayFeatures({ features })) {
382
+ return;
383
+ }
384
+ }
385
+ if (!restartOnVersionMismatch) {
386
+ return;
387
+ }
388
+ const reason = foundVersion === VERSION
389
+ ? `CDP relay server is missing current features (${RELAY_FEATURES.join(', ')}), restarting...`
390
+ : `CDP relay server version mismatch (server: ${foundVersion}, client: ${VERSION}), restarting...`;
391
+ logger?.log(pc.yellow(reason));
392
+ }
393
+ else {
394
+ logger?.log(pc.yellow(`Port ${RELAY_PORT} is already in use (pid(s): ${listeningPids.join(', ')}). Attempting to stop the existing process...`));
395
+ }
396
+ await killRelayServer({ port: RELAY_PORT });
397
+ }
398
+ logger?.log(pc.dim('CDP relay server not running, starting it...'));
399
+ }
400
+ // Detect if we're running from source (.ts) or compiled (.js)
401
+ // This handles: tsx, vite-node, ts-node, or direct node on compiled output
402
+ const isRunningFromSource = __filename.endsWith('.ts');
403
+ const scriptPath = isRunningFromSource
404
+ ? path.resolve(__dirname, './start-relay-server.ts')
405
+ : path.resolve(__dirname, './start-relay-server.js');
406
+ const serverProcess = spawn(isRunningFromSource ? 'tsx' : process.execPath, [scriptPath], {
407
+ detached: true,
408
+ stdio: 'ignore',
409
+ env: { ...process.env, ...additionalEnv },
410
+ });
411
+ serverProcess.unref();
412
+ const startTimeoutMs = 5000;
413
+ const startTime = Date.now();
414
+ const newVersion = await waitForCurrentRelayReadiness({
415
+ port: RELAY_PORT,
416
+ timeoutMs: startTimeoutMs,
417
+ });
418
+ if (newVersion && compareVersions(newVersion, VERSION) >= 0) {
419
+ logger?.log(pc.green('CDP relay server started successfully'));
420
+ await sleep(1000);
421
+ return true;
422
+ }
423
+ const waitedMs = Date.now() - startTime;
424
+ throw new Error(`Failed to start CDP relay server within ${waitedMs}ms. Check logs at: ${LOG_FILE_PATH}`);
425
+ }
426
+ //# sourceMappingURL=relay-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../src/relay-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,KAAK,CAAA;AACpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAU,CAAA;AAe7E;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAA6B;IACnE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,CAAC,CAAE,CAAA;IACvB,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;QACvD,OAAO,SAAS,CAAC,aAAa,GAAG,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC,CAAC,CAAE,CAAA;IAC7B,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAe,UAAU;IACjE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,OAAO,UAAU,IAAI,IAAI,IAAI,EAAE,CAAA;IACjC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,EACjC,IAAI,EACJ,IAAI,GAAG,UAAU,EACjB,SAAS,GAAG,IAAI,EAChB,IAAI,EACJ,MAAM,GAAG,GAAG,EAAE;IACZ,OAAO,IAAI,CAAA;AACb,CAAC,GAOF;IACC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAEhD,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,GAAG,IAAI,EAAE,EAAE;gBACpD,GAAG,IAAI;gBACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;aACvC,CAAC,CAAA;YACF,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAe,UAAU;IACtE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,WAAW,CAAA;IAC3B,CAAC;IACD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAA;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe,UAAU;IACnE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAA;IAClE,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAe,UAAU;IACpE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,IAAI,EAAE,WAAW;QACjB,IAAI;QACJ,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,IAAI,GAAY,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,QAAQ,GAAI,IAA+B,CAAC,QAAQ,CAAA;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC1F,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAGrC;IACC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,cAAc,CAAA;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;QACxC,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,EAC3B,OAAO,EACP,eAAe,EACf,cAAc,GAKf;IACC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,OAAO,KAAK,eAAe,CAAA;IACpC,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,IAAI,GAAG,UAAU,EACjB,SAAS,GAAG,IAAI,EAChB,UAAU,GAAG,GAAG,EAChB,eAAe,EACf,cAAc,MASZ,EAAE;IACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;IAClC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;QACjD,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YACtE,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,MAAM,KAAK,CAAC,UAAU,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,OAI3C;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAA;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAA;IAC5C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACzD,IAAI,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3D,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAA;YAChB,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC,UAAU,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe,UAAU;IAShE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,IAAI,EAAE,mBAAmB;QACzB,IAAI;QACJ,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAQnC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe,UAAU;IACjE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,IAAI,EAAE,oBAAoB;QAC1B,IAAI;QACJ,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAEzC,CAAA;QACD,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC;QAC/C,IAAI,EAAE,mBAAmB;QACzB,IAAI;QACJ,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAUzD,CAAA;IAED,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL;YACE,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,iBAAiB,EAAE,YAAY,CAAC,iBAAiB,IAAI,IAAI;YACzD,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,eAAe,EAAE,YAAY,CAAC,eAAe;SAC9C;KACF,CAAA;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,UAA6B;IAChE,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI;YACtC,aAAa,EAAE,SAAS,CAAC,aAAa;SACvC,CAAC,CAAA;IACJ,CAAC,CAAC;SACD,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAOI,EAAE;IAEN,MAAM,EAAE,IAAI,GAAG,UAAU,EAAE,SAAS,GAAG,IAAI,EAAE,cAAc,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IACnG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,IAAI,cAAc,GAAsB,EAAE,CAAA;IAC1C,IAAI,0BAA0B,GAAG,KAAK,CAAA;IACtC,IAAI,eAAe,GAAkB,IAAI,CAAA;IACzC,IAAI,WAAW,GAAG,CAAC,CAAA;IAEnB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;IAE1D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,0BAA0B,GAAG,IAAI,CAAA;YACjC,cAAc,GAAG,UAAU,CAAA;YAC3B,MAAM,SAAS,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAA;YACzD,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;gBAClC,eAAe,GAAG,SAAS,CAAA;gBAC3B,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC1B,CAAC;YACD,IAAI,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,IAAI,QAAQ,EAAE,CAAC;gBAC3D,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA;gBAC5C,OAAO,cAAc,CAAA;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,0BAA0B,GAAG,KAAK,CAAA;YAClC,eAAe,GAAG,IAAI,CAAA;QACxB,CAAC;QACD,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,0BAA0B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA;QAC5C,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAA;IAClE,OAAO,EAAE,CAAA;AACX,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAiD;IAC9E,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;IAE9C,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAM;QACR,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,EAAU;IACpD,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACd,OAAO,EAAE,GAAG,EAAE,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,yBAAoD;IAC9F,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,eAAe,CAAC,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,aAAa,OAAO,oCAAoC,yBAAyB,6FAA6F,CAAA;IACvL,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAUD,6EAA6E;AAC7E,0EAA0E;AAC1E,IAAI,aAAa,GAAqC,IAAI,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAoC,EAAE;IAC5E,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1D,aAAa,GAAG,IAAI,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,UAAoC,EAAE;IACzE,MAAM,EAAE,MAAM,EAAE,wBAAwB,GAAG,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;IAC/E,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAA;IAC7D,MAAM,mBAAmB,GAAG,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvG,IAAI,aAAa,KAAK,OAAO,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;QAC1F,OAAM;IACR,CAAC;IAED,8DAA8D;IAC9D,2DAA2D;IAC3D,IAAI,aAAa,KAAK,IAAI,IAAI,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAM;IACR,CAAC;IAED,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,IAAI,wBAAwB,EAAE,CAAC;YAC7B,MAAM,MAAM,GACV,aAAa,KAAK,OAAO;gBACvB,CAAC,CAAC,iDAAiD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAC9F,CAAC,CAAC,8CAA8C,aAAa,aAAa,OAAO,kBAAkB,CAAA;YACvG,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAC9B,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,OAAM;QACR,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QACzF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,sEAAsE;YACtE,oEAAoE;YACpE,gEAAgE;YAChE,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YACpE,IAAI,YAAY,EAAE,CAAC;gBACjB,uEAAuE;gBACvE,+DAA+D;gBAC/D,IAAI,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C,OAAM;gBACR,CAAC;gBACD,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;oBAC7B,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAA;oBACzD,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;wBACxC,OAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAC9B,OAAM;gBACR,CAAC;gBACD,MAAM,MAAM,GACV,YAAY,KAAK,OAAO;oBACtB,CAAC,CAAC,iDAAiD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;oBAC9F,CAAC,CAAC,8CAA8C,YAAY,aAAa,OAAO,kBAAkB,CAAA;gBACtG,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,CACT,EAAE,CAAC,MAAM,CACP,QAAQ,UAAU,+BAA+B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C,CACzH,CACF,CAAA;YACH,CAAC;YACD,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7C,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,8DAA8D;IAC9D,2EAA2E;IAC3E,MAAM,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,mBAAmB;QACpC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC;QACpD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAA;IAEtD,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;QACxF,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE;KAC1C,CAAC,CAAA;IAEF,aAAa,CAAC,KAAK,EAAE,CAAA;IAErB,MAAM,cAAc,GAAG,IAAI,CAAA;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE5B,MAAM,UAAU,GAAG,MAAM,4BAA4B,CAAC;QACpD,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,cAAc;KAC1B,CAAC,CAAA;IACF,IAAI,UAAU,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAA;QAC9D,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;IACvC,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,sBAAsB,aAAa,EAAE,CAAC,CAAA;AAC3G,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=relay-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-client.test.d.ts","sourceRoot":"","sources":["../src/relay-client.test.ts"],"names":[],"mappings":""}