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,313 @@
1
+ /**
2
+ * Purpose Inference
3
+ *
4
+ * Infers the semantic purpose of form fields based on input type,
5
+ * autocomplete attributes, label text, and naming patterns.
6
+ *
7
+ * Priority order:
8
+ * 1. input type attribute
9
+ * 2. autocomplete attribute
10
+ * 3. aria-label / label text
11
+ * 4. placeholder
12
+ * 5. name attribute patterns
13
+ *
14
+ * @module form/purpose-inference
15
+ */
16
+ /**
17
+ * Mapping from input type to semantic type
18
+ */
19
+ export const INPUT_TYPE_TO_SEMANTIC = {
20
+ email: 'email',
21
+ tel: 'phone',
22
+ password: 'password',
23
+ url: 'url',
24
+ search: 'search',
25
+ date: 'date',
26
+ 'datetime-local': 'date',
27
+ time: 'date',
28
+ month: 'date',
29
+ week: 'date',
30
+ number: 'quantity',
31
+ file: 'file',
32
+ color: 'color',
33
+ };
34
+ /**
35
+ * Mapping from autocomplete attribute to semantic type
36
+ */
37
+ export const AUTOCOMPLETE_TO_SEMANTIC = {
38
+ email: 'email',
39
+ tel: 'phone',
40
+ 'tel-national': 'phone',
41
+ 'tel-local': 'phone',
42
+ password: 'password',
43
+ 'new-password': 'password',
44
+ 'current-password': 'password',
45
+ username: 'username',
46
+ name: 'full_name',
47
+ 'given-name': 'first_name',
48
+ 'family-name': 'last_name',
49
+ 'additional-name': 'name',
50
+ nickname: 'username',
51
+ 'street-address': 'street',
52
+ 'address-line1': 'street',
53
+ 'address-line2': 'address',
54
+ 'address-level1': 'state',
55
+ 'address-level2': 'city',
56
+ 'postal-code': 'zip',
57
+ country: 'country',
58
+ 'country-name': 'country',
59
+ 'cc-number': 'card_number',
60
+ 'cc-exp': 'card_expiry',
61
+ 'cc-exp-month': 'card_expiry',
62
+ 'cc-exp-year': 'card_expiry',
63
+ 'cc-csc': 'card_cvv',
64
+ bday: 'date_of_birth',
65
+ 'bday-day': 'date_of_birth',
66
+ 'bday-month': 'date_of_birth',
67
+ 'bday-year': 'date_of_birth',
68
+ url: 'url',
69
+ photo: 'file',
70
+ };
71
+ /**
72
+ * Keywords for semantic type inference from labels
73
+ */
74
+ export const LABEL_KEYWORDS = {
75
+ email: ['email', 'e-mail', 'mail address'],
76
+ phone: ['phone', 'telephone', 'mobile', 'cell', 'contact number'],
77
+ password: ['password', 'passcode', 'pin'],
78
+ password_confirm: ['confirm password', 'repeat password', 'retype password', 're-enter password'],
79
+ name: ['name', 'full name'],
80
+ first_name: ['first name', 'given name', 'forename'],
81
+ last_name: ['last name', 'surname', 'family name'],
82
+ full_name: ['full name', 'your name', 'customer name'],
83
+ username: ['username', 'user name', 'user id', 'login', 'account name'],
84
+ address: ['address', 'location'],
85
+ street: ['street', 'address line', 'street address'],
86
+ city: ['city', 'town', 'locality'],
87
+ state: ['state', 'province', 'region'],
88
+ zip: ['zip', 'postal code', 'postcode', 'zip code'],
89
+ country: ['country', 'nation'],
90
+ card_number: ['card number', 'credit card', 'debit card', 'card #'],
91
+ card_expiry: ['expiry', 'expiration', 'exp date', 'valid thru'],
92
+ card_cvv: ['cvv', 'cvc', 'security code', 'card verification'],
93
+ date: ['date', 'when'],
94
+ date_of_birth: ['birth', 'dob', 'birthday', 'date of birth'],
95
+ quantity: ['quantity', 'qty', 'amount', 'count', 'number of'],
96
+ price: ['price', 'cost', 'amount', 'total'],
97
+ search: ['search', 'find', 'lookup', 'query'],
98
+ comment: ['comment', 'note', 'remarks', 'feedback'],
99
+ message: ['message', 'text', 'content', 'body'],
100
+ url: ['url', 'website', 'link', 'web address'],
101
+ file: ['file', 'upload', 'attachment', 'document'],
102
+ color: ['color', 'colour'],
103
+ selection: ['select', 'choose', 'option'],
104
+ toggle: ['enable', 'disable', 'turn on', 'turn off'],
105
+ consent: ['agree', 'consent', 'accept', 'terms', 'privacy', 'subscribe'],
106
+ unknown: [],
107
+ };
108
+ /**
109
+ * Name patterns for semantic type inference.
110
+ * Maps common naming patterns (camelCase, snake_case, kebab-case) to semantic types.
111
+ */
112
+ export const NAME_PATTERNS = {
113
+ // Email patterns
114
+ email: 'email',
115
+ emailaddress: 'email',
116
+ email_address: 'email',
117
+ 'email-address': 'email',
118
+ useremail: 'email',
119
+ user_email: 'email',
120
+ // Phone patterns
121
+ phone: 'phone',
122
+ phonenumber: 'phone',
123
+ phone_number: 'phone',
124
+ 'phone-number': 'phone',
125
+ tel: 'phone',
126
+ telephone: 'phone',
127
+ mobile: 'phone',
128
+ // Password patterns
129
+ password: 'password',
130
+ passwd: 'password',
131
+ pass: 'password',
132
+ confirmpassword: 'password_confirm',
133
+ confirm_password: 'password_confirm',
134
+ passwordconfirm: 'password_confirm',
135
+ // Name patterns
136
+ firstname: 'first_name',
137
+ first_name: 'first_name',
138
+ 'first-name': 'first_name',
139
+ givenname: 'first_name',
140
+ lastname: 'last_name',
141
+ last_name: 'last_name',
142
+ 'last-name': 'last_name',
143
+ familyname: 'last_name',
144
+ fullname: 'full_name',
145
+ full_name: 'full_name',
146
+ // Username
147
+ username: 'username',
148
+ user_name: 'username',
149
+ userid: 'username',
150
+ user_id: 'username',
151
+ // Address
152
+ streetaddress: 'street',
153
+ street_address: 'street',
154
+ addressline: 'street',
155
+ address_line: 'street',
156
+ city: 'city',
157
+ state: 'state',
158
+ province: 'state',
159
+ zip: 'zip',
160
+ zipcode: 'zip',
161
+ zip_code: 'zip',
162
+ postalcode: 'zip',
163
+ postal_code: 'zip',
164
+ country: 'country',
165
+ // Payment
166
+ cardnumber: 'card_number',
167
+ card_number: 'card_number',
168
+ ccnumber: 'card_number',
169
+ cc_number: 'card_number',
170
+ cvv: 'card_cvv',
171
+ cvc: 'card_cvv',
172
+ expiry: 'card_expiry',
173
+ expiration: 'card_expiry',
174
+ // Dates
175
+ dateofbirth: 'date_of_birth',
176
+ date_of_birth: 'date_of_birth',
177
+ dob: 'date_of_birth',
178
+ birthday: 'date_of_birth',
179
+ birthdate: 'date_of_birth',
180
+ };
181
+ /**
182
+ * Extract semantic type from naming patterns.
183
+ *
184
+ * @param label - The accessible label
185
+ * @param testId - Optional test ID attribute
186
+ * @returns Object with inferred type and signal description
187
+ */
188
+ export function extractNamePatterns(label, testId) {
189
+ // Normalize label to check against patterns
190
+ const normalizedLabel = label.toLowerCase().replace(/[^a-z0-9_-]/g, '');
191
+ // Check label against patterns
192
+ for (const [pattern, type] of Object.entries(NAME_PATTERNS)) {
193
+ if (normalizedLabel.includes(pattern)) {
194
+ return { type, signal: `label matches pattern "${pattern}"` };
195
+ }
196
+ }
197
+ // Check test_id against patterns
198
+ if (testId) {
199
+ const normalizedTestId = testId.toLowerCase().replace(/[^a-z0-9_-]/g, '');
200
+ for (const [pattern, type] of Object.entries(NAME_PATTERNS)) {
201
+ if (normalizedTestId.includes(pattern)) {
202
+ return { type, signal: `test_id matches pattern "${pattern}"` };
203
+ }
204
+ }
205
+ }
206
+ return { type: 'unknown', signal: '' };
207
+ }
208
+ /**
209
+ * Infer the semantic purpose of a field.
210
+ */
211
+ export function inferPurpose(node) {
212
+ const inferredFrom = [];
213
+ let semanticType = 'unknown';
214
+ let confidence = 0;
215
+ // Priority 1: Input type attribute (high confidence)
216
+ const inputType = node.attributes?.input_type;
217
+ if (inputType && INPUT_TYPE_TO_SEMANTIC[inputType]) {
218
+ semanticType = INPUT_TYPE_TO_SEMANTIC[inputType];
219
+ confidence = 0.95;
220
+ inferredFrom.push(`input_type="${inputType}"`);
221
+ }
222
+ // Priority 2: Autocomplete attribute (high confidence)
223
+ const autocomplete = node.attributes?.autocomplete;
224
+ if (autocomplete && AUTOCOMPLETE_TO_SEMANTIC[autocomplete]) {
225
+ const autoType = AUTOCOMPLETE_TO_SEMANTIC[autocomplete];
226
+ if (semanticType === 'unknown' || confidence < 0.9) {
227
+ semanticType = autoType;
228
+ confidence = Math.max(confidence, 0.9);
229
+ inferredFrom.push(`autocomplete="${autocomplete}"`);
230
+ }
231
+ }
232
+ // Priority 3-5: Label, placeholder, aria-label (medium confidence)
233
+ // Note: node.label is the computed accessible name which includes aria-label,
234
+ // aria-labelledby, and other ARIA labeling mechanisms
235
+ if (semanticType === 'unknown' || confidence < 0.8) {
236
+ const textSources = [
237
+ { text: node.label, source: 'label', confidence: 0.7 },
238
+ { text: node.attributes?.placeholder, source: 'placeholder', confidence: 0.65 },
239
+ ];
240
+ for (const { text, source, confidence: sourceConfidence } of textSources) {
241
+ if (!text)
242
+ continue;
243
+ const lowerText = text.toLowerCase();
244
+ for (const [type, keywords] of Object.entries(LABEL_KEYWORDS)) {
245
+ if (type === 'unknown')
246
+ continue;
247
+ for (const keyword of keywords) {
248
+ if (lowerText.includes(keyword)) {
249
+ if (semanticType === 'unknown' || confidence < sourceConfidence) {
250
+ semanticType = type;
251
+ confidence = Math.max(confidence, sourceConfidence);
252
+ inferredFrom.push(`${source} contains "${keyword}"`);
253
+ }
254
+ break;
255
+ }
256
+ }
257
+ if (semanticType !== 'unknown' && confidence >= 0.7)
258
+ break;
259
+ }
260
+ if (semanticType !== 'unknown' && confidence >= 0.7)
261
+ break;
262
+ }
263
+ }
264
+ // Priority 6: Name attribute patterns (low confidence: 0.5)
265
+ // Detect naming conventions like camelCase (firstName), snake_case (first_name),
266
+ // or kebab-case (first-name) that may indicate field purpose
267
+ if (semanticType === 'unknown' || confidence < 0.5) {
268
+ const testId = node.attributes?.test_id ?? '';
269
+ const namePatterns = extractNamePatterns(node.label, testId);
270
+ if (namePatterns.type !== 'unknown') {
271
+ semanticType = namePatterns.type;
272
+ confidence = Math.max(confidence, 0.5);
273
+ inferredFrom.push(namePatterns.signal);
274
+ }
275
+ }
276
+ // Fallback based on node kind
277
+ if (semanticType === 'unknown') {
278
+ switch (node.kind) {
279
+ case 'checkbox':
280
+ semanticType = 'toggle';
281
+ confidence = 0.5;
282
+ inferredFrom.push('node kind is checkbox');
283
+ break;
284
+ case 'radio':
285
+ semanticType = 'selection';
286
+ confidence = 0.5;
287
+ inferredFrom.push('node kind is radio');
288
+ break;
289
+ case 'select':
290
+ case 'combobox':
291
+ semanticType = 'selection';
292
+ confidence = 0.5;
293
+ inferredFrom.push(`node kind is ${node.kind}`);
294
+ break;
295
+ case 'textarea':
296
+ semanticType = 'message';
297
+ confidence = 0.4;
298
+ inferredFrom.push('node kind is textarea');
299
+ break;
300
+ case 'slider':
301
+ semanticType = 'quantity';
302
+ confidence = 0.4;
303
+ inferredFrom.push('node kind is slider');
304
+ break;
305
+ }
306
+ }
307
+ return {
308
+ semantic_type: semanticType,
309
+ confidence,
310
+ inferred_from: inferredFrom.length > 0 ? inferredFrom : ['no signals found'],
311
+ };
312
+ }
313
+ //# sourceMappingURL=purpose-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purpose-inference.js","sourceRoot":"","sources":["../../../src/form/purpose-inference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Submit Button Detection
3
+ *
4
+ * Detects submit buttons associated with forms or input clusters
5
+ * using keyword matching and spatial proximity.
6
+ *
7
+ * @module form/submit-detection
8
+ */
9
+ import type { BaseSnapshot, ReadableNode } from '../snapshot/snapshot.types.js';
10
+ /**
11
+ * Submit button keywords
12
+ */
13
+ export declare const SUBMIT_KEYWORDS: string[];
14
+ /**
15
+ * Find a submit button associated with a form.
16
+ */
17
+ export declare function findSubmitButton(snapshot: BaseSnapshot, formNode: ReadableNode, fieldEids: string[], isNodeWithinForm: (node: ReadableNode, formNode: ReadableNode, snapshot: BaseSnapshot) => boolean, computeClusterBbox: (nodes: ReadableNode[]) => {
18
+ x: number;
19
+ y: number;
20
+ width: number;
21
+ height: number;
22
+ } | undefined): ReadableNode | undefined;
23
+ /**
24
+ * Find a submit button near a cluster of inputs.
25
+ */
26
+ export declare function findSubmitButtonNearCluster(snapshot: BaseSnapshot, cluster: ReadableNode[], computeClusterBbox: (nodes: ReadableNode[]) => {
27
+ x: number;
28
+ y: number;
29
+ width: number;
30
+ height: number;
31
+ } | undefined): ReadableNode | undefined;
32
+ /**
33
+ * Check if a button looks like a submit button.
34
+ */
35
+ export declare function isSubmitButton(button: ReadableNode): boolean;
36
+ //# sourceMappingURL=submit-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-detection.d.ts","sourceRoot":"","sources":["../../../src/form/submit-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGhF;;GAEG;AACH,eAAO,MAAM,eAAe,UAkB3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,gBAAgB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,KAAK,OAAO,EACjG,kBAAkB,EAAE,CAClB,KAAK,EAAE,YAAY,EAAE,KAClB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACvE,YAAY,GAAG,SAAS,CAyB1B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,YAAY,EAAE,EACvB,kBAAkB,EAAE,CAClB,KAAK,EAAE,YAAY,EAAE,KAClB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACvE,YAAY,GAAG,SAAS,CA8B1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAgB5D"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Submit Button Detection
3
+ *
4
+ * Detects submit buttons associated with forms or input clusters
5
+ * using keyword matching and spatial proximity.
6
+ *
7
+ * @module form/submit-detection
8
+ */
9
+ import { BUTTON_KINDS } from './form-actions.js';
10
+ /**
11
+ * Submit button keywords
12
+ */
13
+ export const SUBMIT_KEYWORDS = [
14
+ 'submit',
15
+ 'send',
16
+ 'continue',
17
+ 'next',
18
+ 'save',
19
+ 'apply',
20
+ 'confirm',
21
+ 'add to',
22
+ 'sign in',
23
+ 'log in',
24
+ 'sign up',
25
+ 'register',
26
+ 'search',
27
+ 'buy',
28
+ 'checkout',
29
+ 'purchase',
30
+ 'subscribe',
31
+ ];
32
+ /**
33
+ * Find a submit button associated with a form.
34
+ */
35
+ export function findSubmitButton(snapshot, formNode, fieldEids, isNodeWithinForm, computeClusterBbox) {
36
+ const buttons = snapshot.nodes.filter((n) => BUTTON_KINDS.has(n.kind));
37
+ for (const button of buttons) {
38
+ // Check if button is within form's scope
39
+ if (!isNodeWithinForm(button, formNode, snapshot)) {
40
+ continue;
41
+ }
42
+ // Check if button label suggests submission
43
+ if (isSubmitButton(button)) {
44
+ return button;
45
+ }
46
+ }
47
+ // Also check buttons near the fields
48
+ if (fieldEids.length > 0) {
49
+ const fieldNodes = fieldEids
50
+ .map((eid) => snapshot.nodes.find((n) => n.node_id === eid))
51
+ .filter((n) => n !== undefined);
52
+ return findSubmitButtonNearCluster(snapshot, fieldNodes, computeClusterBbox);
53
+ }
54
+ return undefined;
55
+ }
56
+ /**
57
+ * Find a submit button near a cluster of inputs.
58
+ */
59
+ export function findSubmitButtonNearCluster(snapshot, cluster, computeClusterBbox) {
60
+ if (cluster.length === 0)
61
+ return undefined;
62
+ const buttons = snapshot.nodes.filter((n) => BUTTON_KINDS.has(n.kind));
63
+ const clusterBbox = computeClusterBbox(cluster);
64
+ if (!clusterBbox)
65
+ return undefined;
66
+ // Find buttons near the cluster
67
+ const nearbyButtons = buttons.filter((button) => {
68
+ if (!button.layout?.bbox)
69
+ return false;
70
+ const btnBbox = button.layout.bbox;
71
+ // Check if button is below or to the right of the cluster
72
+ const isNearX = btnBbox.x >= clusterBbox.x - 100 && btnBbox.x <= clusterBbox.x + clusterBbox.width + 100;
73
+ const isNearY = btnBbox.y >= clusterBbox.y - 50 && btnBbox.y <= clusterBbox.y + clusterBbox.height + 150;
74
+ return isNearX && isNearY;
75
+ });
76
+ // Find the best submit button candidate
77
+ for (const button of nearbyButtons) {
78
+ if (isSubmitButton(button)) {
79
+ return button;
80
+ }
81
+ }
82
+ return undefined;
83
+ }
84
+ /**
85
+ * Check if a button looks like a submit button.
86
+ */
87
+ export function isSubmitButton(button) {
88
+ const label = button.label.toLowerCase();
89
+ // Check for submit keywords
90
+ for (const keyword of SUBMIT_KEYWORDS) {
91
+ if (label.includes(keyword)) {
92
+ return true;
93
+ }
94
+ }
95
+ // Check for type="submit" attribute
96
+ if (button.attributes?.input_type === 'submit') {
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+ //# sourceMappingURL=submit-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-detection.js","sourceRoot":"","sources":["../../../src/form/submit-detection.ts"],"names":[],"mappings":"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"}
@@ -276,7 +276,7 @@ export interface ObservedEffect {
276
276
  confidence: number;
277
277
  }
278
278
  /**
279
- * Response from get_form_understanding tool.
279
+ * Response from get_form tool.
280
280
  */
281
281
  export interface FormUnderstandingResponse {
282
282
  /** Page ID */
@@ -289,7 +289,7 @@ export interface FormUnderstandingResponse {
289
289
  form_count: number;
290
290
  }
291
291
  /**
292
- * Response from get_field_context tool.
292
+ * Response from get_field tool.
293
293
  */
294
294
  export interface FieldContextResponse {
295
295
  /** The requested field */
@@ -0,0 +1,56 @@
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 type { Request, Response } from 'express';
15
+ import { SessionRouter } from './session-router.js';
16
+ export interface HttpGatewayOptions {
17
+ router: SessionRouter;
18
+ version?: string;
19
+ }
20
+ export declare class HttpGateway {
21
+ private readonly sessions;
22
+ private readonly router;
23
+ private readonly version;
24
+ constructor(options: HttpGatewayOptions);
25
+ /**
26
+ * Handle POST requests to the /mcp endpoint.
27
+ *
28
+ * Routing logic follows the MCP Streamable HTTP specification:
29
+ * - Requests with a valid mcp-session-id are routed to the existing transport
30
+ * - POST without a session ID that contains an initialize request creates a new session
31
+ * - All other requests are rejected with 400
32
+ */
33
+ handlePost(req: Request, res: Response): Promise<void>;
34
+ /**
35
+ * Handle GET requests to the /mcp endpoint (SSE streams).
36
+ */
37
+ handleGet(req: Request, res: Response): Promise<void>;
38
+ /**
39
+ * Handle DELETE requests to the /mcp endpoint (session termination).
40
+ */
41
+ handleDelete(req: Request, res: Response): Promise<void>;
42
+ private createNewSession;
43
+ private closeSession;
44
+ /**
45
+ * Clean up gateway-owned resources (McpServer + transport) for a session
46
+ * that was already destroyed by the router (e.g., idle eviction).
47
+ * Unlike closeSession(), this does NOT call router.destroySession().
48
+ */
49
+ private cleanupGatewaySession;
50
+ private teardownOrphanedSession;
51
+ /** Get count of active HTTP sessions */
52
+ get sessionCount(): number;
53
+ /** Shutdown all HTTP sessions */
54
+ shutdown(): Promise<void>;
55
+ }
56
+ //# sourceMappingURL=http-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-gateway.d.ts","sourceRoot":"","sources":["../../../src/gateway/http-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkCD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,kBAAkB;IAWvC;;;;;;;OAOG;IACG,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5D;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAYhD,gBAAgB;YAgEhB,YAAY;IAkB1B;;;;OAIG;YACW,qBAAqB;YAwBrB,uBAAuB;IAYrC,wCAAwC;IACxC,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,iCAAiC;IAC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC"}