browxai 0.7.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 (520) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/THIRD_PARTY_NOTICES.md +45 -0
  4. package/dist/cli/chrome.d.ts +1 -0
  5. package/dist/cli/chrome.js +130 -0
  6. package/dist/cli/command-registry.d.ts +15 -0
  7. package/dist/cli/command-registry.js +35 -0
  8. package/dist/cli/doctor-plugins.d.ts +18 -0
  9. package/dist/cli/doctor-plugins.js +338 -0
  10. package/dist/cli/doctor.d.ts +9 -0
  11. package/dist/cli/doctor.js +407 -0
  12. package/dist/cli/init.d.ts +1 -0
  13. package/dist/cli/init.js +200 -0
  14. package/dist/cli/register-commands.d.ts +1 -0
  15. package/dist/cli/register-commands.js +22 -0
  16. package/dist/cli/serve.d.ts +14 -0
  17. package/dist/cli/serve.js +151 -0
  18. package/dist/cli.d.ts +3 -0
  19. package/dist/cli.js +129 -0
  20. package/dist/engine/adapters/adb.d.ts +72 -0
  21. package/dist/engine/adapters/adb.js +200 -0
  22. package/dist/engine/adapters/android-cdp.d.ts +54 -0
  23. package/dist/engine/adapters/android-cdp.js +110 -0
  24. package/dist/engine/adapters/android.engine.d.ts +1 -0
  25. package/dist/engine/adapters/android.engine.js +31 -0
  26. package/dist/engine/adapters/chromium.engine.d.ts +1 -0
  27. package/dist/engine/adapters/chromium.engine.js +44 -0
  28. package/dist/engine/adapters/firefox.engine.d.ts +1 -0
  29. package/dist/engine/adapters/firefox.engine.js +43 -0
  30. package/dist/engine/adapters/playwright-chromium.d.ts +43 -0
  31. package/dist/engine/adapters/playwright-chromium.js +56 -0
  32. package/dist/engine/adapters/playwright-firefox.d.ts +52 -0
  33. package/dist/engine/adapters/playwright-firefox.js +97 -0
  34. package/dist/engine/adapters/playwright-webkit.d.ts +40 -0
  35. package/dist/engine/adapters/playwright-webkit.js +79 -0
  36. package/dist/engine/adapters/safari/bidi-client.d.ts +46 -0
  37. package/dist/engine/adapters/safari/bidi-client.js +130 -0
  38. package/dist/engine/adapters/safari/launch.d.ts +56 -0
  39. package/dist/engine/adapters/safari/launch.js +104 -0
  40. package/dist/engine/adapters/safari/webdriver-client.d.ts +102 -0
  41. package/dist/engine/adapters/safari/webdriver-client.js +175 -0
  42. package/dist/engine/adapters/safari.engine.d.ts +1 -0
  43. package/dist/engine/adapters/safari.engine.js +52 -0
  44. package/dist/engine/adapters/safaridriver-hybrid.d.ts +56 -0
  45. package/dist/engine/adapters/safaridriver-hybrid.js +127 -0
  46. package/dist/engine/adapters/webkit.engine.d.ts +1 -0
  47. package/dist/engine/adapters/webkit.engine.js +47 -0
  48. package/dist/engine/capabilities.d.ts +53 -0
  49. package/dist/engine/capabilities.js +122 -0
  50. package/dist/engine/capability-registry.d.ts +9 -0
  51. package/dist/engine/capability-registry.js +20 -0
  52. package/dist/engine/index.d.ts +18 -0
  53. package/dist/engine/index.js +14 -0
  54. package/dist/engine/register-engines.d.ts +5 -0
  55. package/dist/engine/register-engines.js +16 -0
  56. package/dist/engine/registry.d.ts +145 -0
  57. package/dist/engine/registry.js +67 -0
  58. package/dist/engine/select.d.ts +48 -0
  59. package/dist/engine/select.js +128 -0
  60. package/dist/engine/session-cdp.d.ts +13 -0
  61. package/dist/engine/session-cdp.js +22 -0
  62. package/dist/engine/tool-gate.d.ts +19 -0
  63. package/dist/engine/tool-gate.js +226 -0
  64. package/dist/engine/types.d.ts +71 -0
  65. package/dist/engine/types.js +16 -0
  66. package/dist/helper/bridge.d.ts +48 -0
  67. package/dist/helper/bridge.js +200 -0
  68. package/dist/helper/browx-page.d.ts +1 -0
  69. package/dist/helper/browx-page.js +47 -0
  70. package/dist/helper/overlay-hide.d.ts +9 -0
  71. package/dist/helper/overlay-hide.js +49 -0
  72. package/dist/helper/stealth.d.ts +10 -0
  73. package/dist/helper/stealth.js +88 -0
  74. package/dist/index.d.ts +7 -0
  75. package/dist/index.js +15 -0
  76. package/dist/page/a11y.d.ts +81 -0
  77. package/dist/page/a11y.js +219 -0
  78. package/dist/page/action-substrate.d.ts +64 -0
  79. package/dist/page/action-substrate.js +118 -0
  80. package/dist/page/actionresult-blocks.d.ts +99 -0
  81. package/dist/page/actionresult-blocks.js +144 -0
  82. package/dist/page/actionresult-shape.d.ts +48 -0
  83. package/dist/page/actionresult-shape.js +155 -0
  84. package/dist/page/actionresult-types.d.ts +368 -0
  85. package/dist/page/actionresult-types.js +4 -0
  86. package/dist/page/actionresult.d.ts +4 -0
  87. package/dist/page/actionresult.js +299 -0
  88. package/dist/page/actions-probe.d.ts +32 -0
  89. package/dist/page/actions-probe.js +294 -0
  90. package/dist/page/actions-scroll.d.ts +40 -0
  91. package/dist/page/actions-scroll.js +53 -0
  92. package/dist/page/actions.d.ts +132 -0
  93. package/dist/page/actions.js +453 -0
  94. package/dist/page/archive-assets.d.ts +39 -0
  95. package/dist/page/archive-assets.js +187 -0
  96. package/dist/page/archive.d.ts +47 -0
  97. package/dist/page/archive.js +349 -0
  98. package/dist/page/asset-export.d.ts +122 -0
  99. package/dist/page/asset-export.js +376 -0
  100. package/dist/page/await_network.d.ts +16 -0
  101. package/dist/page/await_network.js +23 -0
  102. package/dist/page/bbox.d.ts +37 -0
  103. package/dist/page/bbox.js +115 -0
  104. package/dist/page/canvas-capture.d.ts +82 -0
  105. package/dist/page/canvas-capture.js +257 -0
  106. package/dist/page/canvas-diff.d.ts +51 -0
  107. package/dist/page/canvas-diff.js +131 -0
  108. package/dist/page/canvas-gesture.d.ts +53 -0
  109. package/dist/page/canvas-gesture.js +167 -0
  110. package/dist/page/canvas-transform.d.ts +96 -0
  111. package/dist/page/canvas-transform.js +150 -0
  112. package/dist/page/canvas.d.ts +8 -0
  113. package/dist/page/canvas.js +50 -0
  114. package/dist/page/capture-substrate.d.ts +111 -0
  115. package/dist/page/capture-substrate.js +139 -0
  116. package/dist/page/clipboard.d.ts +25 -0
  117. package/dist/page/clipboard.js +50 -0
  118. package/dist/page/clock.d.ts +36 -0
  119. package/dist/page/clock.js +167 -0
  120. package/dist/page/compose.d.ts +55 -0
  121. package/dist/page/compose.js +169 -0
  122. package/dist/page/console.d.ts +39 -0
  123. package/dist/page/console.js +73 -0
  124. package/dist/page/coverage.d.ts +97 -0
  125. package/dist/page/coverage.js +280 -0
  126. package/dist/page/dom-export.d.ts +41 -0
  127. package/dist/page/dom-export.js +193 -0
  128. package/dist/page/dom-walk.d.ts +91 -0
  129. package/dist/page/dom-walk.js +267 -0
  130. package/dist/page/dom_diff.d.ts +48 -0
  131. package/dist/page/dom_diff.js +121 -0
  132. package/dist/page/downloads.d.ts +80 -0
  133. package/dist/page/downloads.js +244 -0
  134. package/dist/page/drop-files.d.ts +78 -0
  135. package/dist/page/drop-files.js +310 -0
  136. package/dist/page/element-export-discovery.d.ts +64 -0
  137. package/dist/page/element-export-discovery.js +346 -0
  138. package/dist/page/element-export.d.ts +46 -0
  139. package/dist/page/element-export.js +251 -0
  140. package/dist/page/emulation-substrate.d.ts +53 -0
  141. package/dist/page/emulation-substrate.js +87 -0
  142. package/dist/page/emulation.d.ts +60 -0
  143. package/dist/page/emulation.js +162 -0
  144. package/dist/page/export-playwright-script.d.ts +47 -0
  145. package/dist/page/export-playwright-script.js +304 -0
  146. package/dist/page/extract-resolve.d.ts +22 -0
  147. package/dist/page/extract-resolve.js +341 -0
  148. package/dist/page/extract-schema.d.ts +20 -0
  149. package/dist/page/extract-schema.js +200 -0
  150. package/dist/page/extract-types.d.ts +127 -0
  151. package/dist/page/extract-types.js +8 -0
  152. package/dist/page/extract-warnings.d.ts +8 -0
  153. package/dist/page/extract-warnings.js +56 -0
  154. package/dist/page/extract.d.ts +9 -0
  155. package/dist/page/extract.js +174 -0
  156. package/dist/page/fill-form.d.ts +58 -0
  157. package/dist/page/fill-form.js +261 -0
  158. package/dist/page/find.d.ts +158 -0
  159. package/dist/page/find.js +470 -0
  160. package/dist/page/frames.d.ts +45 -0
  161. package/dist/page/frames.js +133 -0
  162. package/dist/page/generate-locator.d.ts +57 -0
  163. package/dist/page/generate-locator.js +136 -0
  164. package/dist/page/gestures.d.ts +128 -0
  165. package/dist/page/gestures.js +198 -0
  166. package/dist/page/har.d.ts +91 -0
  167. package/dist/page/har.js +174 -0
  168. package/dist/page/heap.d.ts +97 -0
  169. package/dist/page/heap.js +285 -0
  170. package/dist/page/inspect.d.ts +34 -0
  171. package/dist/page/inspect.js +75 -0
  172. package/dist/page/layout-thrash.d.ts +34 -0
  173. package/dist/page/layout-thrash.js +232 -0
  174. package/dist/page/learning.d.ts +21 -0
  175. package/dist/page/learning.js +84 -0
  176. package/dist/page/locator.d.ts +54 -0
  177. package/dist/page/locator.js +142 -0
  178. package/dist/page/memory-diff.d.ts +48 -0
  179. package/dist/page/memory-diff.js +105 -0
  180. package/dist/page/network-mask.d.ts +8 -0
  181. package/dist/page/network-mask.js +18 -0
  182. package/dist/page/network-playwright.d.ts +96 -0
  183. package/dist/page/network-playwright.js +353 -0
  184. package/dist/page/network-substrate-select.d.ts +18 -0
  185. package/dist/page/network-substrate-select.js +32 -0
  186. package/dist/page/network-substrate.d.ts +109 -0
  187. package/dist/page/network-substrate.js +161 -0
  188. package/dist/page/network-ws.d.ts +46 -0
  189. package/dist/page/network-ws.js +113 -0
  190. package/dist/page/network.d.ts +194 -0
  191. package/dist/page/network.js +415 -0
  192. package/dist/page/overflow-detect.d.ts +102 -0
  193. package/dist/page/overflow-detect.js +449 -0
  194. package/dist/page/pdf.d.ts +69 -0
  195. package/dist/page/pdf.js +109 -0
  196. package/dist/page/perf-audit-analysers.d.ts +40 -0
  197. package/dist/page/perf-audit-analysers.js +369 -0
  198. package/dist/page/perf-audit-runner.d.ts +20 -0
  199. package/dist/page/perf-audit-runner.js +195 -0
  200. package/dist/page/perf-audit-types.d.ts +41 -0
  201. package/dist/page/perf-audit-types.js +5 -0
  202. package/dist/page/perf-audit.d.ts +37 -0
  203. package/dist/page/perf-audit.js +377 -0
  204. package/dist/page/perf.d.ts +127 -0
  205. package/dist/page/perf.js +373 -0
  206. package/dist/page/plan.d.ts +192 -0
  207. package/dist/page/plan.js +308 -0
  208. package/dist/page/point_probe.d.ts +46 -0
  209. package/dist/page/point_probe.js +99 -0
  210. package/dist/page/recording.d.ts +67 -0
  211. package/dist/page/recording.js +172 -0
  212. package/dist/page/refs.d.ts +92 -0
  213. package/dist/page/refs.js +134 -0
  214. package/dist/page/regions.d.ts +23 -0
  215. package/dist/page/regions.js +32 -0
  216. package/dist/page/routes.d.ts +40 -0
  217. package/dist/page/routes.js +87 -0
  218. package/dist/page/safari-actions.d.ts +12 -0
  219. package/dist/page/safari-actions.js +144 -0
  220. package/dist/page/sample.d.ts +64 -0
  221. package/dist/page/sample.js +216 -0
  222. package/dist/page/screenshot-on.d.ts +51 -0
  223. package/dist/page/screenshot-on.js +150 -0
  224. package/dist/page/screenshot-save.d.ts +36 -0
  225. package/dist/page/screenshot-save.js +53 -0
  226. package/dist/page/screenshot-schedule.d.ts +50 -0
  227. package/dist/page/screenshot-schedule.js +155 -0
  228. package/dist/page/script-substrate.d.ts +32 -0
  229. package/dist/page/script-substrate.js +47 -0
  230. package/dist/page/seed-random.d.ts +45 -0
  231. package/dist/page/seed-random.js +144 -0
  232. package/dist/page/set-of-marks.d.ts +96 -0
  233. package/dist/page/set-of-marks.js +245 -0
  234. package/dist/page/shadow.d.ts +136 -0
  235. package/dist/page/shadow.js +400 -0
  236. package/dist/page/shortcut.d.ts +50 -0
  237. package/dist/page/shortcut.js +147 -0
  238. package/dist/page/snapshot-substrate-safari.d.ts +30 -0
  239. package/dist/page/snapshot-substrate-safari.js +84 -0
  240. package/dist/page/snapshot-substrate-select.d.ts +24 -0
  241. package/dist/page/snapshot-substrate-select.js +34 -0
  242. package/dist/page/snapshot-substrate.d.ts +58 -0
  243. package/dist/page/snapshot-substrate.js +135 -0
  244. package/dist/page/snapshot.d.ts +24 -0
  245. package/dist/page/snapshot.js +162 -0
  246. package/dist/page/solve-captcha.d.ts +76 -0
  247. package/dist/page/solve-captcha.js +286 -0
  248. package/dist/page/storage-substrate-types.d.ts +221 -0
  249. package/dist/page/storage-substrate-types.js +6 -0
  250. package/dist/page/storage-substrate.d.ts +215 -0
  251. package/dist/page/storage-substrate.js +280 -0
  252. package/dist/page/structural.d.ts +9 -0
  253. package/dist/page/structural.js +152 -0
  254. package/dist/page/substrate-bundle-safari.d.ts +8 -0
  255. package/dist/page/substrate-bundle-safari.js +42 -0
  256. package/dist/page/substrate-bundle.d.ts +6 -0
  257. package/dist/page/substrate-bundle.js +53 -0
  258. package/dist/page/text_search.d.ts +44 -0
  259. package/dist/page/text_search.js +90 -0
  260. package/dist/page/upload.d.ts +28 -0
  261. package/dist/page/upload.js +62 -0
  262. package/dist/page/verify.d.ts +63 -0
  263. package/dist/page/verify.js +451 -0
  264. package/dist/page/video.d.ts +115 -0
  265. package/dist/page/video.js +169 -0
  266. package/dist/page/visibility.d.ts +22 -0
  267. package/dist/page/visibility.js +94 -0
  268. package/dist/page/watch.d.ts +29 -0
  269. package/dist/page/watch.js +99 -0
  270. package/dist/page/workers.d.ts +126 -0
  271. package/dist/page/workers.js +490 -0
  272. package/dist/page/ws-interactive.d.ts +82 -0
  273. package/dist/page/ws-interactive.js +318 -0
  274. package/dist/plugin/cli.d.ts +45 -0
  275. package/dist/plugin/cli.js +496 -0
  276. package/dist/plugin/command-registry.d.ts +9 -0
  277. package/dist/plugin/command-registry.js +23 -0
  278. package/dist/plugin/depgraph.d.ts +37 -0
  279. package/dist/plugin/depgraph.js +186 -0
  280. package/dist/plugin/manifest.d.ts +182 -0
  281. package/dist/plugin/manifest.js +219 -0
  282. package/dist/plugin/package-manager.d.ts +22 -0
  283. package/dist/plugin/package-manager.js +40 -0
  284. package/dist/plugin/resolver.d.ts +85 -0
  285. package/dist/plugin/resolver.js +166 -0
  286. package/dist/plugin/runtime.d.ts +77 -0
  287. package/dist/plugin/runtime.js +402 -0
  288. package/dist/plugin/types.d.ts +113 -0
  289. package/dist/plugin/types.js +4 -0
  290. package/dist/policy/confirm.d.ts +76 -0
  291. package/dist/policy/confirm.js +162 -0
  292. package/dist/policy/origin.d.ts +17 -0
  293. package/dist/policy/origin.js +79 -0
  294. package/dist/sdk/client.d.ts +21 -0
  295. package/dist/sdk/client.js +174 -0
  296. package/dist/sdk/index.d.ts +32 -0
  297. package/dist/sdk/index.js +61 -0
  298. package/dist/sdk/plugin-types.d.ts +33 -0
  299. package/dist/sdk/plugin-types.js +22 -0
  300. package/dist/sdk/registry.d.ts +17 -0
  301. package/dist/sdk/registry.js +94 -0
  302. package/dist/sdk/socket-transport.d.ts +20 -0
  303. package/dist/sdk/socket-transport.js +90 -0
  304. package/dist/sdk/tool-types.d.ts +634 -0
  305. package/dist/sdk/tool-types.js +28 -0
  306. package/dist/sdk/transport-in-process.d.ts +21 -0
  307. package/dist/sdk/transport-in-process.js +44 -0
  308. package/dist/sdk/transport-registry.d.ts +19 -0
  309. package/dist/sdk/transport-registry.js +31 -0
  310. package/dist/sdk/transport-socket.d.ts +12 -0
  311. package/dist/sdk/transport-socket.js +77 -0
  312. package/dist/sdk/transport-stdio-child.d.ts +10 -0
  313. package/dist/sdk/transport-stdio-child.js +47 -0
  314. package/dist/sdk/transport.d.ts +10 -0
  315. package/dist/sdk/transport.js +35 -0
  316. package/dist/sdk/types.d.ts +176 -0
  317. package/dist/sdk/types.js +10 -0
  318. package/dist/server.d.ts +33 -0
  319. package/dist/server.js +327 -0
  320. package/dist/session/artifacts.d.ts +52 -0
  321. package/dist/session/artifacts.js +177 -0
  322. package/dist/session/byob-attach.d.ts +26 -0
  323. package/dist/session/byob-attach.js +187 -0
  324. package/dist/session/byob.d.ts +8 -0
  325. package/dist/session/byob.js +20 -0
  326. package/dist/session/cache-storage.d.ts +100 -0
  327. package/dist/session/cache-storage.js +166 -0
  328. package/dist/session/device-emu.d.ts +149 -0
  329. package/dist/session/device-emu.js +545 -0
  330. package/dist/session/device.d.ts +14 -0
  331. package/dist/session/device.js +44 -0
  332. package/dist/session/dialog.d.ts +62 -0
  333. package/dist/session/dialog.js +164 -0
  334. package/dist/session/emulation.d.ts +69 -0
  335. package/dist/session/emulation.js +168 -0
  336. package/dist/session/extensions.d.ts +113 -0
  337. package/dist/session/extensions.js +237 -0
  338. package/dist/session/fs-picker.d.ts +144 -0
  339. package/dist/session/fs-picker.js +666 -0
  340. package/dist/session/idb-storage.d.ts +86 -0
  341. package/dist/session/idb-storage.js +229 -0
  342. package/dist/session/incognito.d.ts +3 -0
  343. package/dist/session/incognito.js +20 -0
  344. package/dist/session/launch-options.d.ts +41 -0
  345. package/dist/session/launch-options.js +200 -0
  346. package/dist/session/managed.d.ts +3 -0
  347. package/dist/session/managed.js +16 -0
  348. package/dist/session/metrics.d.ts +45 -0
  349. package/dist/session/metrics.js +75 -0
  350. package/dist/session/notification.d.ts +122 -0
  351. package/dist/session/notification.js +426 -0
  352. package/dist/session/permission.d.ts +144 -0
  353. package/dist/session/permission.js +600 -0
  354. package/dist/session/playwright-post-wire.d.ts +8 -0
  355. package/dist/session/playwright-post-wire.js +148 -0
  356. package/dist/session/policy-buffer.d.ts +21 -0
  357. package/dist/session/policy-buffer.js +47 -0
  358. package/dist/session/profile-snapshot.d.ts +11 -0
  359. package/dist/session/profile-snapshot.js +53 -0
  360. package/dist/session/registry.d.ts +365 -0
  361. package/dist/session/registry.js +98 -0
  362. package/dist/session/safari-post-wire.d.ts +8 -0
  363. package/dist/session/safari-post-wire.js +28 -0
  364. package/dist/session/safari-session.d.ts +10 -0
  365. package/dist/session/safari-session.js +39 -0
  366. package/dist/session/storage.d.ts +148 -0
  367. package/dist/session/storage.js +350 -0
  368. package/dist/session/types.d.ts +113 -0
  369. package/dist/session/types.js +5 -0
  370. package/dist/session/wedge.d.ts +15 -0
  371. package/dist/session/wedge.js +41 -0
  372. package/dist/tools/action-core-tools.d.ts +13 -0
  373. package/dist/tools/action-core-tools.js +156 -0
  374. package/dist/tools/action-form-tools.d.ts +12 -0
  375. package/dist/tools/action-form-tools.js +179 -0
  376. package/dist/tools/action-gesture-tools.d.ts +9 -0
  377. package/dist/tools/action-gesture-tools.js +115 -0
  378. package/dist/tools/action-history-tools.d.ts +8 -0
  379. package/dist/tools/action-history-tools.js +67 -0
  380. package/dist/tools/action-tool.d.ts +42 -0
  381. package/dist/tools/action-tool.js +58 -0
  382. package/dist/tools/action-tools.d.ts +20 -0
  383. package/dist/tools/action-tools.js +28 -0
  384. package/dist/tools/batch-act-tools.d.ts +10 -0
  385. package/dist/tools/batch-act-tools.js +276 -0
  386. package/dist/tools/batch-human-tools.d.ts +8 -0
  387. package/dist/tools/batch-human-tools.js +148 -0
  388. package/dist/tools/canvas-tools.d.ts +40 -0
  389. package/dist/tools/canvas-tools.js +368 -0
  390. package/dist/tools/capture-report-diagnostics-tools.d.ts +7 -0
  391. package/dist/tools/capture-report-diagnostics-tools.js +318 -0
  392. package/dist/tools/capture-report-element-export-tools.d.ts +8 -0
  393. package/dist/tools/capture-report-element-export-tools.js +197 -0
  394. package/dist/tools/capture-report-export-tools.d.ts +8 -0
  395. package/dist/tools/capture-report-export-tools.js +246 -0
  396. package/dist/tools/capture-report-marks-tools.d.ts +9 -0
  397. package/dist/tools/capture-report-marks-tools.js +221 -0
  398. package/dist/tools/capture-report-upload-tools.d.ts +8 -0
  399. package/dist/tools/capture-report-upload-tools.js +277 -0
  400. package/dist/tools/config-approval-tools.d.ts +8 -0
  401. package/dist/tools/config-approval-tools.js +166 -0
  402. package/dist/tools/deep-coverage-tools.d.ts +8 -0
  403. package/dist/tools/deep-coverage-tools.js +325 -0
  404. package/dist/tools/deep-determinism-tools.d.ts +8 -0
  405. package/dist/tools/deep-determinism-tools.js +276 -0
  406. package/dist/tools/deep-perf-tools.d.ts +19 -0
  407. package/dist/tools/deep-perf-tools.js +324 -0
  408. package/dist/tools/device-emulation-tools.d.ts +9 -0
  409. package/dist/tools/device-emulation-tools.js +137 -0
  410. package/dist/tools/extensions-batch-tools.d.ts +18 -0
  411. package/dist/tools/extensions-batch-tools.js +24 -0
  412. package/dist/tools/extensions-rebuild.d.ts +22 -0
  413. package/dist/tools/extensions-rebuild.js +208 -0
  414. package/dist/tools/extensions-tools.d.ts +2 -0
  415. package/dist/tools/extensions-tools.js +331 -0
  416. package/dist/tools/forms-fill-tools.d.ts +8 -0
  417. package/dist/tools/forms-fill-tools.js +109 -0
  418. package/dist/tools/forms-plan-tools.d.ts +7 -0
  419. package/dist/tools/forms-plan-tools.js +159 -0
  420. package/dist/tools/forms-recording-mode-tools.d.ts +8 -0
  421. package/dist/tools/forms-recording-mode-tools.js +71 -0
  422. package/dist/tools/forms-recording-tools.d.ts +14 -0
  423. package/dist/tools/forms-recording-tools.js +22 -0
  424. package/dist/tools/forms-refs-tools.d.ts +8 -0
  425. package/dist/tools/forms-refs-tools.js +90 -0
  426. package/dist/tools/gesture-coord-tools.d.ts +8 -0
  427. package/dist/tools/gesture-coord-tools.js +168 -0
  428. package/dist/tools/gesture-emulation-tools.d.ts +8 -0
  429. package/dist/tools/gesture-emulation-tools.js +135 -0
  430. package/dist/tools/gesture-network-tools.d.ts +17 -0
  431. package/dist/tools/gesture-network-tools.js +27 -0
  432. package/dist/tools/gesture-route-tools.d.ts +8 -0
  433. package/dist/tools/gesture-route-tools.js +142 -0
  434. package/dist/tools/gesture-websocket-tools.d.ts +8 -0
  435. package/dist/tools/gesture-websocket-tools.js +122 -0
  436. package/dist/tools/gesture-worker-tools.d.ts +9 -0
  437. package/dist/tools/gesture-worker-tools.js +200 -0
  438. package/dist/tools/host-build.d.ts +76 -0
  439. package/dist/tools/host-build.js +516 -0
  440. package/dist/tools/host.d.ts +287 -0
  441. package/dist/tools/host.js +1 -0
  442. package/dist/tools/input-tools.d.ts +10 -0
  443. package/dist/tools/input-tools.js +176 -0
  444. package/dist/tools/live-emulation-tools.d.ts +9 -0
  445. package/dist/tools/live-emulation-tools.js +353 -0
  446. package/dist/tools/plugin-runtime.d.ts +36 -0
  447. package/dist/tools/plugin-runtime.js +274 -0
  448. package/dist/tools/read-observe-buffer-tools.d.ts +9 -0
  449. package/dist/tools/read-observe-buffer-tools.js +385 -0
  450. package/dist/tools/read-observe-capture-tools.d.ts +12 -0
  451. package/dist/tools/read-observe-capture-tools.js +376 -0
  452. package/dist/tools/read-observe-dom-tools.d.ts +8 -0
  453. package/dist/tools/read-observe-dom-tools.js +308 -0
  454. package/dist/tools/read-observe-extract-tools.d.ts +8 -0
  455. package/dist/tools/read-observe-extract-tools.js +232 -0
  456. package/dist/tools/read-observe-verify-tools.d.ts +8 -0
  457. package/dist/tools/read-observe-verify-tools.js +316 -0
  458. package/dist/tools/schemas.d.ts +29 -0
  459. package/dist/tools/schemas.js +58 -0
  460. package/dist/tools/secrets-captcha-tools.d.ts +9 -0
  461. package/dist/tools/secrets-captcha-tools.js +231 -0
  462. package/dist/tools/session-dialog-permission-tools.d.ts +9 -0
  463. package/dist/tools/session-dialog-permission-tools.js +287 -0
  464. package/dist/tools/session-lifecycle-tools.d.ts +8 -0
  465. package/dist/tools/session-lifecycle-tools.js +314 -0
  466. package/dist/tools/session-notification-device-tools.d.ts +9 -0
  467. package/dist/tools/session-notification-device-tools.js +156 -0
  468. package/dist/tools/session-policy-tools.d.ts +16 -0
  469. package/dist/tools/session-policy-tools.js +22 -0
  470. package/dist/tools/session-registry.d.ts +28 -0
  471. package/dist/tools/session-registry.js +427 -0
  472. package/dist/tools/storage-artifact-har-video-tools.d.ts +8 -0
  473. package/dist/tools/storage-artifact-har-video-tools.js +311 -0
  474. package/dist/tools/storage-cache-idb-tools.d.ts +8 -0
  475. package/dist/tools/storage-cache-idb-tools.js +347 -0
  476. package/dist/tools/storage-state-cookies-tools.d.ts +8 -0
  477. package/dist/tools/storage-state-cookies-tools.js +223 -0
  478. package/dist/tools/storage-tools.d.ts +17 -0
  479. package/dist/tools/storage-tools.js +25 -0
  480. package/dist/tools/storage-web-auth-tools.d.ts +10 -0
  481. package/dist/tools/storage-web-auth-tools.js +230 -0
  482. package/dist/tools/tool-metadata.d.ts +8 -0
  483. package/dist/tools/tool-metadata.js +185 -0
  484. package/dist/util/batch.d.ts +83 -0
  485. package/dist/util/batch.js +191 -0
  486. package/dist/util/capabilities.d.ts +504 -0
  487. package/dist/util/capabilities.js +254 -0
  488. package/dist/util/config-store.d.ts +103 -0
  489. package/dist/util/config-store.js +206 -0
  490. package/dist/util/config.d.ts +11 -0
  491. package/dist/util/config.js +28 -0
  492. package/dist/util/credentials.d.ts +136 -0
  493. package/dist/util/credentials.js +622 -0
  494. package/dist/util/deadline.d.ts +22 -0
  495. package/dist/util/deadline.js +62 -0
  496. package/dist/util/diagnostics.d.ts +161 -0
  497. package/dist/util/diagnostics.js +579 -0
  498. package/dist/util/egress-sanitiser.d.ts +29 -0
  499. package/dist/util/egress-sanitiser.js +52 -0
  500. package/dist/util/failure.d.ts +8 -0
  501. package/dist/util/failure.js +50 -0
  502. package/dist/util/flake-check.d.ts +109 -0
  503. package/dist/util/flake-check.js +342 -0
  504. package/dist/util/invariant.d.ts +25 -0
  505. package/dist/util/invariant.js +66 -0
  506. package/dist/util/logging.d.ts +6 -0
  507. package/dist/util/logging.js +12 -0
  508. package/dist/util/predicates.d.ts +62 -0
  509. package/dist/util/predicates.js +340 -0
  510. package/dist/util/secrets.d.ts +104 -0
  511. package/dist/util/secrets.js +219 -0
  512. package/dist/util/tokens.d.ts +6 -0
  513. package/dist/util/tokens.js +24 -0
  514. package/dist/util/url-sanitizer.d.ts +19 -0
  515. package/dist/util/url-sanitizer.js +70 -0
  516. package/dist/util/version.d.ts +2 -0
  517. package/dist/util/version.js +21 -0
  518. package/dist/util/workspace.d.ts +7 -0
  519. package/dist/util/workspace.js +22 -0
  520. package/package.json +120 -0
@@ -0,0 +1,56 @@
1
+ import type { EngineCapabilities, EngineKind } from "../types.js";
2
+ import { SafariWebDriverClient } from "./safari/webdriver-client.js";
3
+ import { SafariBidiClient } from "./safari/bidi-client.js";
4
+ import { type SafariDriverProcess, type SafariLaunchDeps } from "./safari/launch.js";
5
+ /** A live Safari session — the adapter's native return (NOT yet an `EngineSession`;
6
+ * the no-Playwright-Page seam wires that in a later increment). Owns the WebDriver
7
+ * Classic client (always) and the BiDi client (only when the experimental cap
8
+ * yielded a socket). */
9
+ export interface SafariSessionHandle {
10
+ readonly engine: EngineKind;
11
+ readonly capabilities: EngineCapabilities;
12
+ readonly sessionId: string;
13
+ /** The Classic workhorse — always present. */
14
+ readonly webDriver: SafariWebDriverClient;
15
+ /** The BiDi event/script layer — present only when BiDi negotiated (the
16
+ * experimental cap returned a real ws:// URL). Undefined ⇒ Classic-only. */
17
+ readonly bidi: SafariBidiClient | undefined;
18
+ /** Whether the bidirectional (BiDi) layer is live. */
19
+ readonly hasBidi: boolean;
20
+ close(): Promise<void>;
21
+ }
22
+ /** Raised when session creation is rejected because Safari's "Allow Remote
23
+ * Automation" is off — the most common first-run failure on a fresh host. Names
24
+ * the exact fix. */
25
+ export declare class SafariRemoteAutomationDisabledError extends Error {
26
+ constructor(detail: string);
27
+ }
28
+ /** Raised when a second session is requested while one is already live —
29
+ * safaridriver is single-session. */
30
+ export declare class SafariSessionBusyError extends Error {
31
+ constructor();
32
+ }
33
+ /** Injectable seams so the orchestration tests without a real safaridriver. */
34
+ export interface SafariAdapterDeps {
35
+ /** Launch safaridriver (defaults to the real `launchSafaridriver`). */
36
+ launch?: (deps?: SafariLaunchDeps) => Promise<SafariDriverProcess>;
37
+ launchDeps?: SafariLaunchDeps;
38
+ webDriverFactory?: (baseUrl: string) => SafariWebDriverClient;
39
+ bidiFactory?: (url: string) => SafariBidiClient;
40
+ }
41
+ export declare class SafaridriverHybridAdapter {
42
+ readonly engine: EngineKind;
43
+ readonly capabilities: EngineCapabilities;
44
+ private readonly deps;
45
+ /** The single live session (safaridriver is single-session). */
46
+ private active;
47
+ constructor(deps?: SafariAdapterDeps);
48
+ /** Launch a managed, isolated Safari automation window and create a hybrid
49
+ * Classic+BiDi session. Single-session: refuses if one is already live. */
50
+ launchManaged(): Promise<SafariSessionHandle>;
51
+ /** Attach is NOT supported: safaridriver hard-isolates automation into a clean
52
+ * ephemeral window and cannot attach to the user's live, logged-in Safari (the
53
+ * XPC surface is categorically closed to third parties). Structured
54
+ * refusal, never a vague failure. */
55
+ attach(): Promise<never>;
56
+ }
@@ -0,0 +1,127 @@
1
+ // SafaridriverHybridAdapter — the FIFTH BrowserEngine adapter and
2
+ // the FIRST non-Playwright one. It drives real Safari.app over safaridriver in
3
+ // non-BYOB isolated automation windows, hybridising two protocols (confirmed
4
+ // against a live Safari automation probe):
5
+ // - WebDriver CLASSIC (SafariWebDriverClient) — the complete workhorse:
6
+ // navigation, element find/click/sendKeys, screenshot, cookies, executeScript
7
+ // (the seam the Safari snapshot substrate ships browxai's DOM-walk through).
8
+ // - WebDriver BiDi (SafariBidiClient) — the ADDITIVE bidirectional layer, gated
9
+ // behind the vendor cap `safari:experimentalWebSocketUrl:true`: live console
10
+ // (`log.entryAdded`) + navigation-lifecycle events + multi-realm script. It is
11
+ // STRICTLY OPTIONAL — if the cap does not yield a ws:// URL the adapter runs
12
+ // Classic-only, losing only the event streams.
13
+ //
14
+ // Unlike the other four adapters this returns NO Playwright `Page` and NO CDP —
15
+ // Safari has neither. The session it yields is Safari-native (a `SafariSessionHandle`);
16
+ // the session-layer seam that lets the rest of the server consume it (the
17
+ // no-Playwright-Page contract) is a later increment. This module
18
+ // is the lifecycle + transport orchestration, fully unit-tested with mocks; the
19
+ // real IO is covered by the Safari-gated keystone.
20
+ //
21
+ // safaridriver allows ONE session at a time, so this adapter enforces single-session
22
+ // at the adapter level (a second launch while one is live is a structured refusal)
23
+ // rather than letting safaridriver fail opaquely on the second POST /session.
24
+ import { capabilitiesFor } from "../capabilities.js";
25
+ import { SafariWebDriverClient, WebDriverError } from "./safari/webdriver-client.js";
26
+ import { SafariBidiClient } from "./safari/bidi-client.js";
27
+ import { launchSafaridriver, } from "./safari/launch.js";
28
+ /** Raised when session creation is rejected because Safari's "Allow Remote
29
+ * Automation" is off — the most common first-run failure on a fresh host. Names
30
+ * the exact fix. */
31
+ export class SafariRemoteAutomationDisabledError extends Error {
32
+ constructor(detail) {
33
+ super(`safari-remote-automation-disabled: safaridriver refused the session (${detail}). ` +
34
+ 'Run `sudo safaridriver --enable` and enable Safari ▸ Develop ▸ "Allow Remote Automation".');
35
+ this.name = "SafariRemoteAutomationDisabledError";
36
+ }
37
+ }
38
+ /** Raised when a second session is requested while one is already live —
39
+ * safaridriver is single-session. */
40
+ export class SafariSessionBusyError extends Error {
41
+ constructor() {
42
+ super("safari-session-busy: safaridriver hosts ONE session at a time and a Safari session is " +
43
+ "already open. Close it before opening another.");
44
+ this.name = "SafariSessionBusyError";
45
+ }
46
+ }
47
+ export class SafaridriverHybridAdapter {
48
+ engine = "safari";
49
+ capabilities;
50
+ deps;
51
+ /** The single live session (safaridriver is single-session). */
52
+ active;
53
+ constructor(deps = {}) {
54
+ // safari always has a declaration (see capabilities.ts).
55
+ this.capabilities = capabilitiesFor("safari");
56
+ this.deps = deps;
57
+ }
58
+ /** Launch a managed, isolated Safari automation window and create a hybrid
59
+ * Classic+BiDi session. Single-session: refuses if one is already live. */
60
+ async launchManaged() {
61
+ if (this.active)
62
+ throw new SafariSessionBusyError();
63
+ const launch = this.deps.launch ?? launchSafaridriver;
64
+ const driver = await launch(this.deps.launchDeps);
65
+ const webDriver = (this.deps.webDriverFactory ?? ((baseUrl) => new SafariWebDriverClient({ baseUrl })))(driver.baseUrl);
66
+ let session;
67
+ try {
68
+ // Request BiDi (experimental cap) AND Classic — BiDi is additive; a boolean
69
+ // placeholder (cap off) simply means no ws:// URL, so we stay Classic-only.
70
+ session = await webDriver.newSession({ webSocketUrl: true, experimentalWebSocketUrl: true });
71
+ }
72
+ catch (err) {
73
+ driver.stop();
74
+ throw mapSessionError(err);
75
+ }
76
+ let bidi;
77
+ if (session.webSocketUrl) {
78
+ const client = (this.deps.bidiFactory ?? ((url) => new SafariBidiClient({ url })))(session.webSocketUrl);
79
+ try {
80
+ await client.connect();
81
+ bidi = client;
82
+ }
83
+ catch {
84
+ // BiDi is optional — a failed connect degrades to Classic-only, never
85
+ // fails the session.
86
+ bidi = undefined;
87
+ }
88
+ }
89
+ const handle = {
90
+ engine: this.engine,
91
+ capabilities: this.capabilities,
92
+ sessionId: session.sessionId,
93
+ webDriver,
94
+ bidi,
95
+ hasBidi: bidi !== undefined,
96
+ close: async () => {
97
+ bidi?.close();
98
+ await webDriver.deleteSession(session.sessionId).catch(() => undefined);
99
+ driver.stop();
100
+ this.active = undefined;
101
+ },
102
+ };
103
+ this.active = handle;
104
+ return handle;
105
+ }
106
+ /** Attach is NOT supported: safaridriver hard-isolates automation into a clean
107
+ * ephemeral window and cannot attach to the user's live, logged-in Safari (the
108
+ * XPC surface is categorically closed to third parties). Structured
109
+ * refusal, never a vague failure. */
110
+ attach() {
111
+ return Promise.reject(new Error("safari-attach-not-supported: real Safari automation is non-BYOB by construction — " +
112
+ "safaridriver hard-isolates each session into a clean ephemeral automation window (no " +
113
+ "cookies/localStorage/Keychain/history from the real profile), and the webinspectord XPC " +
114
+ "surface that would allow attach is closed to third parties. Use a managed session."));
115
+ }
116
+ }
117
+ /** Map a session-create failure to a structured, actionable error. safaridriver
118
+ * signals "Allow Remote Automation" being off as a `session not created`. */
119
+ function mapSessionError(err) {
120
+ if (err instanceof WebDriverError) {
121
+ if (err.code === "session not created" || /automation/i.test(err.message)) {
122
+ return new SafariRemoteAutomationDisabledError(err.message || err.code);
123
+ }
124
+ return err;
125
+ }
126
+ return err instanceof Error ? err : new Error(String(err));
127
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ // WebKit engine registration (RFC 0004 D1). Registers the one `EngineEntry` for
2
+ // the webkit engine (Playwright's bundled WebKit build — the WebKit-ENGINE
3
+ // correctness lane, NOT Safari). No adapter logic moves: launch stays in
4
+ // `PlaywrightWebKitAdapter`; the substrate bundle is the shared Playwright one
5
+ // (WebKit has a Page, no CDP → page-side snapshot walker + Playwright network
6
+ // substrate); the post-wire is the full Playwright set. BYOB attach surfaces the
7
+ // adapter's structured `webkit-attach-not-supported`.
8
+ import { registerEngine } from "../registry.js";
9
+ import { capabilitiesFor } from "../capabilities.js";
10
+ import { PlaywrightWebKitAdapter } from "./playwright-webkit.js";
11
+ import { playwrightSubstrateBundle } from "../../page/substrate-bundle.js";
12
+ import { playwrightPostWire } from "../../session/playwright-post-wire.js";
13
+ import { buildManagedLaunch, buildIncognitoContextOptions, finalizeManagedSession, finalizeIncognitoSession, } from "../../session/launch-options.js";
14
+ import { assertByobAttach } from "../../session/byob-attach.js";
15
+ async function makeWebKitAdapter(opts) {
16
+ const mode = opts.launchMode ?? "managed";
17
+ if (mode === "byob") {
18
+ // Playwright's WebKit build has no CDP/BiDi attach client, and real Safari
19
+ // attach is impossible regardless. Surface the structured
20
+ // `webkit-attach-not-supported` error (no silent fail).
21
+ const url = assertByobAttach(opts);
22
+ await new PlaywrightWebKitAdapter().attach(url);
23
+ throw new Error("unreachable: webkit attach always refuses");
24
+ }
25
+ if (mode === "incognito") {
26
+ const adapter = new PlaywrightWebKitAdapter();
27
+ const { browser, context, page } = await adapter.launchEphemeral({
28
+ launchOptions: { headless: !!opts.headless },
29
+ contextOptions: buildIncognitoContextOptions(opts),
30
+ });
31
+ return finalizeIncognitoSession("webkit", { browser, context, page });
32
+ }
33
+ // WebKit DOES support launchPersistentContext (measured), so managed mode is
34
+ // real. The chromium-only `args` splice never reaches it (the adapter takes
35
+ // only the shared options).
36
+ const { profileDir, options } = buildManagedLaunch("webkit", opts);
37
+ const adapter = new PlaywrightWebKitAdapter();
38
+ const { context, page } = await adapter.launchPersistent({ profileDir, options });
39
+ return finalizeManagedSession("webkit", opts, profileDir, { context, page });
40
+ }
41
+ registerEngine({
42
+ kind: "webkit",
43
+ capabilities: capabilitiesFor("webkit"),
44
+ makeAdapter: makeWebKitAdapter,
45
+ makeSubstrates: (deps) => playwrightSubstrateBundle(deps),
46
+ postWire: (entry, deps) => playwrightPostWire(entry, deps),
47
+ });
@@ -0,0 +1,53 @@
1
+ import type { EngineCapabilities, EngineKind } from "./types.js";
2
+ /** Chromium supports the whole port surface, including the CDP escape hatch.
3
+ * Declaring everything is what makes the chromium path byte-identical: the
4
+ * engine dimension is present but gates nothing. */
5
+ export declare const CHROMIUM_CAPABILITIES: EngineCapabilities;
6
+ /** Firefox (Playwright's bundled Juggler build, the default cross-browser lane).
7
+ * It serves the same cross-browser sub-interfaces as Chromium — Playwright
8
+ * abstracts navigation, input, storage, script, emulation, capture, and the
9
+ * snapshot / network substrates (the latter two move onto Playwright-portable
10
+ * mechanisms) — but exposes NO `deep` (raw-CDP) escape hatch. `deep: false` is what
11
+ * the engine gate keys on to refuse the ~19 CDP-hard tools (perf / coverage /
12
+ * heap / CPU throttle / SW interception / extensions / pdf) with a hint. */
13
+ export declare const FIREFOX_CAPABILITIES: EngineCapabilities;
14
+ /** WebKit (Playwright's bundled WebKit build — the WebKit-ENGINE correctness lane,
15
+ * NOT Safari). It serves the same nine cross-browser sub-interfaces
16
+ * as Chromium/Firefox (Playwright abstracts navigation, input, storage, script,
17
+ * emulation, capture, and the snapshot substrate — the page-side walker serves
18
+ * WebKit just as it serves Firefox; the network substrate ports onto Playwright
19
+ * events) — but exposes NO `deep` (raw-CDP) escape hatch. WebKit has no
20
+ * CDP at all (measured: `newCDPSession` throws "CDP session is only available in
21
+ * Chromium"), so `deep: false` is what the CAPABILITY-based engine gate keys on
22
+ * to refuse the ~26 CDP-deep tools with a hint — no per-engine gate edit. */
23
+ export declare const WEBKIT_CAPABILITIES: EngineCapabilities;
24
+ /** Android (real Chrome-on-Android attached over adb + CDP). The
25
+ * STANDOUT among the non-chromium engines: Android Chrome speaks FULL CDP, so
26
+ * this engine exposes the `deep` (raw-CDP) escape hatch just like desktop
27
+ * Chromium — `deep: true`. That single fact is why Android needs NO new
28
+ * substrate: the CDP capability signal routes it through the EXISTING
29
+ * `CdpSnapshotSubstrate` + `CdpNetworkSubstrate` (via `snapshotSubstrateFor` /
30
+ * `networkSubstrateFor`, which key on CDP presence), and the capability-based
31
+ * engine gate auto-ALLOWS every tool (it refuses only on `deep: false`). So
32
+ * unlike firefox/webkit, EVERYTHING works on Android — the CDP-deep tools too
33
+ * (perf / coverage / heap / cpu / clock / CDP input dispatch / closed-shadow).
34
+ * The only Android-specific limits are launch-shape, not capability: managed /
35
+ * ephemeral launch isn't a thing on a phone (the adapter's launch path returns
36
+ * a structured `android-launch-not-supported` — Android is attach-only). */
37
+ export declare const ANDROID_CAPABILITIES: EngineCapabilities;
38
+ /** Safari (real Safari.app over safaridriver, the FIRST non-Playwright,
39
+ * non-CDP engine). A curated SUBSET, not the full port:
40
+ * Classic owns input/capture(screenshot)/cookies + navigation + exec; experimental
41
+ * BiDi owns script + browsingContext nav/lifecycle/viewport + the console/nav
42
+ * events. NETWORK is omitted entirely — Safari has no protocol-level network tap
43
+ * or interception at all (worse than firefox/webkit, which get the Playwright-event
44
+ * substrate), so the network tools must REFUSE on Safari, not skip. EMULATION is
45
+ * omitted too — only `browsingContext.setViewport` works; the rest of the emulation
46
+ * surface (geolocation/locale/timezone/UA/network-conditions/CPU/clock) is absent,
47
+ * so it gates uniformly. `deep: false` (no CDP) gates the ~26 CDP-deep tools via the
48
+ * existing caps.deep gate with no per-engine edit. */
49
+ export declare const SAFARI_CAPABILITIES: EngineCapabilities;
50
+ /** The capability declaration for an engine. Chromium + Firefox + WebKit +
51
+ * Android all have declarations; the partial map keeps room
52
+ * for engines whose adapter hasn't landed yet (returns undefined for those). */
53
+ export declare function capabilitiesFor(engine: EngineKind): EngineCapabilities | undefined;
@@ -0,0 +1,122 @@
1
+ // Per-engine capability declarations — the ENGINE dimension that composes with
2
+ // the per-tool capability system in util/capabilities.ts. An adapter declares
3
+ // which port sub-interfaces it implements and whether it exposes the `Deep`
4
+ // (raw-CDP) escape hatch; the per-tool gate consults this to refuse a CDP-hard
5
+ // tool on an engine that can't run it.
6
+ //
7
+ // Chromium declares EVERYTHING — every sub-interface plus `deep` — so no tool
8
+ // is newly gated; that is what makes the chromium path byte-identical.
9
+ // Firefox declares the cross-browser sub-interfaces but `deep: false`: the
10
+ // Juggler build over Playwright has no raw-CDP escape hatch (`newCDPSession`
11
+ // throws on Firefox — measured), so the ~19 CDP-hard tools
12
+ // structured-refuse on it. WebKit is the same shape — all nine cross-
13
+ // browser sub-interfaces, `deep: false` (WebKit has no CDP at all — measured:
14
+ // `newCDPSession` throws "CDP session is only available in Chromium"). Android
15
+ // is the standout: it IS Chromium (attached over adb + CDP), so it declares
16
+ // `deep: true` like desktop Chromium — every tool, including the CDP-deep ones,
17
+ // works, and no new substrate is needed (the CDP substrates serve it verbatim).
18
+ // The full Playwright-backed sub-interface set — every cross-browser
19
+ // sub-interface PLUS `page` (RFC 0004 D5: chromium / firefox / webkit / android
20
+ // all back a real Playwright `Page`). Safari declares its own subset below and
21
+ // omits `page` (no-Playwright-Page), which is what its post-wire keys off.
22
+ const ALL_SUB_INTERFACES = [
23
+ "lifecycle",
24
+ "navigation",
25
+ "snapshot",
26
+ "input",
27
+ "network",
28
+ "storage",
29
+ "script",
30
+ "emulation",
31
+ "capture",
32
+ "page",
33
+ ];
34
+ /** Chromium supports the whole port surface, including the CDP escape hatch.
35
+ * Declaring everything is what makes the chromium path byte-identical: the
36
+ * engine dimension is present but gates nothing. */
37
+ export const CHROMIUM_CAPABILITIES = {
38
+ engine: "chromium",
39
+ subInterfaces: new Set(ALL_SUB_INTERFACES),
40
+ deep: true,
41
+ };
42
+ /** Firefox (Playwright's bundled Juggler build, the default cross-browser lane).
43
+ * It serves the same cross-browser sub-interfaces as Chromium — Playwright
44
+ * abstracts navigation, input, storage, script, emulation, capture, and the
45
+ * snapshot / network substrates (the latter two move onto Playwright-portable
46
+ * mechanisms) — but exposes NO `deep` (raw-CDP) escape hatch. `deep: false` is what
47
+ * the engine gate keys on to refuse the ~19 CDP-hard tools (perf / coverage /
48
+ * heap / CPU throttle / SW interception / extensions / pdf) with a hint. */
49
+ export const FIREFOX_CAPABILITIES = {
50
+ engine: "firefox",
51
+ subInterfaces: new Set(ALL_SUB_INTERFACES),
52
+ deep: false,
53
+ };
54
+ /** WebKit (Playwright's bundled WebKit build — the WebKit-ENGINE correctness lane,
55
+ * NOT Safari). It serves the same nine cross-browser sub-interfaces
56
+ * as Chromium/Firefox (Playwright abstracts navigation, input, storage, script,
57
+ * emulation, capture, and the snapshot substrate — the page-side walker serves
58
+ * WebKit just as it serves Firefox; the network substrate ports onto Playwright
59
+ * events) — but exposes NO `deep` (raw-CDP) escape hatch. WebKit has no
60
+ * CDP at all (measured: `newCDPSession` throws "CDP session is only available in
61
+ * Chromium"), so `deep: false` is what the CAPABILITY-based engine gate keys on
62
+ * to refuse the ~26 CDP-deep tools with a hint — no per-engine gate edit. */
63
+ export const WEBKIT_CAPABILITIES = {
64
+ engine: "webkit",
65
+ subInterfaces: new Set(ALL_SUB_INTERFACES),
66
+ deep: false,
67
+ };
68
+ /** Android (real Chrome-on-Android attached over adb + CDP). The
69
+ * STANDOUT among the non-chromium engines: Android Chrome speaks FULL CDP, so
70
+ * this engine exposes the `deep` (raw-CDP) escape hatch just like desktop
71
+ * Chromium — `deep: true`. That single fact is why Android needs NO new
72
+ * substrate: the CDP capability signal routes it through the EXISTING
73
+ * `CdpSnapshotSubstrate` + `CdpNetworkSubstrate` (via `snapshotSubstrateFor` /
74
+ * `networkSubstrateFor`, which key on CDP presence), and the capability-based
75
+ * engine gate auto-ALLOWS every tool (it refuses only on `deep: false`). So
76
+ * unlike firefox/webkit, EVERYTHING works on Android — the CDP-deep tools too
77
+ * (perf / coverage / heap / cpu / clock / CDP input dispatch / closed-shadow).
78
+ * The only Android-specific limits are launch-shape, not capability: managed /
79
+ * ephemeral launch isn't a thing on a phone (the adapter's launch path returns
80
+ * a structured `android-launch-not-supported` — Android is attach-only). */
81
+ export const ANDROID_CAPABILITIES = {
82
+ engine: "android",
83
+ subInterfaces: new Set(ALL_SUB_INTERFACES),
84
+ deep: true,
85
+ };
86
+ /** Safari (real Safari.app over safaridriver, the FIRST non-Playwright,
87
+ * non-CDP engine). A curated SUBSET, not the full port:
88
+ * Classic owns input/capture(screenshot)/cookies + navigation + exec; experimental
89
+ * BiDi owns script + browsingContext nav/lifecycle/viewport + the console/nav
90
+ * events. NETWORK is omitted entirely — Safari has no protocol-level network tap
91
+ * or interception at all (worse than firefox/webkit, which get the Playwright-event
92
+ * substrate), so the network tools must REFUSE on Safari, not skip. EMULATION is
93
+ * omitted too — only `browsingContext.setViewport` works; the rest of the emulation
94
+ * surface (geolocation/locale/timezone/UA/network-conditions/CPU/clock) is absent,
95
+ * so it gates uniformly. `deep: false` (no CDP) gates the ~26 CDP-deep tools via the
96
+ * existing caps.deep gate with no per-engine edit. */
97
+ export const SAFARI_CAPABILITIES = {
98
+ engine: "safari",
99
+ subInterfaces: new Set([
100
+ "lifecycle",
101
+ "navigation",
102
+ "snapshot",
103
+ "input",
104
+ "storage",
105
+ "script",
106
+ "capture",
107
+ ]),
108
+ deep: false,
109
+ };
110
+ const DECLARATIONS = {
111
+ chromium: CHROMIUM_CAPABILITIES,
112
+ firefox: FIREFOX_CAPABILITIES,
113
+ webkit: WEBKIT_CAPABILITIES,
114
+ android: ANDROID_CAPABILITIES,
115
+ safari: SAFARI_CAPABILITIES,
116
+ };
117
+ /** The capability declaration for an engine. Chromium + Firefox + WebKit +
118
+ * Android all have declarations; the partial map keeps room
119
+ * for engines whose adapter hasn't landed yet (returns undefined for those). */
120
+ export function capabilitiesFor(engine) {
121
+ return DECLARATIONS[engine];
122
+ }
@@ -0,0 +1,9 @@
1
+ import type { EngineKind, EngineCapabilities } from "./types.js";
2
+ /** Record an engine's declared capabilities. Called by `registerEngine`. */
3
+ export declare function setEngineCapabilities(kind: EngineKind, caps: EngineCapabilities): void;
4
+ /** Non-throwing capability lookup — `undefined` when the engine has not
5
+ * registered. The engine gate consults this so the registry's capability record
6
+ * is the source of truth (RFC 0004 P1), which is what gates a runtime-only
7
+ * engine (the synthetic contract-test engine) correctly without a per-engine edit
8
+ * to capabilities.ts or tool-gate.ts. */
9
+ export declare function engineCapabilities(kind: EngineKind): EngineCapabilities | undefined;
@@ -0,0 +1,20 @@
1
+ // A minimal engine→capabilities side-table, decoupled from the full EngineRegistry
2
+ // so the engine gate (`tool-gate.ts`) can read an engine's declared capabilities
3
+ // WITHOUT importing `registry.ts` (which pulls in the substrate-port types and would
4
+ // form an import cycle tool-gate → registry → page/*-substrate → engine/index →
5
+ // tool-gate). This module imports only the capability TYPES, so it sits cleanly
6
+ // beneath both the registry (which writes it on `registerEngine`) and the gate
7
+ // (which reads it).
8
+ const CAPS = new Map();
9
+ /** Record an engine's declared capabilities. Called by `registerEngine`. */
10
+ export function setEngineCapabilities(kind, caps) {
11
+ CAPS.set(kind, caps);
12
+ }
13
+ /** Non-throwing capability lookup — `undefined` when the engine has not
14
+ * registered. The engine gate consults this so the registry's capability record
15
+ * is the source of truth (RFC 0004 P1), which is what gates a runtime-only
16
+ * engine (the synthetic contract-test engine) correctly without a per-engine edit
17
+ * to capabilities.ts or tool-gate.ts. */
18
+ export function engineCapabilities(kind) {
19
+ return CAPS.get(kind);
20
+ }
@@ -0,0 +1,18 @@
1
+ export type { EngineKind, EngineCapabilities, EngineSession, EngineSubInterface, EngineLaunchHandles, } from "./types.js";
2
+ export { ENGINE_KINDS } from "./types.js";
3
+ export { resolveBrowserType, EngineNotYetSupportedError, IMPLEMENTED_ENGINES, UnknownEngineError, validateEngine, resolveEngineSelection, } from "./select.js";
4
+ export { capabilitiesFor, CHROMIUM_CAPABILITIES, FIREFOX_CAPABILITIES, WEBKIT_CAPABILITIES, ANDROID_CAPABILITIES, SAFARI_CAPABILITIES, } from "./capabilities.js";
5
+ export { requireCdp, type CdpCapable } from "./session-cdp.js";
6
+ export { assertEngineSupports, DEEP_TOOLS, type EngineRefusal } from "./tool-gate.js";
7
+ export { PlaywrightChromiumAdapter } from "./adapters/playwright-chromium.js";
8
+ export type { PersistentLaunchSpec, EphemeralLaunchSpec } from "./adapters/playwright-chromium.js";
9
+ export { PlaywrightFirefoxAdapter, firefoxChannelFromEnv, MOZ_FIREFOX_CHANNEL, } from "./adapters/playwright-firefox.js";
10
+ export type { FirefoxPersistentLaunchSpec, FirefoxEphemeralLaunchSpec, } from "./adapters/playwright-firefox.js";
11
+ export { PlaywrightWebKitAdapter } from "./adapters/playwright-webkit.js";
12
+ export type { WebKitPersistentLaunchSpec, WebKitEphemeralLaunchSpec, } from "./adapters/playwright-webkit.js";
13
+ export { AndroidCdpAdapter } from "./adapters/android-cdp.js";
14
+ export type { AndroidAttachHandles, AndroidAdapterDeps } from "./adapters/android-cdp.js";
15
+ export { SafaridriverHybridAdapter, SafariSessionBusyError, SafariRemoteAutomationDisabledError, } from "./adapters/safaridriver-hybrid.js";
16
+ export type { SafariSessionHandle, SafariAdapterDeps } from "./adapters/safaridriver-hybrid.js";
17
+ export { CHROME_ANDROID_SOCKET, AdbNotInstalledError, NoAndroidDeviceError, ChromeSocketUnreachableError, devicesArgs, forwardArgs, forwardRemoveArgs, parseDevices, selectDevice, devToolsBaseUrl, versionUrl, extractWsUrl, pickFreePort, defaultAdbRunner, defaultFetcher, } from "./adapters/adb.js";
18
+ export type { AdbDevice, AdbRunner, Fetcher } from "./adapters/adb.js";
@@ -0,0 +1,14 @@
1
+ // The engine port — public surface of src/engine/. The session layer imports
2
+ // from here; tools never reach past the session into an adapter or Playwright
3
+ // directly. See docs/ai-context/architecture/engine-adapters.md.
4
+ export { ENGINE_KINDS } from "./types.js";
5
+ export { resolveBrowserType, EngineNotYetSupportedError, IMPLEMENTED_ENGINES, UnknownEngineError, validateEngine, resolveEngineSelection, } from "./select.js";
6
+ export { capabilitiesFor, CHROMIUM_CAPABILITIES, FIREFOX_CAPABILITIES, WEBKIT_CAPABILITIES, ANDROID_CAPABILITIES, SAFARI_CAPABILITIES, } from "./capabilities.js";
7
+ export { requireCdp } from "./session-cdp.js";
8
+ export { assertEngineSupports, DEEP_TOOLS } from "./tool-gate.js";
9
+ export { PlaywrightChromiumAdapter } from "./adapters/playwright-chromium.js";
10
+ export { PlaywrightFirefoxAdapter, firefoxChannelFromEnv, MOZ_FIREFOX_CHANNEL, } from "./adapters/playwright-firefox.js";
11
+ export { PlaywrightWebKitAdapter } from "./adapters/playwright-webkit.js";
12
+ export { AndroidCdpAdapter } from "./adapters/android-cdp.js";
13
+ export { SafaridriverHybridAdapter, SafariSessionBusyError, SafariRemoteAutomationDisabledError, } from "./adapters/safaridriver-hybrid.js";
14
+ export { CHROME_ANDROID_SOCKET, AdbNotInstalledError, NoAndroidDeviceError, ChromeSocketUnreachableError, devicesArgs, forwardArgs, forwardRemoveArgs, parseDevices, selectDevice, devToolsBaseUrl, versionUrl, extractWsUrl, pickFreePort, defaultAdbRunner, defaultFetcher, } from "./adapters/adb.js";
@@ -0,0 +1,5 @@
1
+ import "./adapters/chromium.engine.js";
2
+ import "./adapters/firefox.engine.js";
3
+ import "./adapters/webkit.engine.js";
4
+ import "./adapters/android.engine.js";
5
+ import "./adapters/safari.engine.js";
@@ -0,0 +1,16 @@
1
+ // The engine-registration barrel (RFC 0004 D1). Importing this module runs every
2
+ // engine's `registerEngine(...)` call exactly once, populating the EngineRegistry.
3
+ // The composition root (createServer / the session factories) imports it for its
4
+ // side effect so the registry is fully populated before any session opens.
5
+ //
6
+ // Adding a sixth engine = one new `adapters/<engine>.engine.ts` module + one line
7
+ // here. No edit to any session factory, the session registry, or host-build —
8
+ // which is the open-closed claim the ocp-engine-contract keystone proves.
9
+ //
10
+ // Each import is side-effect-only (the module body calls registerEngine at load);
11
+ // `import "./…"` form makes that explicit and keeps the barrel a pure wiring point.
12
+ import "./adapters/chromium.engine.js";
13
+ import "./adapters/firefox.engine.js";
14
+ import "./adapters/webkit.engine.js";
15
+ import "./adapters/android.engine.js";
16
+ import "./adapters/safari.engine.js";