@iflow-mcp/shaun0927-openchrome 1.7.13

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 (525) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +387 -0
  3. package/assets/chart-tokens.svg +42 -0
  4. package/assets/demo.svg +278 -0
  5. package/assets/mascot.png +0 -0
  6. package/dist/cdp/client.d.ts +265 -0
  7. package/dist/cdp/client.d.ts.map +1 -0
  8. package/dist/cdp/client.js +1419 -0
  9. package/dist/cdp/client.js.map +1 -0
  10. package/dist/cdp/connection-pool.d.ts +117 -0
  11. package/dist/cdp/connection-pool.d.ts.map +1 -0
  12. package/dist/cdp/connection-pool.js +421 -0
  13. package/dist/cdp/connection-pool.js.map +1 -0
  14. package/dist/cdp/screenshot-scheduler.d.ts +55 -0
  15. package/dist/cdp/screenshot-scheduler.d.ts.map +1 -0
  16. package/dist/cdp/screenshot-scheduler.js +121 -0
  17. package/dist/cdp/screenshot-scheduler.js.map +1 -0
  18. package/dist/chrome/launcher.d.ts +113 -0
  19. package/dist/chrome/launcher.d.ts.map +1 -0
  20. package/dist/chrome/launcher.js +850 -0
  21. package/dist/chrome/launcher.js.map +1 -0
  22. package/dist/chrome/pool.d.ts +43 -0
  23. package/dist/chrome/pool.d.ts.map +1 -0
  24. package/dist/chrome/pool.js +219 -0
  25. package/dist/chrome/pool.js.map +1 -0
  26. package/dist/chrome/profile-manager.d.ts +156 -0
  27. package/dist/chrome/profile-manager.d.ts.map +1 -0
  28. package/dist/chrome/profile-manager.js +558 -0
  29. package/dist/chrome/profile-manager.js.map +1 -0
  30. package/dist/cli/claude-session.d.ts +11 -0
  31. package/dist/cli/claude-session.js +349 -0
  32. package/dist/cli/claude-session.js.map +1 -0
  33. package/dist/cli/index.d.ts +14 -0
  34. package/dist/cli/index.js +1013 -0
  35. package/dist/cli/index.js.map +1 -0
  36. package/dist/cli/install.d.ts +16 -0
  37. package/dist/cli/install.js +185 -0
  38. package/dist/cli/install.js.map +1 -0
  39. package/dist/cli/uninstall.d.ts +7 -0
  40. package/dist/cli/uninstall.js +126 -0
  41. package/dist/cli/uninstall.js.map +1 -0
  42. package/dist/cli/update-check.d.ts +10 -0
  43. package/dist/cli/update-check.js +187 -0
  44. package/dist/cli/update-check.js.map +1 -0
  45. package/dist/compression/snapshot-store.d.ts +54 -0
  46. package/dist/compression/snapshot-store.d.ts.map +1 -0
  47. package/dist/compression/snapshot-store.js +183 -0
  48. package/dist/compression/snapshot-store.js.map +1 -0
  49. package/dist/config/defaults.d.ts +102 -0
  50. package/dist/config/defaults.d.ts.map +1 -0
  51. package/dist/config/defaults.js +102 -0
  52. package/dist/config/defaults.js.map +1 -0
  53. package/dist/config/global.d.ts +81 -0
  54. package/dist/config/global.d.ts.map +1 -0
  55. package/dist/config/global.js +30 -0
  56. package/dist/config/global.js.map +1 -0
  57. package/dist/config/index.d.ts +16 -0
  58. package/dist/config/index.d.ts.map +1 -0
  59. package/dist/config/index.js +21 -0
  60. package/dist/config/index.js.map +1 -0
  61. package/dist/config/tool-tiers.d.ts +14 -0
  62. package/dist/config/tool-tiers.d.ts.map +1 -0
  63. package/dist/config/tool-tiers.js +69 -0
  64. package/dist/config/tool-tiers.js.map +1 -0
  65. package/dist/dashboard/activity-tracker.d.ts +95 -0
  66. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  67. package/dist/dashboard/activity-tracker.js +275 -0
  68. package/dist/dashboard/activity-tracker.js.map +1 -0
  69. package/dist/dashboard/ansi.d.ts +117 -0
  70. package/dist/dashboard/ansi.d.ts.map +1 -0
  71. package/dist/dashboard/ansi.js +199 -0
  72. package/dist/dashboard/ansi.js.map +1 -0
  73. package/dist/dashboard/index.d.ts +110 -0
  74. package/dist/dashboard/index.d.ts.map +1 -0
  75. package/dist/dashboard/index.js +413 -0
  76. package/dist/dashboard/index.js.map +1 -0
  77. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  78. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  79. package/dist/dashboard/keyboard-handler.js +230 -0
  80. package/dist/dashboard/keyboard-handler.js.map +1 -0
  81. package/dist/dashboard/operation-controller.d.ts +76 -0
  82. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  83. package/dist/dashboard/operation-controller.js +167 -0
  84. package/dist/dashboard/operation-controller.js.map +1 -0
  85. package/dist/dashboard/renderer.d.ts +76 -0
  86. package/dist/dashboard/renderer.d.ts.map +1 -0
  87. package/dist/dashboard/renderer.js +193 -0
  88. package/dist/dashboard/renderer.js.map +1 -0
  89. package/dist/dashboard/types.d.ts +74 -0
  90. package/dist/dashboard/types.d.ts.map +1 -0
  91. package/dist/dashboard/types.js +12 -0
  92. package/dist/dashboard/types.js.map +1 -0
  93. package/dist/dashboard/views/main-view.d.ts +23 -0
  94. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  95. package/dist/dashboard/views/main-view.js +143 -0
  96. package/dist/dashboard/views/main-view.js.map +1 -0
  97. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  98. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  99. package/dist/dashboard/views/sessions-view.js +104 -0
  100. package/dist/dashboard/views/sessions-view.js.map +1 -0
  101. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  102. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  103. package/dist/dashboard/views/tabs-view.js +92 -0
  104. package/dist/dashboard/views/tabs-view.js.map +1 -0
  105. package/dist/dom/dom-serializer.d.ts +37 -0
  106. package/dist/dom/dom-serializer.d.ts.map +1 -0
  107. package/dist/dom/dom-serializer.js +429 -0
  108. package/dist/dom/dom-serializer.js.map +1 -0
  109. package/dist/dom/index.d.ts +2 -0
  110. package/dist/dom/index.d.ts.map +1 -0
  111. package/dist/dom/index.js +6 -0
  112. package/dist/dom/index.js.map +1 -0
  113. package/dist/errors/timeout.d.ts +20 -0
  114. package/dist/errors/timeout.d.ts.map +1 -0
  115. package/dist/errors/timeout.js +41 -0
  116. package/dist/errors/timeout.js.map +1 -0
  117. package/dist/hints/hint-engine.d.ts +117 -0
  118. package/dist/hints/hint-engine.d.ts.map +1 -0
  119. package/dist/hints/hint-engine.js +347 -0
  120. package/dist/hints/hint-engine.js.map +1 -0
  121. package/dist/hints/index.d.ts +8 -0
  122. package/dist/hints/index.d.ts.map +1 -0
  123. package/dist/hints/index.js +11 -0
  124. package/dist/hints/index.js.map +1 -0
  125. package/dist/hints/pattern-learner.d.ts +76 -0
  126. package/dist/hints/pattern-learner.d.ts.map +1 -0
  127. package/dist/hints/pattern-learner.js +254 -0
  128. package/dist/hints/pattern-learner.js.map +1 -0
  129. package/dist/hints/progress-tracker.d.ts +44 -0
  130. package/dist/hints/progress-tracker.d.ts.map +1 -0
  131. package/dist/hints/progress-tracker.js +118 -0
  132. package/dist/hints/progress-tracker.js.map +1 -0
  133. package/dist/hints/rules/blocking-page.d.ts +8 -0
  134. package/dist/hints/rules/blocking-page.d.ts.map +1 -0
  135. package/dist/hints/rules/blocking-page.js +58 -0
  136. package/dist/hints/rules/blocking-page.js.map +1 -0
  137. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  138. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  139. package/dist/hints/rules/composite-suggestions.js +138 -0
  140. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  141. package/dist/hints/rules/error-recovery.d.ts +7 -0
  142. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  143. package/dist/hints/rules/error-recovery.js +59 -0
  144. package/dist/hints/rules/error-recovery.js.map +1 -0
  145. package/dist/hints/rules/learned-rules.d.ts +13 -0
  146. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  147. package/dist/hints/rules/learned-rules.js +27 -0
  148. package/dist/hints/rules/learned-rules.js.map +1 -0
  149. package/dist/hints/rules/pagination-detection.d.ts +7 -0
  150. package/dist/hints/rules/pagination-detection.d.ts.map +1 -0
  151. package/dist/hints/rules/pagination-detection.js +220 -0
  152. package/dist/hints/rules/pagination-detection.js.map +1 -0
  153. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  154. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  155. package/dist/hints/rules/repetition-detection.js +271 -0
  156. package/dist/hints/rules/repetition-detection.js.map +1 -0
  157. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  158. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  159. package/dist/hints/rules/sequence-detection.js +99 -0
  160. package/dist/hints/rules/sequence-detection.js.map +1 -0
  161. package/dist/hints/rules/setup-hints.d.ts +6 -0
  162. package/dist/hints/rules/setup-hints.d.ts.map +1 -0
  163. package/dist/hints/rules/setup-hints.js +24 -0
  164. package/dist/hints/rules/setup-hints.js.map +1 -0
  165. package/dist/hints/rules/success-hints.d.ts +6 -0
  166. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  167. package/dist/hints/rules/success-hints.js +74 -0
  168. package/dist/hints/rules/success-hints.js.map +1 -0
  169. package/dist/index.d.ts +10 -0
  170. package/dist/index.d.ts.map +1 -0
  171. package/dist/index.js +357 -0
  172. package/dist/index.js.map +1 -0
  173. package/dist/lightpanda/launcher.d.ts +58 -0
  174. package/dist/lightpanda/launcher.d.ts.map +1 -0
  175. package/dist/lightpanda/launcher.js +210 -0
  176. package/dist/lightpanda/launcher.js.map +1 -0
  177. package/dist/mcp-server.d.ts +154 -0
  178. package/dist/mcp-server.d.ts.map +1 -0
  179. package/dist/mcp-server.js +962 -0
  180. package/dist/mcp-server.js.map +1 -0
  181. package/dist/memory/domain-memory.d.ts +68 -0
  182. package/dist/memory/domain-memory.d.ts.map +1 -0
  183. package/dist/memory/domain-memory.js +224 -0
  184. package/dist/memory/domain-memory.js.map +1 -0
  185. package/dist/orchestration/plan-executor.d.ts +19 -0
  186. package/dist/orchestration/plan-executor.d.ts.map +1 -0
  187. package/dist/orchestration/plan-executor.js +276 -0
  188. package/dist/orchestration/plan-executor.js.map +1 -0
  189. package/dist/orchestration/plan-registry.d.ts +55 -0
  190. package/dist/orchestration/plan-registry.d.ts.map +1 -0
  191. package/dist/orchestration/plan-registry.js +256 -0
  192. package/dist/orchestration/plan-registry.js.map +1 -0
  193. package/dist/orchestration/state-manager.d.ts +127 -0
  194. package/dist/orchestration/state-manager.d.ts.map +1 -0
  195. package/dist/orchestration/state-manager.js +438 -0
  196. package/dist/orchestration/state-manager.js.map +1 -0
  197. package/dist/orchestration/workflow-engine.d.ts +162 -0
  198. package/dist/orchestration/workflow-engine.d.ts.map +1 -0
  199. package/dist/orchestration/workflow-engine.js +748 -0
  200. package/dist/orchestration/workflow-engine.js.map +1 -0
  201. package/dist/resources/usage-guide.d.ts +13 -0
  202. package/dist/resources/usage-guide.d.ts.map +1 -0
  203. package/dist/resources/usage-guide.js +123 -0
  204. package/dist/resources/usage-guide.js.map +1 -0
  205. package/dist/router/browser-router.d.ts +47 -0
  206. package/dist/router/browser-router.d.ts.map +1 -0
  207. package/dist/router/browser-router.js +157 -0
  208. package/dist/router/browser-router.js.map +1 -0
  209. package/dist/router/cookie-sync.d.ts +48 -0
  210. package/dist/router/cookie-sync.d.ts.map +1 -0
  211. package/dist/router/cookie-sync.js +106 -0
  212. package/dist/router/cookie-sync.js.map +1 -0
  213. package/dist/router/index.d.ts +5 -0
  214. package/dist/router/index.d.ts.map +1 -0
  215. package/dist/router/index.js +10 -0
  216. package/dist/router/index.js.map +1 -0
  217. package/dist/router/tool-routing-registry.d.ts +21 -0
  218. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  219. package/dist/router/tool-routing-registry.js +89 -0
  220. package/dist/router/tool-routing-registry.js.map +1 -0
  221. package/dist/security/audit-logger.d.ts +2 -0
  222. package/dist/security/audit-logger.d.ts.map +1 -0
  223. package/dist/security/audit-logger.js +109 -0
  224. package/dist/security/audit-logger.js.map +1 -0
  225. package/dist/security/domain-guard.d.ts +11 -0
  226. package/dist/security/domain-guard.d.ts.map +1 -0
  227. package/dist/security/domain-guard.js +98 -0
  228. package/dist/security/domain-guard.js.map +1 -0
  229. package/dist/session-manager.d.ts +325 -0
  230. package/dist/session-manager.d.ts.map +1 -0
  231. package/dist/session-manager.js +1402 -0
  232. package/dist/session-manager.js.map +1 -0
  233. package/dist/storage-state/index.d.ts +2 -0
  234. package/dist/storage-state/index.d.ts.map +1 -0
  235. package/dist/storage-state/index.js +6 -0
  236. package/dist/storage-state/index.js.map +1 -0
  237. package/dist/storage-state/storage-state-manager.d.ts +52 -0
  238. package/dist/storage-state/storage-state-manager.d.ts.map +1 -0
  239. package/dist/storage-state/storage-state-manager.js +135 -0
  240. package/dist/storage-state/storage-state-manager.js.map +1 -0
  241. package/dist/tools/batch-execute.d.ts +11 -0
  242. package/dist/tools/batch-execute.d.ts.map +1 -0
  243. package/dist/tools/batch-execute.js +218 -0
  244. package/dist/tools/batch-execute.js.map +1 -0
  245. package/dist/tools/batch-paginate.d.ts +10 -0
  246. package/dist/tools/batch-paginate.d.ts.map +1 -0
  247. package/dist/tools/batch-paginate.js +436 -0
  248. package/dist/tools/batch-paginate.js.map +1 -0
  249. package/dist/tools/click-element.d.ts +8 -0
  250. package/dist/tools/click-element.d.ts.map +1 -0
  251. package/dist/tools/click-element.js +281 -0
  252. package/dist/tools/click-element.js.map +1 -0
  253. package/dist/tools/computer.d.ts +6 -0
  254. package/dist/tools/computer.d.ts.map +1 -0
  255. package/dist/tools/computer.js +832 -0
  256. package/dist/tools/computer.js.map +1 -0
  257. package/dist/tools/console-capture.d.ts +6 -0
  258. package/dist/tools/console-capture.d.ts.map +1 -0
  259. package/dist/tools/console-capture.js +380 -0
  260. package/dist/tools/console-capture.js.map +1 -0
  261. package/dist/tools/cookies.d.ts +6 -0
  262. package/dist/tools/cookies.d.ts.map +1 -0
  263. package/dist/tools/cookies.js +366 -0
  264. package/dist/tools/cookies.js.map +1 -0
  265. package/dist/tools/drag-drop.d.ts +6 -0
  266. package/dist/tools/drag-drop.d.ts.map +1 -0
  267. package/dist/tools/drag-drop.js +263 -0
  268. package/dist/tools/drag-drop.js.map +1 -0
  269. package/dist/tools/emulate-device.d.ts +6 -0
  270. package/dist/tools/emulate-device.d.ts.map +1 -0
  271. package/dist/tools/emulate-device.js +219 -0
  272. package/dist/tools/emulate-device.js.map +1 -0
  273. package/dist/tools/file-upload.d.ts +6 -0
  274. package/dist/tools/file-upload.d.ts.map +1 -0
  275. package/dist/tools/file-upload.js +224 -0
  276. package/dist/tools/file-upload.js.map +1 -0
  277. package/dist/tools/fill-form.d.ts +8 -0
  278. package/dist/tools/fill-form.d.ts.map +1 -0
  279. package/dist/tools/fill-form.js +311 -0
  280. package/dist/tools/fill-form.js.map +1 -0
  281. package/dist/tools/find.d.ts +6 -0
  282. package/dist/tools/find.d.ts.map +1 -0
  283. package/dist/tools/find.js +163 -0
  284. package/dist/tools/find.js.map +1 -0
  285. package/dist/tools/form-input.d.ts +6 -0
  286. package/dist/tools/form-input.d.ts.map +1 -0
  287. package/dist/tools/form-input.js +219 -0
  288. package/dist/tools/form-input.js.map +1 -0
  289. package/dist/tools/geolocation.d.ts +6 -0
  290. package/dist/tools/geolocation.d.ts.map +1 -0
  291. package/dist/tools/geolocation.js +170 -0
  292. package/dist/tools/geolocation.js.map +1 -0
  293. package/dist/tools/http-auth.d.ts +6 -0
  294. package/dist/tools/http-auth.d.ts.map +1 -0
  295. package/dist/tools/http-auth.js +132 -0
  296. package/dist/tools/http-auth.js.map +1 -0
  297. package/dist/tools/index.d.ts +6 -0
  298. package/dist/tools/index.d.ts.map +1 -0
  299. package/dist/tools/index.js +107 -0
  300. package/dist/tools/index.js.map +1 -0
  301. package/dist/tools/inspect.d.ts +12 -0
  302. package/dist/tools/inspect.d.ts.map +1 -0
  303. package/dist/tools/inspect.js +483 -0
  304. package/dist/tools/inspect.js.map +1 -0
  305. package/dist/tools/interact.d.ts +9 -0
  306. package/dist/tools/interact.d.ts.map +1 -0
  307. package/dist/tools/interact.js +366 -0
  308. package/dist/tools/interact.js.map +1 -0
  309. package/dist/tools/javascript.d.ts +7 -0
  310. package/dist/tools/javascript.d.ts.map +1 -0
  311. package/dist/tools/javascript.js +214 -0
  312. package/dist/tools/javascript.js.map +1 -0
  313. package/dist/tools/lightweight-scroll.d.ts +11 -0
  314. package/dist/tools/lightweight-scroll.d.ts.map +1 -0
  315. package/dist/tools/lightweight-scroll.js +314 -0
  316. package/dist/tools/lightweight-scroll.js.map +1 -0
  317. package/dist/tools/list-profiles.d.ts +10 -0
  318. package/dist/tools/list-profiles.d.ts.map +1 -0
  319. package/dist/tools/list-profiles.js +79 -0
  320. package/dist/tools/list-profiles.js.map +1 -0
  321. package/dist/tools/memory.d.ts +13 -0
  322. package/dist/tools/memory.d.ts.map +1 -0
  323. package/dist/tools/memory.js +159 -0
  324. package/dist/tools/memory.js.map +1 -0
  325. package/dist/tools/navigate.d.ts +6 -0
  326. package/dist/tools/navigate.d.ts.map +1 -0
  327. package/dist/tools/navigate.js +422 -0
  328. package/dist/tools/navigate.js.map +1 -0
  329. package/dist/tools/network.d.ts +6 -0
  330. package/dist/tools/network.d.ts.map +1 -0
  331. package/dist/tools/network.js +229 -0
  332. package/dist/tools/network.js.map +1 -0
  333. package/dist/tools/orchestration.d.ts +6 -0
  334. package/dist/tools/orchestration.d.ts.map +1 -0
  335. package/dist/tools/orchestration.js +735 -0
  336. package/dist/tools/orchestration.js.map +1 -0
  337. package/dist/tools/page-content.d.ts +6 -0
  338. package/dist/tools/page-content.d.ts.map +1 -0
  339. package/dist/tools/page-content.js +129 -0
  340. package/dist/tools/page-content.js.map +1 -0
  341. package/dist/tools/page-pdf.d.ts +6 -0
  342. package/dist/tools/page-pdf.d.ts.map +1 -0
  343. package/dist/tools/page-pdf.js +268 -0
  344. package/dist/tools/page-pdf.js.map +1 -0
  345. package/dist/tools/page-reload.d.ts +6 -0
  346. package/dist/tools/page-reload.d.ts.map +1 -0
  347. package/dist/tools/page-reload.js +91 -0
  348. package/dist/tools/page-reload.js.map +1 -0
  349. package/dist/tools/performance-metrics.d.ts +6 -0
  350. package/dist/tools/performance-metrics.d.ts.map +1 -0
  351. package/dist/tools/performance-metrics.js +154 -0
  352. package/dist/tools/performance-metrics.js.map +1 -0
  353. package/dist/tools/profile-status.d.ts +10 -0
  354. package/dist/tools/profile-status.d.ts.map +1 -0
  355. package/dist/tools/profile-status.js +108 -0
  356. package/dist/tools/profile-status.js.map +1 -0
  357. package/dist/tools/query-dom.d.ts +8 -0
  358. package/dist/tools/query-dom.d.ts.map +1 -0
  359. package/dist/tools/query-dom.js +647 -0
  360. package/dist/tools/query-dom.js.map +1 -0
  361. package/dist/tools/read-page.d.ts +6 -0
  362. package/dist/tools/read-page.d.ts.map +1 -0
  363. package/dist/tools/read-page.js +544 -0
  364. package/dist/tools/read-page.js.map +1 -0
  365. package/dist/tools/request-intercept.d.ts +6 -0
  366. package/dist/tools/request-intercept.d.ts.map +1 -0
  367. package/dist/tools/request-intercept.js +537 -0
  368. package/dist/tools/request-intercept.js.map +1 -0
  369. package/dist/tools/shutdown.d.ts +12 -0
  370. package/dist/tools/shutdown.d.ts.map +1 -0
  371. package/dist/tools/shutdown.js +124 -0
  372. package/dist/tools/shutdown.js.map +1 -0
  373. package/dist/tools/storage.d.ts +6 -0
  374. package/dist/tools/storage.d.ts.map +1 -0
  375. package/dist/tools/storage.js +262 -0
  376. package/dist/tools/storage.js.map +1 -0
  377. package/dist/tools/tabs-close.d.ts +6 -0
  378. package/dist/tools/tabs-close.d.ts.map +1 -0
  379. package/dist/tools/tabs-close.js +124 -0
  380. package/dist/tools/tabs-close.js.map +1 -0
  381. package/dist/tools/tabs-context.d.ts +6 -0
  382. package/dist/tools/tabs-context.d.ts.map +1 -0
  383. package/dist/tools/tabs-context.js +117 -0
  384. package/dist/tools/tabs-context.js.map +1 -0
  385. package/dist/tools/tabs-create.d.ts +6 -0
  386. package/dist/tools/tabs-create.d.ts.map +1 -0
  387. package/dist/tools/tabs-create.js +90 -0
  388. package/dist/tools/tabs-create.js.map +1 -0
  389. package/dist/tools/user-agent.d.ts +6 -0
  390. package/dist/tools/user-agent.d.ts.map +1 -0
  391. package/dist/tools/user-agent.js +126 -0
  392. package/dist/tools/user-agent.js.map +1 -0
  393. package/dist/tools/wait-and-click.d.ts +8 -0
  394. package/dist/tools/wait-and-click.d.ts.map +1 -0
  395. package/dist/tools/wait-and-click.js +165 -0
  396. package/dist/tools/wait-and-click.js.map +1 -0
  397. package/dist/tools/wait-for.d.ts +6 -0
  398. package/dist/tools/wait-for.d.ts.map +1 -0
  399. package/dist/tools/wait-for.js +290 -0
  400. package/dist/tools/wait-for.js.map +1 -0
  401. package/dist/tools/worker.d.ts +8 -0
  402. package/dist/tools/worker.d.ts.map +1 -0
  403. package/dist/tools/worker.js +160 -0
  404. package/dist/tools/worker.js.map +1 -0
  405. package/dist/types/browser-backend.d.ts +30 -0
  406. package/dist/types/browser-backend.d.ts.map +1 -0
  407. package/dist/types/browser-backend.js +9 -0
  408. package/dist/types/browser-backend.js.map +1 -0
  409. package/dist/types/index.d.ts +3 -0
  410. package/dist/types/index.d.ts.map +1 -0
  411. package/dist/types/index.js +19 -0
  412. package/dist/types/index.js.map +1 -0
  413. package/dist/types/mcp.d.ts +63 -0
  414. package/dist/types/mcp.d.ts.map +1 -0
  415. package/dist/types/mcp.js +14 -0
  416. package/dist/types/mcp.js.map +1 -0
  417. package/dist/types/plan-cache.d.ts +121 -0
  418. package/dist/types/plan-cache.d.ts.map +1 -0
  419. package/dist/types/plan-cache.js +9 -0
  420. package/dist/types/plan-cache.js.map +1 -0
  421. package/dist/types/session.d.ts +65 -0
  422. package/dist/types/session.d.ts.map +1 -0
  423. package/dist/types/session.js +6 -0
  424. package/dist/types/session.js.map +1 -0
  425. package/dist/types/tool-manifest.d.ts +52 -0
  426. package/dist/types/tool-manifest.d.ts.map +1 -0
  427. package/dist/types/tool-manifest.js +37 -0
  428. package/dist/types/tool-manifest.js.map +1 -0
  429. package/dist/utils/adaptive-screenshot.d.ts +57 -0
  430. package/dist/utils/adaptive-screenshot.d.ts.map +1 -0
  431. package/dist/utils/adaptive-screenshot.js +126 -0
  432. package/dist/utils/adaptive-screenshot.js.map +1 -0
  433. package/dist/utils/atomic-file.d.ts +50 -0
  434. package/dist/utils/atomic-file.d.ts.map +1 -0
  435. package/dist/utils/atomic-file.js +217 -0
  436. package/dist/utils/atomic-file.js.map +1 -0
  437. package/dist/utils/dom-delta.d.ts +36 -0
  438. package/dist/utils/dom-delta.d.ts.map +1 -0
  439. package/dist/utils/dom-delta.js +314 -0
  440. package/dist/utils/dom-delta.js.map +1 -0
  441. package/dist/utils/element-discovery.d.ts +115 -0
  442. package/dist/utils/element-discovery.d.ts.map +1 -0
  443. package/dist/utils/element-discovery.js +519 -0
  444. package/dist/utils/element-discovery.js.map +1 -0
  445. package/dist/utils/element-finder.d.ts +49 -0
  446. package/dist/utils/element-finder.d.ts.map +1 -0
  447. package/dist/utils/element-finder.js +130 -0
  448. package/dist/utils/element-finder.js.map +1 -0
  449. package/dist/utils/format-age.d.ts +5 -0
  450. package/dist/utils/format-age.d.ts.map +1 -0
  451. package/dist/utils/format-age.js +15 -0
  452. package/dist/utils/format-age.js.map +1 -0
  453. package/dist/utils/format-error.d.ts +5 -0
  454. package/dist/utils/format-error.d.ts.map +1 -0
  455. package/dist/utils/format-error.js +10 -0
  456. package/dist/utils/format-error.js.map +1 -0
  457. package/dist/utils/index.d.ts +7 -0
  458. package/dist/utils/index.d.ts.map +1 -0
  459. package/dist/utils/index.js +23 -0
  460. package/dist/utils/index.js.map +1 -0
  461. package/dist/utils/json-validator.d.ts +40 -0
  462. package/dist/utils/json-validator.d.ts.map +1 -0
  463. package/dist/utils/json-validator.js +295 -0
  464. package/dist/utils/json-validator.js.map +1 -0
  465. package/dist/utils/page-diagnostics.d.ts +23 -0
  466. package/dist/utils/page-diagnostics.d.ts.map +1 -0
  467. package/dist/utils/page-diagnostics.js +95 -0
  468. package/dist/utils/page-diagnostics.js.map +1 -0
  469. package/dist/utils/pagination-detector.d.ts +22 -0
  470. package/dist/utils/pagination-detector.d.ts.map +1 -0
  471. package/dist/utils/pagination-detector.js +292 -0
  472. package/dist/utils/pagination-detector.js.map +1 -0
  473. package/dist/utils/pid-manager.d.ts +6 -0
  474. package/dist/utils/pid-manager.d.ts.map +1 -0
  475. package/dist/utils/pid-manager.js +135 -0
  476. package/dist/utils/pid-manager.js.map +1 -0
  477. package/dist/utils/puppeteer-helpers.d.ts +8 -0
  478. package/dist/utils/puppeteer-helpers.d.ts.map +1 -0
  479. package/dist/utils/puppeteer-helpers.js +12 -0
  480. package/dist/utils/puppeteer-helpers.js.map +1 -0
  481. package/dist/utils/ref-id-manager.d.ts +72 -0
  482. package/dist/utils/ref-id-manager.d.ts.map +1 -0
  483. package/dist/utils/ref-id-manager.js +325 -0
  484. package/dist/utils/ref-id-manager.js.map +1 -0
  485. package/dist/utils/request-queue.d.ts +37 -0
  486. package/dist/utils/request-queue.d.ts.map +1 -0
  487. package/dist/utils/request-queue.js +114 -0
  488. package/dist/utils/request-queue.js.map +1 -0
  489. package/dist/utils/retry-with-fallback.d.ts +18 -0
  490. package/dist/utils/retry-with-fallback.d.ts.map +1 -0
  491. package/dist/utils/retry-with-fallback.js +39 -0
  492. package/dist/utils/retry-with-fallback.js.map +1 -0
  493. package/dist/utils/safe-title.d.ts +10 -0
  494. package/dist/utils/safe-title.d.ts.map +1 -0
  495. package/dist/utils/safe-title.js +24 -0
  496. package/dist/utils/safe-title.js.map +1 -0
  497. package/dist/utils/schema-validator.d.ts +12 -0
  498. package/dist/utils/schema-validator.d.ts.map +1 -0
  499. package/dist/utils/schema-validator.js +70 -0
  500. package/dist/utils/schema-validator.js.map +1 -0
  501. package/dist/utils/shadow-dom.d.ts +114 -0
  502. package/dist/utils/shadow-dom.d.ts.map +1 -0
  503. package/dist/utils/shadow-dom.js +385 -0
  504. package/dist/utils/shadow-dom.js.map +1 -0
  505. package/dist/utils/smart-goto.d.ts +39 -0
  506. package/dist/utils/smart-goto.d.ts.map +1 -0
  507. package/dist/utils/smart-goto.js +134 -0
  508. package/dist/utils/smart-goto.js.map +1 -0
  509. package/dist/utils/url-utils.d.ts +5 -0
  510. package/dist/utils/url-utils.d.ts.map +1 -0
  511. package/dist/utils/url-utils.js +15 -0
  512. package/dist/utils/url-utils.js.map +1 -0
  513. package/dist/utils/visual-summary.d.ts +17 -0
  514. package/dist/utils/visual-summary.d.ts.map +1 -0
  515. package/dist/utils/visual-summary.js +215 -0
  516. package/dist/utils/visual-summary.js.map +1 -0
  517. package/dist/utils/with-timeout.d.ts +5 -0
  518. package/dist/utils/with-timeout.d.ts.map +1 -0
  519. package/dist/utils/with-timeout.js +15 -0
  520. package/dist/utils/with-timeout.js.map +1 -0
  521. package/dist/version.d.ts +5 -0
  522. package/dist/version.d.ts.map +1 -0
  523. package/dist/version.js +22 -0
  524. package/dist/version.js.map +1 -0
  525. package/package.json +1 -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,387 @@
1
+ <p align="center">
2
+ <img src="assets/mascot.png?v=4" 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://www.npmjs.com/package/openchrome-mcp"><img src="https://img.shields.io/npm/v/openchrome-mcp" alt="npm"></a>
14
+ <a href="https://github.com/shaun0927/openchrome/releases/latest"><img src="https://img.shields.io/github/v/release/shaun0927/openchrome" alt="Latest Release"></a>
15
+ <a href="https://github.com/shaun0927/openchrome/releases/latest"><img src="https://img.shields.io/github/release-date/shaun0927/openchrome" alt="Release Date"></a>
16
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT"></a>
17
+ </p>
18
+
19
+ <p align="center">
20
+ <img src="assets/demo.svg" alt="Traditional vs OpenChrome" width="100%">
21
+ </p>
22
+
23
+ <p align="center">
24
+ <img src="assets/chart-tokens.svg" alt="Token Efficiency: OpenChrome vs Playwright" width="100%">
25
+ </p>
26
+
27
+ ---
28
+
29
+ ## What is OpenChrome?
30
+
31
+ 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.
32
+
33
+ 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.
34
+
35
+ ```
36
+ You: oc compare "AirPods Pro" prices across Amazon, eBay, Walmart,
37
+ Best Buy, Target, Costco, B&H, Newegg — find the lowest
38
+
39
+ AI: [8 parallel workers, all sites simultaneously]
40
+ Best Buy: $179 ← lowest (sale)
41
+ Amazon: $189
42
+ Costco: $194 (members)
43
+ ...
44
+ Time: 2.8s | All prices from live pages, already logged in.
45
+ ```
46
+
47
+ | | Traditional | OpenChrome |
48
+ |---|:---:|:---:|
49
+ | **5-site task** | ~250s (login each) | **~3s** (parallel) |
50
+ | **Memory** | ~2.5 GB (5 browsers) | **~300 MB** (1 Chrome) |
51
+ | **Auth** | Every time | **Never** |
52
+ | **Bot detection** | Flagged | **Invisible** |
53
+
54
+ ---
55
+
56
+ ## Guided, Not Guessing
57
+
58
+ The bottleneck in browser automation isn't the browser — it's the **LLM thinking between each step**. Every tool call costs 5–15 seconds of inference time. When an AI agent guesses wrong, it doesn't just fail — it spends another 10 seconds thinking about why, then another 10 seconds trying something else.
59
+
60
+ ```
61
+ Playwright agent checking prices on 5 sites:
62
+
63
+ Site 1: launch browser 3s
64
+ navigate 2s
65
+ ⚡ bot detection LLM thinks... 12s → retry with UA
66
+ ⚡ CAPTCHA LLM thinks... 10s → stuck, skip
67
+ navigate to login 2s
68
+ ⚡ no session LLM thinks... 12s → fill credentials
69
+ 2FA prompt LLM thinks... 10s → stuck
70
+ ...
71
+ finally reaches product after ~20 LLM calls, ~4 minutes
72
+
73
+ × 5 sites, sequential = ~100 LLM calls, ~20 minutes, ~$2.00
74
+
75
+ Actual work: 5 calls. Wasted on wandering: 95 calls.
76
+ ```
77
+
78
+ OpenChrome eliminates this entirely — your Chrome is already logged in, and the hint engine corrects mistakes before they cascade:
79
+
80
+ ```
81
+ OpenChrome agent checking prices on 5 sites:
82
+
83
+ All 5 sites in parallel:
84
+ navigate (already authenticated) 1s
85
+ read prices 2s
86
+ ⚡ stale ref on one site
87
+ └─ Hint: "Use read_page for fresh refs" ← no guessing
88
+ read_page → done 1s
89
+
90
+ = ~20 LLM calls, ~15 seconds, ~$0.40
91
+ ```
92
+
93
+ The hint engine watches every tool call across 6 layers — error recovery, composite suggestions, repetition detection, sequence detection, learned patterns, and success guidance. When it sees the same error→recovery pattern 3+ times, it promotes it to a permanent rule across sessions.
94
+
95
+ | | Playwright | OpenChrome | Savings |
96
+ |---|---|---|---|
97
+ | **LLM calls** | ~100 | ~20 | **80% fewer** |
98
+ | **Wall time** | ~20 min | ~15 sec | **80x faster** |
99
+ | **Token cost** | ~$2.00 | ~$0.40 | **5x cheaper** |
100
+ | **Wasted calls** | ~95% | ~0% | |
101
+
102
+ ---
103
+
104
+ ## Quick Start
105
+
106
+ ```bash
107
+ npx openchrome-mcp setup
108
+ ```
109
+
110
+ One command. Configures MCP server + auto-approves tool permissions.
111
+ Restart Claude Code, then say `oc`.
112
+
113
+ <details>
114
+ <summary>Manual config</summary>
115
+
116
+ **Claude Code:**
117
+ ```bash
118
+ claude mcp add openchrome -- npx -y openchrome-mcp@latest serve --auto-launch
119
+ ```
120
+
121
+ **VS Code / Copilot** (`.vscode/mcp.json`):
122
+ ```json
123
+ {
124
+ "servers": {
125
+ "openchrome": {
126
+ "type": "stdio",
127
+ "command": "npx",
128
+ "args": ["-y", "openchrome-mcp@latest", "serve", "--auto-launch"]
129
+ }
130
+ }
131
+ }
132
+ ```
133
+
134
+ **Cursor / Windsurf / Other MCP clients:**
135
+ ```json
136
+ {
137
+ "mcpServers": {
138
+ "openchrome": {
139
+ "command": "npx",
140
+ "args": ["-y", "openchrome-mcp@latest", "serve", "--auto-launch"]
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ </details>
147
+
148
+ ---
149
+
150
+ ## Examples
151
+
152
+ **Parallel monitoring:**
153
+ ```
154
+ oc screenshot AWS billing, GCP console, Stripe, and Datadog — all at once
155
+ → 4 workers, 3.1s, already authenticated everywhere
156
+ ```
157
+
158
+ **Multi-account:**
159
+ ```
160
+ oc check orders on personal and business Amazon accounts simultaneously
161
+ → 2 workers, isolated sessions, same site different accounts
162
+ ```
163
+
164
+ **Competitive intelligence:**
165
+ ```
166
+ oc compare prices for "AirPods Pro" across Amazon, eBay, Walmart, Best Buy
167
+ → 4 workers, 4 sites, 2.4s, works past bot detection
168
+ ```
169
+
170
+ ---
171
+
172
+ ## 45 Tools
173
+
174
+ | Category | Tools |
175
+ |----------|-------|
176
+ | **Navigate & Interact** | `navigate`, `interact`, `fill_form`, `find`, `computer` |
177
+ | **Read & Extract** | `read_page`, `page_content`, `javascript_tool`, `selector_query`, `xpath_query` |
178
+ | **Environment** | `emulate_device`, `geolocation`, `user_agent`, `network` |
179
+ | **Storage & Debug** | `cookies`, `storage`, `console_capture`, `performance_metrics`, `request_intercept` |
180
+ | **Parallel Workflows** | `workflow_init`, `workflow_collect`, `worker_create`, `batch_execute` |
181
+ | **Memory** | `memory_record`, `memory_query`, `memory_validate` |
182
+
183
+ <details>
184
+ <summary>Full tool list (45)</summary>
185
+
186
+ `navigate` `interact` `computer` `read_page` `find` `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` `tabs_context` `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`
187
+
188
+ </details>
189
+
190
+ ---
191
+
192
+ ## CLI
193
+
194
+ ```bash
195
+ oc setup # Auto-configure
196
+ oc serve --auto-launch # Start server
197
+ oc serve --headless-shell # Headless mode
198
+ oc doctor # Diagnose issues
199
+ ```
200
+
201
+ ---
202
+
203
+ ## Cross-Platform
204
+
205
+ | Platform | Status |
206
+ |----------|--------|
207
+ | **macOS** | Full support |
208
+ | **Windows** | Full support (taskkill process cleanup) |
209
+ | **Linux** | Full support (Snap paths, `CHROME_PATH` env, `--no-sandbox` for CI) |
210
+
211
+ ---
212
+
213
+ ## DOM Mode (Token Efficient)
214
+
215
+ `read_page` supports three output modes:
216
+
217
+ | Mode | Output | Tokens | Use Case |
218
+ |------|--------|--------|----------|
219
+ | `ax` (default) | Accessibility tree with `ref_N` IDs | Baseline | Screen readers, semantic analysis |
220
+ | `dom` | Compact DOM with `backendNodeId` | **~5-10x fewer** | Click, fill, extract — most tasks |
221
+ | `css` | CSS diagnostic info (variables, computed styles, framework detection) | Minimal | Debugging styles, Tailwind detection |
222
+
223
+ **DOM mode example:**
224
+ ```
225
+ read_page tabId="tab1" mode="dom"
226
+
227
+ [page_stats] url: https://example.com | title: Example | scroll: 0,0 | viewport: 1920x1080
228
+
229
+ [142]<input type="search" placeholder="Search..." aria-label="Search"/> ★
230
+ [156]<button type="submit"/>Search ★
231
+ [289]<a href="/home"/>Home ★
232
+ [352]<h1/>Welcome to Example
233
+ ```
234
+
235
+ DOM mode outputs `[backendNodeId]` as stable identifiers — they persist for the lifetime of the DOM node, unlike `ref_N` IDs which are cleared on each AX-mode `read_page` call.
236
+
237
+ ---
238
+
239
+ ## Stable Selectors
240
+
241
+ Action tools that accept a `ref` parameter (`form_input`, `computer`, etc.) support three identifier formats:
242
+
243
+ | Format | Example | Source |
244
+ |--------|---------|--------|
245
+ | `ref_N` | `ref_5` | From `read_page` AX mode (ephemeral) |
246
+ | Raw integer | `142` | From `read_page` DOM mode (stable) |
247
+ | `node_N` | `node_142` | Explicit prefix form (stable) |
248
+
249
+ **Backward compatible** — existing `ref_N` workflows work unchanged. DOM mode's `backendNodeId` eliminates "ref not found" errors caused by stale references.
250
+
251
+ ---
252
+
253
+ ## Session Persistence
254
+
255
+ Headless mode (`--headless-shell`) doesn't persist cookies across restarts. Enable storage state persistence to maintain authenticated sessions:
256
+
257
+ ```bash
258
+ oc serve --persist-storage # Enable persistence
259
+ oc serve --persist-storage --storage-dir ./state # Custom directory
260
+ ```
261
+
262
+ Cookies and localStorage are saved atomically every 30 seconds and restored on session creation.
263
+
264
+ ---
265
+
266
+ ## Anti-Bot & Turnstile Support
267
+
268
+ OpenChrome includes built-in defenses against Cloudflare Turnstile and similar anti-bot systems, with additional stealth navigation planned for a future release. See [Turnstile Guide](docs/turnstile-guide.md) for details.
269
+
270
+ ---
271
+
272
+ ## Benchmarks
273
+
274
+ Measure token efficiency and parallel performance:
275
+
276
+ ```bash
277
+ npm run benchmark # Stub mode: AX vs DOM token efficiency (interactive)
278
+ npm run benchmark:ci # Stub mode: AX vs DOM with JSON + regression detection
279
+ npm run benchmark -- --mode real # Real mode: actual MCP server (requires Chrome)
280
+ npx ts-node tests/benchmark/run-parallel.ts # Stub mode: all parallel benchmark categories
281
+ npx ts-node tests/benchmark/run-parallel.ts --mode real --category batch-js --runs 1 # Real mode
282
+ npx ts-node tests/benchmark/run-parallel.ts --mode real --category realworld --runs 1 # Real-world benchmarks
283
+ ```
284
+
285
+ By default, benchmarks run in **stub mode** — measuring protocol correctness and tool-call counts with mock responses. Use `--mode real` to spawn an actual MCP server subprocess and measure real performance (requires Chrome to be available).
286
+
287
+ **Parallel benchmark categories:**
288
+
289
+ | Category | What It Measures |
290
+ |----------|-----------------|
291
+ | Multi-step interaction | Form fill + click sequences across N parallel pages |
292
+ | Batch JS execution | N × `javascript_tool` vs 1 × `batch_execute` |
293
+ | Compiled plan execution | Sequential agent tool calls vs single `execute_plan` |
294
+ | Streaming collection | Blocking vs `workflow_collect_partial` |
295
+ | Init overhead | Sequential `tabs_create` vs batch `workflow_init` |
296
+ | Fault tolerance | Circuit breaker recovery speed |
297
+ | Scalability curve | Speedup efficiency at 1–50x concurrency |
298
+ | **Real-world** | Multi-site crawl, heavy JS, pipeline, scalability with public websites (`httpbin.org`, `jsonplaceholder`, `example.com`) — NOT included in `all`, requires network |
299
+
300
+ ---
301
+
302
+ ## Server / Headless Deployment
303
+
304
+ OpenChrome works on servers and in CI/CD pipelines without Chrome login. All 45 tools function with unauthenticated Chrome — navigation, scraping, screenshots, form filling, and parallel workflows all work in clean sessions.
305
+
306
+ ### Quick start
307
+
308
+ ```bash
309
+ # Single flag for optimal server defaults
310
+ openchrome serve --server-mode
311
+ ```
312
+
313
+ `--server-mode` automatically sets:
314
+ - Auto-launches Chrome in headless mode
315
+ - Skips cookie bridge scanning (~5s faster per page creation)
316
+ - Optimal defaults for server environments
317
+
318
+ ### What works without login
319
+
320
+ | Category | Tools |
321
+ |----------|-------|
322
+ | **Navigation & scraping** | `navigate`, `read_page`, `page_content`, `javascript_tool` |
323
+ | **Interaction** | `interact`, `fill_form`, `drag_drop`, `file_upload` |
324
+ | **Parallel workflows** | `workflow_init` with multiple workers, `batch_execute` |
325
+ | **Screenshots & PDF** | `computer(screenshot)`, `page_pdf` |
326
+ | **Network & performance** | `request_intercept`, `performance_metrics`, `console_capture` |
327
+
328
+ ### Important: MCP client required
329
+
330
+ OpenChrome is an MCP server — it responds to tool calls, not standalone scripts. Server-side usage requires an MCP client (e.g., Claude API, Claude Code, or a custom MCP client) to drive it:
331
+
332
+ ```
333
+ MCP Client (LLM) → stdio → OpenChrome (--server-mode) → Chrome
334
+ ```
335
+
336
+ For standalone scraping scripts without an LLM, use Playwright or Puppeteer directly.
337
+
338
+ ### Docker
339
+
340
+ A production-ready `Dockerfile` is included in the repository:
341
+
342
+ ```bash
343
+ docker build -t openchrome .
344
+ docker run openchrome
345
+ ```
346
+
347
+ ### Environment variables
348
+
349
+ | Variable | Description |
350
+ |----------|-------------|
351
+ | `CHROME_PATH` | Path to Chrome/Chromium binary (used by launcher) |
352
+ | `CHROME_BINARY` | Path to Chrome binary (used by `--chrome-binary` CLI flag) |
353
+ | `CHROME_USER_DATA_DIR` | Custom profile directory |
354
+ | `CI` | Detected automatically; adds `--no-sandbox` |
355
+ | `DOCKER` | Detected automatically; adds `--no-sandbox` |
356
+
357
+ ### Individual flags
358
+
359
+ For fine-grained control, use individual flags instead of `--server-mode`:
360
+
361
+ ```bash
362
+ openchrome serve \
363
+ --auto-launch \
364
+ --headless-shell \
365
+ --port 9222
366
+ ```
367
+
368
+ | Flag | Default | Description |
369
+ |------|---------|-------------|
370
+ | `--auto-launch` | `false` | Auto-launch Chrome if not running |
371
+ | `--headless-shell` | `false` | Use chrome-headless-shell binary |
372
+ | `--visible` | `false` | Show Chrome window (disables headless) |
373
+ | `--server-mode` | `false` | Compound flag for server deployment |
374
+
375
+ ---
376
+
377
+ ## Development
378
+
379
+ ```bash
380
+ git clone https://github.com/shaun0927/openchrome.git
381
+ cd openchrome
382
+ npm install && npm run build && npm test
383
+ ```
384
+
385
+ ## License
386
+
387
+ MIT
@@ -0,0 +1,42 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 480" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif">
2
+ <defs>
3
+ <linearGradient id="bg2" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#f8fafc"/>
5
+ <stop offset="100%" stop-color="#f1f5f9"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="880" height="480" fill="url(#bg2)" rx="16"/>
9
+
10
+ <!-- Title -->
11
+ <text x="440" y="38" text-anchor="middle" font-size="22" font-weight="700" fill="#0f172a">Simple Task Token Efficiency</text>
12
+ <text x="440" y="62" text-anchor="middle" font-size="13" fill="#94a3b8">Tokens the LLM must process per Twitter profile (lower is better)</text>
13
+
14
+ <!-- Row 1: Playwright + LLM — 178,102 tok/profile -->
15
+ <text x="48" y="108" font-size="13" font-weight="600" fill="#475569">Playwright + LLM</text>
16
+ <text x="48" y="124" font-size="11" fill="#94a3b8">(raw HTML to LLM)</text>
17
+ <rect x="200" y="96" width="580" height="36" fill="#6366f1" opacity="0.85" rx="6"/>
18
+ <text x="770" y="120" text-anchor="end" font-size="14" font-weight="700" fill="#fff">178,102 tok/profile</text>
19
+ <text x="200" y="152" font-size="11" fill="#94a3b8">Total for 20 profiles: 3,562,038 tokens</text>
20
+
21
+ <!-- Row 2: OpenChrome — 11,641 tok/profile -->
22
+ <text x="48" y="198" font-size="13" font-weight="600" fill="#ea580c">OpenChrome</text>
23
+ <text x="48" y="214" font-size="11" fill="#94a3b8">(compact DOM)</text>
24
+ <rect x="200" y="186" width="38" height="36" fill="#f97316" opacity="0.9" rx="6"/>
25
+ <text x="248" y="210" font-size="14" font-weight="700" fill="#1e293b">11,641 tok/profile</text>
26
+ <text x="200" y="242" font-size="11" fill="#94a3b8">Total for 20 profiles: 232,813 tokens</text>
27
+
28
+ <!-- Row 3: Playwright standalone — 290 tok/profile -->
29
+ <text x="48" y="288" font-size="13" font-weight="600" fill="#475569">Playwright standalone</text>
30
+ <text x="48" y="304" font-size="11" fill="#94a3b8">(no per-page LLM)</text>
31
+ <rect x="200" y="276" width="3" height="36" fill="#10b981" opacity="0.9" rx="1"/>
32
+ <text x="214" y="300" font-size="14" font-weight="700" fill="#1e293b">290 tok/profile</text>
33
+ <text x="200" y="332" font-size="11" fill="#94a3b8">Total for 20 profiles: 5,800 tokens</text>
34
+
35
+ <!-- Savings callout box -->
36
+ <rect x="160" y="368" width="560" height="50" fill="#fff7ed" stroke="#f97316" stroke-width="1.5" rx="10"/>
37
+ <text x="440" y="390" text-anchor="middle" font-size="15" font-weight="700" fill="#ea580c">OpenChrome saves 93.5% tokens vs Playwright + LLM</text>
38
+ <text x="440" y="409" text-anchor="middle" font-size="12" fill="#b45309">15.3x compression — compact DOM strips CSS, scripts, and hidden elements</text>
39
+
40
+ <!-- Footer -->
41
+ <text x="440" y="455" text-anchor="middle" font-size="11" fill="#94a3b8">Token estimate: 1 token ≈ 4 characters | Compression ratio calibrated from actual read_page measurements</text>
42
+ </svg>