openchrome-mcp 1.0.2

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 (396) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +180 -0
  3. package/assets/demo.svg +278 -0
  4. package/assets/mascot.png +0 -0
  5. package/dist/cdp/client.d.ts +219 -0
  6. package/dist/cdp/client.d.ts.map +1 -0
  7. package/dist/cdp/client.js +804 -0
  8. package/dist/cdp/client.js.map +1 -0
  9. package/dist/cdp/connection-pool.d.ts +116 -0
  10. package/dist/cdp/connection-pool.d.ts.map +1 -0
  11. package/dist/cdp/connection-pool.js +393 -0
  12. package/dist/cdp/connection-pool.js.map +1 -0
  13. package/dist/cdp/screenshot-scheduler.d.ts +54 -0
  14. package/dist/cdp/screenshot-scheduler.d.ts.map +1 -0
  15. package/dist/cdp/screenshot-scheduler.js +87 -0
  16. package/dist/cdp/screenshot-scheduler.js.map +1 -0
  17. package/dist/chrome/launcher.d.ts +68 -0
  18. package/dist/chrome/launcher.d.ts.map +1 -0
  19. package/dist/chrome/launcher.js +523 -0
  20. package/dist/chrome/launcher.js.map +1 -0
  21. package/dist/chrome/pool.d.ts +54 -0
  22. package/dist/chrome/pool.d.ts.map +1 -0
  23. package/dist/chrome/pool.js +301 -0
  24. package/dist/chrome/pool.js.map +1 -0
  25. package/dist/chrome/profile-detector.d.ts +52 -0
  26. package/dist/chrome/profile-detector.d.ts.map +1 -0
  27. package/dist/chrome/profile-detector.js +246 -0
  28. package/dist/chrome/profile-detector.js.map +1 -0
  29. package/dist/cli/claude-session.d.ts +11 -0
  30. package/dist/cli/claude-session.js +349 -0
  31. package/dist/cli/claude-session.js.map +1 -0
  32. package/dist/cli/index.d.ts +14 -0
  33. package/dist/cli/index.js +858 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/cli/install.d.ts +16 -0
  36. package/dist/cli/install.js +185 -0
  37. package/dist/cli/install.js.map +1 -0
  38. package/dist/cli/uninstall.d.ts +7 -0
  39. package/dist/cli/uninstall.js +126 -0
  40. package/dist/cli/uninstall.js.map +1 -0
  41. package/dist/cli/update-check.d.ts +9 -0
  42. package/dist/cli/update-check.js +141 -0
  43. package/dist/cli/update-check.js.map +1 -0
  44. package/dist/config/config-recovery.d.ts +69 -0
  45. package/dist/config/config-recovery.d.ts.map +1 -0
  46. package/dist/config/config-recovery.js +302 -0
  47. package/dist/config/config-recovery.js.map +1 -0
  48. package/dist/config/global.d.ts +51 -0
  49. package/dist/config/global.d.ts.map +1 -0
  50. package/dist/config/global.js +24 -0
  51. package/dist/config/global.js.map +1 -0
  52. package/dist/config/index.d.ts +7 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +23 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/config/session-isolator.d.ts +76 -0
  57. package/dist/config/session-isolator.d.ts.map +1 -0
  58. package/dist/config/session-isolator.js +268 -0
  59. package/dist/config/session-isolator.js.map +1 -0
  60. package/dist/dashboard/activity-tracker.d.ts +76 -0
  61. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  62. package/dist/dashboard/activity-tracker.js +219 -0
  63. package/dist/dashboard/activity-tracker.js.map +1 -0
  64. package/dist/dashboard/ansi.d.ts +117 -0
  65. package/dist/dashboard/ansi.d.ts.map +1 -0
  66. package/dist/dashboard/ansi.js +199 -0
  67. package/dist/dashboard/ansi.js.map +1 -0
  68. package/dist/dashboard/index.d.ts +110 -0
  69. package/dist/dashboard/index.d.ts.map +1 -0
  70. package/dist/dashboard/index.js +412 -0
  71. package/dist/dashboard/index.js.map +1 -0
  72. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  73. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  74. package/dist/dashboard/keyboard-handler.js +230 -0
  75. package/dist/dashboard/keyboard-handler.js.map +1 -0
  76. package/dist/dashboard/operation-controller.d.ts +76 -0
  77. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  78. package/dist/dashboard/operation-controller.js +167 -0
  79. package/dist/dashboard/operation-controller.js.map +1 -0
  80. package/dist/dashboard/renderer.d.ts +76 -0
  81. package/dist/dashboard/renderer.d.ts.map +1 -0
  82. package/dist/dashboard/renderer.js +193 -0
  83. package/dist/dashboard/renderer.js.map +1 -0
  84. package/dist/dashboard/types.d.ts +56 -0
  85. package/dist/dashboard/types.d.ts.map +1 -0
  86. package/dist/dashboard/types.js +12 -0
  87. package/dist/dashboard/types.js.map +1 -0
  88. package/dist/dashboard/views/main-view.d.ts +23 -0
  89. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  90. package/dist/dashboard/views/main-view.js +143 -0
  91. package/dist/dashboard/views/main-view.js.map +1 -0
  92. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  93. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  94. package/dist/dashboard/views/sessions-view.js +104 -0
  95. package/dist/dashboard/views/sessions-view.js.map +1 -0
  96. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  97. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  98. package/dist/dashboard/views/tabs-view.js +92 -0
  99. package/dist/dashboard/views/tabs-view.js.map +1 -0
  100. package/dist/hints/hint-engine.d.ts +77 -0
  101. package/dist/hints/hint-engine.d.ts.map +1 -0
  102. package/dist/hints/hint-engine.js +191 -0
  103. package/dist/hints/hint-engine.js.map +1 -0
  104. package/dist/hints/index.d.ts +8 -0
  105. package/dist/hints/index.d.ts.map +1 -0
  106. package/dist/hints/index.js +11 -0
  107. package/dist/hints/index.js.map +1 -0
  108. package/dist/hints/pattern-learner.d.ts +76 -0
  109. package/dist/hints/pattern-learner.d.ts.map +1 -0
  110. package/dist/hints/pattern-learner.js +254 -0
  111. package/dist/hints/pattern-learner.js.map +1 -0
  112. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  113. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  114. package/dist/hints/rules/composite-suggestions.js +66 -0
  115. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  116. package/dist/hints/rules/error-recovery.d.ts +7 -0
  117. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  118. package/dist/hints/rules/error-recovery.js +55 -0
  119. package/dist/hints/rules/error-recovery.js.map +1 -0
  120. package/dist/hints/rules/learned-rules.d.ts +13 -0
  121. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  122. package/dist/hints/rules/learned-rules.js +27 -0
  123. package/dist/hints/rules/learned-rules.js.map +1 -0
  124. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  125. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  126. package/dist/hints/rules/repetition-detection.js +82 -0
  127. package/dist/hints/rules/repetition-detection.js.map +1 -0
  128. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  129. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  130. package/dist/hints/rules/sequence-detection.js +89 -0
  131. package/dist/hints/rules/sequence-detection.js.map +1 -0
  132. package/dist/hints/rules/success-hints.d.ts +6 -0
  133. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  134. package/dist/hints/rules/success-hints.js +62 -0
  135. package/dist/hints/rules/success-hints.js.map +1 -0
  136. package/dist/index.d.ts +10 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +278 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/lightpanda/launcher.d.ts +58 -0
  141. package/dist/lightpanda/launcher.d.ts.map +1 -0
  142. package/dist/lightpanda/launcher.js +210 -0
  143. package/dist/lightpanda/launcher.js.map +1 -0
  144. package/dist/mcp-server.d.ts +129 -0
  145. package/dist/mcp-server.d.ts.map +1 -0
  146. package/dist/mcp-server.js +641 -0
  147. package/dist/mcp-server.js.map +1 -0
  148. package/dist/memory/domain-memory.d.ts +68 -0
  149. package/dist/memory/domain-memory.d.ts.map +1 -0
  150. package/dist/memory/domain-memory.js +228 -0
  151. package/dist/memory/domain-memory.js.map +1 -0
  152. package/dist/orchestration/plan-executor.d.ts +19 -0
  153. package/dist/orchestration/plan-executor.d.ts.map +1 -0
  154. package/dist/orchestration/plan-executor.js +284 -0
  155. package/dist/orchestration/plan-executor.js.map +1 -0
  156. package/dist/orchestration/plan-registry.d.ts +55 -0
  157. package/dist/orchestration/plan-registry.d.ts.map +1 -0
  158. package/dist/orchestration/plan-registry.js +255 -0
  159. package/dist/orchestration/plan-registry.js.map +1 -0
  160. package/dist/orchestration/state-manager.d.ts +127 -0
  161. package/dist/orchestration/state-manager.d.ts.map +1 -0
  162. package/dist/orchestration/state-manager.js +438 -0
  163. package/dist/orchestration/state-manager.js.map +1 -0
  164. package/dist/orchestration/workflow-engine.d.ts +162 -0
  165. package/dist/orchestration/workflow-engine.d.ts.map +1 -0
  166. package/dist/orchestration/workflow-engine.js +745 -0
  167. package/dist/orchestration/workflow-engine.js.map +1 -0
  168. package/dist/resources/usage-guide.d.ts +13 -0
  169. package/dist/resources/usage-guide.d.ts.map +1 -0
  170. package/dist/resources/usage-guide.js +101 -0
  171. package/dist/resources/usage-guide.js.map +1 -0
  172. package/dist/router/browser-router.d.ts +51 -0
  173. package/dist/router/browser-router.d.ts.map +1 -0
  174. package/dist/router/browser-router.js +178 -0
  175. package/dist/router/browser-router.js.map +1 -0
  176. package/dist/router/cookie-sync.d.ts +48 -0
  177. package/dist/router/cookie-sync.d.ts.map +1 -0
  178. package/dist/router/cookie-sync.js +106 -0
  179. package/dist/router/cookie-sync.js.map +1 -0
  180. package/dist/router/index.d.ts +5 -0
  181. package/dist/router/index.d.ts.map +1 -0
  182. package/dist/router/index.js +10 -0
  183. package/dist/router/index.js.map +1 -0
  184. package/dist/router/tool-routing-registry.d.ts +21 -0
  185. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  186. package/dist/router/tool-routing-registry.js +90 -0
  187. package/dist/router/tool-routing-registry.js.map +1 -0
  188. package/dist/session-manager.d.ts +251 -0
  189. package/dist/session-manager.d.ts.map +1 -0
  190. package/dist/session-manager.js +953 -0
  191. package/dist/session-manager.js.map +1 -0
  192. package/dist/tools/batch-execute.d.ts +11 -0
  193. package/dist/tools/batch-execute.d.ts.map +1 -0
  194. package/dist/tools/batch-execute.js +226 -0
  195. package/dist/tools/batch-execute.js.map +1 -0
  196. package/dist/tools/click-element.d.ts +8 -0
  197. package/dist/tools/click-element.d.ts.map +1 -0
  198. package/dist/tools/click-element.js +455 -0
  199. package/dist/tools/click-element.js.map +1 -0
  200. package/dist/tools/computer.d.ts +6 -0
  201. package/dist/tools/computer.d.ts.map +1 -0
  202. package/dist/tools/computer.js +638 -0
  203. package/dist/tools/computer.js.map +1 -0
  204. package/dist/tools/console-capture.d.ts +6 -0
  205. package/dist/tools/console-capture.d.ts.map +1 -0
  206. package/dist/tools/console-capture.js +320 -0
  207. package/dist/tools/console-capture.js.map +1 -0
  208. package/dist/tools/cookies.d.ts +6 -0
  209. package/dist/tools/cookies.d.ts.map +1 -0
  210. package/dist/tools/cookies.js +263 -0
  211. package/dist/tools/cookies.js.map +1 -0
  212. package/dist/tools/drag-drop.d.ts +6 -0
  213. package/dist/tools/drag-drop.d.ts.map +1 -0
  214. package/dist/tools/drag-drop.js +252 -0
  215. package/dist/tools/drag-drop.js.map +1 -0
  216. package/dist/tools/emulate-device.d.ts +6 -0
  217. package/dist/tools/emulate-device.d.ts.map +1 -0
  218. package/dist/tools/emulate-device.js +221 -0
  219. package/dist/tools/emulate-device.js.map +1 -0
  220. package/dist/tools/file-upload.d.ts +6 -0
  221. package/dist/tools/file-upload.d.ts.map +1 -0
  222. package/dist/tools/file-upload.js +209 -0
  223. package/dist/tools/file-upload.js.map +1 -0
  224. package/dist/tools/fill-form.d.ts +8 -0
  225. package/dist/tools/fill-form.d.ts.map +1 -0
  226. package/dist/tools/fill-form.js +342 -0
  227. package/dist/tools/fill-form.js.map +1 -0
  228. package/dist/tools/find.d.ts +6 -0
  229. package/dist/tools/find.d.ts.map +1 -0
  230. package/dist/tools/find.js +330 -0
  231. package/dist/tools/find.js.map +1 -0
  232. package/dist/tools/form-input.d.ts +6 -0
  233. package/dist/tools/form-input.d.ts.map +1 -0
  234. package/dist/tools/form-input.js +181 -0
  235. package/dist/tools/form-input.js.map +1 -0
  236. package/dist/tools/geolocation.d.ts +6 -0
  237. package/dist/tools/geolocation.d.ts.map +1 -0
  238. package/dist/tools/geolocation.js +172 -0
  239. package/dist/tools/geolocation.js.map +1 -0
  240. package/dist/tools/http-auth.d.ts +6 -0
  241. package/dist/tools/http-auth.d.ts.map +1 -0
  242. package/dist/tools/http-auth.js +136 -0
  243. package/dist/tools/http-auth.js.map +1 -0
  244. package/dist/tools/index.d.ts +6 -0
  245. package/dist/tools/index.d.ts.map +1 -0
  246. package/dist/tools/index.js +104 -0
  247. package/dist/tools/index.js.map +1 -0
  248. package/dist/tools/javascript.d.ts +6 -0
  249. package/dist/tools/javascript.d.ts.map +1 -0
  250. package/dist/tools/javascript.js +138 -0
  251. package/dist/tools/javascript.js.map +1 -0
  252. package/dist/tools/lightweight-scroll.d.ts +11 -0
  253. package/dist/tools/lightweight-scroll.d.ts.map +1 -0
  254. package/dist/tools/lightweight-scroll.js +266 -0
  255. package/dist/tools/lightweight-scroll.js.map +1 -0
  256. package/dist/tools/memory.d.ts +10 -0
  257. package/dist/tools/memory.d.ts.map +1 -0
  258. package/dist/tools/memory.js +141 -0
  259. package/dist/tools/memory.js.map +1 -0
  260. package/dist/tools/navigate.d.ts +6 -0
  261. package/dist/tools/navigate.d.ts.map +1 -0
  262. package/dist/tools/navigate.js +241 -0
  263. package/dist/tools/navigate.js.map +1 -0
  264. package/dist/tools/network.d.ts +6 -0
  265. package/dist/tools/network.d.ts.map +1 -0
  266. package/dist/tools/network.js +215 -0
  267. package/dist/tools/network.js.map +1 -0
  268. package/dist/tools/orchestration.d.ts +6 -0
  269. package/dist/tools/orchestration.d.ts.map +1 -0
  270. package/dist/tools/orchestration.js +741 -0
  271. package/dist/tools/orchestration.js.map +1 -0
  272. package/dist/tools/page-content.d.ts +6 -0
  273. package/dist/tools/page-content.d.ts.map +1 -0
  274. package/dist/tools/page-content.js +120 -0
  275. package/dist/tools/page-content.js.map +1 -0
  276. package/dist/tools/page-pdf.d.ts +6 -0
  277. package/dist/tools/page-pdf.d.ts.map +1 -0
  278. package/dist/tools/page-pdf.js +246 -0
  279. package/dist/tools/page-pdf.js.map +1 -0
  280. package/dist/tools/page-reload.d.ts +6 -0
  281. package/dist/tools/page-reload.d.ts.map +1 -0
  282. package/dist/tools/page-reload.js +89 -0
  283. package/dist/tools/page-reload.js.map +1 -0
  284. package/dist/tools/performance-metrics.d.ts +6 -0
  285. package/dist/tools/performance-metrics.d.ts.map +1 -0
  286. package/dist/tools/performance-metrics.js +158 -0
  287. package/dist/tools/performance-metrics.js.map +1 -0
  288. package/dist/tools/read-page.d.ts +6 -0
  289. package/dist/tools/read-page.d.ts.map +1 -0
  290. package/dist/tools/read-page.js +287 -0
  291. package/dist/tools/read-page.js.map +1 -0
  292. package/dist/tools/request-intercept.d.ts +6 -0
  293. package/dist/tools/request-intercept.d.ts.map +1 -0
  294. package/dist/tools/request-intercept.js +439 -0
  295. package/dist/tools/request-intercept.js.map +1 -0
  296. package/dist/tools/selector-query.d.ts +6 -0
  297. package/dist/tools/selector-query.d.ts.map +1 -0
  298. package/dist/tools/selector-query.js +206 -0
  299. package/dist/tools/selector-query.js.map +1 -0
  300. package/dist/tools/shutdown.d.ts +12 -0
  301. package/dist/tools/shutdown.d.ts.map +1 -0
  302. package/dist/tools/shutdown.js +120 -0
  303. package/dist/tools/shutdown.js.map +1 -0
  304. package/dist/tools/storage.d.ts +6 -0
  305. package/dist/tools/storage.d.ts.map +1 -0
  306. package/dist/tools/storage.js +264 -0
  307. package/dist/tools/storage.js.map +1 -0
  308. package/dist/tools/tabs-close.d.ts +6 -0
  309. package/dist/tools/tabs-close.d.ts.map +1 -0
  310. package/dist/tools/tabs-close.js +124 -0
  311. package/dist/tools/tabs-close.js.map +1 -0
  312. package/dist/tools/tabs-context.d.ts +6 -0
  313. package/dist/tools/tabs-context.d.ts.map +1 -0
  314. package/dist/tools/tabs-context.js +92 -0
  315. package/dist/tools/tabs-context.js.map +1 -0
  316. package/dist/tools/tabs-create.d.ts +6 -0
  317. package/dist/tools/tabs-create.d.ts.map +1 -0
  318. package/dist/tools/tabs-create.js +73 -0
  319. package/dist/tools/tabs-create.js.map +1 -0
  320. package/dist/tools/user-agent.d.ts +6 -0
  321. package/dist/tools/user-agent.d.ts.map +1 -0
  322. package/dist/tools/user-agent.js +128 -0
  323. package/dist/tools/user-agent.js.map +1 -0
  324. package/dist/tools/wait-and-click.d.ts +8 -0
  325. package/dist/tools/wait-and-click.d.ts.map +1 -0
  326. package/dist/tools/wait-and-click.js +290 -0
  327. package/dist/tools/wait-and-click.js.map +1 -0
  328. package/dist/tools/wait-for.d.ts +6 -0
  329. package/dist/tools/wait-for.d.ts.map +1 -0
  330. package/dist/tools/wait-for.js +248 -0
  331. package/dist/tools/wait-for.js.map +1 -0
  332. package/dist/tools/worker-create.d.ts +7 -0
  333. package/dist/tools/worker-create.d.ts.map +1 -0
  334. package/dist/tools/worker-create.js +62 -0
  335. package/dist/tools/worker-create.js.map +1 -0
  336. package/dist/tools/worker-delete.d.ts +6 -0
  337. package/dist/tools/worker-delete.d.ts.map +1 -0
  338. package/dist/tools/worker-delete.js +80 -0
  339. package/dist/tools/worker-delete.js.map +1 -0
  340. package/dist/tools/worker-list.d.ts +6 -0
  341. package/dist/tools/worker-list.d.ts.map +1 -0
  342. package/dist/tools/worker-list.js +67 -0
  343. package/dist/tools/worker-list.js.map +1 -0
  344. package/dist/tools/xpath-query.d.ts +6 -0
  345. package/dist/tools/xpath-query.d.ts.map +1 -0
  346. package/dist/tools/xpath-query.js +230 -0
  347. package/dist/tools/xpath-query.js.map +1 -0
  348. package/dist/types/browser-backend.d.ts +30 -0
  349. package/dist/types/browser-backend.d.ts.map +1 -0
  350. package/dist/types/browser-backend.js +9 -0
  351. package/dist/types/browser-backend.js.map +1 -0
  352. package/dist/types/index.d.ts +3 -0
  353. package/dist/types/index.d.ts.map +1 -0
  354. package/dist/types/index.js +19 -0
  355. package/dist/types/index.js.map +1 -0
  356. package/dist/types/mcp.d.ts +54 -0
  357. package/dist/types/mcp.d.ts.map +1 -0
  358. package/dist/types/mcp.js +14 -0
  359. package/dist/types/mcp.js.map +1 -0
  360. package/dist/types/plan-cache.d.ts +121 -0
  361. package/dist/types/plan-cache.d.ts.map +1 -0
  362. package/dist/types/plan-cache.js +9 -0
  363. package/dist/types/plan-cache.js.map +1 -0
  364. package/dist/types/profile.d.ts +76 -0
  365. package/dist/types/profile.d.ts.map +1 -0
  366. package/dist/types/profile.js +35 -0
  367. package/dist/types/profile.js.map +1 -0
  368. package/dist/types/session.d.ts +65 -0
  369. package/dist/types/session.d.ts.map +1 -0
  370. package/dist/types/session.js +6 -0
  371. package/dist/types/session.js.map +1 -0
  372. package/dist/types/tool-manifest.d.ts +52 -0
  373. package/dist/types/tool-manifest.d.ts.map +1 -0
  374. package/dist/types/tool-manifest.js +37 -0
  375. package/dist/types/tool-manifest.js.map +1 -0
  376. package/dist/utils/atomic-file.d.ts +50 -0
  377. package/dist/utils/atomic-file.d.ts.map +1 -0
  378. package/dist/utils/atomic-file.js +217 -0
  379. package/dist/utils/atomic-file.js.map +1 -0
  380. package/dist/utils/index.d.ts +6 -0
  381. package/dist/utils/index.d.ts.map +1 -0
  382. package/dist/utils/index.js +22 -0
  383. package/dist/utils/index.js.map +1 -0
  384. package/dist/utils/json-validator.d.ts +40 -0
  385. package/dist/utils/json-validator.d.ts.map +1 -0
  386. package/dist/utils/json-validator.js +295 -0
  387. package/dist/utils/json-validator.js.map +1 -0
  388. package/dist/utils/ref-id-manager.d.ts +26 -0
  389. package/dist/utils/ref-id-manager.d.ts.map +1 -0
  390. package/dist/utils/ref-id-manager.js +81 -0
  391. package/dist/utils/ref-id-manager.js.map +1 -0
  392. package/dist/utils/request-queue.d.ts +37 -0
  393. package/dist/utils/request-queue.d.ts.map +1 -0
  394. package/dist/utils/request-queue.js +110 -0
  395. package/dist/utils/request-queue.js.map +1 -0
  396. package/package.json +78 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,180 @@
1
+ <p align="center">
2
+ <img src="assets/mascot.png" alt="OpenChrome Raptor" width="180">
3
+ </p>
4
+
5
+ <h1 align="center">OpenChrome</h1>
6
+
7
+ <p align="center">
8
+ <b>Smart. Fast. Parallel.</b><br>
9
+ Browser automation MCP server that uses your real Chrome.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://github.com/shaun0927/openchrome/releases"><img src="https://img.shields.io/github/v/release/shaun0927/openchrome" alt="release"></a>
14
+ <a href="https://www.npmjs.com/package/openchrome-mcp"><img src="https://img.shields.io/npm/v/openchrome-mcp" alt="npm"></a>
15
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT"></a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <img src="assets/demo.svg" alt="Traditional vs OpenChrome" width="100%">
20
+ </p>
21
+
22
+ ---
23
+
24
+ ## What is OpenChrome?
25
+
26
+ Imagine **20+ parallel Playwright sessions** — but already logged in to everything, invisible to bot detection, and sharing one Chrome process at 300MB. That's OpenChrome.
27
+
28
+ Search across 20 sites simultaneously. Crawl authenticated dashboards in seconds. Debug production UIs with real user sessions. Connect to [OpenClaw](https://github.com/openclaw/openclaw) and give your AI agent browser superpowers across Telegram, Discord, or any chat platform.
29
+
30
+ ```
31
+ You: oc compare "AirPods Pro" prices across Amazon, eBay, Walmart,
32
+ Best Buy, Target, Costco, B&H, Newegg — find the lowest
33
+
34
+ AI: [8 parallel workers, all sites simultaneously]
35
+ Best Buy: $179 ← lowest (sale)
36
+ Amazon: $189
37
+ Costco: $194 (members)
38
+ ...
39
+ Time: 2.8s | All prices from live pages, already logged in.
40
+ ```
41
+
42
+ | | Traditional | OpenChrome |
43
+ |---|:---:|:---:|
44
+ | **5-site task** | ~250s (login each) | **~3s** (parallel) |
45
+ | **Memory** | ~2.5 GB (5 browsers) | **~300 MB** (1 Chrome) |
46
+ | **Auth** | Every time | **Never** |
47
+ | **Bot detection** | Flagged | **Invisible** |
48
+
49
+ ---
50
+
51
+ ## Quick Start
52
+
53
+ ```bash
54
+ npx openchrome-mcp setup
55
+ ```
56
+
57
+ That's it. Say `oc` to your AI agent.
58
+
59
+ <details>
60
+ <summary>Manual config</summary>
61
+
62
+ **Claude Code:**
63
+ ```bash
64
+ claude mcp add openchrome -- npx -y openchrome-mcp serve --auto-launch
65
+ ```
66
+
67
+ **VS Code / Copilot** (`.vscode/mcp.json`):
68
+ ```json
69
+ {
70
+ "servers": {
71
+ "openchrome": {
72
+ "type": "stdio",
73
+ "command": "npx",
74
+ "args": ["-y", "openchrome-mcp", "serve", "--auto-launch"]
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ **Cursor / Windsurf / Other MCP clients:**
81
+ ```json
82
+ {
83
+ "mcpServers": {
84
+ "openchrome": {
85
+ "command": "npx",
86
+ "args": ["-y", "openchrome-mcp", "serve", "--auto-launch"]
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ </details>
93
+
94
+ ---
95
+
96
+ ## How It Works
97
+
98
+ ```
99
+ Traditional: [blank browser] → login → 2FA → wait → task → close (per site)
100
+ OpenChrome: [your Chrome] → task (done)
101
+ ```
102
+
103
+ OpenChrome connects to your running Chrome via CDP. You're already logged in. Workers run in parallel with isolated contexts (separate cookies, sessions). One Chrome process, 20+ simultaneous sessions, ~300MB total.
104
+
105
+ ---
106
+
107
+ ## Examples
108
+
109
+ **Parallel monitoring:**
110
+ ```
111
+ oc screenshot AWS billing, GCP console, Stripe, and Datadog — all at once
112
+ → 4 workers, 3.1s, already authenticated everywhere
113
+ ```
114
+
115
+ **Multi-account:**
116
+ ```
117
+ oc check orders on personal and business Amazon accounts simultaneously
118
+ → 2 workers, isolated sessions, same site different accounts
119
+ ```
120
+
121
+ **Competitive intelligence:**
122
+ ```
123
+ oc compare prices for "AirPods Pro" across Amazon, eBay, Walmart, Best Buy
124
+ → 4 workers, 4 sites, 2.4s, works past bot detection
125
+ ```
126
+
127
+ ---
128
+
129
+ ## 47 Tools
130
+
131
+ | Category | Tools |
132
+ |----------|-------|
133
+ | **Navigate & Interact** | `navigate`, `click_element`, `fill_form`, `wait_and_click`, `find`, `computer` |
134
+ | **Read & Extract** | `read_page`, `page_content`, `javascript_tool`, `selector_query`, `xpath_query` |
135
+ | **Environment** | `emulate_device`, `geolocation`, `user_agent`, `network` |
136
+ | **Storage & Debug** | `cookies`, `storage`, `console_capture`, `performance_metrics`, `request_intercept` |
137
+ | **Parallel Workflows** | `workflow_init`, `workflow_collect`, `worker_create`, `batch_execute` |
138
+ | **Memory** | `memory_record`, `memory_query`, `memory_validate` |
139
+
140
+ <details>
141
+ <summary>Full tool list (47)</summary>
142
+
143
+ `navigate` `computer` `read_page` `find` `click_element` `wait_and_click` `form_input` `fill_form` `javascript_tool` `page_reload` `page_content` `page_pdf` `wait_for` `user_agent` `geolocation` `emulate_device` `network` `selector_query` `xpath_query` `cookies` `storage` `console_capture` `performance_metrics` `request_intercept` `drag_drop` `file_upload` `http_auth` `worker_create` `worker_list` `worker_update` `worker_complete` `worker_delete` `tabs_create_mcp` `tabs_context_mcp` `tabs_close` `workflow_init` `workflow_status` `workflow_collect` `workflow_collect_partial` `workflow_cleanup` `execute_plan` `batch_execute` `lightweight_scroll` `memory_record` `memory_query` `memory_validate` `oc_stop`
144
+
145
+ </details>
146
+
147
+ ---
148
+
149
+ ## CLI
150
+
151
+ ```bash
152
+ oc setup # Auto-configure
153
+ oc serve --auto-launch # Start server
154
+ oc serve --headless-shell # Headless mode
155
+ oc doctor # Diagnose issues
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Cross-Platform
161
+
162
+ | Platform | Status |
163
+ |----------|--------|
164
+ | **macOS** | Full support |
165
+ | **Windows** | Full support (taskkill process cleanup) |
166
+ | **Linux** | Full support (Snap paths, `CHROME_PATH` env, `--no-sandbox` for CI) |
167
+
168
+ ---
169
+
170
+ ## Development
171
+
172
+ ```bash
173
+ git clone https://github.com/shaun0927/openchrome.git
174
+ cd openchrome
175
+ npm install && npm run build && npm test
176
+ ```
177
+
178
+ ## License
179
+
180
+ MIT
@@ -0,0 +1,278 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 480">
2
+ <defs>
3
+ <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#0d1117"/>
5
+ <stop offset="100%" style="stop-color:#161b22"/>
6
+ </linearGradient>
7
+ <linearGradient id="successGrad" x1="0%" y1="0%" x2="100%" y2="0%">
8
+ <stop offset="0%" style="stop-color:#00b894"/>
9
+ <stop offset="100%" style="stop-color:#00cec9"/>
10
+ </linearGradient>
11
+ <linearGradient id="authGrad" x1="0%" y1="0%" x2="100%" y2="0%">
12
+ <stop offset="0%" style="stop-color:#e17055"/>
13
+ <stop offset="100%" style="stop-color:#e74c3c"/>
14
+ </linearGradient>
15
+ <linearGradient id="taskGrad" x1="0%" y1="0%" x2="100%" y2="0%">
16
+ <stop offset="0%" style="stop-color:#636e72"/>
17
+ <stop offset="100%" style="stop-color:#74b9ff"/>
18
+ </linearGradient>
19
+ </defs>
20
+
21
+ <!-- Background -->
22
+ <rect width="800" height="480" fill="url(#bgGrad)" rx="12"/>
23
+
24
+ <!-- Title -->
25
+ <text x="400" y="30" text-anchor="middle" fill="#fff" font-family="system-ui, -apple-system, sans-serif" font-size="16" font-weight="bold">
26
+ Playwright MCP vs OpenChrome — 5 Authenticated Sites
27
+ </text>
28
+ <text x="400" y="48" text-anchor="middle" fill="#636e72" font-family="system-ui" font-size="11">
29
+ AWS Billing + Stripe Dashboard + Vercel Usage + GitHub Actions + Slack Messages
30
+ </text>
31
+
32
+ <!-- ═══════════════════════════════════════════════════════ -->
33
+ <!-- LEFT SIDE: Playwright MCP (Sequential + Auth overhead) -->
34
+ <!-- ═══════════════════════════════════════════════════════ -->
35
+ <g transform="translate(20, 65)">
36
+ <!-- Header -->
37
+ <rect x="0" y="0" width="370" height="24" rx="6" fill="#2d3436"/>
38
+ <circle cx="14" cy="12" r="4" fill="#e74c3c"/>
39
+ <circle cx="28" cy="12" r="4" fill="#f39c12"/>
40
+ <circle cx="42" cy="12" r="4" fill="#27ae60"/>
41
+ <text x="185" y="16" text-anchor="middle" fill="#b2bec3" font-family="monospace" font-size="10" font-weight="bold">Playwright MCP</text>
42
+
43
+ <!-- Terminal body -->
44
+ <rect x="0" y="24" width="370" height="340" fill="#0d1117" rx="0"/>
45
+ <rect x="0" y="354" width="370" height="10" rx="0" ry="6" fill="#2d3436"/>
46
+
47
+ <!-- Legend -->
48
+ <rect x="10" y="32" width="8" height="8" fill="url(#authGrad)" rx="1"/>
49
+ <text x="22" y="40" fill="#e17055" font-family="monospace" font-size="9">Login (30-60s each)</text>
50
+ <rect x="160" y="32" width="8" height="8" fill="url(#taskGrad)" rx="1"/>
51
+ <text x="172" y="40" fill="#74b9ff" font-family="monospace" font-size="9">Task (~3s each)</text>
52
+
53
+ <!-- Site 1: AWS — auth then task, sequential -->
54
+ <text x="10" y="62" fill="#b2bec3" font-family="monospace" font-size="10">AWS Billing</text>
55
+ <!-- Auth bar (long) -->
56
+ <rect x="90" y="53" width="0" height="10" rx="2" fill="url(#authGrad)">
57
+ <animate attributeName="width" values="0;0;30;60;90;120;150;180;180;180;180;180;180;180;180;180;180;180;180;180" dur="20s" repeatCount="indefinite"/>
58
+ </rect>
59
+ <text x="92" y="62" fill="#fff" font-family="monospace" font-size="8" opacity="0.8">
60
+ <tspan>login...</tspan>
61
+ <animate attributeName="opacity" values="0;0;0.8;0.8;0.8;0.8;0.8;0;0;0;0;0;0;0;0;0;0;0;0;0" dur="20s" repeatCount="indefinite"/>
62
+ </text>
63
+ <!-- Task bar (short) -->
64
+ <rect x="272" y="53" width="0" height="10" rx="2" fill="url(#taskGrad)">
65
+ <animate attributeName="width" values="0;0;0;0;0;0;0;0;15;15;15;15;15;15;15;15;15;15;15;15" dur="20s" repeatCount="indefinite"/>
66
+ </rect>
67
+ <text x="295" y="62" fill="#00b894" font-family="monospace" font-size="9">
68
+ <tspan>ok</tspan>
69
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
70
+ </text>
71
+
72
+ <!-- Site 2: Stripe — starts after AWS finishes -->
73
+ <text x="10" y="86" fill="#b2bec3" font-family="monospace" font-size="10">
74
+ <tspan>Stripe</tspan>
75
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
76
+ </text>
77
+ <rect x="90" y="77" width="0" height="10" rx="2" fill="url(#authGrad)">
78
+ <animate attributeName="width" values="0;0;0;0;0;0;0;0;0;0;30;60;90;120;150;150;150;150;150;150" dur="20s" repeatCount="indefinite"/>
79
+ </rect>
80
+ <text x="92" y="86" fill="#fff" font-family="monospace" font-size="8">
81
+ <tspan>login...</tspan>
82
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0.8;0.8;0.8;0.8;0;0;0;0;0;0" dur="20s" repeatCount="indefinite"/>
83
+ </text>
84
+ <rect x="242" y="77" width="0" height="10" rx="2" fill="url(#taskGrad)">
85
+ <animate attributeName="width" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;15;15;15;15;15" dur="20s" repeatCount="indefinite"/>
86
+ </rect>
87
+ <text x="265" y="86" fill="#00b894" font-family="monospace" font-size="9">
88
+ <tspan>ok</tspan>
89
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1" dur="20s" repeatCount="indefinite"/>
90
+ </text>
91
+
92
+ <!-- Site 3: Vercel — waiting... -->
93
+ <text x="10" y="110" fill="#b2bec3" font-family="monospace" font-size="10">
94
+ <tspan>Vercel</tspan>
95
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1" dur="20s" repeatCount="indefinite"/>
96
+ </text>
97
+ <rect x="90" y="101" width="0" height="10" rx="2" fill="url(#authGrad)">
98
+ <animate attributeName="width" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;30;60;90" dur="20s" repeatCount="indefinite"/>
99
+ </rect>
100
+ <text x="92" y="110" fill="#fff" font-family="monospace" font-size="8">
101
+ <tspan>login...</tspan>
102
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0.8;0.8;0.8" dur="20s" repeatCount="indefinite"/>
103
+ </text>
104
+
105
+ <!-- Site 4: GitHub — not started yet -->
106
+ <text x="10" y="134" fill="#636e72" font-family="monospace" font-size="10">
107
+ <tspan>GitHub</tspan>
108
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0.5" dur="20s" repeatCount="indefinite"/>
109
+ </text>
110
+
111
+ <!-- Site 5: Slack — not started yet -->
112
+ <text x="10" y="158" fill="#636e72" font-family="monospace" font-size="10">
113
+ <tspan>Slack</tspan>
114
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0" dur="20s" repeatCount="indefinite"/>
115
+ </text>
116
+
117
+ <!-- Waiting dots -->
118
+ <text x="90" y="134" fill="#636e72" font-family="monospace" font-size="10">
119
+ <tspan>waiting...</tspan>
120
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0.5" dur="20s" repeatCount="indefinite"/>
121
+ </text>
122
+ <text x="90" y="158" fill="#636e72" font-family="monospace" font-size="10">
123
+ <tspan>waiting...</tspan>
124
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0.5" dur="20s" repeatCount="indefinite"/>
125
+ </text>
126
+
127
+ <!-- Memory usage (climbing) -->
128
+ <g>
129
+ <animate attributeName="opacity" values="0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
130
+ <rect x="10" y="185" width="350" height="48" rx="4" fill="#1a1a1a"/>
131
+ <text x="20" y="201" fill="#e74c3c" font-family="monospace" font-size="9" font-weight="bold">Memory Usage</text>
132
+ <!-- Memory bar growing -->
133
+ <rect x="20" y="210" width="0" height="14" rx="2" fill="#e74c3c" opacity="0.6">
134
+ <animate attributeName="width" values="0;40;60;80;100;120;140;160;180;200;220;240;260;280;280;300;300;320;320;320" dur="20s" repeatCount="indefinite"/>
135
+ </rect>
136
+ <text x="20" y="220" fill="#fff" font-family="monospace" font-size="8">
137
+ <animate attributeName="textContent" values="200MB;400MB;600MB;800MB;1.0GB;1.2GB;1.4GB;1.6GB;1.8GB;2.0GB" dur="20s" repeatCount="indefinite"/>
138
+ </text>
139
+ <!-- Show text separately with animation -->
140
+ <text x="25" y="220" fill="#fff" font-family="monospace" font-size="8" font-weight="bold">
141
+ <tspan>2.5 GB</tspan>
142
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1" dur="20s" repeatCount="indefinite"/>
143
+ </text>
144
+ <text x="180" y="220" fill="#e17055" font-family="monospace" font-size="8">
145
+ <tspan>(5 browser processes)</tspan>
146
+ <animate attributeName="opacity" values="0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1" dur="20s" repeatCount="indefinite"/>
147
+ </text>
148
+ </g>
149
+
150
+ <!-- Elapsed time (counting up) -->
151
+ <g>
152
+ <animate attributeName="opacity" values="0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
153
+ <text x="10" y="260" fill="#636e72" font-family="monospace" font-size="10">Elapsed:</text>
154
+ <text x="72" y="260" fill="#fdcb6e" font-family="monospace" font-size="10" font-weight="bold">
155
+ <tspan>still running...</tspan>
156
+ <animate attributeName="opacity" values="0;0;1;1;1;1;1;1;0.5;1;1;1;1;1;0.5;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
157
+ </text>
158
+ </g>
159
+
160
+ <!-- Bottom status -->
161
+ <text x="185" y="310" text-anchor="middle" fill="#e74c3c" font-family="system-ui" font-size="12" font-weight="bold">
162
+ Sequential + Login per site
163
+ </text>
164
+ <text x="185" y="328" text-anchor="middle" fill="#636e72" font-family="monospace" font-size="10">
165
+ ~250s for 5 sites (50s auth x 5 + tasks)
166
+ </text>
167
+ <text x="185" y="346" text-anchor="middle" fill="#e17055" font-family="monospace" font-size="10">
168
+ ~500MB RAM per browser instance
169
+ </text>
170
+ </g>
171
+
172
+ <!-- ═══════════════════════════════════════════════ -->
173
+ <!-- RIGHT SIDE: OpenChrome (Parallel + Zero auth + Light) -->
174
+ <!-- ═══════════════════════════════════════════════ -->
175
+ <g transform="translate(410, 65)">
176
+ <!-- Header -->
177
+ <rect x="0" y="0" width="370" height="24" rx="6" fill="#2d3436"/>
178
+ <circle cx="14" cy="12" r="4" fill="#e74c3c"/>
179
+ <circle cx="28" cy="12" r="4" fill="#f39c12"/>
180
+ <circle cx="42" cy="12" r="4" fill="#27ae60"/>
181
+ <text x="185" y="16" text-anchor="middle" fill="#00b894" font-family="monospace" font-size="10" font-weight="bold">OpenChrome</text>
182
+
183
+ <!-- Terminal body -->
184
+ <rect x="0" y="24" width="370" height="340" fill="#0d1117"/>
185
+ <rect x="0" y="354" width="370" height="10" rx="0" ry="6" fill="#2d3436"/>
186
+
187
+ <!-- Legend -->
188
+ <text x="10" y="40" fill="#636e72" font-family="monospace" font-size="9">No login needed — already authenticated</text>
189
+
190
+ <!-- ALL 5 start simultaneously -->
191
+ <text x="10" y="62" fill="#a29bfe" font-family="monospace" font-size="10">AWS Billing</text>
192
+ <rect x="110" y="53" width="0" height="10" rx="2" fill="url(#successGrad)">
193
+ <animate attributeName="width" values="0;0;40;80;120;120;120;120;120;120;120;120;120;120;120;120;120;120;120;120" dur="20s" repeatCount="indefinite"/>
194
+ </rect>
195
+ <text x="235" y="62" fill="#00b894" font-family="monospace" font-size="9">
196
+ <tspan>done 2.8s</tspan>
197
+ <animate attributeName="opacity" values="0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
198
+ </text>
199
+
200
+ <text x="10" y="82" fill="#a29bfe" font-family="monospace" font-size="10">Stripe</text>
201
+ <rect x="110" y="73" width="0" height="10" rx="2" fill="url(#successGrad)">
202
+ <animate attributeName="width" values="0;0;35;75;110;110;110;110;110;110;110;110;110;110;110;110;110;110;110;110" dur="20s" repeatCount="indefinite"/>
203
+ </rect>
204
+ <text x="225" y="82" fill="#00b894" font-family="monospace" font-size="9">
205
+ <tspan>done 2.5s</tspan>
206
+ <animate attributeName="opacity" values="0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
207
+ </text>
208
+
209
+ <text x="10" y="102" fill="#a29bfe" font-family="monospace" font-size="10">Vercel</text>
210
+ <rect x="110" y="93" width="0" height="10" rx="2" fill="url(#successGrad)">
211
+ <animate attributeName="width" values="0;0;45;90;130;130;130;130;130;130;130;130;130;130;130;130;130;130;130;130" dur="20s" repeatCount="indefinite"/>
212
+ </rect>
213
+ <text x="245" y="102" fill="#00b894" font-family="monospace" font-size="9">
214
+ <tspan>done 3.1s</tspan>
215
+ <animate attributeName="opacity" values="0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
216
+ </text>
217
+
218
+ <text x="10" y="122" fill="#a29bfe" font-family="monospace" font-size="10">GitHub</text>
219
+ <rect x="110" y="113" width="0" height="10" rx="2" fill="url(#successGrad)">
220
+ <animate attributeName="width" values="0;0;30;65;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100" dur="20s" repeatCount="indefinite"/>
221
+ </rect>
222
+ <text x="215" y="122" fill="#00b894" font-family="monospace" font-size="9">
223
+ <tspan>done 2.3s</tspan>
224
+ <animate attributeName="opacity" values="0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
225
+ </text>
226
+
227
+ <text x="10" y="142" fill="#a29bfe" font-family="monospace" font-size="10">Slack</text>
228
+ <rect x="110" y="133" width="0" height="10" rx="2" fill="url(#successGrad)">
229
+ <animate attributeName="width" values="0;0;38;78;115;115;115;115;115;115;115;115;115;115;115;115;115;115;115;115" dur="20s" repeatCount="indefinite"/>
230
+ </rect>
231
+ <text x="230" y="142" fill="#00b894" font-family="monospace" font-size="9">
232
+ <tspan>done 2.6s</tspan>
233
+ <animate attributeName="opacity" values="0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
234
+ </text>
235
+
236
+ <!-- Result box appears fast -->
237
+ <g>
238
+ <animate attributeName="opacity" values="0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
239
+ <rect x="10" y="160" width="350" height="55" rx="6" fill="#0a2e0a" stroke="#00b894" stroke-width="1"/>
240
+ <text x="185" y="180" text-anchor="middle" fill="#00b894" font-family="system-ui" font-size="13" font-weight="bold">
241
+ All 5 sites done in 3.1s
242
+ </text>
243
+ <text x="185" y="200" text-anchor="middle" fill="#55efc4" font-family="monospace" font-size="11">
244
+ Zero logins. Zero waiting. All parallel.
245
+ </text>
246
+ </g>
247
+
248
+ <!-- Memory usage (small and stable) -->
249
+ <g>
250
+ <animate attributeName="opacity" values="0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
251
+ <rect x="10" y="230" width="350" height="48" rx="4" fill="#1a1a1a"/>
252
+ <text x="20" y="246" fill="#00b894" font-family="monospace" font-size="9" font-weight="bold">Memory Usage</text>
253
+ <rect x="20" y="255" width="60" height="14" rx="2" fill="#00b894" opacity="0.5"/>
254
+ <text x="25" y="265" fill="#fff" font-family="monospace" font-size="8" font-weight="bold">~300 MB</text>
255
+ <text x="100" y="265" fill="#55efc4" font-family="monospace" font-size="8">(1 Chrome + 5 lightweight contexts)</text>
256
+ </g>
257
+
258
+ <!-- Speed comparison callout -->
259
+ <g>
260
+ <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1" dur="20s" repeatCount="indefinite"/>
261
+ <rect x="30" y="290" width="310" height="50" rx="8" fill="#0a2e0a" stroke="#00cec9" stroke-width="2"/>
262
+ <text x="185" y="313" text-anchor="middle" fill="#00cec9" font-family="system-ui" font-size="20" font-weight="bold">
263
+ 80x faster
264
+ </text>
265
+ <text x="185" y="332" text-anchor="middle" fill="#81ecec" font-family="monospace" font-size="10">
266
+ 3.1s vs ~250s | 300MB vs 2.5GB
267
+ </text>
268
+ </g>
269
+ </g>
270
+
271
+ <!-- Bottom comparison bar -->
272
+ <g transform="translate(0, 440)">
273
+ <rect x="20" y="0" width="760" height="30" rx="6" fill="#161b22" stroke="#2d3436" stroke-width="1"/>
274
+ <text x="120" y="20" text-anchor="middle" fill="#e74c3c" font-family="monospace" font-size="10">Playwright: ~250s | 2.5GB</text>
275
+ <text x="400" y="20" text-anchor="middle" fill="#636e72" font-family="system-ui" font-size="11" font-weight="bold">vs</text>
276
+ <text x="650" y="20" text-anchor="middle" fill="#00b894" font-family="monospace" font-size="10">OpenChrome: ~3s | 300MB | already logged in</text>
277
+ </g>
278
+ </svg>
Binary file