agent-web-interface 4.0.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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +226 -0
  3. package/dist/src/browser/ensure-browser.d.ts +39 -0
  4. package/dist/src/browser/ensure-browser.d.ts.map +1 -0
  5. package/dist/src/browser/ensure-browser.js +65 -0
  6. package/dist/src/browser/ensure-browser.js.map +1 -0
  7. package/dist/src/browser/index.d.ts +8 -0
  8. package/dist/src/browser/index.d.ts.map +1 -0
  9. package/dist/src/browser/index.js +8 -0
  10. package/dist/src/browser/index.js.map +1 -0
  11. package/dist/src/browser/page-network-tracker.d.ts +96 -0
  12. package/dist/src/browser/page-network-tracker.d.ts.map +1 -0
  13. package/dist/src/browser/page-network-tracker.js +235 -0
  14. package/dist/src/browser/page-network-tracker.js.map +1 -0
  15. package/dist/src/browser/page-registry.d.ts +137 -0
  16. package/dist/src/browser/page-registry.d.ts.map +1 -0
  17. package/dist/src/browser/page-registry.js +194 -0
  18. package/dist/src/browser/page-registry.js.map +1 -0
  19. package/dist/src/browser/page-stabilization.d.ts +35 -0
  20. package/dist/src/browser/page-stabilization.d.ts.map +1 -0
  21. package/dist/src/browser/page-stabilization.js +42 -0
  22. package/dist/src/browser/page-stabilization.js.map +1 -0
  23. package/dist/src/browser/session-manager.d.ts +336 -0
  24. package/dist/src/browser/session-manager.d.ts.map +1 -0
  25. package/dist/src/browser/session-manager.js +964 -0
  26. package/dist/src/browser/session-manager.js.map +1 -0
  27. package/dist/src/cdp/cdp-client.interface.d.ts +193 -0
  28. package/dist/src/cdp/cdp-client.interface.d.ts.map +1 -0
  29. package/dist/src/cdp/cdp-client.interface.js +9 -0
  30. package/dist/src/cdp/cdp-client.interface.js.map +1 -0
  31. package/dist/src/cdp/index.d.ts +9 -0
  32. package/dist/src/cdp/index.d.ts.map +1 -0
  33. package/dist/src/cdp/index.js +8 -0
  34. package/dist/src/cdp/index.js.map +1 -0
  35. package/dist/src/cdp/puppeteer-cdp-client.d.ts +97 -0
  36. package/dist/src/cdp/puppeteer-cdp-client.d.ts.map +1 -0
  37. package/dist/src/cdp/puppeteer-cdp-client.js +273 -0
  38. package/dist/src/cdp/puppeteer-cdp-client.js.map +1 -0
  39. package/dist/src/cli/args.d.ts +35 -0
  40. package/dist/src/cli/args.d.ts.map +1 -0
  41. package/dist/src/cli/args.js +76 -0
  42. package/dist/src/cli/args.js.map +1 -0
  43. package/dist/src/delta/dom-stabilizer.d.ts +46 -0
  44. package/dist/src/delta/dom-stabilizer.d.ts.map +1 -0
  45. package/dist/src/delta/dom-stabilizer.js +121 -0
  46. package/dist/src/delta/dom-stabilizer.js.map +1 -0
  47. package/dist/src/delta/index.d.ts +8 -0
  48. package/dist/src/delta/index.d.ts.map +1 -0
  49. package/dist/src/delta/index.js +7 -0
  50. package/dist/src/delta/index.js.map +1 -0
  51. package/dist/src/factpack/action-selector.d.ts +36 -0
  52. package/dist/src/factpack/action-selector.d.ts.map +1 -0
  53. package/dist/src/factpack/action-selector.js +367 -0
  54. package/dist/src/factpack/action-selector.js.map +1 -0
  55. package/dist/src/factpack/dialog-detector.d.ts +19 -0
  56. package/dist/src/factpack/dialog-detector.d.ts.map +1 -0
  57. package/dist/src/factpack/dialog-detector.js +354 -0
  58. package/dist/src/factpack/dialog-detector.js.map +1 -0
  59. package/dist/src/factpack/form-detector.d.ts +28 -0
  60. package/dist/src/factpack/form-detector.d.ts.map +1 -0
  61. package/dist/src/factpack/form-detector.js +555 -0
  62. package/dist/src/factpack/form-detector.js.map +1 -0
  63. package/dist/src/factpack/index.d.ts +32 -0
  64. package/dist/src/factpack/index.d.ts.map +1 -0
  65. package/dist/src/factpack/index.js +73 -0
  66. package/dist/src/factpack/index.js.map +1 -0
  67. package/dist/src/factpack/page-classifier.d.ts +22 -0
  68. package/dist/src/factpack/page-classifier.d.ts.map +1 -0
  69. package/dist/src/factpack/page-classifier.js +526 -0
  70. package/dist/src/factpack/page-classifier.js.map +1 -0
  71. package/dist/src/factpack/types.d.ts +307 -0
  72. package/dist/src/factpack/types.d.ts.map +1 -0
  73. package/dist/src/factpack/types.js +12 -0
  74. package/dist/src/factpack/types.js.map +1 -0
  75. package/dist/src/form/dependency-tracker.d.ts +108 -0
  76. package/dist/src/form/dependency-tracker.d.ts.map +1 -0
  77. package/dist/src/form/dependency-tracker.js +298 -0
  78. package/dist/src/form/dependency-tracker.js.map +1 -0
  79. package/dist/src/form/field-extractor.d.ts +32 -0
  80. package/dist/src/form/field-extractor.d.ts.map +1 -0
  81. package/dist/src/form/field-extractor.js +544 -0
  82. package/dist/src/form/field-extractor.js.map +1 -0
  83. package/dist/src/form/form-detector.d.ts +103 -0
  84. package/dist/src/form/form-detector.d.ts.map +1 -0
  85. package/dist/src/form/form-detector.js +704 -0
  86. package/dist/src/form/form-detector.js.map +1 -0
  87. package/dist/src/form/form-state.d.ts +23 -0
  88. package/dist/src/form/form-state.d.ts.map +1 -0
  89. package/dist/src/form/form-state.js +39 -0
  90. package/dist/src/form/form-state.js.map +1 -0
  91. package/dist/src/form/index.d.ts +23 -0
  92. package/dist/src/form/index.d.ts.map +1 -0
  93. package/dist/src/form/index.js +27 -0
  94. package/dist/src/form/index.js.map +1 -0
  95. package/dist/src/form/runtime-value-reader.d.ts +72 -0
  96. package/dist/src/form/runtime-value-reader.d.ts.map +1 -0
  97. package/dist/src/form/runtime-value-reader.js +232 -0
  98. package/dist/src/form/runtime-value-reader.js.map +1 -0
  99. package/dist/src/form/types.d.ts +384 -0
  100. package/dist/src/form/types.d.ts.map +1 -0
  101. package/dist/src/form/types.js +17 -0
  102. package/dist/src/form/types.js.map +1 -0
  103. package/dist/src/index.d.ts +8 -0
  104. package/dist/src/index.d.ts.map +1 -0
  105. package/dist/src/index.js +212 -0
  106. package/dist/src/index.js.map +1 -0
  107. package/dist/src/lib/constants.d.ts +27 -0
  108. package/dist/src/lib/constants.d.ts.map +1 -0
  109. package/dist/src/lib/constants.js +63 -0
  110. package/dist/src/lib/constants.js.map +1 -0
  111. package/dist/src/lib/index.d.ts +12 -0
  112. package/dist/src/lib/index.d.ts.map +1 -0
  113. package/dist/src/lib/index.js +17 -0
  114. package/dist/src/lib/index.js.map +1 -0
  115. package/dist/src/lib/regions.d.ts +29 -0
  116. package/dist/src/lib/regions.d.ts.map +1 -0
  117. package/dist/src/lib/regions.js +93 -0
  118. package/dist/src/lib/regions.js.map +1 -0
  119. package/dist/src/lib/scoring.d.ts +47 -0
  120. package/dist/src/lib/scoring.d.ts.map +1 -0
  121. package/dist/src/lib/scoring.js +79 -0
  122. package/dist/src/lib/scoring.js.map +1 -0
  123. package/dist/src/lib/selectors.d.ts +42 -0
  124. package/dist/src/lib/selectors.d.ts.map +1 -0
  125. package/dist/src/lib/selectors.js +138 -0
  126. package/dist/src/lib/selectors.js.map +1 -0
  127. package/dist/src/lib/text-utils.d.ts +155 -0
  128. package/dist/src/lib/text-utils.d.ts.map +1 -0
  129. package/dist/src/lib/text-utils.js +391 -0
  130. package/dist/src/lib/text-utils.js.map +1 -0
  131. package/dist/src/observation/eid-linker.d.ts +104 -0
  132. package/dist/src/observation/eid-linker.d.ts.map +1 -0
  133. package/dist/src/observation/eid-linker.js +403 -0
  134. package/dist/src/observation/eid-linker.js.map +1 -0
  135. package/dist/src/observation/index.d.ts +12 -0
  136. package/dist/src/observation/index.d.ts.map +1 -0
  137. package/dist/src/observation/index.js +15 -0
  138. package/dist/src/observation/index.js.map +1 -0
  139. package/dist/src/observation/observation-accumulator.d.ts +58 -0
  140. package/dist/src/observation/observation-accumulator.d.ts.map +1 -0
  141. package/dist/src/observation/observation-accumulator.js +213 -0
  142. package/dist/src/observation/observation-accumulator.js.map +1 -0
  143. package/dist/src/observation/observation.types.d.ts +139 -0
  144. package/dist/src/observation/observation.types.d.ts.map +1 -0
  145. package/dist/src/observation/observation.types.js +59 -0
  146. package/dist/src/observation/observation.types.js.map +1 -0
  147. package/dist/src/observation/observer-script.d.ts +19 -0
  148. package/dist/src/observation/observer-script.d.ts.map +1 -0
  149. package/dist/src/observation/observer-script.js +569 -0
  150. package/dist/src/observation/observer-script.js.map +1 -0
  151. package/dist/src/query/index.d.ts +9 -0
  152. package/dist/src/query/index.d.ts.map +1 -0
  153. package/dist/src/query/index.js +10 -0
  154. package/dist/src/query/index.js.map +1 -0
  155. package/dist/src/query/query-engine.d.ts +111 -0
  156. package/dist/src/query/query-engine.d.ts.map +1 -0
  157. package/dist/src/query/query-engine.js +509 -0
  158. package/dist/src/query/query-engine.js.map +1 -0
  159. package/dist/src/query/types/index.d.ts +5 -0
  160. package/dist/src/query/types/index.d.ts.map +1 -0
  161. package/dist/src/query/types/index.js +5 -0
  162. package/dist/src/query/types/index.js.map +1 -0
  163. package/dist/src/query/types/query.types.d.ts +141 -0
  164. package/dist/src/query/types/query.types.d.ts.map +1 -0
  165. package/dist/src/query/types/query.types.js +19 -0
  166. package/dist/src/query/types/query.types.js.map +1 -0
  167. package/dist/src/renderer/budget-manager.d.ts +46 -0
  168. package/dist/src/renderer/budget-manager.d.ts.map +1 -0
  169. package/dist/src/renderer/budget-manager.js +133 -0
  170. package/dist/src/renderer/budget-manager.js.map +1 -0
  171. package/dist/src/renderer/constants.d.ts +38 -0
  172. package/dist/src/renderer/constants.d.ts.map +1 -0
  173. package/dist/src/renderer/constants.js +29 -0
  174. package/dist/src/renderer/constants.js.map +1 -0
  175. package/dist/src/renderer/index.d.ts +12 -0
  176. package/dist/src/renderer/index.d.ts.map +1 -0
  177. package/dist/src/renderer/index.js +16 -0
  178. package/dist/src/renderer/index.js.map +1 -0
  179. package/dist/src/renderer/section-renderers.d.ts +42 -0
  180. package/dist/src/renderer/section-renderers.d.ts.map +1 -0
  181. package/dist/src/renderer/section-renderers.js +252 -0
  182. package/dist/src/renderer/section-renderers.js.map +1 -0
  183. package/dist/src/renderer/token-counter.d.ts +45 -0
  184. package/dist/src/renderer/token-counter.d.ts.map +1 -0
  185. package/dist/src/renderer/token-counter.js +65 -0
  186. package/dist/src/renderer/token-counter.js.map +1 -0
  187. package/dist/src/renderer/types.d.ts +71 -0
  188. package/dist/src/renderer/types.d.ts.map +1 -0
  189. package/dist/src/renderer/types.js +7 -0
  190. package/dist/src/renderer/types.js.map +1 -0
  191. package/dist/src/renderer/xml-renderer.d.ts +42 -0
  192. package/dist/src/renderer/xml-renderer.d.ts.map +1 -0
  193. package/dist/src/renderer/xml-renderer.js +103 -0
  194. package/dist/src/renderer/xml-renderer.js.map +1 -0
  195. package/dist/src/server/index.d.ts +8 -0
  196. package/dist/src/server/index.d.ts.map +1 -0
  197. package/dist/src/server/index.js +8 -0
  198. package/dist/src/server/index.js.map +1 -0
  199. package/dist/src/server/mcp-server.d.ts +59 -0
  200. package/dist/src/server/mcp-server.d.ts.map +1 -0
  201. package/dist/src/server/mcp-server.js +140 -0
  202. package/dist/src/server/mcp-server.js.map +1 -0
  203. package/dist/src/server/server-config.d.ts +41 -0
  204. package/dist/src/server/server-config.d.ts.map +1 -0
  205. package/dist/src/server/server-config.js +80 -0
  206. package/dist/src/server/server-config.js.map +1 -0
  207. package/dist/src/server/session-store.d.ts +148 -0
  208. package/dist/src/server/session-store.d.ts.map +1 -0
  209. package/dist/src/server/session-store.js +224 -0
  210. package/dist/src/server/session-store.js.map +1 -0
  211. package/dist/src/shared/errors/browser-session.error.d.ts +102 -0
  212. package/dist/src/shared/errors/browser-session.error.d.ts.map +1 -0
  213. package/dist/src/shared/errors/browser-session.error.js +153 -0
  214. package/dist/src/shared/errors/browser-session.error.js.map +1 -0
  215. package/dist/src/shared/errors/index.d.ts +5 -0
  216. package/dist/src/shared/errors/index.d.ts.map +1 -0
  217. package/dist/src/shared/errors/index.js +5 -0
  218. package/dist/src/shared/errors/index.js.map +1 -0
  219. package/dist/src/shared/services/dom-transformer.service.d.ts +71 -0
  220. package/dist/src/shared/services/dom-transformer.service.d.ts.map +1 -0
  221. package/dist/src/shared/services/dom-transformer.service.js +190 -0
  222. package/dist/src/shared/services/dom-transformer.service.js.map +1 -0
  223. package/dist/src/shared/services/index.d.ts +7 -0
  224. package/dist/src/shared/services/index.d.ts.map +1 -0
  225. package/dist/src/shared/services/index.js +7 -0
  226. package/dist/src/shared/services/index.js.map +1 -0
  227. package/dist/src/shared/services/logging.service.d.ts +154 -0
  228. package/dist/src/shared/services/logging.service.d.ts.map +1 -0
  229. package/dist/src/shared/services/logging.service.js +267 -0
  230. package/dist/src/shared/services/logging.service.js.map +1 -0
  231. package/dist/src/shared/services/selector-builder.service.d.ts +53 -0
  232. package/dist/src/shared/services/selector-builder.service.d.ts.map +1 -0
  233. package/dist/src/shared/services/selector-builder.service.js +240 -0
  234. package/dist/src/shared/services/selector-builder.service.js.map +1 -0
  235. package/dist/src/shared/types/base.types.d.ts +45 -0
  236. package/dist/src/shared/types/base.types.d.ts.map +1 -0
  237. package/dist/src/shared/types/base.types.js +8 -0
  238. package/dist/src/shared/types/base.types.js.map +1 -0
  239. package/dist/src/shared/types/index.d.ts +5 -0
  240. package/dist/src/shared/types/index.d.ts.map +1 -0
  241. package/dist/src/shared/types/index.js +5 -0
  242. package/dist/src/shared/types/index.js.map +1 -0
  243. package/dist/src/snapshot/element-resolver.d.ts +102 -0
  244. package/dist/src/snapshot/element-resolver.d.ts.map +1 -0
  245. package/dist/src/snapshot/element-resolver.js +379 -0
  246. package/dist/src/snapshot/element-resolver.js.map +1 -0
  247. package/dist/src/snapshot/extractors/attribute-extractor.d.ts +40 -0
  248. package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -0
  249. package/dist/src/snapshot/extractors/attribute-extractor.js +237 -0
  250. package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -0
  251. package/dist/src/snapshot/extractors/ax-extractor.d.ts +36 -0
  252. package/dist/src/snapshot/extractors/ax-extractor.d.ts.map +1 -0
  253. package/dist/src/snapshot/extractors/ax-extractor.js +144 -0
  254. package/dist/src/snapshot/extractors/ax-extractor.js.map +1 -0
  255. package/dist/src/snapshot/extractors/dom-extractor.d.ts +21 -0
  256. package/dist/src/snapshot/extractors/dom-extractor.d.ts.map +1 -0
  257. package/dist/src/snapshot/extractors/dom-extractor.js +137 -0
  258. package/dist/src/snapshot/extractors/dom-extractor.js.map +1 -0
  259. package/dist/src/snapshot/extractors/grouping-resolver.d.ts +39 -0
  260. package/dist/src/snapshot/extractors/grouping-resolver.d.ts.map +1 -0
  261. package/dist/src/snapshot/extractors/grouping-resolver.js +260 -0
  262. package/dist/src/snapshot/extractors/grouping-resolver.js.map +1 -0
  263. package/dist/src/snapshot/extractors/index.d.ts +19 -0
  264. package/dist/src/snapshot/extractors/index.d.ts.map +1 -0
  265. package/dist/src/snapshot/extractors/index.js +27 -0
  266. package/dist/src/snapshot/extractors/index.js.map +1 -0
  267. package/dist/src/snapshot/extractors/label-resolver.d.ts +44 -0
  268. package/dist/src/snapshot/extractors/label-resolver.d.ts.map +1 -0
  269. package/dist/src/snapshot/extractors/label-resolver.js +173 -0
  270. package/dist/src/snapshot/extractors/label-resolver.js.map +1 -0
  271. package/dist/src/snapshot/extractors/layout-extractor.d.ts +52 -0
  272. package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -0
  273. package/dist/src/snapshot/extractors/layout-extractor.js +382 -0
  274. package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -0
  275. package/dist/src/snapshot/extractors/locator-builder.d.ts +27 -0
  276. package/dist/src/snapshot/extractors/locator-builder.d.ts.map +1 -0
  277. package/dist/src/snapshot/extractors/locator-builder.js +223 -0
  278. package/dist/src/snapshot/extractors/locator-builder.js.map +1 -0
  279. package/dist/src/snapshot/extractors/region-resolver.d.ts +31 -0
  280. package/dist/src/snapshot/extractors/region-resolver.d.ts.map +1 -0
  281. package/dist/src/snapshot/extractors/region-resolver.js +168 -0
  282. package/dist/src/snapshot/extractors/region-resolver.js.map +1 -0
  283. package/dist/src/snapshot/extractors/state-extractor.d.ts +30 -0
  284. package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -0
  285. package/dist/src/snapshot/extractors/state-extractor.js +181 -0
  286. package/dist/src/snapshot/extractors/state-extractor.js.map +1 -0
  287. package/dist/src/snapshot/extractors/types.d.ts +213 -0
  288. package/dist/src/snapshot/extractors/types.d.ts.map +1 -0
  289. package/dist/src/snapshot/extractors/types.js +145 -0
  290. package/dist/src/snapshot/extractors/types.js.map +1 -0
  291. package/dist/src/snapshot/index.d.ts +14 -0
  292. package/dist/src/snapshot/index.d.ts.map +1 -0
  293. package/dist/src/snapshot/index.js +18 -0
  294. package/dist/src/snapshot/index.js.map +1 -0
  295. package/dist/src/snapshot/snapshot-compiler.d.ts +73 -0
  296. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -0
  297. package/dist/src/snapshot/snapshot-compiler.js +763 -0
  298. package/dist/src/snapshot/snapshot-compiler.js.map +1 -0
  299. package/dist/src/snapshot/snapshot-health.d.ts +97 -0
  300. package/dist/src/snapshot/snapshot-health.d.ts.map +1 -0
  301. package/dist/src/snapshot/snapshot-health.js +214 -0
  302. package/dist/src/snapshot/snapshot-health.js.map +1 -0
  303. package/dist/src/snapshot/snapshot-store.d.ts +137 -0
  304. package/dist/src/snapshot/snapshot-store.d.ts.map +1 -0
  305. package/dist/src/snapshot/snapshot-store.js +202 -0
  306. package/dist/src/snapshot/snapshot-store.js.map +1 -0
  307. package/dist/src/snapshot/snapshot.types.d.ts +250 -0
  308. package/dist/src/snapshot/snapshot.types.d.ts.map +1 -0
  309. package/dist/src/snapshot/snapshot.types.js +54 -0
  310. package/dist/src/snapshot/snapshot.types.js.map +1 -0
  311. package/dist/src/state/actionables-filter.d.ts +47 -0
  312. package/dist/src/state/actionables-filter.d.ts.map +1 -0
  313. package/dist/src/state/actionables-filter.js +173 -0
  314. package/dist/src/state/actionables-filter.js.map +1 -0
  315. package/dist/src/state/atoms-extractor.d.ts +23 -0
  316. package/dist/src/state/atoms-extractor.d.ts.map +1 -0
  317. package/dist/src/state/atoms-extractor.js +160 -0
  318. package/dist/src/state/atoms-extractor.js.map +1 -0
  319. package/dist/src/state/constants.d.ts +125 -0
  320. package/dist/src/state/constants.d.ts.map +1 -0
  321. package/dist/src/state/constants.js +131 -0
  322. package/dist/src/state/constants.js.map +1 -0
  323. package/dist/src/state/diff-engine.d.ts +23 -0
  324. package/dist/src/state/diff-engine.d.ts.map +1 -0
  325. package/dist/src/state/diff-engine.js +475 -0
  326. package/dist/src/state/diff-engine.js.map +1 -0
  327. package/dist/src/state/element-identity.d.ts +75 -0
  328. package/dist/src/state/element-identity.d.ts.map +1 -0
  329. package/dist/src/state/element-identity.js +129 -0
  330. package/dist/src/state/element-identity.js.map +1 -0
  331. package/dist/src/state/element-ref.types.d.ts +135 -0
  332. package/dist/src/state/element-ref.types.d.ts.map +1 -0
  333. package/dist/src/state/element-ref.types.js +13 -0
  334. package/dist/src/state/element-ref.types.js.map +1 -0
  335. package/dist/src/state/element-registry.d.ts +118 -0
  336. package/dist/src/state/element-registry.d.ts.map +1 -0
  337. package/dist/src/state/element-registry.js +222 -0
  338. package/dist/src/state/element-registry.js.map +1 -0
  339. package/dist/src/state/health.types.d.ts +93 -0
  340. package/dist/src/state/health.types.d.ts.map +1 -0
  341. package/dist/src/state/health.types.js +56 -0
  342. package/dist/src/state/health.types.js.map +1 -0
  343. package/dist/src/state/layer-detector.d.ts +23 -0
  344. package/dist/src/state/layer-detector.d.ts.map +1 -0
  345. package/dist/src/state/layer-detector.js +368 -0
  346. package/dist/src/state/layer-detector.js.map +1 -0
  347. package/dist/src/state/locator-generator.d.ts +21 -0
  348. package/dist/src/state/locator-generator.d.ts.map +1 -0
  349. package/dist/src/state/locator-generator.js +137 -0
  350. package/dist/src/state/locator-generator.js.map +1 -0
  351. package/dist/src/state/state-manager.d.ts +104 -0
  352. package/dist/src/state/state-manager.d.ts.map +1 -0
  353. package/dist/src/state/state-manager.js +618 -0
  354. package/dist/src/state/state-manager.js.map +1 -0
  355. package/dist/src/state/state-renderer.d.ts +63 -0
  356. package/dist/src/state/state-renderer.d.ts.map +1 -0
  357. package/dist/src/state/state-renderer.js +340 -0
  358. package/dist/src/state/state-renderer.js.map +1 -0
  359. package/dist/src/state/types.d.ts +353 -0
  360. package/dist/src/state/types.d.ts.map +1 -0
  361. package/dist/src/state/types.js +8 -0
  362. package/dist/src/state/types.js.map +1 -0
  363. package/dist/src/tools/browser-tools.d.ts +140 -0
  364. package/dist/src/tools/browser-tools.d.ts.map +1 -0
  365. package/dist/src/tools/browser-tools.js +657 -0
  366. package/dist/src/tools/browser-tools.js.map +1 -0
  367. package/dist/src/tools/errors.d.ts +63 -0
  368. package/dist/src/tools/errors.d.ts.map +1 -0
  369. package/dist/src/tools/errors.js +86 -0
  370. package/dist/src/tools/errors.js.map +1 -0
  371. package/dist/src/tools/execute-action.d.ts +135 -0
  372. package/dist/src/tools/execute-action.d.ts.map +1 -0
  373. package/dist/src/tools/execute-action.js +579 -0
  374. package/dist/src/tools/execute-action.js.map +1 -0
  375. package/dist/src/tools/form-tools.d.ts +109 -0
  376. package/dist/src/tools/form-tools.d.ts.map +1 -0
  377. package/dist/src/tools/form-tools.js +434 -0
  378. package/dist/src/tools/form-tools.js.map +1 -0
  379. package/dist/src/tools/index.d.ts +11 -0
  380. package/dist/src/tools/index.d.ts.map +1 -0
  381. package/dist/src/tools/index.js +49 -0
  382. package/dist/src/tools/index.js.map +1 -0
  383. package/dist/src/tools/response-builder.d.ts +98 -0
  384. package/dist/src/tools/response-builder.d.ts.map +1 -0
  385. package/dist/src/tools/response-builder.js +219 -0
  386. package/dist/src/tools/response-builder.js.map +1 -0
  387. package/dist/src/tools/tool-schemas.d.ts +2482 -0
  388. package/dist/src/tools/tool-schemas.d.ts.map +1 -0
  389. package/dist/src/tools/tool-schemas.js +606 -0
  390. package/dist/src/tools/tool-schemas.js.map +1 -0
  391. package/dist/vitest.config.d.ts +3 -0
  392. package/dist/vitest.config.d.ts.map +1 -0
  393. package/dist/vitest.config.js +16 -0
  394. package/dist/vitest.config.js.map +1 -0
  395. package/package.json +76 -0
@@ -0,0 +1,544 @@
1
+ /**
2
+ * Field Extractor
3
+ *
4
+ * Extracts rich metadata for form fields from a BaseSnapshot.
5
+ * Handles purpose inference, constraint extraction, and state tracking.
6
+ *
7
+ * Purpose inference priority:
8
+ * 1. input type attribute
9
+ * 2. autocomplete attribute
10
+ * 3. aria-label
11
+ * 4. label text
12
+ * 5. placeholder
13
+ * 6. name attribute
14
+ *
15
+ * @module form/field-extractor
16
+ */
17
+ /**
18
+ * Mapping from input type to semantic type
19
+ */
20
+ const INPUT_TYPE_TO_SEMANTIC = {
21
+ email: 'email',
22
+ tel: 'phone',
23
+ password: 'password',
24
+ url: 'url',
25
+ search: 'search',
26
+ date: 'date',
27
+ 'datetime-local': 'date',
28
+ time: 'date',
29
+ month: 'date',
30
+ week: 'date',
31
+ number: 'quantity',
32
+ file: 'file',
33
+ color: 'color',
34
+ };
35
+ /**
36
+ * Mapping from autocomplete attribute to semantic type
37
+ */
38
+ const AUTOCOMPLETE_TO_SEMANTIC = {
39
+ email: 'email',
40
+ tel: 'phone',
41
+ 'tel-national': 'phone',
42
+ 'tel-local': 'phone',
43
+ password: 'password',
44
+ 'new-password': 'password',
45
+ 'current-password': 'password',
46
+ username: 'username',
47
+ name: 'full_name',
48
+ 'given-name': 'first_name',
49
+ 'family-name': 'last_name',
50
+ 'additional-name': 'name',
51
+ nickname: 'username',
52
+ 'street-address': 'street',
53
+ 'address-line1': 'street',
54
+ 'address-line2': 'address',
55
+ 'address-level1': 'state',
56
+ 'address-level2': 'city',
57
+ 'postal-code': 'zip',
58
+ country: 'country',
59
+ 'country-name': 'country',
60
+ 'cc-number': 'card_number',
61
+ 'cc-exp': 'card_expiry',
62
+ 'cc-exp-month': 'card_expiry',
63
+ 'cc-exp-year': 'card_expiry',
64
+ 'cc-csc': 'card_cvv',
65
+ bday: 'date_of_birth',
66
+ 'bday-day': 'date_of_birth',
67
+ 'bday-month': 'date_of_birth',
68
+ 'bday-year': 'date_of_birth',
69
+ url: 'url',
70
+ photo: 'file',
71
+ };
72
+ /**
73
+ * Keywords for semantic type inference from labels
74
+ */
75
+ const LABEL_KEYWORDS = {
76
+ email: ['email', 'e-mail', 'mail address'],
77
+ phone: ['phone', 'telephone', 'mobile', 'cell', 'contact number'],
78
+ password: ['password', 'passcode', 'pin'],
79
+ password_confirm: ['confirm password', 'repeat password', 'retype password', 're-enter password'],
80
+ name: ['name', 'full name'],
81
+ first_name: ['first name', 'given name', 'forename'],
82
+ last_name: ['last name', 'surname', 'family name'],
83
+ full_name: ['full name', 'your name', 'customer name'],
84
+ username: ['username', 'user name', 'user id', 'login', 'account name'],
85
+ address: ['address', 'location'],
86
+ street: ['street', 'address line', 'street address'],
87
+ city: ['city', 'town', 'locality'],
88
+ state: ['state', 'province', 'region'],
89
+ zip: ['zip', 'postal code', 'postcode', 'zip code'],
90
+ country: ['country', 'nation'],
91
+ card_number: ['card number', 'credit card', 'debit card', 'card #'],
92
+ card_expiry: ['expiry', 'expiration', 'exp date', 'valid thru'],
93
+ card_cvv: ['cvv', 'cvc', 'security code', 'card verification'],
94
+ date: ['date', 'when'],
95
+ date_of_birth: ['birth', 'dob', 'birthday', 'date of birth'],
96
+ quantity: ['quantity', 'qty', 'amount', 'count', 'number of'],
97
+ price: ['price', 'cost', 'amount', 'total'],
98
+ search: ['search', 'find', 'lookup', 'query'],
99
+ comment: ['comment', 'note', 'remarks', 'feedback'],
100
+ message: ['message', 'text', 'content', 'body'],
101
+ url: ['url', 'website', 'link', 'web address'],
102
+ file: ['file', 'upload', 'attachment', 'document'],
103
+ color: ['color', 'colour'],
104
+ selection: ['select', 'choose', 'option'],
105
+ toggle: ['enable', 'disable', 'turn on', 'turn off'],
106
+ consent: ['agree', 'consent', 'accept', 'terms', 'privacy', 'subscribe'],
107
+ unknown: [],
108
+ };
109
+ /**
110
+ * Name patterns for semantic type inference.
111
+ * Maps common naming patterns (camelCase, snake_case, kebab-case) to semantic types.
112
+ */
113
+ const NAME_PATTERNS = {
114
+ // Email patterns
115
+ email: 'email',
116
+ emailaddress: 'email',
117
+ email_address: 'email',
118
+ 'email-address': 'email',
119
+ useremail: 'email',
120
+ user_email: 'email',
121
+ // Phone patterns
122
+ phone: 'phone',
123
+ phonenumber: 'phone',
124
+ phone_number: 'phone',
125
+ 'phone-number': 'phone',
126
+ tel: 'phone',
127
+ telephone: 'phone',
128
+ mobile: 'phone',
129
+ // Password patterns
130
+ password: 'password',
131
+ passwd: 'password',
132
+ pass: 'password',
133
+ confirmpassword: 'password_confirm',
134
+ confirm_password: 'password_confirm',
135
+ passwordconfirm: 'password_confirm',
136
+ // Name patterns
137
+ firstname: 'first_name',
138
+ first_name: 'first_name',
139
+ 'first-name': 'first_name',
140
+ givenname: 'first_name',
141
+ lastname: 'last_name',
142
+ last_name: 'last_name',
143
+ 'last-name': 'last_name',
144
+ familyname: 'last_name',
145
+ fullname: 'full_name',
146
+ full_name: 'full_name',
147
+ // Username
148
+ username: 'username',
149
+ user_name: 'username',
150
+ userid: 'username',
151
+ user_id: 'username',
152
+ // Address
153
+ streetaddress: 'street',
154
+ street_address: 'street',
155
+ addressline: 'street',
156
+ address_line: 'street',
157
+ city: 'city',
158
+ state: 'state',
159
+ province: 'state',
160
+ zip: 'zip',
161
+ zipcode: 'zip',
162
+ zip_code: 'zip',
163
+ postalcode: 'zip',
164
+ postal_code: 'zip',
165
+ country: 'country',
166
+ // Payment
167
+ cardnumber: 'card_number',
168
+ card_number: 'card_number',
169
+ ccnumber: 'card_number',
170
+ cc_number: 'card_number',
171
+ cvv: 'card_cvv',
172
+ cvc: 'card_cvv',
173
+ expiry: 'card_expiry',
174
+ expiration: 'card_expiry',
175
+ // Dates
176
+ dateofbirth: 'date_of_birth',
177
+ date_of_birth: 'date_of_birth',
178
+ dob: 'date_of_birth',
179
+ birthday: 'date_of_birth',
180
+ birthdate: 'date_of_birth',
181
+ };
182
+ /**
183
+ * Extract semantic type from naming patterns.
184
+ *
185
+ * @param label - The accessible label
186
+ * @param testId - Optional test ID attribute
187
+ * @returns Object with inferred type and signal description
188
+ */
189
+ function extractNamePatterns(label, testId) {
190
+ // Normalize label to check against patterns
191
+ const normalizedLabel = label.toLowerCase().replace(/[^a-z0-9_-]/g, '');
192
+ // Check label against patterns
193
+ for (const [pattern, type] of Object.entries(NAME_PATTERNS)) {
194
+ if (normalizedLabel.includes(pattern)) {
195
+ return { type, signal: `label matches pattern "${pattern}"` };
196
+ }
197
+ }
198
+ // Check test_id against patterns
199
+ if (testId) {
200
+ const normalizedTestId = testId.toLowerCase().replace(/[^a-z0-9_-]/g, '');
201
+ for (const [pattern, type] of Object.entries(NAME_PATTERNS)) {
202
+ if (normalizedTestId.includes(pattern)) {
203
+ return { type, signal: `test_id matches pattern "${pattern}"` };
204
+ }
205
+ }
206
+ }
207
+ return { type: 'unknown', signal: '' };
208
+ }
209
+ /**
210
+ * Sensitive field types that should have values masked
211
+ */
212
+ const SENSITIVE_TYPES = new Set([
213
+ 'password',
214
+ 'password_confirm',
215
+ 'card_number',
216
+ 'card_cvv',
217
+ ]);
218
+ /**
219
+ * Extract form fields from a snapshot for given field EIDs.
220
+ *
221
+ * @param snapshot - BaseSnapshot containing the nodes
222
+ * @param fieldEids - Array of node IDs to extract as fields
223
+ * @param config - Form detection configuration
224
+ * @returns Array of FormField objects
225
+ */
226
+ export function extractFields(snapshot, fieldEids, config) {
227
+ const fields = [];
228
+ for (let sequence = 0; sequence < fieldEids.length; sequence++) {
229
+ const eid = fieldEids[sequence];
230
+ const node = snapshot.nodes.find((n) => n.node_id === eid);
231
+ if (!node)
232
+ continue;
233
+ const field = extractField(node, sequence, snapshot, config);
234
+ if (field) {
235
+ fields.push(field);
236
+ }
237
+ }
238
+ // Detect radio groups and link them
239
+ linkRadioGroups(fields, snapshot);
240
+ return fields;
241
+ }
242
+ /**
243
+ * Extract a single form field from a node.
244
+ */
245
+ function extractField(node, sequence, snapshot, config) {
246
+ // Infer purpose
247
+ const purpose = inferPurpose(node);
248
+ // Extract constraints
249
+ const constraints = extractConstraints(node, snapshot);
250
+ // Extract state
251
+ const state = extractFieldState(node, config, purpose.semantic_type);
252
+ return {
253
+ eid: node.node_id,
254
+ backend_node_id: node.backend_node_id,
255
+ frame_id: node.frame_id,
256
+ label: node.label,
257
+ kind: node.kind,
258
+ purpose,
259
+ constraints,
260
+ state,
261
+ sequence,
262
+ };
263
+ }
264
+ /**
265
+ * Infer the semantic purpose of a field.
266
+ */
267
+ function inferPurpose(node) {
268
+ const inferredFrom = [];
269
+ let semanticType = 'unknown';
270
+ let confidence = 0;
271
+ // Priority 1: Input type attribute (high confidence)
272
+ const inputType = node.attributes?.input_type;
273
+ if (inputType && INPUT_TYPE_TO_SEMANTIC[inputType]) {
274
+ semanticType = INPUT_TYPE_TO_SEMANTIC[inputType];
275
+ confidence = 0.95;
276
+ inferredFrom.push(`input_type="${inputType}"`);
277
+ }
278
+ // Priority 2: Autocomplete attribute (high confidence)
279
+ const autocomplete = node.attributes?.autocomplete;
280
+ if (autocomplete && AUTOCOMPLETE_TO_SEMANTIC[autocomplete]) {
281
+ const autoType = AUTOCOMPLETE_TO_SEMANTIC[autocomplete];
282
+ if (semanticType === 'unknown' || confidence < 0.9) {
283
+ semanticType = autoType;
284
+ confidence = Math.max(confidence, 0.9);
285
+ inferredFrom.push(`autocomplete="${autocomplete}"`);
286
+ }
287
+ }
288
+ // Priority 3-5: Label, placeholder, aria-label (medium confidence)
289
+ // Note: node.label is the computed accessible name which includes aria-label,
290
+ // aria-labelledby, and other ARIA labeling mechanisms
291
+ if (semanticType === 'unknown' || confidence < 0.8) {
292
+ const textSources = [
293
+ { text: node.label, source: 'label', confidence: 0.7 },
294
+ { text: node.attributes?.placeholder, source: 'placeholder', confidence: 0.65 },
295
+ ];
296
+ for (const { text, source, confidence: sourceConfidence } of textSources) {
297
+ if (!text)
298
+ continue;
299
+ const lowerText = text.toLowerCase();
300
+ for (const [type, keywords] of Object.entries(LABEL_KEYWORDS)) {
301
+ if (type === 'unknown')
302
+ continue;
303
+ for (const keyword of keywords) {
304
+ if (lowerText.includes(keyword)) {
305
+ if (semanticType === 'unknown' || confidence < sourceConfidence) {
306
+ semanticType = type;
307
+ confidence = Math.max(confidence, sourceConfidence);
308
+ inferredFrom.push(`${source} contains "${keyword}"`);
309
+ }
310
+ break;
311
+ }
312
+ }
313
+ if (semanticType !== 'unknown' && confidence >= 0.7)
314
+ break;
315
+ }
316
+ if (semanticType !== 'unknown' && confidence >= 0.7)
317
+ break;
318
+ }
319
+ }
320
+ // Priority 6: Name attribute patterns (low confidence: 0.5)
321
+ // Detect naming conventions like camelCase (firstName), snake_case (first_name),
322
+ // or kebab-case (first-name) that may indicate field purpose
323
+ if (semanticType === 'unknown' || confidence < 0.5) {
324
+ const testId = node.attributes?.test_id ?? '';
325
+ const namePatterns = extractNamePatterns(node.label, testId);
326
+ if (namePatterns.type !== 'unknown') {
327
+ semanticType = namePatterns.type;
328
+ confidence = Math.max(confidence, 0.5);
329
+ inferredFrom.push(namePatterns.signal);
330
+ }
331
+ }
332
+ // Fallback based on node kind
333
+ if (semanticType === 'unknown') {
334
+ switch (node.kind) {
335
+ case 'checkbox':
336
+ semanticType = 'toggle';
337
+ confidence = 0.5;
338
+ inferredFrom.push('node kind is checkbox');
339
+ break;
340
+ case 'radio':
341
+ semanticType = 'selection';
342
+ confidence = 0.5;
343
+ inferredFrom.push('node kind is radio');
344
+ break;
345
+ case 'select':
346
+ case 'combobox':
347
+ semanticType = 'selection';
348
+ confidence = 0.5;
349
+ inferredFrom.push(`node kind is ${node.kind}`);
350
+ break;
351
+ case 'textarea':
352
+ semanticType = 'message';
353
+ confidence = 0.4;
354
+ inferredFrom.push('node kind is textarea');
355
+ break;
356
+ case 'slider':
357
+ semanticType = 'quantity';
358
+ confidence = 0.4;
359
+ inferredFrom.push('node kind is slider');
360
+ break;
361
+ }
362
+ }
363
+ return {
364
+ semantic_type: semanticType,
365
+ confidence,
366
+ inferred_from: inferredFrom.length > 0 ? inferredFrom : ['no signals found'],
367
+ };
368
+ }
369
+ /**
370
+ * Extract constraints for a field.
371
+ */
372
+ function extractConstraints(node, snapshot) {
373
+ const constraints = {
374
+ required: false,
375
+ required_confidence: 0,
376
+ };
377
+ // Check required state
378
+ if (node.state?.required) {
379
+ constraints.required = true;
380
+ constraints.required_confidence = 1.0;
381
+ }
382
+ else {
383
+ // Check label for required indicators
384
+ const label = node.label.toLowerCase();
385
+ if (label.includes('*') || label.includes('required')) {
386
+ constraints.required = true;
387
+ constraints.required_confidence = 0.8;
388
+ }
389
+ }
390
+ // Extract options for select/radio/combobox
391
+ if (node.kind === 'radio') {
392
+ // Find related radio buttons with same name pattern
393
+ constraints.options = extractRadioOptions(node, snapshot);
394
+ }
395
+ else if (node.kind === 'combobox' || node.kind === 'select') {
396
+ // Extract options for select/combobox elements
397
+ constraints.options = extractSelectOptions(node, snapshot);
398
+ }
399
+ // TODO: Extract more constraints from DOM attributes
400
+ // - minlength, maxlength
401
+ // - min, max, step
402
+ // - pattern
403
+ return constraints;
404
+ }
405
+ /**
406
+ * Extract options for radio button groups.
407
+ */
408
+ function extractRadioOptions(node, snapshot) {
409
+ const options = [];
410
+ // Find all radio buttons in the same region/group
411
+ const radioButtons = snapshot.nodes.filter((n) => n.kind === 'radio' &&
412
+ n.where.region === node.where.region &&
413
+ (n.where.heading_context === node.where.heading_context ||
414
+ n.where.group_id === node.where.group_id));
415
+ for (const radio of radioButtons) {
416
+ options.push({
417
+ value: radio.label,
418
+ label: radio.label,
419
+ selected: radio.state?.checked ?? false,
420
+ disabled: !(radio.state?.enabled ?? true),
421
+ eid: radio.node_id,
422
+ });
423
+ }
424
+ return options;
425
+ }
426
+ /**
427
+ * Extract options for select/combobox elements.
428
+ *
429
+ * Attempts to find option elements by looking for:
430
+ * 1. Nodes in the same group with 'listitem' kind
431
+ * 2. Nodes with 'menuitem' kind that share the same region/group
432
+ * 3. If value is set, creates a single option representing current selection
433
+ *
434
+ * Note: Full option extraction may require additional CDP calls.
435
+ * This provides a best-effort extraction from available snapshot data.
436
+ */
437
+ function extractSelectOptions(node, snapshot) {
438
+ const options = [];
439
+ // Look for listitem or menuitem nodes in the same group_id
440
+ if (node.where.group_id) {
441
+ const potentialOptions = snapshot.nodes.filter((n) => (n.kind === 'listitem' || n.kind === 'menuitem') &&
442
+ n.where.group_id === node.where.group_id &&
443
+ n.node_id !== node.node_id);
444
+ for (const opt of potentialOptions) {
445
+ const isSelected = opt.state?.selected ?? false;
446
+ options.push({
447
+ value: opt.label,
448
+ label: opt.label,
449
+ selected: isSelected,
450
+ disabled: !(opt.state?.enabled ?? true),
451
+ eid: opt.node_id,
452
+ });
453
+ }
454
+ }
455
+ // If we found options, return them
456
+ if (options.length > 0) {
457
+ return options;
458
+ }
459
+ // Fallback: if node has a value, create a single option for the current selection
460
+ // This at least lets us know what's currently selected even if we can't see all options
461
+ if (node.attributes?.value) {
462
+ options.push({
463
+ value: node.attributes.value,
464
+ label: node.attributes.value,
465
+ selected: true,
466
+ });
467
+ }
468
+ return options;
469
+ }
470
+ /**
471
+ * Extract state for a field.
472
+ *
473
+ * Note: This extracts initial state from the snapshot (HTML attributes).
474
+ * Runtime values may be overlaid later via readRuntimeValues().
475
+ */
476
+ function extractFieldState(node, config, semanticType) {
477
+ // Get value from HTML attribute, potentially masked
478
+ let currentValue = node.attributes?.value;
479
+ const isSensitive = SENSITIVE_TYPES.has(semanticType);
480
+ if (currentValue && isSensitive && config.mask_sensitive) {
481
+ currentValue = '••••••••';
482
+ }
483
+ // Determine if field has a value (from attribute)
484
+ // Note: Using || here intentionally because we want falsy values (empty string) to fall through
485
+ /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
486
+ const hasValue = Boolean(currentValue ||
487
+ node.state?.checked ||
488
+ (node.kind === 'checkbox' && node.state?.checked) ||
489
+ (node.kind === 'radio' && node.state?.checked));
490
+ /* eslint-enable @typescript-eslint/prefer-nullish-coalescing */
491
+ // Filled is initially same as hasValue (may be updated after runtime read)
492
+ const filled = hasValue;
493
+ // Determine validity
494
+ const valid = !(node.state?.invalid ?? false);
495
+ return {
496
+ current_value: currentValue,
497
+ value_source: currentValue !== undefined ? 'attribute' : undefined,
498
+ has_value: hasValue,
499
+ filled,
500
+ valid,
501
+ enabled: node.state?.enabled ?? true,
502
+ touched: false, // We can't know this without observing interactions
503
+ focused: node.state?.focused ?? false,
504
+ visible: node.state?.visible ?? true,
505
+ };
506
+ }
507
+ /**
508
+ * Link radio buttons into groups.
509
+ */
510
+ function linkRadioGroups(fields, snapshot) {
511
+ const radioFields = fields.filter((f) => f.kind === 'radio');
512
+ // Group by heading context + region
513
+ const groups = new Map();
514
+ for (const field of radioFields) {
515
+ const node = snapshot.nodes.find((n) => n.node_id === field.eid);
516
+ if (!node)
517
+ continue;
518
+ const key = `${node.where.region}:${node.where.heading_context ?? ''}:${node.where.group_id ?? ''}`;
519
+ const group = groups.get(key) ?? [];
520
+ group.push(field);
521
+ groups.set(key, group);
522
+ }
523
+ // Link fields within each group
524
+ let groupIndex = 0;
525
+ for (const group of groups.values()) {
526
+ if (group.length > 1) {
527
+ const groupId = `radio-group-${groupIndex++}`;
528
+ for (const field of group) {
529
+ field.group_id = groupId;
530
+ field.dependents = group.filter((f) => f.eid !== field.eid).map((f) => f.eid);
531
+ }
532
+ }
533
+ }
534
+ }
535
+ /**
536
+ * Extract a single field by EID.
537
+ */
538
+ export function extractFieldByEid(snapshot, eid, config) {
539
+ const node = snapshot.nodes.find((n) => n.node_id === eid);
540
+ if (!node)
541
+ return null;
542
+ return extractField(node, 0, snapshot, config);
543
+ }
544
+ //# sourceMappingURL=field-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-extractor.js","sourceRoot":"","sources":["../../../src/form/field-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Form Detector
3
+ *
4
+ * Detects logical form boundaries in a BaseSnapshot, regardless of
5
+ * HTML <form> tag presence. Uses signal scoring to identify form
6
+ * regions with confidence scores.
7
+ *
8
+ * Detection approaches:
9
+ * 1. Semantic: <form> tags, role="form", role="search", <fieldset>
10
+ * 2. Structural: Input clusters, label-input pairs, submit buttons
11
+ * 3. Naming: Form keywords in labels, field name patterns
12
+ *
13
+ * @module form/form-detector
14
+ */
15
+ import type { BaseSnapshot } from '../snapshot/snapshot.types.js';
16
+ import type { FormRegion, FormDetectionConfig } from './types.js';
17
+ /**
18
+ * Form Detector class
19
+ */
20
+ export declare class FormDetector {
21
+ private readonly config;
22
+ constructor(config?: Partial<FormDetectionConfig>);
23
+ /**
24
+ * Detect all form regions in a snapshot.
25
+ *
26
+ * @param snapshot - BaseSnapshot to analyze
27
+ * @returns Array of detected FormRegions
28
+ */
29
+ detect(snapshot: BaseSnapshot): FormRegion[];
30
+ /**
31
+ * Detect explicit form elements (form tags, role=form, etc.)
32
+ */
33
+ private detectExplicitForms;
34
+ /**
35
+ * Detect implicit forms (input clusters without form tag)
36
+ */
37
+ private detectImplicitForms;
38
+ /**
39
+ * Cluster input nodes by proximity and structural context.
40
+ */
41
+ private clusterInputs;
42
+ /**
43
+ * Check if a node is likely within a form's scope.
44
+ */
45
+ private isNodeWithinForm;
46
+ /**
47
+ * Find a submit button associated with a form.
48
+ */
49
+ private findSubmitButton;
50
+ /**
51
+ * Find a submit button near a cluster of inputs.
52
+ */
53
+ private findSubmitButtonNearCluster;
54
+ /**
55
+ * Check if a button looks like a submit button.
56
+ */
57
+ private isSubmitButton;
58
+ /**
59
+ * Compute confidence score from signals.
60
+ */
61
+ private computeConfidence;
62
+ /**
63
+ * Infer the intent of a form.
64
+ */
65
+ private inferIntent;
66
+ /**
67
+ * Check if text contains any of the given keywords.
68
+ */
69
+ private hasIntentKeywords;
70
+ /**
71
+ * Compute bounding box for a cluster of nodes.
72
+ */
73
+ private computeClusterBbox;
74
+ /**
75
+ * Build a FormRegion from a candidate.
76
+ */
77
+ private buildFormRegion;
78
+ /**
79
+ * Generate a unique form ID.
80
+ */
81
+ private generateFormId;
82
+ /**
83
+ * Extract form action buttons.
84
+ */
85
+ private extractFormActions;
86
+ /**
87
+ * Check if a button is near a bounding box.
88
+ */
89
+ private isButtonNearBbox;
90
+ /**
91
+ * Check if a button is near a set of fields.
92
+ */
93
+ private isButtonNearFields;
94
+ /**
95
+ * Infer form pattern (single page, multi-step, etc.)
96
+ */
97
+ private inferPattern;
98
+ }
99
+ /**
100
+ * Convenience function for detecting forms in a snapshot.
101
+ */
102
+ export declare function detectForms(snapshot: BaseSnapshot, config?: Partial<FormDetectionConfig>): FormRegion[];
103
+ //# sourceMappingURL=form-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-detector.d.ts","sourceRoot":"","sources":["../../../src/form/form-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAKV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AA6IpB;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAIjD;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,EAAE;IA8B5C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyF3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkF3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAyDrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAmCnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsDnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuCvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8C1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,YAAY;CAKrB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EACtB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,UAAU,EAAE,CAGd"}