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
package/dist/editor.js ADDED
@@ -0,0 +1,363 @@
1
+ /**
2
+ * A class for viewing and editing web page scripts via Chrome DevTools Protocol.
3
+ * Provides a Claude Code-like interface: list, read, edit, grep.
4
+ *
5
+ * Edits are in-memory only and persist until page reload. They modify the running
6
+ * V8 instance but are not saved to disk or server.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const cdp = await getCDPSession({ page })
11
+ * const editor = new Editor({ cdp })
12
+ * await editor.enable()
13
+ *
14
+ * // List available scripts
15
+ * const scripts = editor.list({ search: 'app' })
16
+ *
17
+ * // Read a script
18
+ * const { content } = await editor.read({ url: 'https://example.com/app.js' })
19
+ *
20
+ * // Edit a script
21
+ * await editor.edit({
22
+ * url: 'https://example.com/app.js',
23
+ * oldString: 'console.log("old")',
24
+ * newString: 'console.log("new")'
25
+ * })
26
+ * ```
27
+ */
28
+ export class Editor {
29
+ cdp;
30
+ enabled = false;
31
+ scripts = new Map();
32
+ stylesheets = new Map();
33
+ sourceCache = new Map();
34
+ constructor({ cdp }) {
35
+ this.cdp = cdp;
36
+ this.setupEventListeners();
37
+ }
38
+ setupEventListeners() {
39
+ this.cdp.on('Debugger.scriptParsed', (params) => {
40
+ if (!params.url.startsWith('chrome') && !params.url.startsWith('devtools')) {
41
+ const url = params.url || `inline://${params.scriptId}`;
42
+ this.scripts.set(url, params.scriptId);
43
+ this.sourceCache.delete(params.scriptId);
44
+ }
45
+ });
46
+ this.cdp.on('CSS.styleSheetAdded', (params) => {
47
+ const header = params.header;
48
+ if (header.sourceURL?.startsWith('chrome') || header.sourceURL?.startsWith('devtools')) {
49
+ return;
50
+ }
51
+ const url = header.sourceURL || `inline-css://${header.styleSheetId}`;
52
+ this.stylesheets.set(url, header.styleSheetId);
53
+ this.sourceCache.delete(header.styleSheetId);
54
+ });
55
+ }
56
+ /**
57
+ * Enables the editor. Must be called before other methods.
58
+ * Scripts are collected from Debugger.scriptParsed events.
59
+ * Reload the page after enabling to capture all scripts.
60
+ */
61
+ async enable() {
62
+ if (this.enabled) {
63
+ return;
64
+ }
65
+ await this.cdp.send('Debugger.disable');
66
+ await this.cdp.send('CSS.disable');
67
+ this.scripts.clear();
68
+ this.stylesheets.clear();
69
+ this.sourceCache.clear();
70
+ const resourcesReady = new Promise((resolve) => {
71
+ let timeout;
72
+ const listener = () => {
73
+ clearTimeout(timeout);
74
+ timeout = setTimeout(() => {
75
+ this.cdp.off('Debugger.scriptParsed', listener);
76
+ this.cdp.off('CSS.styleSheetAdded', listener);
77
+ resolve();
78
+ }, 100);
79
+ };
80
+ this.cdp.on('Debugger.scriptParsed', listener);
81
+ this.cdp.on('CSS.styleSheetAdded', listener);
82
+ timeout = setTimeout(() => {
83
+ this.cdp.off('Debugger.scriptParsed', listener);
84
+ this.cdp.off('CSS.styleSheetAdded', listener);
85
+ resolve();
86
+ }, 100);
87
+ });
88
+ await this.cdp.send('Debugger.enable');
89
+ await this.cdp.send('DOM.enable');
90
+ await this.cdp.send('CSS.enable');
91
+ await resourcesReady;
92
+ this.enabled = true;
93
+ }
94
+ getIdByUrl(url) {
95
+ const scriptId = this.scripts.get(url);
96
+ if (scriptId) {
97
+ return { scriptId };
98
+ }
99
+ const styleSheetId = this.stylesheets.get(url);
100
+ if (styleSheetId) {
101
+ return { styleSheetId };
102
+ }
103
+ const allUrls = [...Array.from(this.scripts.keys()), ...Array.from(this.stylesheets.keys())];
104
+ const available = allUrls.slice(0, 5);
105
+ throw new Error(`Resource not found: ${url}\nAvailable: ${available.join(', ')}${allUrls.length > 5 ? '...' : ''}`);
106
+ }
107
+ /**
108
+ * Lists available script and stylesheet URLs. Use pattern to filter by regex.
109
+ * Automatically enables the editor if not already enabled.
110
+ *
111
+ * @param options - Options
112
+ * @param options.pattern - Optional regex to filter URLs
113
+ * @returns Array of URLs
114
+ *
115
+ * @example
116
+ * ```ts
117
+ * // List all scripts and stylesheets
118
+ * const urls = await editor.list()
119
+ *
120
+ * // List only JS files
121
+ * const jsFiles = await editor.list({ pattern: /\.js/ })
122
+ *
123
+ * // List only CSS files
124
+ * const cssFiles = await editor.list({ pattern: /\.css/ })
125
+ *
126
+ * // Search for specific scripts
127
+ * const appScripts = await editor.list({ pattern: /app/ })
128
+ * ```
129
+ */
130
+ async list({ pattern } = {}) {
131
+ await this.enable();
132
+ const urls = [...Array.from(this.scripts.keys()), ...Array.from(this.stylesheets.keys())];
133
+ if (!pattern) {
134
+ return urls;
135
+ }
136
+ return urls.filter((url) => {
137
+ const matches = pattern.test(url);
138
+ pattern.lastIndex = 0;
139
+ return matches;
140
+ });
141
+ }
142
+ /**
143
+ * Reads a script or stylesheet's source code by URL.
144
+ * Returns line-numbered content like Claude Code's Read tool.
145
+ * For inline scripts, use the `inline://` URL from list() or grep().
146
+ *
147
+ * @param options - Options
148
+ * @param options.url - Script or stylesheet URL (inline scripts have `inline://{id}` URLs)
149
+ * @param options.offset - Line number to start from (0-based, default 0)
150
+ * @param options.limit - Number of lines to return (default 2000)
151
+ * @returns Content with line numbers, total lines, and range info
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * // Read by URL
156
+ * const { content, totalLines } = await editor.read({
157
+ * url: 'https://example.com/app.js'
158
+ * })
159
+ *
160
+ * // Read a CSS file
161
+ * const { content } = await editor.read({ url: 'https://example.com/styles.css' })
162
+ *
163
+ * // Read lines 100-200
164
+ * const { content } = await editor.read({
165
+ * url: 'https://example.com/app.js',
166
+ * offset: 100,
167
+ * limit: 100
168
+ * })
169
+ * ```
170
+ */
171
+ async read({ url, offset = 0, limit = 2000 }) {
172
+ await this.enable();
173
+ const id = this.getIdByUrl(url);
174
+ const source = await this.getSource(id);
175
+ const lines = source.split('\n');
176
+ const totalLines = lines.length;
177
+ const startLine = Math.min(offset, totalLines);
178
+ const endLine = Math.min(offset + limit, totalLines);
179
+ const selectedLines = lines.slice(startLine, endLine);
180
+ const content = selectedLines.map((line, i) => `${String(startLine + i + 1).padStart(5)}| ${line}`).join('\n');
181
+ return {
182
+ content,
183
+ totalLines,
184
+ startLine: startLine + 1,
185
+ endLine,
186
+ };
187
+ }
188
+ async getSource(id) {
189
+ if ('styleSheetId' in id) {
190
+ const cached = this.sourceCache.get(id.styleSheetId);
191
+ if (cached) {
192
+ return cached;
193
+ }
194
+ const response = await this.cdp.send('CSS.getStyleSheetText', { styleSheetId: id.styleSheetId });
195
+ this.sourceCache.set(id.styleSheetId, response.text);
196
+ return response.text;
197
+ }
198
+ const cached = this.sourceCache.get(id.scriptId);
199
+ if (cached) {
200
+ return cached;
201
+ }
202
+ const response = await this.cdp.send('Debugger.getScriptSource', { scriptId: id.scriptId });
203
+ this.sourceCache.set(id.scriptId, response.scriptSource);
204
+ return response.scriptSource;
205
+ }
206
+ /**
207
+ * Edits a script or stylesheet by replacing oldString with newString.
208
+ * Like Claude Code's Edit tool - performs exact string replacement.
209
+ *
210
+ * @param options - Options
211
+ * @param options.url - Script or stylesheet URL (inline scripts have `inline://{id}` URLs)
212
+ * @param options.oldString - Exact string to find and replace
213
+ * @param options.newString - Replacement string
214
+ * @param options.dryRun - If true, validate without applying (default false)
215
+ * @returns Result with success status
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * // Replace a string in JS
220
+ * await editor.edit({
221
+ * url: 'https://example.com/app.js',
222
+ * oldString: 'const DEBUG = false',
223
+ * newString: 'const DEBUG = true'
224
+ * })
225
+ *
226
+ * // Edit CSS
227
+ * await editor.edit({
228
+ * url: 'https://example.com/styles.css',
229
+ * oldString: 'color: red',
230
+ * newString: 'color: blue'
231
+ * })
232
+ * ```
233
+ */
234
+ async edit({ url, oldString, newString, dryRun = false, }) {
235
+ await this.enable();
236
+ const id = this.getIdByUrl(url);
237
+ const source = await this.getSource(id);
238
+ const matchCount = source.split(oldString).length - 1;
239
+ if (matchCount === 0) {
240
+ throw new Error(`oldString not found in ${url}`);
241
+ }
242
+ if (matchCount > 1) {
243
+ throw new Error(`oldString found ${matchCount} times in ${url}. Provide more context to make it unique.`);
244
+ }
245
+ const newSource = source.replace(oldString, newString);
246
+ return this.setSource(id, newSource, dryRun);
247
+ }
248
+ async setSource(id, content, dryRun = false) {
249
+ if ('styleSheetId' in id) {
250
+ await this.cdp.send('CSS.setStyleSheetText', { styleSheetId: id.styleSheetId, text: content });
251
+ if (!dryRun) {
252
+ this.sourceCache.set(id.styleSheetId, content);
253
+ }
254
+ return { success: true };
255
+ }
256
+ // Chrome deprecated Debugger.setScriptSource in Chrome 142+ (Feb 2026)
257
+ // Use Runtime.evaluate as fallback to re-execute the modified script
258
+ // This works for scripts that define functions at global scope
259
+ try {
260
+ const response = await this.cdp.send('Debugger.setScriptSource', {
261
+ scriptId: id.scriptId,
262
+ scriptSource: content,
263
+ dryRun,
264
+ });
265
+ if (!dryRun) {
266
+ this.sourceCache.set(id.scriptId, content);
267
+ }
268
+ return { success: true, stackChanged: response.stackChanged };
269
+ }
270
+ catch (error) {
271
+ const errorMessage = error instanceof Error ? error.message : String(error);
272
+ // Check if setScriptSource is deprecated/unavailable
273
+ if (errorMessage.includes('setScriptSource') || errorMessage.includes('-32000')) {
274
+ if (dryRun) {
275
+ // For dry run, just validate the syntax by parsing
276
+ await this.cdp.send('Runtime.compileScript', {
277
+ expression: content,
278
+ sourceURL: 'dry-run-validation',
279
+ persistScript: false,
280
+ });
281
+ return { success: true };
282
+ }
283
+ // Re-execute the entire script to override global functions
284
+ await this.cdp.send('Runtime.evaluate', {
285
+ expression: content,
286
+ returnByValue: false,
287
+ });
288
+ this.sourceCache.set(id.scriptId, content);
289
+ return { success: true, stackChanged: true };
290
+ }
291
+ throw error;
292
+ }
293
+ }
294
+ /**
295
+ * Searches for a regex across all scripts and stylesheets.
296
+ * Like Claude Code's Grep tool - returns matching lines with context.
297
+ *
298
+ * @param options - Options
299
+ * @param options.regex - Regular expression to search for in file contents
300
+ * @param options.pattern - Optional regex to filter which URLs to search
301
+ * @returns Array of matches with url, line number, and line content
302
+ *
303
+ * @example
304
+ * ```ts
305
+ * // Search all scripts and stylesheets for "color"
306
+ * const matches = await editor.grep({ regex: /color/ })
307
+ *
308
+ * // Search only CSS files
309
+ * const matches = await editor.grep({
310
+ * regex: /background-color/,
311
+ * pattern: /\.css/
312
+ * })
313
+ *
314
+ * // Regex search for console methods in JS
315
+ * const matches = await editor.grep({
316
+ * regex: /console\.(log|error|warn)/,
317
+ * pattern: /\.js/
318
+ * })
319
+ * ```
320
+ */
321
+ async grep({ regex, pattern }) {
322
+ await this.enable();
323
+ const matches = [];
324
+ const urls = await this.list({ pattern });
325
+ for (const url of urls) {
326
+ let source;
327
+ try {
328
+ const id = this.getIdByUrl(url);
329
+ source = await this.getSource(id);
330
+ }
331
+ catch {
332
+ continue;
333
+ }
334
+ const lines = source.split('\n');
335
+ for (let i = 0; i < lines.length; i++) {
336
+ if (regex.test(lines[i])) {
337
+ matches.push({
338
+ url,
339
+ lineNumber: i + 1,
340
+ lineContent: lines[i].trim().slice(0, 200),
341
+ });
342
+ regex.lastIndex = 0;
343
+ }
344
+ }
345
+ }
346
+ return matches;
347
+ }
348
+ /**
349
+ * Writes entire content to a script or stylesheet, replacing all existing code.
350
+ * Use with caution - prefer edit() for targeted changes.
351
+ *
352
+ * @param options - Options
353
+ * @param options.url - Script or stylesheet URL (inline scripts have `inline://{id}` URLs)
354
+ * @param options.content - New content
355
+ * @param options.dryRun - If true, validate without applying (default false, only works for JS)
356
+ */
357
+ async write({ url, content, dryRun = false, }) {
358
+ await this.enable();
359
+ const id = this.getIdByUrl(url);
360
+ return this.setSource(id, content, dryRun);
361
+ }
362
+ }
363
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=env-compat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-compat.d.ts","sourceRoot":"","sources":["../src/env-compat.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ const PREFIX_MAPPINGS = [
2
+ ['TABWRIGHT_', 'PLAYWRITER_'],
3
+ ];
4
+ PREFIX_MAPPINGS.map(([currentPrefix, legacyPrefix]) => {
5
+ const currentEntries = Object.entries(process.env).filter(([name, value]) => {
6
+ return name.startsWith(currentPrefix) && value !== undefined;
7
+ });
8
+ const legacyEntries = Object.entries(process.env).filter(([name, value]) => {
9
+ return name.startsWith(legacyPrefix) && value !== undefined;
10
+ });
11
+ currentEntries.map(([name, value]) => {
12
+ const legacyName = `${legacyPrefix}${name.slice(currentPrefix.length)}`;
13
+ if (process.env[legacyName] === undefined) {
14
+ process.env[legacyName] = value;
15
+ }
16
+ return legacyName;
17
+ });
18
+ legacyEntries.map(([name, value]) => {
19
+ const currentName = `${currentPrefix}${name.slice(legacyPrefix.length)}`;
20
+ if (process.env[currentName] === undefined) {
21
+ process.env[currentName] = value;
22
+ }
23
+ return currentName;
24
+ });
25
+ });
26
+ export {};
27
+ //# sourceMappingURL=env-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-compat.js","sourceRoot":"","sources":["../src/env-compat.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG;IACtB,CAAC,YAAY,EAAE,aAAa,CAAC;CACrB,CAAA;AAEV,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,EAAE;IACpD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,KAAK,SAAS,CAAA;IAC9D,CAAC,CAAC,CAAA;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,KAAK,SAAS,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAA;QACvE,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAA;QACjC,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAClC,MAAM,WAAW,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAA;QACxE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAA;QAClC,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * PlaywrightExecutor - Manages browser connection and code execution per session.
3
+ * Used by both MCP and CLI to execute Playwright code with persistent state.
4
+ */
5
+ import type { Page, BrowserContext } from '@xmorse/playwright-core';
6
+ import { type SnapshotFormat } from './aria-snapshot.js';
7
+ export type { SnapshotFormat };
8
+ export declare class CodeExecutionTimeoutError extends Error {
9
+ constructor(timeout: number);
10
+ }
11
+ /**
12
+ * Parse code and check if it's a single expression that should be auto-returned.
13
+ * Returns the exact expression source (without trailing semicolon) using AST
14
+ * node offsets, or null if the code should not be auto-wrapped. See #58.
15
+ */
16
+ export declare function getAutoReturnExpression(code: string): string | null;
17
+ /** Backward-compatible helper: returns true if code should be auto-wrapped. */
18
+ export declare function shouldAutoReturn(code: string): boolean;
19
+ /**
20
+ * Wraps user code in an async IIFE for vm execution.
21
+ * Uses AST node offsets to extract the expression without trailing semicolons,
22
+ * avoiding SyntaxError when embedding inside `return await (...)`. See #58.
23
+ */
24
+ export declare function wrapCode(code: string): string;
25
+ export interface ExecuteScreenshot {
26
+ path: string;
27
+ base64: string;
28
+ mimeType: 'image/png';
29
+ snapshot: string;
30
+ labelCount: number;
31
+ }
32
+ export interface ExecuteResult {
33
+ text: string;
34
+ images: Array<{
35
+ data: string;
36
+ mimeType: string;
37
+ }>;
38
+ screenshots: ExecuteScreenshot[];
39
+ isError: boolean;
40
+ structuredResult?: unknown;
41
+ }
42
+ export interface ExecuteOptions {
43
+ includeStructuredResult?: boolean;
44
+ }
45
+ export interface ExecutorLogger {
46
+ log(...args: any[]): void;
47
+ error(...args: any[]): void;
48
+ }
49
+ export interface CdpConfig {
50
+ host?: string;
51
+ port?: number;
52
+ token?: string;
53
+ extensionId?: string | null;
54
+ /** Direct CDP WebSocket URL — bypasses relay + extension, connects straight to Chrome */
55
+ directCdpUrl?: string;
56
+ /** Launch a headless Chrome via chromium.launch() instead of connecting to an existing one.
57
+ * Uses direct Playwright browser management, no extension or relay CDP routing needed. */
58
+ headless?: boolean;
59
+ }
60
+ export interface SessionMetadata {
61
+ extensionId: string | null;
62
+ browser: string | null;
63
+ profile: {
64
+ email: string;
65
+ id: string;
66
+ } | null;
67
+ }
68
+ export interface SessionInfo {
69
+ id: string;
70
+ stateKeys: string[];
71
+ extensionId: string | null;
72
+ browser: string | null;
73
+ profile: {
74
+ email: string;
75
+ id: string;
76
+ } | null;
77
+ cwd: string | null;
78
+ connected: boolean;
79
+ pageUrl: string | null;
80
+ pagesCount: number;
81
+ }
82
+ export interface CloudSessionInfo {
83
+ /** Timestamp (epoch ms) when the BU VM will hard-timeout */
84
+ timeoutAt?: number;
85
+ /** Whether proxy is enabled — when true, images/video/fonts are blocked to save bandwidth.
86
+ * Set to false via --disable-proxy-bandwidth-acceleration to allow all resources. */
87
+ blockProxyResources?: boolean;
88
+ }
89
+ export interface ExecutorOptions {
90
+ cdpConfig: CdpConfig;
91
+ sessionMetadata?: SessionMetadata;
92
+ logger?: ExecutorLogger;
93
+ /** Working directory for scoped fs access */
94
+ cwd?: string;
95
+ /** Set when this executor is connected to a cloud Browser Use VM */
96
+ cloudSession?: CloudSessionInfo;
97
+ }
98
+ /**
99
+ * Duck-type check for a Playwright ChannelOwner (Response, Page, Browser,
100
+ * Request, Frame, BrowserContext, etc.). Used to skip auto-printing these
101
+ * objects from the REPL — they're meant for programmatic use, and dumping
102
+ * them risks leaking internal fields. Users can still `console.log(obj)` to
103
+ * inspect them via the safe handler in playwright-core. See issue #82.
104
+ */
105
+ export declare function isPlaywrightChannelOwner(value: any): boolean;
106
+ export declare class PlaywrightExecutor {
107
+ private isConnected;
108
+ private page;
109
+ private browser;
110
+ private context;
111
+ private userState;
112
+ private browserLogs;
113
+ private pageLogCursor;
114
+ private lastSnapshots;
115
+ private lastRefToLocator;
116
+ private warningEvents;
117
+ private nextWarningEventId;
118
+ private lastDeliveredWarningEventId;
119
+ private activeWarningScopes;
120
+ private pagesWithListeners;
121
+ private suppressPageCloseWarnings;
122
+ private scopedFs;
123
+ private sandboxedRequire;
124
+ private cdpConfig;
125
+ private logger;
126
+ private sessionMetadata;
127
+ private sessionCwd;
128
+ private hasWarnedExtensionOutdated;
129
+ private ghostCursorController;
130
+ /** Non-null when this executor is backed by a cloud Browser Use VM */
131
+ private cloudSession;
132
+ /** Last minute bucket for which a cloud timeout warning was enqueued (dedup) */
133
+ private lastCloudTimeoutWarningMinute;
134
+ constructor(options: ExecutorOptions);
135
+ private createSandboxedRequire;
136
+ private setDeviceScaleFactorForMacOS;
137
+ /** Block images, video, and font resources via Network.setBlockedURLs to save
138
+ * residential proxy bandwidth. Single CDP command, zero per-request overhead.
139
+ * Applied per-context on every page (existing and future). */
140
+ private applyProxyResourceBlocking;
141
+ private clearUserState;
142
+ private clearConnectionState;
143
+ enqueueWarning(message: string): void;
144
+ /** Update the cloud session timeout from external tracking (relay timer). */
145
+ updateCloudTimeout(timeoutAt: number): void;
146
+ private beginWarningScope;
147
+ private flushWarningsForScope;
148
+ private pruneDeliveredWarnings;
149
+ private warnIfExtensionOutdated;
150
+ private setupPageListeners;
151
+ private setupPageCloseDetection;
152
+ private setupNewPageLogging;
153
+ private setupPageConsoleListener;
154
+ private addBrowserLog;
155
+ private pagesRelatedToPage;
156
+ private checkExtensionStatus;
157
+ private isDirectCdpMode;
158
+ private isHeadlessMode;
159
+ /**
160
+ * Connect to Chrome and set up context/page. Shared by ensureConnection and reset.
161
+ * In headless mode, launches Chrome via chromium.launch().
162
+ * In direct CDP mode, connects straight to Chrome's WebSocket.
163
+ * In extension mode, checks extension status then connects via relay.
164
+ */
165
+ private connectToBrowser;
166
+ /**
167
+ * Launch a headless Chrome via chromium.launch(). No extension, no relay CDP routing.
168
+ * Reuses an existing shared browser if one was already launched for headless mode.
169
+ * Does NOT add per-session disconnect listeners to avoid accumulation on the shared
170
+ * browser; instead, ensureConnection checks browser.isConnected() on each call.
171
+ */
172
+ private connectHeadlessBrowser;
173
+ /** Shared headless browser instance across all headless sessions.
174
+ * Uses a launch promise to prevent concurrent first-session races from
175
+ * spawning multiple browsers. The disconnect handler is registered once
176
+ * at launch time and clears both statics so the next session relaunches. */
177
+ private static _sharedHeadlessBrowser;
178
+ private static _sharedHeadlessBrowserPromise;
179
+ private static getOrLaunchHeadlessBrowser;
180
+ /** Close the headless context for this session (called on session delete). */
181
+ closeHeadlessContext(): Promise<void>;
182
+ /** Close the shared headless browser (called on relay shutdown). */
183
+ static closeSharedHeadlessBrowser(): Promise<void>;
184
+ private ensureConnection;
185
+ private getCurrentPage;
186
+ reset(): Promise<{
187
+ page: Page;
188
+ context: BrowserContext;
189
+ }>;
190
+ execute(code: string, timeout?: number, options?: ExecuteOptions): Promise<ExecuteResult>;
191
+ private ensurePageForContext;
192
+ /** Get info about current connection state */
193
+ getStatus(): {
194
+ connected: boolean;
195
+ pageUrl: string | null;
196
+ pagesCount: number;
197
+ };
198
+ /** Get keys of user-defined state */
199
+ getStateKeys(): string[];
200
+ getSessionMetadata(): SessionMetadata;
201
+ getSessionInfo({ id }: {
202
+ id: string;
203
+ }): SessionInfo;
204
+ }
205
+ /**
206
+ * Session manager for multiple executors, keyed by session ID.
207
+ */
208
+ export declare class ExecutorManager {
209
+ private executors;
210
+ private cdpConfig;
211
+ private logger;
212
+ constructor(options: {
213
+ cdpConfig: CdpConfig | ((sessionId: string) => CdpConfig);
214
+ logger?: ExecutorLogger;
215
+ });
216
+ getExecutor(options: {
217
+ sessionId: string;
218
+ cwd?: string;
219
+ sessionMetadata?: SessionMetadata;
220
+ /** Override cdpConfig for this session (e.g. direct CDP connection) */
221
+ cdpConfig?: CdpConfig;
222
+ /** Cloud session info (set when connecting to a Browser Use VM) */
223
+ cloudSession?: CloudSessionInfo;
224
+ }): PlaywrightExecutor;
225
+ deleteExecutor(sessionId: string): boolean;
226
+ getSession(sessionId: string): PlaywrightExecutor | null;
227
+ listSessions(): SessionInfo[];
228
+ }
229
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}