agent-web-interface 4.3.0 → 4.5.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 (461) hide show
  1. package/dist/src/browser/browser-session-config.d.ts +33 -0
  2. package/dist/src/browser/browser-session-config.d.ts.map +1 -0
  3. package/dist/src/browser/browser-session-config.js +24 -0
  4. package/dist/src/browser/browser-session-config.js.map +1 -0
  5. package/dist/src/browser/connection-utils.d.ts +48 -0
  6. package/dist/src/browser/connection-utils.d.ts.map +1 -0
  7. package/dist/src/browser/connection-utils.js +129 -0
  8. package/dist/src/browser/connection-utils.js.map +1 -0
  9. package/dist/src/browser/ensure-browser.d.ts +12 -27
  10. package/dist/src/browser/ensure-browser.d.ts.map +1 -1
  11. package/dist/src/browser/ensure-browser.js +104 -37
  12. package/dist/src/browser/ensure-browser.js.map +1 -1
  13. package/dist/src/browser/index.d.ts +4 -1
  14. package/dist/src/browser/index.d.ts.map +1 -1
  15. package/dist/src/browser/index.js +3 -1
  16. package/dist/src/browser/index.js.map +1 -1
  17. package/dist/src/browser/session-manager.d.ts +21 -89
  18. package/dist/src/browser/session-manager.d.ts.map +1 -1
  19. package/dist/src/browser/session-manager.js +122 -132
  20. package/dist/src/browser/session-manager.js.map +1 -1
  21. package/dist/src/browser/session-manager.types.d.ts +102 -0
  22. package/dist/src/browser/session-manager.types.d.ts.map +1 -0
  23. package/dist/src/browser/session-manager.types.js +11 -0
  24. package/dist/src/browser/session-manager.types.js.map +1 -0
  25. package/dist/src/cli/args.d.ts +12 -18
  26. package/dist/src/cli/args.d.ts.map +1 -1
  27. package/dist/src/cli/args.js +35 -40
  28. package/dist/src/cli/args.js.map +1 -1
  29. package/dist/src/form/constraint-extraction.d.ts +36 -0
  30. package/dist/src/form/constraint-extraction.d.ts.map +1 -0
  31. package/dist/src/form/constraint-extraction.js +117 -0
  32. package/dist/src/form/constraint-extraction.js.map +1 -0
  33. package/dist/src/form/field-extractor.d.ts.map +1 -1
  34. package/dist/src/form/field-extractor.js +16 -450
  35. package/dist/src/form/field-extractor.js.map +1 -1
  36. package/dist/src/form/field-state-extractor.d.ts +22 -0
  37. package/dist/src/form/field-state-extractor.d.ts.map +1 -0
  38. package/dist/src/form/field-state-extractor.js +55 -0
  39. package/dist/src/form/field-state-extractor.js.map +1 -0
  40. package/dist/src/form/form-actions.d.ts +45 -0
  41. package/dist/src/form/form-actions.d.ts.map +1 -0
  42. package/dist/src/form/form-actions.js +108 -0
  43. package/dist/src/form/form-actions.js.map +1 -0
  44. package/dist/src/form/form-detector.d.ts +0 -36
  45. package/dist/src/form/form-detector.d.ts.map +1 -1
  46. package/dist/src/form/form-detector.js +11 -376
  47. package/dist/src/form/form-detector.js.map +1 -1
  48. package/dist/src/form/form-state.d.ts.map +1 -1
  49. package/dist/src/form/form-state.js +16 -4
  50. package/dist/src/form/form-state.js.map +1 -1
  51. package/dist/src/form/input-clustering.d.ts +15 -0
  52. package/dist/src/form/input-clustering.d.ts.map +1 -0
  53. package/dist/src/form/input-clustering.js +61 -0
  54. package/dist/src/form/input-clustering.js.map +1 -0
  55. package/dist/src/form/intent-inference.d.ts +28 -0
  56. package/dist/src/form/intent-inference.d.ts.map +1 -0
  57. package/dist/src/form/intent-inference.js +137 -0
  58. package/dist/src/form/intent-inference.js.map +1 -0
  59. package/dist/src/form/purpose-inference.d.ts +50 -0
  60. package/dist/src/form/purpose-inference.d.ts.map +1 -0
  61. package/dist/src/form/purpose-inference.js +313 -0
  62. package/dist/src/form/purpose-inference.js.map +1 -0
  63. package/dist/src/form/submit-detection.d.ts +36 -0
  64. package/dist/src/form/submit-detection.d.ts.map +1 -0
  65. package/dist/src/form/submit-detection.js +101 -0
  66. package/dist/src/form/submit-detection.js.map +1 -0
  67. package/dist/src/form/types.d.ts +2 -2
  68. package/dist/src/gateway/http-gateway.d.ts +56 -0
  69. package/dist/src/gateway/http-gateway.d.ts.map +1 -0
  70. package/dist/src/gateway/http-gateway.js +229 -0
  71. package/dist/src/gateway/http-gateway.js.map +1 -0
  72. package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
  73. package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
  74. package/dist/src/gateway/json-rpc-errors.js +11 -0
  75. package/dist/src/gateway/json-rpc-errors.js.map +1 -0
  76. package/dist/src/gateway/session-router.d.ts +80 -0
  77. package/dist/src/gateway/session-router.d.ts.map +1 -0
  78. package/dist/src/gateway/session-router.js +177 -0
  79. package/dist/src/gateway/session-router.js.map +1 -0
  80. package/dist/src/http-entry.d.ts +20 -0
  81. package/dist/src/http-entry.d.ts.map +1 -0
  82. package/dist/src/http-entry.js +112 -0
  83. package/dist/src/http-entry.js.map +1 -0
  84. package/dist/src/index.d.ts +1 -10
  85. package/dist/src/index.d.ts.map +1 -1
  86. package/dist/src/index.js +25 -227
  87. package/dist/src/index.js.map +1 -1
  88. package/dist/src/lib/text-utils.d.ts +0 -24
  89. package/dist/src/lib/text-utils.d.ts.map +1 -1
  90. package/dist/src/lib/text-utils.js +2 -38
  91. package/dist/src/lib/text-utils.js.map +1 -1
  92. package/dist/src/observation/eid-linker.d.ts.map +1 -1
  93. package/dist/src/observation/eid-linker.js +1 -21
  94. package/dist/src/observation/eid-linker.js.map +1 -1
  95. package/dist/src/observation/observation-accumulator.d.ts +1 -1
  96. package/dist/src/observation/observation-accumulator.js +1 -1
  97. package/dist/src/observation/observer-script.d.ts +1 -1
  98. package/dist/src/observation/observer-script.d.ts.map +1 -1
  99. package/dist/src/observation/observer-script.js +129 -7
  100. package/dist/src/observation/observer-script.js.map +1 -1
  101. package/dist/src/query/disambiguation.d.ts +18 -0
  102. package/dist/src/query/disambiguation.d.ts.map +1 -0
  103. package/dist/src/query/disambiguation.js +123 -0
  104. package/dist/src/query/disambiguation.js.map +1 -0
  105. package/dist/src/query/fuzzy-match.d.ts +17 -0
  106. package/dist/src/query/fuzzy-match.d.ts.map +1 -0
  107. package/dist/src/query/fuzzy-match.js +34 -0
  108. package/dist/src/query/fuzzy-match.js.map +1 -0
  109. package/dist/src/query/index.d.ts +3 -0
  110. package/dist/src/query/index.d.ts.map +1 -1
  111. package/dist/src/query/index.js +6 -0
  112. package/dist/src/query/index.js.map +1 -1
  113. package/dist/src/query/query-engine.d.ts +0 -35
  114. package/dist/src/query/query-engine.d.ts.map +1 -1
  115. package/dist/src/query/query-engine.js +9 -309
  116. package/dist/src/query/query-engine.js.map +1 -1
  117. package/dist/src/query/scoring.d.ts +52 -0
  118. package/dist/src/query/scoring.d.ts.map +1 -0
  119. package/dist/src/query/scoring.js +162 -0
  120. package/dist/src/query/scoring.js.map +1 -0
  121. package/dist/src/server/index.d.ts +0 -1
  122. package/dist/src/server/index.d.ts.map +1 -1
  123. package/dist/src/server/index.js +0 -1
  124. package/dist/src/server/index.js.map +1 -1
  125. package/dist/src/server/mcp-server.d.ts +6 -2
  126. package/dist/src/server/mcp-server.d.ts.map +1 -1
  127. package/dist/src/server/mcp-server.js +3 -91
  128. package/dist/src/server/mcp-server.js.map +1 -1
  129. package/dist/src/server/server-config.d.ts +4 -20
  130. package/dist/src/server/server-config.d.ts.map +1 -1
  131. package/dist/src/server/server-config.js +6 -50
  132. package/dist/src/server/server-config.js.map +1 -1
  133. package/dist/src/server/tool-registrar.types.d.ts +25 -0
  134. package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
  135. package/dist/src/server/tool-registrar.types.js +10 -0
  136. package/dist/src/server/tool-registrar.types.js.map +1 -0
  137. package/dist/src/server/tool-result-handler.d.ts +61 -0
  138. package/dist/src/server/tool-result-handler.d.ts.map +1 -0
  139. package/dist/src/server/tool-result-handler.js +137 -0
  140. package/dist/src/server/tool-result-handler.js.map +1 -0
  141. package/dist/src/session/session-controller.d.ts +123 -0
  142. package/dist/src/session/session-controller.d.ts.map +1 -0
  143. package/dist/src/session/session-controller.js +273 -0
  144. package/dist/src/session/session-controller.js.map +1 -0
  145. package/dist/src/shared/services/index.d.ts +0 -2
  146. package/dist/src/shared/services/index.d.ts.map +1 -1
  147. package/dist/src/shared/services/index.js +0 -2
  148. package/dist/src/shared/services/index.js.map +1 -1
  149. package/dist/src/shared/version.d.ts +10 -0
  150. package/dist/src/shared/version.d.ts.map +1 -0
  151. package/dist/src/shared/version.js +32 -0
  152. package/dist/src/shared/version.js.map +1 -0
  153. package/dist/src/snapshot/element-resolver.d.ts +27 -15
  154. package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
  155. package/dist/src/snapshot/element-resolver.js +196 -91
  156. package/dist/src/snapshot/element-resolver.js.map +1 -1
  157. package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
  158. package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
  159. package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
  160. package/dist/src/snapshot/extractors/ax-extractor.d.ts +1 -1
  161. package/dist/src/snapshot/extractors/ax-extractor.d.ts.map +1 -1
  162. package/dist/src/snapshot/extractors/ax-extractor.js +4 -1
  163. package/dist/src/snapshot/extractors/ax-extractor.js.map +1 -1
  164. package/dist/src/snapshot/extractors/index.d.ts +1 -1
  165. package/dist/src/snapshot/extractors/index.d.ts.map +1 -1
  166. package/dist/src/snapshot/extractors/index.js +1 -1
  167. package/dist/src/snapshot/extractors/index.js.map +1 -1
  168. package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
  169. package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
  170. package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
  171. package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
  172. package/dist/src/snapshot/extractors/region-resolver.d.ts.map +1 -1
  173. package/dist/src/snapshot/extractors/region-resolver.js +8 -0
  174. package/dist/src/snapshot/extractors/region-resolver.js.map +1 -1
  175. package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
  176. package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
  177. package/dist/src/snapshot/extractors/state-extractor.js +22 -2
  178. package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
  179. package/dist/src/snapshot/extractors/types.d.ts +14 -0
  180. package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
  181. package/dist/src/snapshot/extractors/types.js +16 -0
  182. package/dist/src/snapshot/extractors/types.js.map +1 -1
  183. package/dist/src/snapshot/frame-context.d.ts +68 -0
  184. package/dist/src/snapshot/frame-context.d.ts.map +1 -0
  185. package/dist/src/snapshot/frame-context.js +131 -0
  186. package/dist/src/snapshot/frame-context.js.map +1 -0
  187. package/dist/src/snapshot/heading-index.d.ts +28 -0
  188. package/dist/src/snapshot/heading-index.d.ts.map +1 -0
  189. package/dist/src/snapshot/heading-index.js +108 -0
  190. package/dist/src/snapshot/heading-index.js.map +1 -0
  191. package/dist/src/snapshot/index.d.ts +5 -3
  192. package/dist/src/snapshot/index.d.ts.map +1 -1
  193. package/dist/src/snapshot/index.js +3 -2
  194. package/dist/src/snapshot/index.js.map +1 -1
  195. package/dist/src/snapshot/kind-mapping.d.ts +30 -0
  196. package/dist/src/snapshot/kind-mapping.d.ts.map +1 -0
  197. package/dist/src/snapshot/kind-mapping.js +114 -0
  198. package/dist/src/snapshot/kind-mapping.js.map +1 -0
  199. package/dist/src/snapshot/node-filter.d.ts +31 -0
  200. package/dist/src/snapshot/node-filter.d.ts.map +1 -0
  201. package/dist/src/snapshot/node-filter.js +137 -0
  202. package/dist/src/snapshot/node-filter.js.map +1 -0
  203. package/dist/src/snapshot/node-synthesizer.d.ts +62 -0
  204. package/dist/src/snapshot/node-synthesizer.d.ts.map +1 -0
  205. package/dist/src/snapshot/node-synthesizer.js +185 -0
  206. package/dist/src/snapshot/node-synthesizer.js.map +1 -0
  207. package/dist/src/snapshot/snapshot-compiler.d.ts +2 -36
  208. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
  209. package/dist/src/snapshot/snapshot-compiler.js +40 -549
  210. package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
  211. package/dist/src/snapshot/snapshot.types.d.ts +17 -3
  212. package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
  213. package/dist/src/snapshot/snapshot.types.js +8 -0
  214. package/dist/src/snapshot/snapshot.types.js.map +1 -1
  215. package/dist/src/state/actionables-filter.d.ts +5 -0
  216. package/dist/src/state/actionables-filter.d.ts.map +1 -1
  217. package/dist/src/state/actionables-filter.js +28 -6
  218. package/dist/src/state/actionables-filter.js.map +1 -1
  219. package/dist/src/state/atoms-extractor.d.ts.map +1 -1
  220. package/dist/src/state/atoms-extractor.js +3 -23
  221. package/dist/src/state/atoms-extractor.js.map +1 -1
  222. package/dist/src/state/diff-engine.d.ts.map +1 -1
  223. package/dist/src/state/diff-engine.js +9 -36
  224. package/dist/src/state/diff-engine.js.map +1 -1
  225. package/dist/src/state/element-identity.d.ts +3 -6
  226. package/dist/src/state/element-identity.d.ts.map +1 -1
  227. package/dist/src/state/element-identity.js +10 -7
  228. package/dist/src/state/element-identity.js.map +1 -1
  229. package/dist/src/state/element-ref.types.d.ts +5 -27
  230. package/dist/src/state/element-ref.types.d.ts.map +1 -1
  231. package/dist/src/state/element-registry.d.ts.map +1 -1
  232. package/dist/src/state/element-registry.js +6 -4
  233. package/dist/src/state/element-registry.js.map +1 -1
  234. package/dist/src/state/hash-utils.d.ts +24 -0
  235. package/dist/src/state/hash-utils.d.ts.map +1 -0
  236. package/dist/src/state/hash-utils.js +41 -0
  237. package/dist/src/state/hash-utils.js.map +1 -0
  238. package/dist/src/state/layer-detector.d.ts.map +1 -1
  239. package/dist/src/state/layer-detector.js +15 -286
  240. package/dist/src/state/layer-detector.js.map +1 -1
  241. package/dist/src/state/layer-detectors/drawer-detector.d.ts +32 -0
  242. package/dist/src/state/layer-detectors/drawer-detector.d.ts.map +1 -0
  243. package/dist/src/state/layer-detectors/drawer-detector.js +96 -0
  244. package/dist/src/state/layer-detectors/drawer-detector.js.map +1 -0
  245. package/dist/src/state/layer-detectors/index.d.ts +10 -0
  246. package/dist/src/state/layer-detectors/index.d.ts.map +1 -0
  247. package/dist/src/state/layer-detectors/index.js +10 -0
  248. package/dist/src/state/layer-detectors/index.js.map +1 -0
  249. package/dist/src/state/layer-detectors/modal-detector.d.ts +30 -0
  250. package/dist/src/state/layer-detectors/modal-detector.d.ts.map +1 -0
  251. package/dist/src/state/layer-detectors/modal-detector.js +127 -0
  252. package/dist/src/state/layer-detectors/modal-detector.js.map +1 -0
  253. package/dist/src/state/layer-detectors/popover-detector.d.ts +20 -0
  254. package/dist/src/state/layer-detectors/popover-detector.d.ts.map +1 -0
  255. package/dist/src/state/layer-detectors/popover-detector.js +76 -0
  256. package/dist/src/state/layer-detectors/popover-detector.js.map +1 -0
  257. package/dist/src/state/layer-detectors/toast-detector.d.ts +24 -0
  258. package/dist/src/state/layer-detectors/toast-detector.d.ts.map +1 -0
  259. package/dist/src/state/layer-detectors/toast-detector.js +48 -0
  260. package/dist/src/state/layer-detectors/toast-detector.js.map +1 -0
  261. package/dist/src/state/region-mapping.d.ts +13 -0
  262. package/dist/src/state/region-mapping.d.ts.map +1 -0
  263. package/dist/src/state/region-mapping.js +25 -0
  264. package/dist/src/state/region-mapping.js.map +1 -0
  265. package/dist/src/state/state-manager.d.ts.map +1 -1
  266. package/dist/src/state/state-manager.js +11 -193
  267. package/dist/src/state/state-manager.js.map +1 -1
  268. package/dist/src/state/state-renderer.d.ts.map +1 -1
  269. package/dist/src/state/state-renderer.js +17 -3
  270. package/dist/src/state/state-renderer.js.map +1 -1
  271. package/dist/src/state/types.d.ts +10 -5
  272. package/dist/src/state/types.d.ts.map +1 -1
  273. package/dist/src/state/url-sanitization.d.ts +22 -0
  274. package/dist/src/state/url-sanitization.d.ts.map +1 -0
  275. package/dist/src/state/url-sanitization.js +76 -0
  276. package/dist/src/state/url-sanitization.js.map +1 -0
  277. package/dist/src/state/value-masking.d.ts +36 -0
  278. package/dist/src/state/value-masking.d.ts.map +1 -0
  279. package/dist/src/state/value-masking.js +86 -0
  280. package/dist/src/state/value-masking.js.map +1 -0
  281. package/dist/src/tools/action-context.d.ts +55 -0
  282. package/dist/src/tools/action-context.d.ts.map +1 -0
  283. package/dist/src/tools/action-context.js +69 -0
  284. package/dist/src/tools/action-context.js.map +1 -0
  285. package/dist/src/tools/action-stabilization.d.ts +48 -0
  286. package/dist/src/tools/action-stabilization.d.ts.map +1 -0
  287. package/dist/src/tools/action-stabilization.js +93 -0
  288. package/dist/src/tools/action-stabilization.js.map +1 -0
  289. package/dist/src/tools/browser-tools.d.ts +9 -167
  290. package/dist/src/tools/browser-tools.d.ts.map +1 -1
  291. package/dist/src/tools/browser-tools.js +15 -651
  292. package/dist/src/tools/browser-tools.js.map +1 -1
  293. package/dist/src/tools/canvas-tools.d.ts +2 -1
  294. package/dist/src/tools/canvas-tools.d.ts.map +1 -1
  295. package/dist/src/tools/canvas-tools.js +5 -7
  296. package/dist/src/tools/canvas-tools.js.map +1 -1
  297. package/dist/src/tools/effect-tracker.d.ts +25 -0
  298. package/dist/src/tools/effect-tracker.d.ts.map +1 -0
  299. package/dist/src/tools/effect-tracker.js +69 -0
  300. package/dist/src/tools/effect-tracker.js.map +1 -0
  301. package/dist/src/tools/errors.d.ts +2 -34
  302. package/dist/src/tools/errors.d.ts.map +1 -1
  303. package/dist/src/tools/errors.js +1 -44
  304. package/dist/src/tools/errors.js.map +1 -1
  305. package/dist/src/tools/execute-action.d.ts +5 -34
  306. package/dist/src/tools/execute-action.d.ts.map +1 -1
  307. package/dist/src/tools/execute-action.js +37 -297
  308. package/dist/src/tools/execute-action.js.map +1 -1
  309. package/dist/src/tools/form-tools.d.ts +5 -10
  310. package/dist/src/tools/form-tools.d.ts.map +1 -1
  311. package/dist/src/tools/form-tools.js +42 -22
  312. package/dist/src/tools/form-tools.js.map +1 -1
  313. package/dist/src/tools/index.d.ts +6 -6
  314. package/dist/src/tools/index.d.ts.map +1 -1
  315. package/dist/src/tools/index.js +16 -17
  316. package/dist/src/tools/index.js.map +1 -1
  317. package/dist/src/tools/interaction-tools.d.ts +47 -0
  318. package/dist/src/tools/interaction-tools.d.ts.map +1 -0
  319. package/dist/src/tools/interaction-tools.js +135 -0
  320. package/dist/src/tools/interaction-tools.js.map +1 -0
  321. package/dist/src/tools/navigation-detection.d.ts +31 -0
  322. package/dist/src/tools/navigation-detection.d.ts.map +1 -0
  323. package/dist/src/tools/navigation-detection.js +46 -0
  324. package/dist/src/tools/navigation-detection.js.map +1 -0
  325. package/dist/src/tools/navigation-tools.d.ts +51 -0
  326. package/dist/src/tools/navigation-tools.d.ts.map +1 -0
  327. package/dist/src/tools/navigation-tools.js +171 -0
  328. package/dist/src/tools/navigation-tools.js.map +1 -0
  329. package/dist/src/tools/observation-tools.d.ts +54 -0
  330. package/dist/src/tools/observation-tools.d.ts.map +1 -0
  331. package/dist/src/tools/observation-tools.js +243 -0
  332. package/dist/src/tools/observation-tools.js.map +1 -0
  333. package/dist/src/tools/readability-tools.d.ts +16 -0
  334. package/dist/src/tools/readability-tools.d.ts.map +1 -0
  335. package/dist/src/tools/readability-tools.js +45 -0
  336. package/dist/src/tools/readability-tools.js.map +1 -0
  337. package/dist/src/tools/response-builder.d.ts +20 -32
  338. package/dist/src/tools/response-builder.d.ts.map +1 -1
  339. package/dist/src/tools/response-builder.js +32 -48
  340. package/dist/src/tools/response-builder.js.map +1 -1
  341. package/dist/src/tools/stale-element-retry.d.ts +37 -0
  342. package/dist/src/tools/stale-element-retry.d.ts.map +1 -0
  343. package/dist/src/tools/stale-element-retry.js +103 -0
  344. package/dist/src/tools/stale-element-retry.js.map +1 -0
  345. package/dist/src/tools/tool-context.d.ts +4 -36
  346. package/dist/src/tools/tool-context.d.ts.map +1 -1
  347. package/dist/src/tools/tool-context.js +6 -75
  348. package/dist/src/tools/tool-context.js.map +1 -1
  349. package/dist/src/tools/tool-context.types.d.ts +141 -0
  350. package/dist/src/tools/tool-context.types.d.ts.map +1 -0
  351. package/dist/src/tools/tool-context.types.js +11 -0
  352. package/dist/src/tools/tool-context.types.js.map +1 -0
  353. package/dist/src/tools/tool-registration.d.ts +25 -0
  354. package/dist/src/tools/tool-registration.d.ts.map +1 -0
  355. package/dist/src/tools/tool-registration.js +180 -0
  356. package/dist/src/tools/tool-registration.js.map +1 -0
  357. package/dist/src/tools/tool-schemas.d.ts +176 -1950
  358. package/dist/src/tools/tool-schemas.d.ts.map +1 -1
  359. package/dist/src/tools/tool-schemas.js +80 -320
  360. package/dist/src/tools/tool-schemas.js.map +1 -1
  361. package/dist/src/tools/viewport-tools.d.ts +37 -0
  362. package/dist/src/tools/viewport-tools.d.ts.map +1 -0
  363. package/dist/src/tools/viewport-tools.js +101 -0
  364. package/dist/src/tools/viewport-tools.js.map +1 -0
  365. package/dist/src/worker/chrome-worker-process.d.ts +4 -0
  366. package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
  367. package/dist/src/worker/chrome-worker-process.js +1 -1
  368. package/dist/src/worker/chrome-worker-process.js.map +1 -1
  369. package/package.json +7 -3
  370. package/dist/src/factpack/action-selector.d.ts +0 -36
  371. package/dist/src/factpack/action-selector.d.ts.map +0 -1
  372. package/dist/src/factpack/action-selector.js +0 -367
  373. package/dist/src/factpack/action-selector.js.map +0 -1
  374. package/dist/src/factpack/dialog-detector.d.ts +0 -19
  375. package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
  376. package/dist/src/factpack/dialog-detector.js +0 -354
  377. package/dist/src/factpack/dialog-detector.js.map +0 -1
  378. package/dist/src/factpack/form-detector.d.ts +0 -28
  379. package/dist/src/factpack/form-detector.d.ts.map +0 -1
  380. package/dist/src/factpack/form-detector.js +0 -555
  381. package/dist/src/factpack/form-detector.js.map +0 -1
  382. package/dist/src/factpack/index.d.ts +0 -32
  383. package/dist/src/factpack/index.d.ts.map +0 -1
  384. package/dist/src/factpack/index.js +0 -73
  385. package/dist/src/factpack/index.js.map +0 -1
  386. package/dist/src/factpack/page-classifier.d.ts +0 -22
  387. package/dist/src/factpack/page-classifier.d.ts.map +0 -1
  388. package/dist/src/factpack/page-classifier.js +0 -526
  389. package/dist/src/factpack/page-classifier.js.map +0 -1
  390. package/dist/src/factpack/types.d.ts +0 -307
  391. package/dist/src/factpack/types.d.ts.map +0 -1
  392. package/dist/src/factpack/types.js +0 -12
  393. package/dist/src/factpack/types.js.map +0 -1
  394. package/dist/src/lib/constants.d.ts +0 -27
  395. package/dist/src/lib/constants.d.ts.map +0 -1
  396. package/dist/src/lib/constants.js +0 -63
  397. package/dist/src/lib/constants.js.map +0 -1
  398. package/dist/src/lib/index.d.ts +0 -12
  399. package/dist/src/lib/index.d.ts.map +0 -1
  400. package/dist/src/lib/index.js +0 -17
  401. package/dist/src/lib/index.js.map +0 -1
  402. package/dist/src/lib/regions.d.ts +0 -29
  403. package/dist/src/lib/regions.d.ts.map +0 -1
  404. package/dist/src/lib/regions.js +0 -93
  405. package/dist/src/lib/regions.js.map +0 -1
  406. package/dist/src/lib/scoring.d.ts +0 -47
  407. package/dist/src/lib/scoring.d.ts.map +0 -1
  408. package/dist/src/lib/scoring.js +0 -79
  409. package/dist/src/lib/scoring.js.map +0 -1
  410. package/dist/src/lib/selectors.d.ts +0 -42
  411. package/dist/src/lib/selectors.d.ts.map +0 -1
  412. package/dist/src/lib/selectors.js +0 -138
  413. package/dist/src/lib/selectors.js.map +0 -1
  414. package/dist/src/renderer/budget-manager.d.ts +0 -46
  415. package/dist/src/renderer/budget-manager.d.ts.map +0 -1
  416. package/dist/src/renderer/budget-manager.js +0 -133
  417. package/dist/src/renderer/budget-manager.js.map +0 -1
  418. package/dist/src/renderer/constants.d.ts +0 -38
  419. package/dist/src/renderer/constants.d.ts.map +0 -1
  420. package/dist/src/renderer/constants.js +0 -29
  421. package/dist/src/renderer/constants.js.map +0 -1
  422. package/dist/src/renderer/index.d.ts +0 -12
  423. package/dist/src/renderer/index.d.ts.map +0 -1
  424. package/dist/src/renderer/index.js +0 -16
  425. package/dist/src/renderer/index.js.map +0 -1
  426. package/dist/src/renderer/section-renderers.d.ts +0 -42
  427. package/dist/src/renderer/section-renderers.d.ts.map +0 -1
  428. package/dist/src/renderer/section-renderers.js +0 -252
  429. package/dist/src/renderer/section-renderers.js.map +0 -1
  430. package/dist/src/renderer/token-counter.d.ts +0 -45
  431. package/dist/src/renderer/token-counter.d.ts.map +0 -1
  432. package/dist/src/renderer/token-counter.js +0 -65
  433. package/dist/src/renderer/token-counter.js.map +0 -1
  434. package/dist/src/renderer/types.d.ts +0 -71
  435. package/dist/src/renderer/types.d.ts.map +0 -1
  436. package/dist/src/renderer/types.js +0 -7
  437. package/dist/src/renderer/types.js.map +0 -1
  438. package/dist/src/renderer/xml-renderer.d.ts +0 -42
  439. package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
  440. package/dist/src/renderer/xml-renderer.js +0 -103
  441. package/dist/src/renderer/xml-renderer.js.map +0 -1
  442. package/dist/src/server/session-store.d.ts +0 -163
  443. package/dist/src/server/session-store.d.ts.map +0 -1
  444. package/dist/src/server/session-store.js +0 -248
  445. package/dist/src/server/session-store.js.map +0 -1
  446. package/dist/src/session/session-worker-binding.d.ts +0 -57
  447. package/dist/src/session/session-worker-binding.d.ts.map +0 -1
  448. package/dist/src/session/session-worker-binding.js +0 -109
  449. package/dist/src/session/session-worker-binding.js.map +0 -1
  450. package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
  451. package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
  452. package/dist/src/shared/services/dom-transformer.service.js +0 -190
  453. package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
  454. package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
  455. package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
  456. package/dist/src/shared/services/selector-builder.service.js +0 -240
  457. package/dist/src/shared/services/selector-builder.service.js.map +0 -1
  458. package/dist/src/state/constants.d.ts +0 -125
  459. package/dist/src/state/constants.d.ts.map +0 -1
  460. package/dist/src/state/constants.js +0 -131
  461. package/dist/src/state/constants.js.map +0 -1
@@ -0,0 +1,229 @@
1
+ /**
2
+ * HTTP Gateway
3
+ *
4
+ * Supports multiple concurrent AI agents via Streamable HTTP transport.
5
+ * Each client connection gets its own McpServer instance with tools
6
+ * closing over a dedicated SessionController.
7
+ *
8
+ * Architecture: per-session McpServer - each HTTP client connection gets
9
+ * its own McpServer + transport pair. This avoids the problem that the
10
+ * MCP SDK does not expose which transport triggered a tool call.
11
+ *
12
+ * @module gateway/http-gateway
13
+ */
14
+ import { randomUUID } from 'node:crypto';
15
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
16
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
17
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
18
+ import { registerAllTools } from '../tools/tool-registration.js';
19
+ import { wrapToolHandler } from '../server/tool-result-handler.js';
20
+ import { getLogger } from '../shared/services/logging.service.js';
21
+ import { VERSION } from '../shared/version.js';
22
+ import { sendJsonRpcError } from './json-rpc-errors.js';
23
+ const logger = getLogger();
24
+ /**
25
+ * Adapts McpServer.registerTool to the ToolRegistrar interface,
26
+ * adding the same logging/error-handling/result-type wrapping that
27
+ * BrowserAutomationServer provides for stdio.
28
+ */
29
+ class HttpToolRegistrar {
30
+ server;
31
+ constructor(server) {
32
+ this.server = server;
33
+ }
34
+ registerTool(name, definition, handler) {
35
+ const wrapped = wrapToolHandler(name, handler, !!definition.outputSchema);
36
+ this.server.registerTool(name, {
37
+ title: definition.title,
38
+ description: definition.description,
39
+ inputSchema: definition.inputSchema,
40
+ outputSchema: definition.outputSchema,
41
+ }, wrapped);
42
+ }
43
+ }
44
+ export class HttpGateway {
45
+ sessions = new Map();
46
+ router;
47
+ version;
48
+ constructor(options) {
49
+ this.router = options.router;
50
+ this.version = options.version ?? VERSION;
51
+ // When the router evicts an idle session, clean up the gateway-owned
52
+ // transport and McpServer so the sessions map does not leak entries.
53
+ this.router.setOnSessionDestroyed((sessionId) => {
54
+ void this.cleanupGatewaySession(sessionId);
55
+ });
56
+ }
57
+ /**
58
+ * Handle POST requests to the /mcp endpoint.
59
+ *
60
+ * Routing logic follows the MCP Streamable HTTP specification:
61
+ * - Requests with a valid mcp-session-id are routed to the existing transport
62
+ * - POST without a session ID that contains an initialize request creates a new session
63
+ * - All other requests are rejected with 400
64
+ */
65
+ async handlePost(req, res) {
66
+ const sessionId = req.headers['mcp-session-id'];
67
+ try {
68
+ if (sessionId && this.sessions.has(sessionId)) {
69
+ // Route to existing session transport
70
+ const session = this.sessions.get(sessionId);
71
+ await session.transport.handleRequest(req, res, req.body);
72
+ }
73
+ else if (!sessionId && isInitializeRequest(req.body)) {
74
+ // New connection: create transport + McpServer + SessionController
75
+ await this.createNewSession(req, res);
76
+ }
77
+ else if (sessionId && !this.sessions.has(sessionId)) {
78
+ sendJsonRpcError(res, 404, -32000, 'Session not found. The session may have expired or been closed.');
79
+ }
80
+ else {
81
+ sendJsonRpcError(res, 400, -32000, 'Bad Request: No valid session ID provided');
82
+ }
83
+ }
84
+ catch (error) {
85
+ logger.error('Error handling MCP POST request', error instanceof Error ? error : undefined);
86
+ if (!res.headersSent) {
87
+ sendJsonRpcError(res, 500, -32603, 'Internal server error');
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Handle GET requests to the /mcp endpoint (SSE streams).
93
+ */
94
+ async handleGet(req, res) {
95
+ const sessionId = req.headers['mcp-session-id'];
96
+ if (!sessionId || !this.sessions.has(sessionId)) {
97
+ sendJsonRpcError(res, 400, -32000, 'Bad Request: Invalid or missing session ID');
98
+ return;
99
+ }
100
+ const session = this.sessions.get(sessionId);
101
+ await session.transport.handleRequest(req, res);
102
+ }
103
+ /**
104
+ * Handle DELETE requests to the /mcp endpoint (session termination).
105
+ */
106
+ async handleDelete(req, res) {
107
+ const sessionId = req.headers['mcp-session-id'];
108
+ if (!sessionId || !this.sessions.has(sessionId)) {
109
+ sendJsonRpcError(res, 404, -32000, 'Session not found');
110
+ return;
111
+ }
112
+ const session = this.sessions.get(sessionId);
113
+ await session.transport.handleRequest(req, res);
114
+ }
115
+ async createNewSession(req, res) {
116
+ // Mutable references set during the onsessioninitialized callback.
117
+ // The callback fires synchronously during handleRequest() when the
118
+ // MCP initialize handshake completes, so these are populated before
119
+ // any tool invocation can occur.
120
+ let controller = null;
121
+ let sessionId = null;
122
+ const transport = new StreamableHTTPServerTransport({
123
+ sessionIdGenerator: () => randomUUID(),
124
+ onsessioninitialized: async (sid) => {
125
+ sessionId = sid;
126
+ controller = await this.router.createSession(sid);
127
+ this.sessions.set(sid, { server: mcpServer, transport, controller });
128
+ logger.info('HTTP session initialized', { sessionId: sid });
129
+ },
130
+ });
131
+ const mcpServer = new McpServer({
132
+ name: 'agent-web-interface',
133
+ version: this.version,
134
+ }, {
135
+ capabilities: {
136
+ logging: {},
137
+ },
138
+ });
139
+ // Register all 22 tools with logging/error wrapping via HttpToolRegistrar.
140
+ // The resolver lazily reads the mutable `controller` reference which is
141
+ // guaranteed to be set by onsessioninitialized before any tool runs.
142
+ const registrar = new HttpToolRegistrar(mcpServer);
143
+ registerAllTools(registrar, () => {
144
+ if (!controller)
145
+ throw new Error('Session not initialized');
146
+ return controller;
147
+ });
148
+ // Connect transport to server before handling the first request
149
+ await mcpServer.connect(transport);
150
+ // Clean up when transport closes
151
+ transport.onclose = () => {
152
+ if (sessionId) {
153
+ void this.closeSession(sessionId);
154
+ }
155
+ };
156
+ // Handle the initial request — onsessioninitialized fires during this call
157
+ try {
158
+ await transport.handleRequest(req, res, req.body);
159
+ }
160
+ catch (err) {
161
+ if (!sessionId)
162
+ await this.teardownOrphanedSession(mcpServer, transport);
163
+ throw err;
164
+ }
165
+ // If onsessioninitialized never fired (e.g., non-initialize request hit this path),
166
+ // clean up the leaked server and transport.
167
+ if (!sessionId) {
168
+ await this.teardownOrphanedSession(mcpServer, transport);
169
+ }
170
+ }
171
+ async closeSession(sessionId) {
172
+ const session = this.sessions.get(sessionId);
173
+ if (!session)
174
+ return;
175
+ // Remove from the map first so the onSessionDestroyed callback
176
+ // (fired by router.destroySession) is a harmless no-op.
177
+ this.sessions.delete(sessionId);
178
+ try {
179
+ await session.server.close();
180
+ }
181
+ catch (err) {
182
+ logger.error('Error closing HTTP session server', err instanceof Error ? err : undefined);
183
+ }
184
+ await this.router.destroySession(sessionId);
185
+ logger.info('HTTP session closed', { sessionId });
186
+ }
187
+ /**
188
+ * Clean up gateway-owned resources (McpServer + transport) for a session
189
+ * that was already destroyed by the router (e.g., idle eviction).
190
+ * Unlike closeSession(), this does NOT call router.destroySession().
191
+ */
192
+ async cleanupGatewaySession(sessionId) {
193
+ const session = this.sessions.get(sessionId);
194
+ if (!session)
195
+ return;
196
+ this.sessions.delete(sessionId);
197
+ try {
198
+ await session.transport.close?.();
199
+ }
200
+ catch {
201
+ // Transport may already be closed
202
+ }
203
+ try {
204
+ await session.server.close();
205
+ }
206
+ catch (err) {
207
+ logger.error('Error closing evicted HTTP session server', err instanceof Error ? err : undefined);
208
+ }
209
+ logger.info('Gateway session cleaned up after eviction', { sessionId });
210
+ }
211
+ async teardownOrphanedSession(mcpServer, transport) {
212
+ await mcpServer.close().catch(() => {
213
+ /* intentionally swallowed */
214
+ });
215
+ await transport.close?.().catch(() => {
216
+ /* intentionally swallowed */
217
+ });
218
+ }
219
+ /** Get count of active HTTP sessions */
220
+ get sessionCount() {
221
+ return this.sessions.size;
222
+ }
223
+ /** Shutdown all HTTP sessions */
224
+ async shutdown() {
225
+ const ids = Array.from(this.sessions.keys());
226
+ await Promise.all(ids.map((id) => this.closeSession(id)));
227
+ }
228
+ }
229
+ //# sourceMappingURL=http-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-gateway.js","sourceRoot":"","sources":["../../../src/gateway/http-gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Response } from 'express';
2
+ /**
3
+ * Send a JSON-RPC 2.0 error response.
4
+ */
5
+ export declare function sendJsonRpcError(res: Response, httpStatus: number, code: number, message: string): void;
6
+ //# sourceMappingURL=json-rpc-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc-errors.d.ts","sourceRoot":"","sources":["../../../src/gateway/json-rpc-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAMN"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Send a JSON-RPC 2.0 error response.
3
+ */
4
+ export function sendJsonRpcError(res, httpStatus, code, message) {
5
+ res.status(httpStatus).json({
6
+ jsonrpc: '2.0',
7
+ error: { code, message },
8
+ id: null,
9
+ });
10
+ }
11
+ //# sourceMappingURL=json-rpc-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc-errors.js","sourceRoot":"","sources":["../../../src/gateway/json-rpc-errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAa,EACb,UAAkB,EAClB,IAAY,EACZ,OAAe;IAEf,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACxB,EAAE,EAAE,IAAI;KACT,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Session Router
3
+ *
4
+ * Maps MCP connections to SessionController instances.
5
+ *
6
+ * - stdio mode: resolve(undefined) returns a single implicit SessionController
7
+ * - HTTP mode: resolve(sessionId) looks up by MCP session ID
8
+ *
9
+ * Each SessionController owns its own browser lifecycle, configured
10
+ * independently via BrowserSessionConfig.
11
+ *
12
+ * @module gateway/session-router
13
+ */
14
+ import { SessionController } from '../session/session-controller.js';
15
+ import type { ToolContext } from '../tools/tool-context.types.js';
16
+ /**
17
+ * Session Router configuration.
18
+ */
19
+ export interface SessionRouterOptions {
20
+ /** Session idle timeout in ms (default: 30 minutes) */
21
+ idleTimeoutMs?: number;
22
+ /** Maximum concurrent sessions (default: 10) */
23
+ maxSessions?: number;
24
+ /**
25
+ * Called after a session is destroyed (e.g., by idle eviction).
26
+ * Allows the gateway layer to clean up associated resources
27
+ * (transports, MCP servers) that the router does not own.
28
+ */
29
+ onSessionDestroyed?: (sessionId: string) => void | Promise<void>;
30
+ }
31
+ /**
32
+ * Maps MCP connections to SessionController instances.
33
+ */
34
+ export declare class SessionRouter {
35
+ private readonly sessions;
36
+ private implicitSession;
37
+ private readonly idleTimeoutMs;
38
+ private readonly maxSessions;
39
+ private _onSessionDestroyed?;
40
+ private idleCheckTimer?;
41
+ constructor(options?: SessionRouterOptions);
42
+ /**
43
+ * Resolve an MCP session ID to a ToolContext (SessionController).
44
+ *
45
+ * - If mcpSessionId is undefined (stdio mode), returns the implicit session
46
+ * - If mcpSessionId is provided (HTTP mode), looks up by ID
47
+ */
48
+ resolve(mcpSessionId?: string): ToolContext;
49
+ /**
50
+ * Create a new session for an MCP connection.
51
+ *
52
+ * @param mcpSessionId - MCP session ID from transport
53
+ * @returns The created SessionController
54
+ */
55
+ createSession(mcpSessionId: string): Promise<SessionController>;
56
+ /**
57
+ * Destroy a session and clean up resources.
58
+ */
59
+ destroySession(mcpSessionId: string): Promise<void>;
60
+ /**
61
+ * Get or create the implicit session for stdio mode.
62
+ */
63
+ private getOrCreateImplicitSession;
64
+ /**
65
+ * Get the number of active sessions.
66
+ */
67
+ get sessionCount(): number;
68
+ /**
69
+ * Register a callback invoked after a session is destroyed.
70
+ */
71
+ setOnSessionDestroyed(cb: (sessionId: string) => void | Promise<void>): void;
72
+ /**
73
+ * Shut down all sessions and clean up.
74
+ */
75
+ shutdown(): Promise<void>;
76
+ private startIdleCheck;
77
+ private stopIdleCheck;
78
+ private evictIdleSessions;
79
+ }
80
+ //# sourceMappingURL=session-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-router.d.ts","sourceRoot":"","sources":["../../../src/gateway/session-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAiC,MAAM,kCAAkC,CAAC;AACpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAKD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,mBAAmB,CAAC,CAA8C;IAC1E,OAAO,CAAC,cAAc,CAAC,CAAiC;gBAE5C,OAAO,CAAC,EAAE,oBAAoB;IAM1C;;;;;OAKG;IACH,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW;IAc3C;;;;;OAKG;IAEG,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBrE;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzD;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAQlC;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,qBAAqB,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI5E;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB/B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;YAOP,iBAAiB;CA4BhC"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Session Router
3
+ *
4
+ * Maps MCP connections to SessionController instances.
5
+ *
6
+ * - stdio mode: resolve(undefined) returns a single implicit SessionController
7
+ * - HTTP mode: resolve(sessionId) looks up by MCP session ID
8
+ *
9
+ * Each SessionController owns its own browser lifecycle, configured
10
+ * independently via BrowserSessionConfig.
11
+ *
12
+ * @module gateway/session-router
13
+ */
14
+ import { SessionController } from '../session/session-controller.js';
15
+ import { getLogger } from '../shared/services/logging.service.js';
16
+ const logger = getLogger();
17
+ const DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
18
+ const DEFAULT_MAX_SESSIONS = 10;
19
+ /**
20
+ * Maps MCP connections to SessionController instances.
21
+ */
22
+ export class SessionRouter {
23
+ sessions = new Map();
24
+ implicitSession = null;
25
+ idleTimeoutMs;
26
+ maxSessions;
27
+ _onSessionDestroyed;
28
+ idleCheckTimer;
29
+ constructor(options) {
30
+ this.idleTimeoutMs = options?.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
31
+ this.maxSessions = options?.maxSessions ?? DEFAULT_MAX_SESSIONS;
32
+ this._onSessionDestroyed = options?.onSessionDestroyed;
33
+ }
34
+ /**
35
+ * Resolve an MCP session ID to a ToolContext (SessionController).
36
+ *
37
+ * - If mcpSessionId is undefined (stdio mode), returns the implicit session
38
+ * - If mcpSessionId is provided (HTTP mode), looks up by ID
39
+ */
40
+ resolve(mcpSessionId) {
41
+ if (mcpSessionId === undefined) {
42
+ return this.getOrCreateImplicitSession();
43
+ }
44
+ const session = this.sessions.get(mcpSessionId);
45
+ if (!session) {
46
+ throw new Error(`Session not found: ${mcpSessionId}`);
47
+ }
48
+ session.touch();
49
+ return session;
50
+ }
51
+ /**
52
+ * Create a new session for an MCP connection.
53
+ *
54
+ * @param mcpSessionId - MCP session ID from transport
55
+ * @returns The created SessionController
56
+ */
57
+ // eslint-disable-next-line @typescript-eslint/require-await -- Kept async for API contract with HttpGateway
58
+ async createSession(mcpSessionId) {
59
+ if (this.sessions.has(mcpSessionId)) {
60
+ throw new Error(`Session already exists: ${mcpSessionId}`);
61
+ }
62
+ if (this.sessions.size >= this.maxSessions) {
63
+ throw new Error(`Maximum concurrent sessions (${this.maxSessions}) reached. Close an existing session first.`);
64
+ }
65
+ const options = {
66
+ sessionId: mcpSessionId,
67
+ };
68
+ const controller = new SessionController(options);
69
+ this.sessions.set(mcpSessionId, controller);
70
+ logger.info('Session created', { sessionId: mcpSessionId });
71
+ this.startIdleCheck();
72
+ return controller;
73
+ }
74
+ /**
75
+ * Destroy a session and clean up resources.
76
+ */
77
+ async destroySession(mcpSessionId) {
78
+ const session = this.sessions.get(mcpSessionId);
79
+ if (!session)
80
+ return;
81
+ await session.close();
82
+ this.sessions.delete(mcpSessionId);
83
+ logger.info('Session destroyed', { sessionId: mcpSessionId });
84
+ // Notify the gateway layer so it can clean up transports / MCP servers
85
+ if (this._onSessionDestroyed) {
86
+ try {
87
+ await this._onSessionDestroyed(mcpSessionId);
88
+ }
89
+ catch (err) {
90
+ logger.error('onSessionDestroyed callback failed', err instanceof Error ? err : undefined, {
91
+ sessionId: mcpSessionId,
92
+ });
93
+ }
94
+ }
95
+ if (this.sessions.size === 0) {
96
+ this.stopIdleCheck();
97
+ }
98
+ }
99
+ /**
100
+ * Get or create the implicit session for stdio mode.
101
+ */
102
+ getOrCreateImplicitSession() {
103
+ this.implicitSession ??= new SessionController({
104
+ sessionId: 'stdio',
105
+ });
106
+ this.implicitSession.touch();
107
+ return this.implicitSession;
108
+ }
109
+ /**
110
+ * Get the number of active sessions.
111
+ */
112
+ get sessionCount() {
113
+ return this.sessions.size + (this.implicitSession ? 1 : 0);
114
+ }
115
+ /**
116
+ * Register a callback invoked after a session is destroyed.
117
+ */
118
+ setOnSessionDestroyed(cb) {
119
+ this._onSessionDestroyed = cb;
120
+ }
121
+ /**
122
+ * Shut down all sessions and clean up.
123
+ */
124
+ async shutdown() {
125
+ this.stopIdleCheck();
126
+ const closePromises = [];
127
+ for (const session of this.sessions.values()) {
128
+ closePromises.push(session.close());
129
+ }
130
+ if (this.implicitSession) {
131
+ closePromises.push(this.implicitSession.close());
132
+ this.implicitSession = null;
133
+ }
134
+ await Promise.all(closePromises);
135
+ this.sessions.clear();
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Idle session cleanup
139
+ // ---------------------------------------------------------------------------
140
+ startIdleCheck() {
141
+ if (this.idleCheckTimer)
142
+ return;
143
+ this.idleCheckTimer = setInterval(() => {
144
+ void this.evictIdleSessions();
145
+ }, 60_000); // Check every minute
146
+ this.idleCheckTimer.unref();
147
+ }
148
+ stopIdleCheck() {
149
+ if (this.idleCheckTimer) {
150
+ clearInterval(this.idleCheckTimer);
151
+ this.idleCheckTimer = undefined;
152
+ }
153
+ }
154
+ async evictIdleSessions() {
155
+ const now = Date.now();
156
+ const toEvict = [];
157
+ for (const [id, session] of this.sessions) {
158
+ if (now - session.lastActivity > this.idleTimeoutMs) {
159
+ toEvict.push(id);
160
+ }
161
+ }
162
+ if (toEvict.length === 0)
163
+ return;
164
+ // Evict in parallel — each destroySession operates on a distinct session
165
+ const results = await Promise.allSettled(toEvict.map((id) => {
166
+ logger.info('Evicting idle session', { sessionId: id });
167
+ return this.destroySession(id);
168
+ }));
169
+ for (let i = 0; i < results.length; i++) {
170
+ const result = results[i];
171
+ if (result.status === 'rejected') {
172
+ logger.error('Failed to evict session', result.reason instanceof Error ? result.reason : undefined, { sessionId: toEvict[i] });
173
+ }
174
+ }
175
+ }
176
+ }
177
+ //# sourceMappingURL=session-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-router.js","sourceRoot":"","sources":["../../../src/gateway/session-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * HTTP Entry Point
4
+ *
5
+ * Starts the MCP server with Streamable HTTP transport for multi-agent access.
6
+ * Use `--transport http --port 3000` to enable.
7
+ *
8
+ * Each HTTP client connection gets its own McpServer + SessionController pair,
9
+ * providing full session isolation for concurrent AI agents. Each session owns
10
+ * its own browser instance, configured independently via navigate tool params.
11
+ *
12
+ * @module http-entry
13
+ */
14
+ /**
15
+ * HTTP mode main entry point.
16
+ *
17
+ * Called from index.ts when `--transport http` is passed.
18
+ */
19
+ export declare function main(): Promise<void>;
20
+ //# sourceMappingURL=http-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-entry.d.ts","sourceRoot":"","sources":["../../src/http-entry.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAaH;;;;GAIG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0F1C"}