@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
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolRoutingRegistry = void 0;
4
+ /**
5
+ * Static mapping of all tool names to their backend routing preference.
6
+ *
7
+ * chrome-only: Tools that require Chrome capabilities (screenshots, PDF).
8
+ * prefer-lightpanda: Tools that can run on Lightpanda for better performance.
9
+ */
10
+ const TOOL_ROUTING_MAP = {
11
+ // Chrome-only tools (visual capabilities)
12
+ computer: 'chrome-only',
13
+ page_pdf: 'chrome-only',
14
+ // Core tools - prefer-lightpanda
15
+ navigate: 'prefer-lightpanda',
16
+ read_page: 'prefer-lightpanda',
17
+ find: 'prefer-lightpanda',
18
+ form_input: 'prefer-lightpanda',
19
+ javascript_tool: 'prefer-lightpanda',
20
+ network: 'prefer-lightpanda',
21
+ // Phase 1 tools - prefer-lightpanda
22
+ page_reload: 'prefer-lightpanda',
23
+ cookies: 'prefer-lightpanda',
24
+ query_dom: 'prefer-lightpanda',
25
+ page_content: 'prefer-lightpanda',
26
+ wait_for: 'prefer-lightpanda',
27
+ storage: 'prefer-lightpanda',
28
+ // Phase 2 tools - prefer-lightpanda
29
+ user_agent: 'prefer-lightpanda',
30
+ geolocation: 'prefer-lightpanda',
31
+ emulate_device: 'prefer-lightpanda',
32
+ console_capture: 'prefer-lightpanda',
33
+ performance_metrics: 'prefer-lightpanda',
34
+ request_intercept: 'prefer-lightpanda',
35
+ // Phase 3 tools - prefer-lightpanda
36
+ file_upload: 'prefer-lightpanda',
37
+ http_auth: 'prefer-lightpanda',
38
+ drag_drop: 'prefer-lightpanda',
39
+ // UX composite tools - prefer-lightpanda
40
+ click_element: 'prefer-lightpanda',
41
+ fill_form: 'prefer-lightpanda',
42
+ wait_and_click: 'prefer-lightpanda',
43
+ // Tab management tools - prefer-lightpanda
44
+ tabs_context: 'prefer-lightpanda',
45
+ tabs_create: 'prefer-lightpanda',
46
+ tabs_close: 'prefer-lightpanda',
47
+ // Worker management tool - prefer-lightpanda
48
+ worker: 'prefer-lightpanda',
49
+ // Memory tool - prefer-lightpanda
50
+ memory: 'prefer-lightpanda',
51
+ // Orchestration tools - prefer-lightpanda
52
+ workflow_init: 'prefer-lightpanda',
53
+ workflow_status: 'prefer-lightpanda',
54
+ workflow_collect: 'prefer-lightpanda',
55
+ workflow_cleanup: 'prefer-lightpanda',
56
+ };
57
+ class ToolRoutingRegistry {
58
+ /**
59
+ * Returns the routing preference for a given tool name.
60
+ * Unknown tools default to 'chrome-only' as a safe fallback.
61
+ */
62
+ static getRouting(toolName) {
63
+ return TOOL_ROUTING_MAP[toolName] ?? 'chrome-only';
64
+ }
65
+ /**
66
+ * Returns true if the tool requires Chrome (screenshot/PDF capability).
67
+ */
68
+ static isVisualTool(toolName) {
69
+ return TOOL_ROUTING_MAP[toolName] === 'chrome-only';
70
+ }
71
+ /**
72
+ * Returns the list of all chrome-only tool names.
73
+ */
74
+ static getChromeOnlyTools() {
75
+ return Object.entries(TOOL_ROUTING_MAP)
76
+ .filter(([, routing]) => routing === 'chrome-only')
77
+ .map(([name]) => name);
78
+ }
79
+ /**
80
+ * Returns the list of all prefer-lightpanda tool names.
81
+ */
82
+ static getPreferLightpandaTools() {
83
+ return Object.entries(TOOL_ROUTING_MAP)
84
+ .filter(([, routing]) => routing === 'prefer-lightpanda')
85
+ .map(([name]) => name);
86
+ }
87
+ }
88
+ exports.ToolRoutingRegistry = ToolRoutingRegistry;
89
+ //# sourceMappingURL=tool-routing-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-routing-registry.js","sourceRoot":"","sources":["../../src/router/tool-routing-registry.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAM,gBAAgB,GAAgC;IACpD,0CAA0C;IAC1C,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IAEvB,iCAAiC;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,mBAAmB;IAC9B,IAAI,EAAE,mBAAmB;IACzB,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,mBAAmB;IACpC,OAAO,EAAE,mBAAmB;IAE5B,oCAAoC;IACpC,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,mBAAmB;IAC5B,SAAS,EAAE,mBAAmB;IAC9B,YAAY,EAAE,mBAAmB;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,mBAAmB;IAE5B,oCAAoC;IACpC,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,mBAAmB;IAChC,cAAc,EAAE,mBAAmB;IACnC,eAAe,EAAE,mBAAmB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,iBAAiB,EAAE,mBAAmB;IAEtC,oCAAoC;IACpC,WAAW,EAAE,mBAAmB;IAChC,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAE9B,yCAAyC;IACzC,aAAa,EAAE,mBAAmB;IAClC,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,mBAAmB;IAEnC,2CAA2C;IAC3C,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,mBAAmB;IAE/B,6CAA6C;IAC7C,MAAM,EAAE,mBAAmB;IAE3B,kCAAkC;IAClC,MAAM,EAAE,mBAAmB;IAE3B,0CAA0C;IAC1C,aAAa,EAAE,mBAAmB;IAClC,eAAe,EAAE,mBAAmB;IACpC,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;CACtC,CAAC;AAEF,MAAa,mBAAmB;IAC9B;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAgB;QAChC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAgB;QAClC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB;QACvB,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CAAC;aAClD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,wBAAwB;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,mBAAmB,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AAjCD,kDAiCC"}
@@ -0,0 +1,2 @@
1
+ export declare function logAuditEntry(tool: string, sessionId: string, args: Record<string, unknown>, pageUrl?: string): void;
2
+ //# sourceMappingURL=audit-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/security/audit-logger.ts"],"names":[],"mappings":"AAwDA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA4BpH"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.logAuditEntry = logAuditEntry;
37
+ /**
38
+ * Audit Logger - Logs tool invocations for security review
39
+ * Writes structured JSONL to ~/.openchrome/audit.log
40
+ */
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const global_1 = require("../config/global");
45
+ const url_utils_1 = require("../utils/url-utils");
46
+ let logDirEnsured = false;
47
+ // Get log file path
48
+ function getLogPath() {
49
+ const config = (0, global_1.getGlobalConfig)();
50
+ return config.security?.audit_log_path ||
51
+ path.join(os.homedir(), '.openchrome', 'audit.log');
52
+ }
53
+ // Extract domain from URL safely
54
+ function extractDomain(url) {
55
+ if (!url)
56
+ return null;
57
+ return (0, url_utils_1.extractHostname)(url) || null;
58
+ }
59
+ const SENSITIVE_KEYS = ['password', 'cookie', 'token', 'secret', 'auth', 'credential', 'value', 'text'];
60
+ function isSensitiveKey(key) {
61
+ const lower = key.toLowerCase();
62
+ return SENSITIVE_KEYS.some(s => lower.includes(s));
63
+ }
64
+ // Summarize args (redact sensitive values)
65
+ function summarizeArgs(args) {
66
+ // Include keys like tabId, url, action but redact values of sensitive keys
67
+ const safe = {};
68
+ for (const [key, value] of Object.entries(args)) {
69
+ if (isSensitiveKey(key)) {
70
+ safe[key] = '[REDACTED]';
71
+ }
72
+ else if (typeof value === 'string' && value.length > 100) {
73
+ safe[key] = value.slice(0, 100) + '...';
74
+ }
75
+ else {
76
+ safe[key] = value;
77
+ }
78
+ }
79
+ return JSON.stringify(safe);
80
+ }
81
+ function logAuditEntry(tool, sessionId, args, pageUrl) {
82
+ const config = (0, global_1.getGlobalConfig)();
83
+ if (!config.security?.audit_log)
84
+ return; // Disabled by default
85
+ const entry = {
86
+ timestamp: new Date().toISOString(),
87
+ tool,
88
+ domain: extractDomain(pageUrl || args.url),
89
+ sessionId,
90
+ args_summary: summarizeArgs(args),
91
+ };
92
+ const logPath = getLogPath();
93
+ const logDir = path.dirname(logPath);
94
+ // Ensure directory exists (first time only)
95
+ if (!logDirEnsured) {
96
+ try {
97
+ fs.mkdirSync(logDir, { recursive: true });
98
+ logDirEnsured = true;
99
+ }
100
+ catch {
101
+ return; // Non-fatal
102
+ }
103
+ }
104
+ // Non-blocking append
105
+ const line = JSON.stringify(entry) + '\n';
106
+ fs.appendFile(logPath, line, (err) => { if (err)
107
+ console.error('[audit-logger] write failed:', err.code); });
108
+ }
109
+ //# sourceMappingURL=audit-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/security/audit-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Check whether a URL's domain is blocked by the configured blocklist.
3
+ * Returns false (allowed) if no blocked_domains are configured.
4
+ */
5
+ export declare function isDomainBlocked(url: string): boolean;
6
+ /**
7
+ * Assert that the given URL is not blocked.
8
+ * Throws a descriptive error if the domain is on the blocklist.
9
+ */
10
+ export declare function assertDomainAllowed(url: string): void;
11
+ //# sourceMappingURL=domain-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-guard.d.ts","sourceRoot":"","sources":["../../src/security/domain-guard.ts"],"names":[],"mappings":"AA2DA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAiBpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAwBrD"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDomainBlocked = isDomainBlocked;
4
+ exports.assertDomainAllowed = assertDomainAllowed;
5
+ /**
6
+ * Domain Guard - Blocks AI agent access to configured domains
7
+ * Default-allow: no domains blocked unless explicitly configured.
8
+ */
9
+ const global_1 = require("../config/global");
10
+ const url_utils_1 = require("../utils/url-utils");
11
+ /**
12
+ * Convert a glob pattern to a RegExp.
13
+ * Supports "*" as a wildcard matching any sequence of non-dot characters,
14
+ * and "**" or leading "*." to match across subdomains.
15
+ * Examples:
16
+ * "*.bank.com" -> matches "www.bank.com", "login.bank.com"
17
+ * "mail.google.com" -> exact match only
18
+ */
19
+ function globToRegex(pattern) {
20
+ // Reject overly long patterns (DNS max is 253 chars)
21
+ if (pattern.length > 253) {
22
+ throw new Error(`Domain pattern too long (${pattern.length} chars, max 253): "${pattern.slice(0, 50)}..."`);
23
+ }
24
+ // Escape all regex special chars except "*"
25
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
26
+ // Replace "*" with "[^.]*" to match any non-dot characters (single-level wildcard)
27
+ // This means "*.bank.com" matches "www.bank.com" but NOT "a.b.bank.com"
28
+ const regexStr = escaped.replace(/\*/g, '[^.]*');
29
+ return new RegExp(`^${regexStr}$`, 'i');
30
+ }
31
+ /**
32
+ * Extract the hostname from a URL string.
33
+ * Returns null for invalid URLs or special schemes (about:, chrome:, etc.).
34
+ */
35
+ function extractHostname(url) {
36
+ // Always allow special browser URLs
37
+ if (url === 'about:blank' ||
38
+ url.startsWith('about:') ||
39
+ url.startsWith('chrome:') ||
40
+ url.startsWith('chrome-extension:')) {
41
+ return null;
42
+ }
43
+ // Allow data: URIs — they don't have hostnames and blocking them globally
44
+ // would break inline images, SVGs, and other legitimate content.
45
+ // Note: file: URIs are NOT exempted — they could be used to read local files.
46
+ if (url.startsWith('data:')) {
47
+ return null;
48
+ }
49
+ const hostname = (0, url_utils_1.extractHostname)(url).toLowerCase();
50
+ if (hostname)
51
+ return hostname;
52
+ // Try adding protocol for bare hostnames (e.g., "bank.com")
53
+ const fallback = (0, url_utils_1.extractHostname)('https://' + url).toLowerCase();
54
+ return fallback || null;
55
+ }
56
+ /**
57
+ * Check whether a URL's domain is blocked by the configured blocklist.
58
+ * Returns false (allowed) if no blocked_domains are configured.
59
+ */
60
+ function isDomainBlocked(url) {
61
+ const config = (0, global_1.getGlobalConfig)();
62
+ const blockedDomains = config.security?.blocked_domains;
63
+ if (!blockedDomains || blockedDomains.length === 0) {
64
+ return false;
65
+ }
66
+ const hostname = extractHostname(url);
67
+ if (!hostname) {
68
+ return false;
69
+ }
70
+ return blockedDomains.some((pattern) => {
71
+ const regex = globToRegex(pattern);
72
+ return regex.test(hostname);
73
+ });
74
+ }
75
+ /**
76
+ * Assert that the given URL is not blocked.
77
+ * Throws a descriptive error if the domain is on the blocklist.
78
+ */
79
+ function assertDomainAllowed(url) {
80
+ const config = (0, global_1.getGlobalConfig)();
81
+ const blockedDomains = config.security?.blocked_domains;
82
+ if (!blockedDomains || blockedDomains.length === 0) {
83
+ return;
84
+ }
85
+ const hostname = extractHostname(url);
86
+ if (!hostname) {
87
+ return;
88
+ }
89
+ const matchedPattern = blockedDomains.find((pattern) => {
90
+ const regex = globToRegex(pattern);
91
+ return regex.test(hostname);
92
+ });
93
+ if (matchedPattern) {
94
+ throw new Error(`Access to domain "${hostname}" is blocked by security policy (matched pattern: "${matchedPattern}"). ` +
95
+ `Configure blocked_domains in your OpenChrome security settings to change this.`);
96
+ }
97
+ }
98
+ //# sourceMappingURL=domain-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-guard.js","sourceRoot":"","sources":["../../src/security/domain-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Session Manager - Manages lifecycle of parallel Claude Code sessions
3
+ * Supports multiple Workers within a single session for parallel browser operations
4
+ */
5
+ import { Page } from 'puppeteer-core';
6
+ import { Session, SessionInfo, SessionCreateOptions, SessionEvent, Worker, WorkerInfo, WorkerCreateOptions } from './types/session';
7
+ import { CDPClient } from './cdp/client';
8
+ import { PoolStats } from './cdp/connection-pool';
9
+ import { BrowserRouter } from './router';
10
+ import { HybridConfig } from './types/browser-backend';
11
+ import { StorageStateConfig } from './config';
12
+ export interface SessionManagerConfig {
13
+ /** Session TTL in milliseconds (default: 30 minutes) */
14
+ sessionTTL?: number;
15
+ /** Auto-cleanup interval in milliseconds (default: 1 minute) */
16
+ cleanupInterval?: number;
17
+ /** Enable auto-cleanup (default: true) */
18
+ autoCleanup?: boolean;
19
+ /** Maximum number of sessions (default: 100) */
20
+ maxSessions?: number;
21
+ /** Maximum workers per session (default: 20) */
22
+ maxWorkersPerSession?: number;
23
+ /** Maximum targets (tabs) per worker (default: 5). Oldest closed when exceeded. */
24
+ maxTargetsPerWorker?: number;
25
+ /** Memory pressure threshold in bytes. Below this free memory, aggressive cleanup triggers. (default: 500MB) */
26
+ memoryPressureThreshold?: number;
27
+ /** Use connection pool for page management (default: false for worker isolation) */
28
+ useConnectionPool?: boolean;
29
+ /** Use default browser context (shares cookies/sessions with Chrome profile) */
30
+ useDefaultContext?: boolean;
31
+ /** Enable Chrome pool for origin-aware instance distribution (default: false) */
32
+ usePool?: boolean;
33
+ /** Storage state persistence config (default: disabled) */
34
+ storageState?: StorageStateConfig;
35
+ }
36
+ export interface SessionManagerStats {
37
+ activeSessions: number;
38
+ totalTargets: number;
39
+ totalWorkers: number;
40
+ totalSessionsCreated: number;
41
+ totalSessionsCleaned: number;
42
+ uptime: number;
43
+ lastCleanup: number | null;
44
+ memoryUsage: number;
45
+ connectionPool?: PoolStats;
46
+ }
47
+ export declare class SessionManager {
48
+ private sessions;
49
+ private targetToWorker;
50
+ private cdpClient;
51
+ private connectionPool;
52
+ private chromePool;
53
+ private cdpFactory;
54
+ private queueManager;
55
+ private eventListeners;
56
+ private browserRouter;
57
+ private storageStateManagers;
58
+ private storageStateConfig;
59
+ private pendingCreations;
60
+ private config;
61
+ private cleanupTimer;
62
+ private startTime;
63
+ private totalSessionsCreated;
64
+ private totalSessionsCleaned;
65
+ private lastCleanupTime;
66
+ constructor(cdpClient?: CDPClient, config?: SessionManagerConfig);
67
+ /**
68
+ * Get the CDPClient for a specific worker (may be on a different Chrome instance)
69
+ */
70
+ private getCDPClientForWorker;
71
+ /**
72
+ * Start automatic cleanup interval
73
+ */
74
+ private startAutoCleanup;
75
+ /**
76
+ * Stop automatic cleanup
77
+ */
78
+ stopAutoCleanup(): void;
79
+ /**
80
+ * Get session manager statistics
81
+ */
82
+ getStats(): SessionManagerStats;
83
+ /**
84
+ * Get current configuration
85
+ */
86
+ getConfig(): Required<SessionManagerConfig>;
87
+ /**
88
+ * Update configuration
89
+ */
90
+ updateConfig(config: Partial<SessionManagerConfig>): void;
91
+ /**
92
+ * Ensure connected to Chrome
93
+ */
94
+ ensureConnected(): Promise<void>;
95
+ /**
96
+ * Create a new session with a default worker
97
+ */
98
+ createSession(options?: SessionCreateOptions): Promise<Session>;
99
+ /**
100
+ * Get or create a session
101
+ */
102
+ getOrCreateSession(sessionId: string): Promise<Session>;
103
+ /**
104
+ * Get an existing session
105
+ */
106
+ getSession(sessionId: string): Session | undefined;
107
+ /**
108
+ * Update last activity timestamp
109
+ */
110
+ touchSession(sessionId: string): void;
111
+ /**
112
+ * Delete a session and clean up all workers
113
+ */
114
+ deleteSession(sessionId: string): Promise<void>;
115
+ /**
116
+ * Clean up inactive sessions
117
+ */
118
+ cleanupInactiveSessions(maxAgeMs: number, options?: {
119
+ force?: boolean;
120
+ }): Promise<string[]>;
121
+ /**
122
+ * Force cleanup all sessions (including "default").
123
+ * Unlike cleanupInactiveSessions, this is a forced full teardown (called on shutdown).
124
+ */
125
+ cleanupAllSessions(): Promise<number>;
126
+ /**
127
+ * Create a new worker within a session
128
+ * Each worker has its own isolated browser context (cookies, localStorage, etc.)
129
+ */
130
+ createWorker(sessionId: string, options?: WorkerCreateOptions): Promise<Worker>;
131
+ /**
132
+ * Get a worker by ID
133
+ */
134
+ getWorker(sessionId: string, workerId: string): Worker | undefined;
135
+ /**
136
+ * Get or create a worker
137
+ */
138
+ getOrCreateWorker(sessionId: string, workerId?: string): Promise<Worker>;
139
+ /**
140
+ * List all workers in a session
141
+ */
142
+ getWorkers(sessionId: string): WorkerInfo[];
143
+ /**
144
+ * Delete a worker and its resources
145
+ */
146
+ deleteWorker(sessionId: string, workerId: string): Promise<void>;
147
+ /**
148
+ * Internal worker deletion (also used for cleanup)
149
+ */
150
+ private deleteWorkerInternal;
151
+ /**
152
+ * Create a new page/target for a worker
153
+ * @param sessionId Session ID
154
+ * @param url Optional URL to navigate to
155
+ * @param workerId Optional worker ID (uses default worker if not specified)
156
+ */
157
+ createTarget(sessionId: string, url?: string, workerId?: string): Promise<{
158
+ targetId: string;
159
+ page: Page;
160
+ workerId: string;
161
+ }>;
162
+ private _createTargetImpl;
163
+ /**
164
+ * CDP-free stealth navigation: opens a new tab via Chrome's HTTP debug API without
165
+ * attaching Puppeteer/CDP during page load, letting anti-bot checks (e.g. Cloudflare
166
+ * Turnstile) complete without CDP signals present. CDP attaches after settleMs.
167
+ *
168
+ * @param sessionId Session to register the new target under
169
+ * @param url URL to navigate to
170
+ * @param workerId Optional worker ID (uses default worker if omitted)
171
+ * @param settleMs How long to wait before attaching CDP (default 5000, range 1000-30000)
172
+ * @returns Registered targetId, Page, and workerId
173
+ */
174
+ createTargetStealth(sessionId: string, url: string, workerId?: string, settleMs?: number): Promise<{
175
+ targetId: string;
176
+ page: Page;
177
+ workerId: string;
178
+ }>;
179
+ /**
180
+ * Register a pre-acquired page as a target for a worker.
181
+ * Used by workflow engine when pages are batch-acquired from the pool
182
+ * to avoid per-page replenishment (about:blank proliferation fix).
183
+ */
184
+ registerExistingTarget(sessionId: string, workerId: string, targetId: string): void;
185
+ /**
186
+ * Check if a target is still valid (page not closed)
187
+ */
188
+ isTargetValid(targetId: string): Promise<boolean>;
189
+ /**
190
+ * Get page for a target
191
+ * @param sessionId Session ID
192
+ * @param targetId Target/Tab ID
193
+ * @param workerId Optional worker ID for validation
194
+ * @param toolName Optional MCP tool name for hybrid BrowserRouter routing
195
+ */
196
+ getPage(sessionId: string, targetId: string, workerId?: string, toolName?: string): Promise<Page | null>;
197
+ /**
198
+ * Attempt to recover an untracked target that exists in Chrome.
199
+ * Cross-origin navigations (OAuth, SSO) can cause Chrome to replace the target
200
+ * without OpenChrome tracking the new one (we skip targetcreated indexing to
201
+ * prevent ghost tabs). This fallback re-registers valid targets.
202
+ */
203
+ private tryRecoverTarget;
204
+ /**
205
+ * Get all pages for a worker
206
+ */
207
+ getWorkerPages(sessionId: string, workerId: string): Promise<Page[]>;
208
+ /**
209
+ * Get target IDs for a session (all workers)
210
+ */
211
+ getSessionTargetIds(sessionId: string): string[];
212
+ /**
213
+ * Get target IDs for a specific worker
214
+ */
215
+ getWorkerTargetIds(sessionId: string, workerId: string): string[];
216
+ /**
217
+ * Validate target ownership (legacy method, checks session only)
218
+ */
219
+ validateTargetOwnership(sessionId: string, targetId: string): boolean;
220
+ /**
221
+ * Get the worker ID that owns a target
222
+ */
223
+ getTargetWorkerId(targetId: string): string | undefined;
224
+ /**
225
+ * Get the session and worker that own a target.
226
+ * Used by CDPClient's targetcreated listener to determine popup ownership.
227
+ */
228
+ getTargetOwner(targetId: string): {
229
+ sessionId: string;
230
+ workerId: string;
231
+ } | undefined;
232
+ /**
233
+ * Register an externally-created target (e.g., popup via window.open) into a worker.
234
+ * Only registers if the target is not already tracked, to avoid overwriting ownership.
235
+ */
236
+ registerExternalTarget(targetId: string, sessionId: string, workerId: string): void;
237
+ /**
238
+ * Close a specific target/tab
239
+ * @param sessionId Session ID
240
+ * @param targetId Target/Tab ID to close
241
+ * @returns true if closed, false if not found
242
+ */
243
+ closeTarget(sessionId: string, targetId: string): Promise<boolean>;
244
+ /**
245
+ * Close all tabs in a worker (without deleting the worker)
246
+ * @param sessionId Session ID
247
+ * @param workerId Worker ID
248
+ * @returns Number of tabs closed
249
+ */
250
+ closeWorkerTabs(sessionId: string, workerId: string): Promise<number>;
251
+ /**
252
+ * Execute a CDP command through the session's queue
253
+ */
254
+ executeCDP<T = unknown>(sessionId: string, targetId: string, method: string, params?: Record<string, unknown>): Promise<T>;
255
+ /**
256
+ * Handle target closed event
257
+ */
258
+ onTargetClosed(targetId: string): void;
259
+ /**
260
+ * Build an enriched error message for stale target IDs, including available tab IDs
261
+ * so the LLM can select the correct one without an extra tabs_context round trip.
262
+ */
263
+ private buildStaleTargetError;
264
+ /**
265
+ * Public wrapper for validateTargetsAfterReconnect().
266
+ * Called by MCP server before retrying a tool after reconnect.
267
+ */
268
+ reconcileAfterReconnect(): Promise<void>;
269
+ /**
270
+ * Validate all tracked targets after a reconnection.
271
+ * Performs bidirectional reconciliation:
272
+ * 1. Removes targets that no longer exist in Chrome
273
+ * 2. Re-maps dead target IDs to new live targets by URL matching
274
+ * (Chrome may reassign different target IDs to the same logical tabs)
275
+ */
276
+ private validateTargetsAfterReconnect;
277
+ /**
278
+ * Get session info (for serialization)
279
+ */
280
+ getSessionInfo(sessionId: string): SessionInfo | undefined;
281
+ /**
282
+ * Get all session infos
283
+ */
284
+ getAllSessionInfos(): SessionInfo[];
285
+ /**
286
+ * Add event listener
287
+ */
288
+ addEventListener(listener: (event: SessionEvent) => void): void;
289
+ /**
290
+ * Remove event listener
291
+ */
292
+ removeEventListener(listener: (event: SessionEvent) => void): void;
293
+ /**
294
+ * Emit event to all listeners
295
+ */
296
+ private emitEvent;
297
+ /**
298
+ * Get the number of active sessions
299
+ */
300
+ get sessionCount(): number;
301
+ /**
302
+ * Get the storage state file path for a session
303
+ */
304
+ private getStorageStatePath;
305
+ /**
306
+ * Get CDPClient
307
+ */
308
+ getCDPClient(): CDPClient;
309
+ /**
310
+ * Initialize hybrid mode with BrowserRouter
311
+ */
312
+ initHybrid(config: HybridConfig): Promise<void>;
313
+ /**
314
+ * Get the BrowserRouter (for stats/escalation)
315
+ */
316
+ getBrowserRouter(): BrowserRouter | null;
317
+ /**
318
+ * Cleanup hybrid mode
319
+ */
320
+ cleanupHybrid(): Promise<void>;
321
+ }
322
+ export declare function getSessionManager(): SessionManager;
323
+ /** Reset singleton for testing. Do not use in production code. */
324
+ export declare function _resetSessionManagerForTesting(): void;
325
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}