claude-chrome-parallel 3.0.3 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +398 -464
  3. package/assets/demo.svg +278 -173
  4. package/dist/cdp/client.d.ts +60 -2
  5. package/dist/cdp/client.d.ts.map +1 -1
  6. package/dist/cdp/client.js +344 -5
  7. package/dist/cdp/client.js.map +1 -1
  8. package/dist/cdp/connection-pool.d.ts.map +1 -1
  9. package/dist/cdp/connection-pool.js +20 -4
  10. package/dist/cdp/connection-pool.js.map +1 -1
  11. package/dist/chrome/launcher.d.ts +11 -0
  12. package/dist/chrome/launcher.d.ts.map +1 -1
  13. package/dist/chrome/launcher.js +124 -10
  14. package/dist/chrome/launcher.js.map +1 -1
  15. package/dist/chrome/pool.d.ts +54 -0
  16. package/dist/chrome/pool.d.ts.map +1 -0
  17. package/dist/chrome/pool.js +301 -0
  18. package/dist/chrome/pool.js.map +1 -0
  19. package/dist/chrome/profile-detector.d.ts +52 -0
  20. package/dist/chrome/profile-detector.d.ts.map +1 -0
  21. package/dist/chrome/profile-detector.js +246 -0
  22. package/dist/chrome/profile-detector.js.map +1 -0
  23. package/dist/cli/claude-session.js +15 -15
  24. package/dist/cli/index.js +162 -37
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/update-check.d.ts +9 -0
  27. package/dist/cli/update-check.js +141 -0
  28. package/dist/cli/update-check.js.map +1 -0
  29. package/dist/config/global.d.ts +31 -0
  30. package/dist/config/global.d.ts.map +1 -1
  31. package/dist/config/global.js.map +1 -1
  32. package/dist/dashboard/activity-tracker.d.ts +60 -0
  33. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  34. package/dist/dashboard/activity-tracker.js +178 -0
  35. package/dist/dashboard/activity-tracker.js.map +1 -0
  36. package/dist/dashboard/ansi.d.ts +117 -0
  37. package/dist/dashboard/ansi.d.ts.map +1 -0
  38. package/dist/dashboard/ansi.js +199 -0
  39. package/dist/dashboard/ansi.js.map +1 -0
  40. package/dist/dashboard/index.d.ts +110 -0
  41. package/dist/dashboard/index.d.ts.map +1 -0
  42. package/dist/dashboard/index.js +412 -0
  43. package/dist/dashboard/index.js.map +1 -0
  44. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  45. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  46. package/dist/dashboard/keyboard-handler.js +215 -0
  47. package/dist/dashboard/keyboard-handler.js.map +1 -0
  48. package/dist/dashboard/operation-controller.d.ts +76 -0
  49. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  50. package/dist/dashboard/operation-controller.js +167 -0
  51. package/dist/dashboard/operation-controller.js.map +1 -0
  52. package/dist/dashboard/renderer.d.ts +76 -0
  53. package/dist/dashboard/renderer.d.ts.map +1 -0
  54. package/dist/dashboard/renderer.js +193 -0
  55. package/dist/dashboard/renderer.js.map +1 -0
  56. package/dist/dashboard/types.d.ts +56 -0
  57. package/dist/dashboard/types.d.ts.map +1 -0
  58. package/dist/dashboard/types.js +12 -0
  59. package/dist/dashboard/types.js.map +1 -0
  60. package/dist/dashboard/views/main-view.d.ts +23 -0
  61. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  62. package/dist/dashboard/views/main-view.js +143 -0
  63. package/dist/dashboard/views/main-view.js.map +1 -0
  64. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  65. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  66. package/dist/dashboard/views/sessions-view.js +104 -0
  67. package/dist/dashboard/views/sessions-view.js.map +1 -0
  68. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  69. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  70. package/dist/dashboard/views/tabs-view.js +92 -0
  71. package/dist/dashboard/views/tabs-view.js.map +1 -0
  72. package/dist/hints/hint-engine.d.ts +65 -0
  73. package/dist/hints/hint-engine.d.ts.map +1 -0
  74. package/dist/hints/hint-engine.js +156 -0
  75. package/dist/hints/hint-engine.js.map +1 -0
  76. package/dist/hints/index.d.ts +8 -0
  77. package/dist/hints/index.d.ts.map +1 -0
  78. package/dist/hints/index.js +11 -0
  79. package/dist/hints/index.js.map +1 -0
  80. package/dist/hints/pattern-learner.d.ts +76 -0
  81. package/dist/hints/pattern-learner.d.ts.map +1 -0
  82. package/dist/hints/pattern-learner.js +254 -0
  83. package/dist/hints/pattern-learner.js.map +1 -0
  84. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  85. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  86. package/dist/hints/rules/composite-suggestions.js +66 -0
  87. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  88. package/dist/hints/rules/error-recovery.d.ts +7 -0
  89. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  90. package/dist/hints/rules/error-recovery.js +47 -0
  91. package/dist/hints/rules/error-recovery.js.map +1 -0
  92. package/dist/hints/rules/learned-rules.d.ts +13 -0
  93. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  94. package/dist/hints/rules/learned-rules.js +27 -0
  95. package/dist/hints/rules/learned-rules.js.map +1 -0
  96. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  97. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  98. package/dist/hints/rules/repetition-detection.js +82 -0
  99. package/dist/hints/rules/repetition-detection.js.map +1 -0
  100. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  101. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  102. package/dist/hints/rules/sequence-detection.js +61 -0
  103. package/dist/hints/rules/sequence-detection.js.map +1 -0
  104. package/dist/hints/rules/success-hints.d.ts +6 -0
  105. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  106. package/dist/hints/rules/success-hints.js +62 -0
  107. package/dist/hints/rules/success-hints.js.map +1 -0
  108. package/dist/index.js +190 -55
  109. package/dist/index.js.map +1 -1
  110. package/dist/lightpanda/launcher.d.ts +58 -0
  111. package/dist/lightpanda/launcher.d.ts.map +1 -0
  112. package/dist/lightpanda/launcher.js +199 -0
  113. package/dist/lightpanda/launcher.js.map +1 -0
  114. package/dist/mcp-server.d.ts +38 -1
  115. package/dist/mcp-server.d.ts.map +1 -1
  116. package/dist/mcp-server.js +220 -6
  117. package/dist/mcp-server.js.map +1 -1
  118. package/dist/orchestration/state-manager.js +46 -46
  119. package/dist/orchestration/workflow-engine.d.ts +1 -0
  120. package/dist/orchestration/workflow-engine.d.ts.map +1 -1
  121. package/dist/orchestration/workflow-engine.js +112 -114
  122. package/dist/orchestration/workflow-engine.js.map +1 -1
  123. package/dist/resources/usage-guide.d.ts +13 -0
  124. package/dist/resources/usage-guide.d.ts.map +1 -0
  125. package/dist/resources/usage-guide.js +101 -0
  126. package/dist/resources/usage-guide.js.map +1 -0
  127. package/dist/router/browser-router.d.ts +51 -0
  128. package/dist/router/browser-router.d.ts.map +1 -0
  129. package/dist/router/browser-router.js +178 -0
  130. package/dist/router/browser-router.js.map +1 -0
  131. package/dist/router/cookie-sync.d.ts +48 -0
  132. package/dist/router/cookie-sync.d.ts.map +1 -0
  133. package/dist/router/cookie-sync.js +106 -0
  134. package/dist/router/cookie-sync.js.map +1 -0
  135. package/dist/router/index.d.ts +5 -0
  136. package/dist/router/index.d.ts.map +1 -0
  137. package/dist/router/index.js +10 -0
  138. package/dist/router/index.js.map +1 -0
  139. package/dist/router/tool-routing-registry.d.ts +21 -0
  140. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  141. package/dist/router/tool-routing-registry.js +90 -0
  142. package/dist/router/tool-routing-registry.js.map +1 -0
  143. package/dist/session-manager.d.ts +41 -1
  144. package/dist/session-manager.d.ts.map +1 -1
  145. package/dist/session-manager.js +216 -21
  146. package/dist/session-manager.js.map +1 -1
  147. package/dist/tools/click-element.d.ts +8 -0
  148. package/dist/tools/click-element.d.ts.map +1 -0
  149. package/dist/tools/click-element.js +383 -0
  150. package/dist/tools/click-element.js.map +1 -0
  151. package/dist/tools/computer.d.ts.map +1 -1
  152. package/dist/tools/computer.js +198 -34
  153. package/dist/tools/computer.js.map +1 -1
  154. package/dist/tools/console-capture.d.ts +6 -0
  155. package/dist/tools/console-capture.d.ts.map +1 -0
  156. package/dist/tools/console-capture.js +320 -0
  157. package/dist/tools/console-capture.js.map +1 -0
  158. package/dist/tools/cookies.d.ts +6 -0
  159. package/dist/tools/cookies.d.ts.map +1 -0
  160. package/dist/tools/cookies.js +263 -0
  161. package/dist/tools/cookies.js.map +1 -0
  162. package/dist/tools/drag-drop.d.ts +6 -0
  163. package/dist/tools/drag-drop.d.ts.map +1 -0
  164. package/dist/tools/drag-drop.js +252 -0
  165. package/dist/tools/drag-drop.js.map +1 -0
  166. package/dist/tools/emulate-device.d.ts +6 -0
  167. package/dist/tools/emulate-device.d.ts.map +1 -0
  168. package/dist/tools/emulate-device.js +221 -0
  169. package/dist/tools/emulate-device.js.map +1 -0
  170. package/dist/tools/file-upload.d.ts +6 -0
  171. package/dist/tools/file-upload.d.ts.map +1 -0
  172. package/dist/tools/file-upload.js +208 -0
  173. package/dist/tools/file-upload.js.map +1 -0
  174. package/dist/tools/fill-form.d.ts +8 -0
  175. package/dist/tools/fill-form.d.ts.map +1 -0
  176. package/dist/tools/fill-form.js +342 -0
  177. package/dist/tools/fill-form.js.map +1 -0
  178. package/dist/tools/find.d.ts.map +1 -1
  179. package/dist/tools/find.js +153 -65
  180. package/dist/tools/find.js.map +1 -1
  181. package/dist/tools/form-input.js +52 -52
  182. package/dist/tools/form-input.js.map +1 -1
  183. package/dist/tools/geolocation.d.ts +6 -0
  184. package/dist/tools/geolocation.d.ts.map +1 -0
  185. package/dist/tools/geolocation.js +172 -0
  186. package/dist/tools/geolocation.js.map +1 -0
  187. package/dist/tools/http-auth.d.ts +6 -0
  188. package/dist/tools/http-auth.d.ts.map +1 -0
  189. package/dist/tools/http-auth.js +136 -0
  190. package/dist/tools/http-auth.js.map +1 -0
  191. package/dist/tools/index.d.ts.map +1 -1
  192. package/dist/tools/index.js +50 -0
  193. package/dist/tools/index.js.map +1 -1
  194. package/dist/tools/javascript.js +1 -1
  195. package/dist/tools/javascript.js.map +1 -1
  196. package/dist/tools/navigate.d.ts.map +1 -1
  197. package/dist/tools/navigate.js +5 -2
  198. package/dist/tools/navigate.js.map +1 -1
  199. package/dist/tools/network.js +4 -4
  200. package/dist/tools/network.js.map +1 -1
  201. package/dist/tools/orchestration.d.ts.map +1 -1
  202. package/dist/tools/orchestration.js +13 -8
  203. package/dist/tools/orchestration.js.map +1 -1
  204. package/dist/tools/page-content.d.ts +6 -0
  205. package/dist/tools/page-content.d.ts.map +1 -0
  206. package/dist/tools/page-content.js +120 -0
  207. package/dist/tools/page-content.js.map +1 -0
  208. package/dist/tools/page-pdf.d.ts +6 -0
  209. package/dist/tools/page-pdf.d.ts.map +1 -0
  210. package/dist/tools/page-pdf.js +245 -0
  211. package/dist/tools/page-pdf.js.map +1 -0
  212. package/dist/tools/page-reload.d.ts +6 -0
  213. package/dist/tools/page-reload.d.ts.map +1 -0
  214. package/dist/tools/page-reload.js +89 -0
  215. package/dist/tools/page-reload.js.map +1 -0
  216. package/dist/tools/performance-metrics.d.ts +6 -0
  217. package/dist/tools/performance-metrics.d.ts.map +1 -0
  218. package/dist/tools/performance-metrics.js +158 -0
  219. package/dist/tools/performance-metrics.js.map +1 -0
  220. package/dist/tools/read-page.d.ts.map +1 -1
  221. package/dist/tools/read-page.js +4 -2
  222. package/dist/tools/read-page.js.map +1 -1
  223. package/dist/tools/request-intercept.d.ts +6 -0
  224. package/dist/tools/request-intercept.d.ts.map +1 -0
  225. package/dist/tools/request-intercept.js +439 -0
  226. package/dist/tools/request-intercept.js.map +1 -0
  227. package/dist/tools/selector-query.d.ts +6 -0
  228. package/dist/tools/selector-query.d.ts.map +1 -0
  229. package/dist/tools/selector-query.js +206 -0
  230. package/dist/tools/selector-query.js.map +1 -0
  231. package/dist/tools/storage.d.ts +6 -0
  232. package/dist/tools/storage.d.ts.map +1 -0
  233. package/dist/tools/storage.js +264 -0
  234. package/dist/tools/storage.js.map +1 -0
  235. package/dist/tools/tabs-close.d.ts +6 -0
  236. package/dist/tools/tabs-close.d.ts.map +1 -0
  237. package/dist/tools/tabs-close.js +124 -0
  238. package/dist/tools/tabs-close.js.map +1 -0
  239. package/dist/tools/tabs-context.js +1 -1
  240. package/dist/tools/tabs-context.js.map +1 -1
  241. package/dist/tools/user-agent.d.ts +6 -0
  242. package/dist/tools/user-agent.d.ts.map +1 -0
  243. package/dist/tools/user-agent.js +128 -0
  244. package/dist/tools/user-agent.js.map +1 -0
  245. package/dist/tools/wait-and-click.d.ts +8 -0
  246. package/dist/tools/wait-and-click.d.ts.map +1 -0
  247. package/dist/tools/wait-and-click.js +290 -0
  248. package/dist/tools/wait-and-click.js.map +1 -0
  249. package/dist/tools/wait-for.d.ts +6 -0
  250. package/dist/tools/wait-for.d.ts.map +1 -0
  251. package/dist/tools/wait-for.js +248 -0
  252. package/dist/tools/wait-for.js.map +1 -0
  253. package/dist/tools/xpath-query.d.ts +6 -0
  254. package/dist/tools/xpath-query.d.ts.map +1 -0
  255. package/dist/tools/xpath-query.js +230 -0
  256. package/dist/tools/xpath-query.js.map +1 -0
  257. package/dist/types/browser-backend.d.ts +30 -0
  258. package/dist/types/browser-backend.d.ts.map +1 -0
  259. package/dist/types/browser-backend.js +9 -0
  260. package/dist/types/browser-backend.js.map +1 -0
  261. package/dist/types/profile.d.ts +76 -0
  262. package/dist/types/profile.d.ts.map +1 -0
  263. package/dist/types/profile.js +35 -0
  264. package/dist/types/profile.js.map +1 -0
  265. package/dist/types/session.d.ts +7 -3
  266. package/dist/types/session.d.ts.map +1 -1
  267. package/package.json +78 -75
  268. package/dist/master/index.d.ts +0 -18
  269. package/dist/master/index.d.ts.map +0 -1
  270. package/dist/master/index.js +0 -75
  271. package/dist/master/index.js.map +0 -1
  272. package/dist/master/ipc-server.d.ts +0 -21
  273. package/dist/master/ipc-server.d.ts.map +0 -1
  274. package/dist/master/ipc-server.js +0 -175
  275. package/dist/master/ipc-server.js.map +0 -1
  276. package/dist/master/request-handler.d.ts +0 -17
  277. package/dist/master/request-handler.d.ts.map +0 -1
  278. package/dist/master/request-handler.js +0 -134
  279. package/dist/master/request-handler.js.map +0 -1
  280. package/dist/master/session-registry.d.ts +0 -120
  281. package/dist/master/session-registry.d.ts.map +0 -1
  282. package/dist/master/session-registry.js +0 -247
  283. package/dist/master/session-registry.js.map +0 -1
  284. package/dist/shared/ipc-constants.d.ts +0 -16
  285. package/dist/shared/ipc-constants.d.ts.map +0 -1
  286. package/dist/shared/ipc-constants.js +0 -66
  287. package/dist/shared/ipc-constants.js.map +0 -1
  288. package/dist/shared/ipc-protocol.d.ts +0 -33
  289. package/dist/shared/ipc-protocol.d.ts.map +0 -1
  290. package/dist/shared/ipc-protocol.js +0 -20
  291. package/dist/shared/ipc-protocol.js.map +0 -1
  292. package/dist/worker/auto-master.d.ts +0 -24
  293. package/dist/worker/auto-master.d.ts.map +0 -1
  294. package/dist/worker/auto-master.js +0 -135
  295. package/dist/worker/auto-master.js.map +0 -1
  296. package/dist/worker/index.d.ts +0 -25
  297. package/dist/worker/index.d.ts.map +0 -1
  298. package/dist/worker/index.js +0 -93
  299. package/dist/worker/index.js.map +0 -1
  300. package/dist/worker/ipc-client.d.ts +0 -26
  301. package/dist/worker/ipc-client.d.ts.map +0 -1
  302. package/dist/worker/ipc-client.js +0 -211
  303. package/dist/worker/ipc-client.js.map +0 -1
  304. package/dist/worker/remote-session-manager.d.ts +0 -114
  305. package/dist/worker/remote-session-manager.d.ts.map +0 -1
  306. package/dist/worker/remote-session-manager.js +0 -151
  307. package/dist/worker/remote-session-manager.js.map +0 -1
  308. package/dist/worker/tools.d.ts +0 -7
  309. package/dist/worker/tools.d.ts.map +0 -1
  310. package/dist/worker/tools.js +0 -340
  311. package/dist/worker/tools.js.map +0 -1
  312. package/dist/worker/worker-mcp-server.d.ts +0 -70
  313. package/dist/worker/worker-mcp-server.d.ts.map +0 -1
  314. package/dist/worker/worker-mcp-server.js +0 -295
  315. package/dist/worker/worker-mcp-server.js.map +0 -1
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrowserRouter = void 0;
4
+ const browser_backend_1 = require("../types/browser-backend");
5
+ const tool_routing_registry_1 = require("./tool-routing-registry");
6
+ const launcher_1 = require("../lightpanda/launcher");
7
+ const cookie_sync_1 = require("./cookie-sync");
8
+ class BrowserRouter {
9
+ config;
10
+ launcher = null;
11
+ cookieSync;
12
+ stats;
13
+ // Circuit breaker state
14
+ consecutiveFailures = 0;
15
+ circuitOpen = false;
16
+ circuitOpenedAt = 0;
17
+ constructor(config) {
18
+ this.config = config;
19
+ this.cookieSync = new cookie_sync_1.CookieSync({ intervalMs: config.cookieSync.intervalMs });
20
+ this.stats = {
21
+ chromeRequests: 0,
22
+ lightpandaRequests: 0,
23
+ fallbacks: 0,
24
+ circuitBreakerTrips: 0,
25
+ };
26
+ }
27
+ /**
28
+ * Route a tool request to the appropriate backend.
29
+ *
30
+ * Decision order:
31
+ * 1. Hybrid disabled → always Chrome
32
+ * 2. Visual tool → always Chrome
33
+ * 3. Circuit breaker open and cooldown not expired → Chrome (increment circuitBreakerTrips)
34
+ * 4. Circuit breaker open and cooldown expired → reset, try LP
35
+ * 5. LP page provided and page is healthy → LP
36
+ * 6. LP page missing or unhealthy → fallback to Chrome, record failure
37
+ */
38
+ async route(toolName, chromePage, lightpandaPage) {
39
+ // 1. Hybrid disabled
40
+ if (!this.config.enabled) {
41
+ this.stats.chromeRequests++;
42
+ return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: false };
43
+ }
44
+ // 2. Visual tool always goes to Chrome
45
+ if (tool_routing_registry_1.ToolRoutingRegistry.isVisualTool(toolName)) {
46
+ this.stats.chromeRequests++;
47
+ return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: false };
48
+ }
49
+ // 3 & 4. Check circuit breaker
50
+ if (this.circuitOpen) {
51
+ const cooldownExpired = Date.now() - this.circuitOpenedAt >= this.config.circuitBreaker.cooldownMs;
52
+ if (!cooldownExpired) {
53
+ // Circuit still open → serve from Chrome
54
+ this.stats.chromeRequests++;
55
+ this.stats.circuitBreakerTrips++;
56
+ return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: false };
57
+ }
58
+ // Cooldown expired → reset circuit and allow LP attempt
59
+ this.circuitOpen = false;
60
+ this.consecutiveFailures = 0;
61
+ }
62
+ // 5. Attempt Lightpanda
63
+ if (lightpandaPage != null) {
64
+ let pageHealthy = false;
65
+ try {
66
+ pageHealthy = !lightpandaPage.isClosed();
67
+ }
68
+ catch {
69
+ // isClosed() threw → page is not usable
70
+ pageHealthy = false;
71
+ }
72
+ if (pageHealthy) {
73
+ this.stats.lightpandaRequests++;
74
+ this.recordSuccess();
75
+ return { backend: browser_backend_1.BrowserBackend.LIGHTPANDA, page: lightpandaPage, fallback: false };
76
+ }
77
+ }
78
+ // 6. Fallback to Chrome
79
+ this.stats.chromeRequests++;
80
+ this.stats.fallbacks++;
81
+ this.recordFailure();
82
+ return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: true };
83
+ }
84
+ /**
85
+ * Escalate from Lightpanda to Chrome.
86
+ * - Gets current URL from LP page
87
+ * - Syncs cookies LP → Chrome
88
+ * - Navigates Chrome to same URL
89
+ */
90
+ async escalate(lightpandaPage, chromePage) {
91
+ const url = lightpandaPage.url();
92
+ let cookiesSynced = false;
93
+ try {
94
+ const count = await this.cookieSync.lightpandaToChrome(lightpandaPage, chromePage);
95
+ cookiesSynced = count >= 0; // lightpandaToChrome returns count (0 is still "synced" successfully)
96
+ }
97
+ catch {
98
+ cookiesSynced = false;
99
+ }
100
+ try {
101
+ await chromePage.goto(url);
102
+ }
103
+ catch {
104
+ // best-effort navigation
105
+ }
106
+ return {
107
+ success: true,
108
+ previousBackend: browser_backend_1.BrowserBackend.LIGHTPANDA,
109
+ newBackend: browser_backend_1.BrowserBackend.CHROME,
110
+ cookiesSynced,
111
+ url,
112
+ };
113
+ }
114
+ /** Get routing statistics */
115
+ getStats() {
116
+ return { ...this.stats };
117
+ }
118
+ /** Reset statistics */
119
+ resetStats() {
120
+ this.stats = {
121
+ chromeRequests: 0,
122
+ lightpandaRequests: 0,
123
+ fallbacks: 0,
124
+ circuitBreakerTrips: 0,
125
+ };
126
+ }
127
+ /** Check if circuit breaker is currently open */
128
+ isCircuitOpen() {
129
+ return this.circuitOpen;
130
+ }
131
+ /** Initialize launcher and connect to Lightpanda */
132
+ async initialize() {
133
+ if (!this.config.enabled) {
134
+ return;
135
+ }
136
+ this.launcher = new launcher_1.LightpandaLauncher({
137
+ port: this.config.lightpandaPort,
138
+ });
139
+ await this.launcher.start();
140
+ await this.launcher.connect();
141
+ }
142
+ /** Cleanup resources */
143
+ async cleanup() {
144
+ this.cookieSync.cleanup();
145
+ if (this.launcher) {
146
+ await this.launcher.disconnect();
147
+ await this.launcher.stop();
148
+ this.launcher = null;
149
+ }
150
+ }
151
+ // ─── Private helpers ──────────────────────────────────────────────────────
152
+ recordSuccess() {
153
+ this.consecutiveFailures = 0;
154
+ }
155
+ recordFailure() {
156
+ this.consecutiveFailures++;
157
+ if (!this.circuitOpen &&
158
+ this.consecutiveFailures >= this.config.circuitBreaker.maxFailures) {
159
+ this.circuitOpen = true;
160
+ this.circuitOpenedAt = Date.now();
161
+ }
162
+ }
163
+ /** Returns true if the circuit breaker should cause LP to be skipped */
164
+ checkCircuitBreaker() {
165
+ if (!this.circuitOpen) {
166
+ return false;
167
+ }
168
+ const cooldownExpired = Date.now() - this.circuitOpenedAt >= this.config.circuitBreaker.cooldownMs;
169
+ if (cooldownExpired) {
170
+ this.circuitOpen = false;
171
+ this.consecutiveFailures = 0;
172
+ return false;
173
+ }
174
+ return true;
175
+ }
176
+ }
177
+ exports.BrowserRouter = BrowserRouter;
178
+ //# sourceMappingURL=browser-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-router.js","sourceRoot":"","sources":["../../src/router/browser-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Page } from 'puppeteer-core';
2
+ export interface CookieSyncConfig {
3
+ /** Interval between periodic syncs in milliseconds. Default: 5000 */
4
+ intervalMs: number;
5
+ }
6
+ /**
7
+ * CookieSync handles bidirectional cookie synchronisation between Chrome and
8
+ * Lightpanda pages. All operations are best-effort – errors are caught and
9
+ * logged but never thrown so callers are not disrupted.
10
+ */
11
+ export declare class CookieSync {
12
+ private syncTimer;
13
+ private readonly intervalMs;
14
+ constructor(config?: Partial<CookieSyncConfig>);
15
+ /**
16
+ * Core sync primitive. Reads cookies from `source`, optionally filters by
17
+ * `domain`, then writes them to `target`.
18
+ *
19
+ * @returns Number of cookies actually synced, or 0 on error.
20
+ */
21
+ syncCookies(source: Page, target: Page, domain?: string): Promise<number>;
22
+ /**
23
+ * Sync cookies from Chrome to Lightpanda (e.g. before delegating a task).
24
+ */
25
+ chromeToLightpanda(chromePage: Page, lightpandaPage: Page, domain?: string): Promise<number>;
26
+ /**
27
+ * Sync cookies from Lightpanda back to Chrome on escalation.
28
+ * Uses a MERGE strategy – only cookies not already present in Chrome are
29
+ * added; existing Chrome cookies are never overwritten.
30
+ *
31
+ * @returns Number of new cookies added to Chrome.
32
+ */
33
+ lightpandaToChrome(lightpandaPage: Page, chromePage: Page): Promise<number>;
34
+ /**
35
+ * Start a periodic background sync from `source` to `target`.
36
+ * The timer is unref'd so it will not prevent process exit.
37
+ */
38
+ startPeriodicSync(source: Page, target: Page, domain?: string): void;
39
+ /**
40
+ * Stop the periodic sync timer if one is running.
41
+ */
42
+ stopPeriodicSync(): void;
43
+ /**
44
+ * Alias for stopPeriodicSync – stops the timer and releases resources.
45
+ */
46
+ cleanup(): void;
47
+ }
48
+ //# sourceMappingURL=cookie-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-sync.d.ts","sourceRoot":"","sources":["../../src/router/cookie-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAuB,MAAM,gBAAgB,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAID;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB/E;;OAEG;IACG,kBAAkB,CACtB,UAAU,EAAE,IAAI,EAChB,cAAc,EAAE,IAAI,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;;;OAMG;IACG,kBAAkB,CAAC,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BjF;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAiBpE;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CookieSync = void 0;
4
+ const DEFAULT_INTERVAL_MS = 5000;
5
+ /**
6
+ * CookieSync handles bidirectional cookie synchronisation between Chrome and
7
+ * Lightpanda pages. All operations are best-effort – errors are caught and
8
+ * logged but never thrown so callers are not disrupted.
9
+ */
10
+ class CookieSync {
11
+ syncTimer = null;
12
+ intervalMs;
13
+ constructor(config) {
14
+ this.intervalMs = config?.intervalMs ?? DEFAULT_INTERVAL_MS;
15
+ }
16
+ /**
17
+ * Core sync primitive. Reads cookies from `source`, optionally filters by
18
+ * `domain`, then writes them to `target`.
19
+ *
20
+ * @returns Number of cookies actually synced, or 0 on error.
21
+ */
22
+ async syncCookies(source, target, domain) {
23
+ try {
24
+ let cookies = await source.cookies();
25
+ if (domain) {
26
+ cookies = cookies.filter((c) => c.domain === domain || c.domain === `.${domain}`);
27
+ }
28
+ if (cookies.length === 0) {
29
+ return 0;
30
+ }
31
+ await target.setCookie(...cookies);
32
+ return cookies.length;
33
+ }
34
+ catch (err) {
35
+ console.error('[CookieSync] syncCookies error:', err);
36
+ return 0;
37
+ }
38
+ }
39
+ /**
40
+ * Sync cookies from Chrome to Lightpanda (e.g. before delegating a task).
41
+ */
42
+ async chromeToLightpanda(chromePage, lightpandaPage, domain) {
43
+ return this.syncCookies(chromePage, lightpandaPage, domain);
44
+ }
45
+ /**
46
+ * Sync cookies from Lightpanda back to Chrome on escalation.
47
+ * Uses a MERGE strategy – only cookies not already present in Chrome are
48
+ * added; existing Chrome cookies are never overwritten.
49
+ *
50
+ * @returns Number of new cookies added to Chrome.
51
+ */
52
+ async lightpandaToChrome(lightpandaPage, chromePage) {
53
+ try {
54
+ const [lpCookies, chromeCookies] = await Promise.all([
55
+ lightpandaPage.cookies(),
56
+ chromePage.cookies(),
57
+ ]);
58
+ // Build a set of existing Chrome cookie keys for fast lookup
59
+ const existingKeys = new Set(chromeCookies.map((c) => `${c.name}::${c.domain}::${c.path}`));
60
+ const newCookies = lpCookies.filter((c) => !existingKeys.has(`${c.name}::${c.domain}::${c.path}`));
61
+ if (newCookies.length === 0) {
62
+ return 0;
63
+ }
64
+ await chromePage.setCookie(...newCookies);
65
+ return newCookies.length;
66
+ }
67
+ catch (err) {
68
+ console.error('[CookieSync] lightpandaToChrome error:', err);
69
+ return 0;
70
+ }
71
+ }
72
+ /**
73
+ * Start a periodic background sync from `source` to `target`.
74
+ * The timer is unref'd so it will not prevent process exit.
75
+ */
76
+ startPeriodicSync(source, target, domain) {
77
+ this.stopPeriodicSync();
78
+ const timer = setInterval(() => {
79
+ this.syncCookies(source, target, domain).catch((err) => {
80
+ console.error('[CookieSync] periodic sync error:', err);
81
+ });
82
+ }, this.intervalMs);
83
+ // Do not block process exit
84
+ if (typeof timer.unref === 'function') {
85
+ timer.unref();
86
+ }
87
+ this.syncTimer = timer;
88
+ }
89
+ /**
90
+ * Stop the periodic sync timer if one is running.
91
+ */
92
+ stopPeriodicSync() {
93
+ if (this.syncTimer !== null) {
94
+ clearInterval(this.syncTimer);
95
+ this.syncTimer = null;
96
+ }
97
+ }
98
+ /**
99
+ * Alias for stopPeriodicSync – stops the timer and releases resources.
100
+ */
101
+ cleanup() {
102
+ this.stopPeriodicSync();
103
+ }
104
+ }
105
+ exports.CookieSync = CookieSync;
106
+ //# sourceMappingURL=cookie-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-sync.js","sourceRoot":"","sources":["../../src/router/cookie-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { BrowserRouter } from './browser-router';
2
+ export type { RouteResult } from './browser-router';
3
+ export { ToolRoutingRegistry } from './tool-routing-registry';
4
+ export { CookieSync } from './cookie-sync';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CookieSync = exports.ToolRoutingRegistry = exports.BrowserRouter = void 0;
4
+ var browser_router_1 = require("./browser-router");
5
+ Object.defineProperty(exports, "BrowserRouter", { enumerable: true, get: function () { return browser_router_1.BrowserRouter; } });
6
+ var tool_routing_registry_1 = require("./tool-routing-registry");
7
+ Object.defineProperty(exports, "ToolRoutingRegistry", { enumerable: true, get: function () { return tool_routing_registry_1.ToolRoutingRegistry; } });
8
+ var cookie_sync_1 = require("./cookie-sync");
9
+ Object.defineProperty(exports, "CookieSync", { enumerable: true, get: function () { return cookie_sync_1.CookieSync; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,6CAA2C;AAAlC,yGAAA,UAAU,OAAA"}
@@ -0,0 +1,21 @@
1
+ import type { ToolRouting } from '../types/browser-backend';
2
+ export declare class ToolRoutingRegistry {
3
+ /**
4
+ * Returns the routing preference for a given tool name.
5
+ * Unknown tools default to 'chrome-only' as a safe fallback.
6
+ */
7
+ static getRouting(toolName: string): ToolRouting;
8
+ /**
9
+ * Returns true if the tool requires Chrome (screenshot/PDF capability).
10
+ */
11
+ static isVisualTool(toolName: string): boolean;
12
+ /**
13
+ * Returns the list of all chrome-only tool names.
14
+ */
15
+ static getChromeOnlyTools(): string[];
16
+ /**
17
+ * Returns the list of all prefer-lightpanda tool names.
18
+ */
19
+ static getPreferLightpandaTools(): string[];
20
+ }
21
+ //# sourceMappingURL=tool-routing-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-routing-registry.d.ts","sourceRoot":"","sources":["../../src/router/tool-routing-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiE5D,qBAAa,mBAAmB;IAC9B;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAIhD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAMrC;;OAEG;IACH,MAAM,CAAC,wBAAwB,IAAI,MAAM,EAAE;CAK5C"}
@@ -0,0 +1,90 @@
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
+ selector_query: '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
+ xpath_query: 'prefer-lightpanda',
37
+ file_upload: 'prefer-lightpanda',
38
+ http_auth: 'prefer-lightpanda',
39
+ drag_drop: 'prefer-lightpanda',
40
+ // UX composite tools - prefer-lightpanda
41
+ click_element: 'prefer-lightpanda',
42
+ fill_form: 'prefer-lightpanda',
43
+ wait_and_click: 'prefer-lightpanda',
44
+ // Tab management tools - prefer-lightpanda
45
+ tabs_context: 'prefer-lightpanda',
46
+ tabs_create: 'prefer-lightpanda',
47
+ tabs_close: 'prefer-lightpanda',
48
+ // Worker management tools - prefer-lightpanda
49
+ worker_create: 'prefer-lightpanda',
50
+ worker_list: 'prefer-lightpanda',
51
+ worker_delete: 'prefer-lightpanda',
52
+ // Orchestration tools - prefer-lightpanda
53
+ workflow_init: 'prefer-lightpanda',
54
+ workflow_status: 'prefer-lightpanda',
55
+ workflow_collect: 'prefer-lightpanda',
56
+ workflow_cleanup: 'prefer-lightpanda',
57
+ };
58
+ class ToolRoutingRegistry {
59
+ /**
60
+ * Returns the routing preference for a given tool name.
61
+ * Unknown tools default to 'chrome-only' as a safe fallback.
62
+ */
63
+ static getRouting(toolName) {
64
+ return TOOL_ROUTING_MAP[toolName] ?? 'chrome-only';
65
+ }
66
+ /**
67
+ * Returns true if the tool requires Chrome (screenshot/PDF capability).
68
+ */
69
+ static isVisualTool(toolName) {
70
+ return TOOL_ROUTING_MAP[toolName] === 'chrome-only';
71
+ }
72
+ /**
73
+ * Returns the list of all chrome-only tool names.
74
+ */
75
+ static getChromeOnlyTools() {
76
+ return Object.entries(TOOL_ROUTING_MAP)
77
+ .filter(([, routing]) => routing === 'chrome-only')
78
+ .map(([name]) => name);
79
+ }
80
+ /**
81
+ * Returns the list of all prefer-lightpanda tool names.
82
+ */
83
+ static getPreferLightpandaTools() {
84
+ return Object.entries(TOOL_ROUTING_MAP)
85
+ .filter(([, routing]) => routing === 'prefer-lightpanda')
86
+ .map(([name]) => name);
87
+ }
88
+ }
89
+ exports.ToolRoutingRegistry = ToolRoutingRegistry;
90
+ //# 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,cAAc,EAAE,mBAAmB;IACnC,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,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,8CAA8C;IAC9C,aAAa,EAAE,mBAAmB;IAClC,WAAW,EAAE,mBAAmB;IAChC,aAAa,EAAE,mBAAmB;IAElC,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"}
@@ -6,6 +6,8 @@ import { Page } from 'puppeteer-core';
6
6
  import { Session, SessionInfo, SessionCreateOptions, SessionEvent, Worker, WorkerInfo, WorkerCreateOptions } from './types/session';
7
7
  import { CDPClient } from './cdp/client';
8
8
  import { PoolStats } from './cdp/connection-pool';
9
+ import { BrowserRouter } from './router';
10
+ import { HybridConfig } from './types/browser-backend';
9
11
  export interface SessionManagerConfig {
10
12
  /** Session TTL in milliseconds (default: 30 minutes) */
11
13
  sessionTTL?: number;
@@ -19,6 +21,10 @@ export interface SessionManagerConfig {
19
21
  maxWorkersPerSession?: number;
20
22
  /** Use connection pool for page management (default: false for worker isolation) */
21
23
  useConnectionPool?: boolean;
24
+ /** Use default browser context (shares cookies/sessions with Chrome profile) */
25
+ useDefaultContext?: boolean;
26
+ /** Enable Chrome pool for origin-aware instance distribution (default: false) */
27
+ usePool?: boolean;
22
28
  }
23
29
  export interface SessionManagerStats {
24
30
  activeSessions: number;
@@ -36,8 +42,11 @@ export declare class SessionManager {
36
42
  private targetToWorker;
37
43
  private cdpClient;
38
44
  private connectionPool;
45
+ private chromePool;
46
+ private cdpFactory;
39
47
  private queueManager;
40
48
  private eventListeners;
49
+ private browserRouter;
41
50
  private config;
42
51
  private cleanupTimer;
43
52
  private startTime;
@@ -45,6 +54,10 @@ export declare class SessionManager {
45
54
  private totalSessionsCleaned;
46
55
  private lastCleanupTime;
47
56
  constructor(cdpClient?: CDPClient, config?: SessionManagerConfig);
57
+ /**
58
+ * Get the CDPClient for a specific worker (may be on a different Chrome instance)
59
+ */
60
+ private getCDPClientForWorker;
48
61
  /**
49
62
  * Start automatic cleanup interval
50
63
  */
@@ -142,8 +155,9 @@ export declare class SessionManager {
142
155
  * @param sessionId Session ID
143
156
  * @param targetId Target/Tab ID
144
157
  * @param workerId Optional worker ID for validation
158
+ * @param toolName Optional MCP tool name for hybrid BrowserRouter routing
145
159
  */
146
- getPage(sessionId: string, targetId: string, workerId?: string): Promise<Page | null>;
160
+ getPage(sessionId: string, targetId: string, workerId?: string, toolName?: string): Promise<Page | null>;
147
161
  /**
148
162
  * Get all pages for a worker
149
163
  */
@@ -164,6 +178,20 @@ export declare class SessionManager {
164
178
  * Get the worker ID that owns a target
165
179
  */
166
180
  getTargetWorkerId(targetId: string): string | undefined;
181
+ /**
182
+ * Close a specific target/tab
183
+ * @param sessionId Session ID
184
+ * @param targetId Target/Tab ID to close
185
+ * @returns true if closed, false if not found
186
+ */
187
+ closeTarget(sessionId: string, targetId: string): Promise<boolean>;
188
+ /**
189
+ * Close all tabs in a worker (without deleting the worker)
190
+ * @param sessionId Session ID
191
+ * @param workerId Worker ID
192
+ * @returns Number of tabs closed
193
+ */
194
+ closeWorkerTabs(sessionId: string, workerId: string): Promise<number>;
167
195
  /**
168
196
  * Execute a CDP command through the session's queue
169
197
  */
@@ -200,6 +228,18 @@ export declare class SessionManager {
200
228
  * Get CDPClient
201
229
  */
202
230
  getCDPClient(): CDPClient;
231
+ /**
232
+ * Initialize hybrid mode with BrowserRouter
233
+ */
234
+ initHybrid(config: HybridConfig): Promise<void>;
235
+ /**
236
+ * Get the BrowserRouter (for stats/escalation)
237
+ */
238
+ getBrowserRouter(): BrowserRouter | null;
239
+ /**
240
+ * Cleanup hybrid mode
241
+ */
242
+ cleanupHybrid(): Promise<void>;
203
243
  }
204
244
  export declare function getSessionManager(): SessionManager;
205
245
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}