claude-chrome-parallel 3.0.3 → 3.4.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 (315) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +398 -464
  3. package/assets/demo.svg +278 -173
  4. package/dist/cdp/client.d.ts +60 -2
  5. package/dist/cdp/client.d.ts.map +1 -1
  6. package/dist/cdp/client.js +344 -5
  7. package/dist/cdp/client.js.map +1 -1
  8. package/dist/cdp/connection-pool.d.ts.map +1 -1
  9. package/dist/cdp/connection-pool.js +20 -4
  10. package/dist/cdp/connection-pool.js.map +1 -1
  11. package/dist/chrome/launcher.d.ts +11 -0
  12. package/dist/chrome/launcher.d.ts.map +1 -1
  13. package/dist/chrome/launcher.js +124 -10
  14. package/dist/chrome/launcher.js.map +1 -1
  15. package/dist/chrome/pool.d.ts +54 -0
  16. package/dist/chrome/pool.d.ts.map +1 -0
  17. package/dist/chrome/pool.js +301 -0
  18. package/dist/chrome/pool.js.map +1 -0
  19. package/dist/chrome/profile-detector.d.ts +52 -0
  20. package/dist/chrome/profile-detector.d.ts.map +1 -0
  21. package/dist/chrome/profile-detector.js +246 -0
  22. package/dist/chrome/profile-detector.js.map +1 -0
  23. package/dist/cli/claude-session.js +15 -15
  24. package/dist/cli/index.js +162 -37
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/update-check.d.ts +9 -0
  27. package/dist/cli/update-check.js +141 -0
  28. package/dist/cli/update-check.js.map +1 -0
  29. package/dist/config/global.d.ts +31 -0
  30. package/dist/config/global.d.ts.map +1 -1
  31. package/dist/config/global.js.map +1 -1
  32. package/dist/dashboard/activity-tracker.d.ts +60 -0
  33. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  34. package/dist/dashboard/activity-tracker.js +178 -0
  35. package/dist/dashboard/activity-tracker.js.map +1 -0
  36. package/dist/dashboard/ansi.d.ts +117 -0
  37. package/dist/dashboard/ansi.d.ts.map +1 -0
  38. package/dist/dashboard/ansi.js +199 -0
  39. package/dist/dashboard/ansi.js.map +1 -0
  40. package/dist/dashboard/index.d.ts +110 -0
  41. package/dist/dashboard/index.d.ts.map +1 -0
  42. package/dist/dashboard/index.js +412 -0
  43. package/dist/dashboard/index.js.map +1 -0
  44. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  45. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  46. package/dist/dashboard/keyboard-handler.js +215 -0
  47. package/dist/dashboard/keyboard-handler.js.map +1 -0
  48. package/dist/dashboard/operation-controller.d.ts +76 -0
  49. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  50. package/dist/dashboard/operation-controller.js +167 -0
  51. package/dist/dashboard/operation-controller.js.map +1 -0
  52. package/dist/dashboard/renderer.d.ts +76 -0
  53. package/dist/dashboard/renderer.d.ts.map +1 -0
  54. package/dist/dashboard/renderer.js +193 -0
  55. package/dist/dashboard/renderer.js.map +1 -0
  56. package/dist/dashboard/types.d.ts +56 -0
  57. package/dist/dashboard/types.d.ts.map +1 -0
  58. package/dist/dashboard/types.js +12 -0
  59. package/dist/dashboard/types.js.map +1 -0
  60. package/dist/dashboard/views/main-view.d.ts +23 -0
  61. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  62. package/dist/dashboard/views/main-view.js +143 -0
  63. package/dist/dashboard/views/main-view.js.map +1 -0
  64. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  65. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  66. package/dist/dashboard/views/sessions-view.js +104 -0
  67. package/dist/dashboard/views/sessions-view.js.map +1 -0
  68. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  69. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  70. package/dist/dashboard/views/tabs-view.js +92 -0
  71. package/dist/dashboard/views/tabs-view.js.map +1 -0
  72. package/dist/hints/hint-engine.d.ts +65 -0
  73. package/dist/hints/hint-engine.d.ts.map +1 -0
  74. package/dist/hints/hint-engine.js +156 -0
  75. package/dist/hints/hint-engine.js.map +1 -0
  76. package/dist/hints/index.d.ts +8 -0
  77. package/dist/hints/index.d.ts.map +1 -0
  78. package/dist/hints/index.js +11 -0
  79. package/dist/hints/index.js.map +1 -0
  80. package/dist/hints/pattern-learner.d.ts +76 -0
  81. package/dist/hints/pattern-learner.d.ts.map +1 -0
  82. package/dist/hints/pattern-learner.js +254 -0
  83. package/dist/hints/pattern-learner.js.map +1 -0
  84. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  85. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  86. package/dist/hints/rules/composite-suggestions.js +66 -0
  87. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  88. package/dist/hints/rules/error-recovery.d.ts +7 -0
  89. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  90. package/dist/hints/rules/error-recovery.js +47 -0
  91. package/dist/hints/rules/error-recovery.js.map +1 -0
  92. package/dist/hints/rules/learned-rules.d.ts +13 -0
  93. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  94. package/dist/hints/rules/learned-rules.js +27 -0
  95. package/dist/hints/rules/learned-rules.js.map +1 -0
  96. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  97. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  98. package/dist/hints/rules/repetition-detection.js +82 -0
  99. package/dist/hints/rules/repetition-detection.js.map +1 -0
  100. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  101. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  102. package/dist/hints/rules/sequence-detection.js +61 -0
  103. package/dist/hints/rules/sequence-detection.js.map +1 -0
  104. package/dist/hints/rules/success-hints.d.ts +6 -0
  105. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  106. package/dist/hints/rules/success-hints.js +62 -0
  107. package/dist/hints/rules/success-hints.js.map +1 -0
  108. package/dist/index.js +190 -55
  109. package/dist/index.js.map +1 -1
  110. package/dist/lightpanda/launcher.d.ts +58 -0
  111. package/dist/lightpanda/launcher.d.ts.map +1 -0
  112. package/dist/lightpanda/launcher.js +199 -0
  113. package/dist/lightpanda/launcher.js.map +1 -0
  114. package/dist/mcp-server.d.ts +38 -1
  115. package/dist/mcp-server.d.ts.map +1 -1
  116. package/dist/mcp-server.js +220 -6
  117. package/dist/mcp-server.js.map +1 -1
  118. package/dist/orchestration/state-manager.js +46 -46
  119. package/dist/orchestration/workflow-engine.d.ts +1 -0
  120. package/dist/orchestration/workflow-engine.d.ts.map +1 -1
  121. package/dist/orchestration/workflow-engine.js +112 -114
  122. package/dist/orchestration/workflow-engine.js.map +1 -1
  123. package/dist/resources/usage-guide.d.ts +13 -0
  124. package/dist/resources/usage-guide.d.ts.map +1 -0
  125. package/dist/resources/usage-guide.js +101 -0
  126. package/dist/resources/usage-guide.js.map +1 -0
  127. package/dist/router/browser-router.d.ts +51 -0
  128. package/dist/router/browser-router.d.ts.map +1 -0
  129. package/dist/router/browser-router.js +178 -0
  130. package/dist/router/browser-router.js.map +1 -0
  131. package/dist/router/cookie-sync.d.ts +48 -0
  132. package/dist/router/cookie-sync.d.ts.map +1 -0
  133. package/dist/router/cookie-sync.js +106 -0
  134. package/dist/router/cookie-sync.js.map +1 -0
  135. package/dist/router/index.d.ts +5 -0
  136. package/dist/router/index.d.ts.map +1 -0
  137. package/dist/router/index.js +10 -0
  138. package/dist/router/index.js.map +1 -0
  139. package/dist/router/tool-routing-registry.d.ts +21 -0
  140. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  141. package/dist/router/tool-routing-registry.js +90 -0
  142. package/dist/router/tool-routing-registry.js.map +1 -0
  143. package/dist/session-manager.d.ts +41 -1
  144. package/dist/session-manager.d.ts.map +1 -1
  145. package/dist/session-manager.js +216 -21
  146. package/dist/session-manager.js.map +1 -1
  147. package/dist/tools/click-element.d.ts +8 -0
  148. package/dist/tools/click-element.d.ts.map +1 -0
  149. package/dist/tools/click-element.js +383 -0
  150. package/dist/tools/click-element.js.map +1 -0
  151. package/dist/tools/computer.d.ts.map +1 -1
  152. package/dist/tools/computer.js +198 -34
  153. package/dist/tools/computer.js.map +1 -1
  154. package/dist/tools/console-capture.d.ts +6 -0
  155. package/dist/tools/console-capture.d.ts.map +1 -0
  156. package/dist/tools/console-capture.js +320 -0
  157. package/dist/tools/console-capture.js.map +1 -0
  158. package/dist/tools/cookies.d.ts +6 -0
  159. package/dist/tools/cookies.d.ts.map +1 -0
  160. package/dist/tools/cookies.js +263 -0
  161. package/dist/tools/cookies.js.map +1 -0
  162. package/dist/tools/drag-drop.d.ts +6 -0
  163. package/dist/tools/drag-drop.d.ts.map +1 -0
  164. package/dist/tools/drag-drop.js +252 -0
  165. package/dist/tools/drag-drop.js.map +1 -0
  166. package/dist/tools/emulate-device.d.ts +6 -0
  167. package/dist/tools/emulate-device.d.ts.map +1 -0
  168. package/dist/tools/emulate-device.js +221 -0
  169. package/dist/tools/emulate-device.js.map +1 -0
  170. package/dist/tools/file-upload.d.ts +6 -0
  171. package/dist/tools/file-upload.d.ts.map +1 -0
  172. package/dist/tools/file-upload.js +208 -0
  173. package/dist/tools/file-upload.js.map +1 -0
  174. package/dist/tools/fill-form.d.ts +8 -0
  175. package/dist/tools/fill-form.d.ts.map +1 -0
  176. package/dist/tools/fill-form.js +342 -0
  177. package/dist/tools/fill-form.js.map +1 -0
  178. package/dist/tools/find.d.ts.map +1 -1
  179. package/dist/tools/find.js +153 -65
  180. package/dist/tools/find.js.map +1 -1
  181. package/dist/tools/form-input.js +52 -52
  182. package/dist/tools/form-input.js.map +1 -1
  183. package/dist/tools/geolocation.d.ts +6 -0
  184. package/dist/tools/geolocation.d.ts.map +1 -0
  185. package/dist/tools/geolocation.js +172 -0
  186. package/dist/tools/geolocation.js.map +1 -0
  187. package/dist/tools/http-auth.d.ts +6 -0
  188. package/dist/tools/http-auth.d.ts.map +1 -0
  189. package/dist/tools/http-auth.js +136 -0
  190. package/dist/tools/http-auth.js.map +1 -0
  191. package/dist/tools/index.d.ts.map +1 -1
  192. package/dist/tools/index.js +50 -0
  193. package/dist/tools/index.js.map +1 -1
  194. package/dist/tools/javascript.js +1 -1
  195. package/dist/tools/javascript.js.map +1 -1
  196. package/dist/tools/navigate.d.ts.map +1 -1
  197. package/dist/tools/navigate.js +5 -2
  198. package/dist/tools/navigate.js.map +1 -1
  199. package/dist/tools/network.js +4 -4
  200. package/dist/tools/network.js.map +1 -1
  201. package/dist/tools/orchestration.d.ts.map +1 -1
  202. package/dist/tools/orchestration.js +13 -8
  203. package/dist/tools/orchestration.js.map +1 -1
  204. package/dist/tools/page-content.d.ts +6 -0
  205. package/dist/tools/page-content.d.ts.map +1 -0
  206. package/dist/tools/page-content.js +120 -0
  207. package/dist/tools/page-content.js.map +1 -0
  208. package/dist/tools/page-pdf.d.ts +6 -0
  209. package/dist/tools/page-pdf.d.ts.map +1 -0
  210. package/dist/tools/page-pdf.js +245 -0
  211. package/dist/tools/page-pdf.js.map +1 -0
  212. package/dist/tools/page-reload.d.ts +6 -0
  213. package/dist/tools/page-reload.d.ts.map +1 -0
  214. package/dist/tools/page-reload.js +89 -0
  215. package/dist/tools/page-reload.js.map +1 -0
  216. package/dist/tools/performance-metrics.d.ts +6 -0
  217. package/dist/tools/performance-metrics.d.ts.map +1 -0
  218. package/dist/tools/performance-metrics.js +158 -0
  219. package/dist/tools/performance-metrics.js.map +1 -0
  220. package/dist/tools/read-page.d.ts.map +1 -1
  221. package/dist/tools/read-page.js +4 -2
  222. package/dist/tools/read-page.js.map +1 -1
  223. package/dist/tools/request-intercept.d.ts +6 -0
  224. package/dist/tools/request-intercept.d.ts.map +1 -0
  225. package/dist/tools/request-intercept.js +439 -0
  226. package/dist/tools/request-intercept.js.map +1 -0
  227. package/dist/tools/selector-query.d.ts +6 -0
  228. package/dist/tools/selector-query.d.ts.map +1 -0
  229. package/dist/tools/selector-query.js +206 -0
  230. package/dist/tools/selector-query.js.map +1 -0
  231. package/dist/tools/storage.d.ts +6 -0
  232. package/dist/tools/storage.d.ts.map +1 -0
  233. package/dist/tools/storage.js +264 -0
  234. package/dist/tools/storage.js.map +1 -0
  235. package/dist/tools/tabs-close.d.ts +6 -0
  236. package/dist/tools/tabs-close.d.ts.map +1 -0
  237. package/dist/tools/tabs-close.js +124 -0
  238. package/dist/tools/tabs-close.js.map +1 -0
  239. package/dist/tools/tabs-context.js +1 -1
  240. package/dist/tools/tabs-context.js.map +1 -1
  241. package/dist/tools/user-agent.d.ts +6 -0
  242. package/dist/tools/user-agent.d.ts.map +1 -0
  243. package/dist/tools/user-agent.js +128 -0
  244. package/dist/tools/user-agent.js.map +1 -0
  245. package/dist/tools/wait-and-click.d.ts +8 -0
  246. package/dist/tools/wait-and-click.d.ts.map +1 -0
  247. package/dist/tools/wait-and-click.js +290 -0
  248. package/dist/tools/wait-and-click.js.map +1 -0
  249. package/dist/tools/wait-for.d.ts +6 -0
  250. package/dist/tools/wait-for.d.ts.map +1 -0
  251. package/dist/tools/wait-for.js +248 -0
  252. package/dist/tools/wait-for.js.map +1 -0
  253. package/dist/tools/xpath-query.d.ts +6 -0
  254. package/dist/tools/xpath-query.d.ts.map +1 -0
  255. package/dist/tools/xpath-query.js +230 -0
  256. package/dist/tools/xpath-query.js.map +1 -0
  257. package/dist/types/browser-backend.d.ts +30 -0
  258. package/dist/types/browser-backend.d.ts.map +1 -0
  259. package/dist/types/browser-backend.js +9 -0
  260. package/dist/types/browser-backend.js.map +1 -0
  261. package/dist/types/profile.d.ts +76 -0
  262. package/dist/types/profile.d.ts.map +1 -0
  263. package/dist/types/profile.js +35 -0
  264. package/dist/types/profile.js.map +1 -0
  265. package/dist/types/session.d.ts +7 -3
  266. package/dist/types/session.d.ts.map +1 -1
  267. package/package.json +78 -75
  268. package/dist/master/index.d.ts +0 -18
  269. package/dist/master/index.d.ts.map +0 -1
  270. package/dist/master/index.js +0 -75
  271. package/dist/master/index.js.map +0 -1
  272. package/dist/master/ipc-server.d.ts +0 -21
  273. package/dist/master/ipc-server.d.ts.map +0 -1
  274. package/dist/master/ipc-server.js +0 -175
  275. package/dist/master/ipc-server.js.map +0 -1
  276. package/dist/master/request-handler.d.ts +0 -17
  277. package/dist/master/request-handler.d.ts.map +0 -1
  278. package/dist/master/request-handler.js +0 -134
  279. package/dist/master/request-handler.js.map +0 -1
  280. package/dist/master/session-registry.d.ts +0 -120
  281. package/dist/master/session-registry.d.ts.map +0 -1
  282. package/dist/master/session-registry.js +0 -247
  283. package/dist/master/session-registry.js.map +0 -1
  284. package/dist/shared/ipc-constants.d.ts +0 -16
  285. package/dist/shared/ipc-constants.d.ts.map +0 -1
  286. package/dist/shared/ipc-constants.js +0 -66
  287. package/dist/shared/ipc-constants.js.map +0 -1
  288. package/dist/shared/ipc-protocol.d.ts +0 -33
  289. package/dist/shared/ipc-protocol.d.ts.map +0 -1
  290. package/dist/shared/ipc-protocol.js +0 -20
  291. package/dist/shared/ipc-protocol.js.map +0 -1
  292. package/dist/worker/auto-master.d.ts +0 -24
  293. package/dist/worker/auto-master.d.ts.map +0 -1
  294. package/dist/worker/auto-master.js +0 -135
  295. package/dist/worker/auto-master.js.map +0 -1
  296. package/dist/worker/index.d.ts +0 -25
  297. package/dist/worker/index.d.ts.map +0 -1
  298. package/dist/worker/index.js +0 -93
  299. package/dist/worker/index.js.map +0 -1
  300. package/dist/worker/ipc-client.d.ts +0 -26
  301. package/dist/worker/ipc-client.d.ts.map +0 -1
  302. package/dist/worker/ipc-client.js +0 -211
  303. package/dist/worker/ipc-client.js.map +0 -1
  304. package/dist/worker/remote-session-manager.d.ts +0 -114
  305. package/dist/worker/remote-session-manager.d.ts.map +0 -1
  306. package/dist/worker/remote-session-manager.js +0 -151
  307. package/dist/worker/remote-session-manager.js.map +0 -1
  308. package/dist/worker/tools.d.ts +0 -7
  309. package/dist/worker/tools.d.ts.map +0 -1
  310. package/dist/worker/tools.js +0 -340
  311. package/dist/worker/tools.js.map +0 -1
  312. package/dist/worker/worker-mcp-server.d.ts +0 -70
  313. package/dist/worker/worker-mcp-server.d.ts.map +0 -1
  314. package/dist/worker/worker-mcp-server.js +0 -295
  315. package/dist/worker/worker-mcp-server.js.map +0 -1
package/assets/demo.svg CHANGED
@@ -1,173 +1,278 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 380">
2
- <defs>
3
- <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" style="stop-color:#1a1a2e"/>
5
- <stop offset="100%" style="stop-color:#16213e"/>
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="errorGrad" x1="0%" y1="0%" x2="100%" y2="0%">
12
- <stop offset="0%" style="stop-color:#e74c3c"/>
13
- <stop offset="100%" style="stop-color:#c0392b"/>
14
- </linearGradient>
15
- </defs>
16
-
17
- <!-- Background -->
18
- <rect width="800" height="380" fill="url(#bgGrad)"/>
19
-
20
- <!-- Title -->
21
- <text x="400" y="30" text-anchor="middle" fill="#fff" font-family="system-ui, -apple-system, sans-serif" font-size="16" font-weight="bold">
22
- Chrome Extension vs Claude Chrome Parallel
23
- </text>
24
-
25
- <!-- LEFT SIDE: Chrome Extension (Failing) -->
26
- <g transform="translate(25, 50)">
27
- <!-- Header -->
28
- <rect x="0" y="0" width="360" height="28" rx="8" ry="8" fill="#2d3436"/>
29
- <circle cx="14" cy="14" r="5" fill="#e74c3c"/>
30
- <circle cx="30" cy="14" r="5" fill="#f39c12"/>
31
- <circle cx="46" cy="14" r="5" fill="#27ae60"/>
32
- <text x="180" y="18" text-anchor="middle" fill="#b2bec3" font-family="monospace" font-size="11">Chrome Extension</text>
33
-
34
- <!-- Terminal body -->
35
- <rect x="0" y="28" width="360" height="270" fill="#0d1117"/>
36
- <rect x="0" y="288" width="360" height="10" rx="0" ry="0" fill="#2d3436"/>
37
-
38
- <!-- Session 1 - Starts, completes -->
39
- <text x="10" y="50" fill="#6c5ce7" font-family="monospace" font-size="11">$ claude "Screenshot github.com"</text>
40
-
41
- <!-- Session 1 progress bar -->
42
- <rect x="10" y="58" width="0" height="12" rx="2" fill="url(#successGrad)">
43
- <animate attributeName="width" values="0;0;150;150;150;150;150;150;150;150;150" dur="10s" repeatCount="indefinite"/>
44
- </rect>
45
- <text x="10" y="85" fill="#00b894" font-family="monospace" font-size="11">
46
- <tspan>✓ Session 1 completed</tspan>
47
- <animate attributeName="opacity" values="0;0;0;1;1;1;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
48
- </text>
49
-
50
- <!-- Session 2 - Tries to start, gets error -->
51
- <text x="10" y="115" fill="#6c5ce7" font-family="monospace" font-size="11">
52
- <tspan>$ claude "Screenshot google.com"</tspan>
53
- <animate attributeName="opacity" values="0;0;0;0;1;1;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
54
- </text>
55
-
56
- <!-- Session 2 attempting -->
57
- <text x="10" y="135" fill="#fdcb6e" font-family="monospace" font-size="11">
58
- <tspan>Connecting to browser...</tspan>
59
- <animate attributeName="opacity" values="0;0;0;0;0;1;0;0;0;0;0" dur="10s" repeatCount="indefinite"/>
60
- </text>
61
-
62
- <!-- Error box -->
63
- <g>
64
- <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
65
- <rect x="10" y="145" width="340" height="55" rx="4" fill="#2d1b1b"/>
66
- <text x="20" y="167" fill="#e74c3c" font-family="monospace" font-size="12" font-weight="bold">
67
- Error: Session Detached
68
- </text>
69
- <text x="20" y="187" fill="#e17055" font-family="monospace" font-size="10">
70
- Target closed. Another session took control.
71
- </text>
72
- </g>
73
-
74
- <!-- Blinking cursor at bottom -->
75
- <rect x="10" y="215" width="8" height="14" fill="#fff">
76
- <animate attributeName="opacity" values="1;0;1" dur="1s" repeatCount="indefinite"/>
77
- </rect>
78
-
79
- <!-- Status -->
80
- <text x="180" y="270" text-anchor="middle" fill="#e74c3c" font-family="system-ui" font-size="13" font-weight="bold">
81
- ❌ Only 1 session at a time
82
- </text>
83
- </g>
84
-
85
- <!-- VS Divider -->
86
- <text x="400" y="200" text-anchor="middle" fill="#636e72" font-family="system-ui" font-size="22" font-weight="bold">VS</text>
87
-
88
- <!-- RIGHT SIDE: Claude Chrome Parallel (Success) -->
89
- <g transform="translate(415, 50)">
90
- <!-- Header -->
91
- <rect x="0" y="0" width="360" height="28" rx="8" ry="8" fill="#2d3436"/>
92
- <circle cx="14" cy="14" r="5" fill="#e74c3c"/>
93
- <circle cx="30" cy="14" r="5" fill="#f39c12"/>
94
- <circle cx="46" cy="14" r="5" fill="#27ae60"/>
95
- <text x="180" y="18" text-anchor="middle" fill="#00b894" font-family="monospace" font-size="11" font-weight="bold">Claude Chrome Parallel</text>
96
-
97
- <!-- Terminal body -->
98
- <rect x="0" y="28" width="360" height="270" fill="#0d1117"/>
99
- <rect x="0" y="288" width="360" height="10" rx="0" ry="0" fill="#2d3436"/>
100
-
101
- <!-- ALL 5 SESSIONS START SIMULTANEOUSLY -->
102
-
103
- <!-- Session 1 -->
104
- <text x="10" y="50" fill="#a29bfe" font-family="monospace" font-size="11">Session 1: github.com</text>
105
- <rect x="150" y="40" width="0" height="12" rx="2" fill="url(#successGrad)">
106
- <animate attributeName="width" values="0;0;20;50;80;110;130;130;130;130;130" dur="10s" repeatCount="indefinite"/>
107
- </rect>
108
- <text x="290" y="50" fill="#00b894" font-family="monospace" font-size="11">
109
- <tspan>✓</tspan>
110
- <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
111
- </text>
112
-
113
- <!-- Session 2 -->
114
- <text x="10" y="75" fill="#a29bfe" font-family="monospace" font-size="11">Session 2: google.com</text>
115
- <rect x="150" y="65" width="0" height="12" rx="2" fill="url(#successGrad)">
116
- <animate attributeName="width" values="0;0;25;55;85;100;120;120;120;120;120" dur="10s" repeatCount="indefinite"/>
117
- </rect>
118
- <text x="280" y="75" fill="#00b894" font-family="monospace" font-size="11">
119
- <tspan>✓</tspan>
120
- <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
121
- </text>
122
-
123
- <!-- Session 3 -->
124
- <text x="10" y="100" fill="#a29bfe" font-family="monospace" font-size="11">Session 3: amazon.com</text>
125
- <rect x="150" y="90" width="0" height="12" rx="2" fill="url(#successGrad)">
126
- <animate attributeName="width" values="0;0;30;60;90;120;140;140;140;140;140" dur="10s" repeatCount="indefinite"/>
127
- </rect>
128
- <text x="300" y="100" fill="#00b894" font-family="monospace" font-size="11">
129
- <tspan>✓</tspan>
130
- <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
131
- </text>
132
-
133
- <!-- Session 4 -->
134
- <text x="10" y="125" fill="#a29bfe" font-family="monospace" font-size="11">Session 4: naver.com</text>
135
- <rect x="150" y="115" width="0" height="12" rx="2" fill="url(#successGrad)">
136
- <animate attributeName="width" values="0;0;15;45;75;95;110;110;110;110;110" dur="10s" repeatCount="indefinite"/>
137
- </rect>
138
- <text x="270" y="125" fill="#00b894" font-family="monospace" font-size="11">
139
- <tspan>✓</tspan>
140
- <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
141
- </text>
142
-
143
- <!-- Session 5 -->
144
- <text x="10" y="150" fill="#a29bfe" font-family="monospace" font-size="11">Session 5: twitter.com</text>
145
- <rect x="150" y="140" width="0" height="12" rx="2" fill="url(#successGrad)">
146
- <animate attributeName="width" values="0;0;22;52;82;112;125;125;125;125;125" dur="10s" repeatCount="indefinite"/>
147
- </rect>
148
- <text x="285" y="150" fill="#00b894" font-family="monospace" font-size="11">
149
- <tspan>✓</tspan>
150
- <animate attributeName="opacity" values="0;0;0;0;0;0;1;1;1;1;1" dur="10s" repeatCount="indefinite"/>
151
- </text>
152
-
153
- <!-- Result summary box -->
154
- <g>
155
- <animate attributeName="opacity" values="0;0;0;0;0;0;0;1;1;1;1" dur="10s" repeatCount="indefinite"/>
156
- <rect x="10" y="170" width="340" height="70" rx="6" fill="#1a3a1a"/>
157
- <text x="180" y="195" text-anchor="middle" fill="#00b894" font-family="system-ui" font-size="12" font-weight="bold">
158
- All 5 sessions completed in parallel!
159
- </text>
160
- <text x="180" y="215" text-anchor="middle" fill="#55efc4" font-family="monospace" font-size="11">
161
- Total: 1.4s (Sequential would take 7.0s)
162
- </text>
163
- <text x="180" y="232" text-anchor="middle" fill="#81ecec" font-family="system-ui" font-size="11">
164
- 5x faster
165
- </text>
166
- </g>
167
-
168
- <!-- Status -->
169
- <text x="180" y="270" text-anchor="middle" fill="#00b894" font-family="system-ui" font-size="13" font-weight="bold">
170
- ✅ 20+ concurrent sessions
171
- </text>
172
- </g>
173
- </svg>
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 CCP — 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: CCP (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">CCP (Claude Chrome Parallel)</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">CCP: ~3s | 300MB | already logged in</text>
277
+ </g>
278
+ </svg>
@@ -30,6 +30,9 @@ export declare class CDPClient {
30
30
  private targetDestroyedListeners;
31
31
  private reconnectAttempts;
32
32
  private autoLaunch;
33
+ private cookieSourceCache;
34
+ private cookieDataCache;
35
+ private static readonly COOKIE_CACHE_TTL;
33
36
  constructor(options?: CDPClientOptions);
34
37
  /**
35
38
  * Get current connection state
@@ -104,12 +107,32 @@ export declare class CDPClient {
104
107
  * Close a browser context and all its pages
105
108
  */
106
109
  closeBrowserContext(context: BrowserContext): Promise<void>;
110
+ /**
111
+ * Check if a hostname is localhost
112
+ */
113
+ private isLocalhost;
114
+ /**
115
+ * Calculate domain match score between two URLs
116
+ * Higher score = better match
117
+ */
118
+ private domainMatchScore;
119
+ /**
120
+ * Find an authenticated page with cookies to copy from
121
+ * Returns the targetId of a page that has cookies in Chrome's default context
122
+ * @param targetDomain Optional domain to prioritize when selecting cookie source
123
+ */
124
+ findAuthenticatedPageTargetId(targetDomain?: string): Promise<string | null>;
125
+ /**
126
+ * Copy all cookies from authenticated page to destination page
127
+ * Uses raw WebSocket CDP connection to bypass Puppeteer's context isolation
128
+ */
129
+ copyCookiesViaCDP(sourceTargetId: string, destPage: Page): Promise<number>;
107
130
  /**
108
131
  * Create a new page with default viewport
109
132
  * @param url Optional URL to navigate to
110
- * @param context Optional browser context for session isolation
133
+ * @param context Optional browser context for session isolation (null/undefined = use Chrome's default context with cookies)
111
134
  */
112
- createPage(url?: string, context?: BrowserContext): Promise<Page>;
135
+ createPage(url?: string, context?: BrowserContext | null): Promise<Page>;
113
136
  /**
114
137
  * Get all page targets
115
138
  */
@@ -134,6 +157,10 @@ export declare class CDPClient {
134
157
  * Find target by ID
135
158
  */
136
159
  findTarget(targetId: string): Target | undefined;
160
+ /**
161
+ * Trigger garbage collection on a page (best-effort)
162
+ */
163
+ triggerGC(page: Page): Promise<void>;
137
164
  /**
138
165
  * Close a page by target ID
139
166
  */
@@ -142,6 +169,37 @@ export declare class CDPClient {
142
169
  * Check if connected
143
170
  */
144
171
  isConnected(): boolean;
172
+ /**
173
+ * Get the port this client is connected to
174
+ */
175
+ getPort(): number;
176
+ /**
177
+ * Create a CDPClient instance for a specific port
178
+ */
179
+ static createForPort(port: number, options?: CDPClientOptions): CDPClient;
145
180
  }
146
181
  export declare function getCDPClient(options?: CDPClientOptions): CDPClient;
182
+ /**
183
+ * Factory for managing multiple CDPClient instances (one per Chrome port)
184
+ */
185
+ export declare class CDPClientFactory {
186
+ private clients;
187
+ /**
188
+ * Get an existing client for the given port, or create a new one
189
+ */
190
+ getOrCreate(port: number, options?: CDPClientOptions): CDPClient;
191
+ /**
192
+ * Get an existing client for the given port, or undefined if not found
193
+ */
194
+ get(port: number): CDPClient | undefined;
195
+ /**
196
+ * Get all managed client instances
197
+ */
198
+ getAll(): CDPClient[];
199
+ /**
200
+ * Disconnect all managed clients
201
+ */
202
+ disconnectAll(): Promise<void>;
203
+ }
204
+ export declare function getCDPClientFactory(): CDPClientFactory;
147
205
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAkB,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI9F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,cAAc,GAAG,kBAAkB,CAAC;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,wBAAwB,CAAsC;IACtE,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,UAAU,CAAU;gBAEhB,OAAO,GAAE,gBAAqB;IAU1C;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAIvE;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAO1E;;OAEG;IACH,0BAA0B,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAItE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,gBAAgB;IAoD9B;;OAEG;YACW,eAAe;IA6B7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B9B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACH,UAAU,IAAI,OAAO;IAQrB,MAAM,CAAC,QAAQ,CAAC,gBAAgB;;;MAAiC;IAEjE;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC;IAOrD;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;;;OAIG;IACG,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAKjC;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAc/D;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IAapD;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD;;OAEG;IACH,WAAW,IAAI,OAAO;CAGvB;AAKD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAKlE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"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"}