agent-web-interface 4.4.0 → 4.5.1

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 (334) hide show
  1. package/README.md +35 -34
  2. package/dist/src/browser/browser-session-config.d.ts +33 -0
  3. package/dist/src/browser/browser-session-config.d.ts.map +1 -0
  4. package/dist/src/browser/browser-session-config.js +25 -0
  5. package/dist/src/browser/browser-session-config.js.map +1 -0
  6. package/dist/src/browser/ensure-browser.d.ts +12 -27
  7. package/dist/src/browser/ensure-browser.d.ts.map +1 -1
  8. package/dist/src/browser/ensure-browser.js +131 -39
  9. package/dist/src/browser/ensure-browser.js.map +1 -1
  10. package/dist/src/browser/index.d.ts +2 -1
  11. package/dist/src/browser/index.d.ts.map +1 -1
  12. package/dist/src/browser/index.js +1 -0
  13. package/dist/src/browser/index.js.map +1 -1
  14. package/dist/src/browser/page-network-recorder.d.ts +95 -0
  15. package/dist/src/browser/page-network-recorder.d.ts.map +1 -0
  16. package/dist/src/browser/page-network-recorder.js +306 -0
  17. package/dist/src/browser/page-network-recorder.js.map +1 -0
  18. package/dist/src/browser/session-manager.d.ts +20 -0
  19. package/dist/src/browser/session-manager.d.ts.map +1 -1
  20. package/dist/src/browser/session-manager.js +169 -20
  21. package/dist/src/browser/session-manager.js.map +1 -1
  22. package/dist/src/browser/session-manager.types.d.ts +14 -2
  23. package/dist/src/browser/session-manager.types.d.ts.map +1 -1
  24. package/dist/src/browser/session-manager.types.js +5 -1
  25. package/dist/src/browser/session-manager.types.js.map +1 -1
  26. package/dist/src/cli/args.d.ts +12 -18
  27. package/dist/src/cli/args.d.ts.map +1 -1
  28. package/dist/src/cli/args.js +35 -40
  29. package/dist/src/cli/args.js.map +1 -1
  30. package/dist/src/form/constraint-extraction.d.ts +5 -0
  31. package/dist/src/form/constraint-extraction.d.ts.map +1 -1
  32. package/dist/src/form/constraint-extraction.js +13 -6
  33. package/dist/src/form/constraint-extraction.js.map +1 -1
  34. package/dist/src/form/field-extractor.d.ts.map +1 -1
  35. package/dist/src/form/field-extractor.js +14 -7
  36. package/dist/src/form/field-extractor.js.map +1 -1
  37. package/dist/src/form/form-state.d.ts.map +1 -1
  38. package/dist/src/form/form-state.js +16 -4
  39. package/dist/src/form/form-state.js.map +1 -1
  40. package/dist/src/gateway/http-gateway.d.ts +56 -0
  41. package/dist/src/gateway/http-gateway.d.ts.map +1 -0
  42. package/dist/src/gateway/http-gateway.js +229 -0
  43. package/dist/src/gateway/http-gateway.js.map +1 -0
  44. package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
  45. package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
  46. package/dist/src/gateway/json-rpc-errors.js +11 -0
  47. package/dist/src/gateway/json-rpc-errors.js.map +1 -0
  48. package/dist/src/gateway/session-router.d.ts +80 -0
  49. package/dist/src/gateway/session-router.d.ts.map +1 -0
  50. package/dist/src/gateway/session-router.js +177 -0
  51. package/dist/src/gateway/session-router.js.map +1 -0
  52. package/dist/src/http-entry.d.ts +20 -0
  53. package/dist/src/http-entry.d.ts.map +1 -0
  54. package/dist/src/http-entry.js +112 -0
  55. package/dist/src/http-entry.js.map +1 -0
  56. package/dist/src/index.d.ts +1 -10
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +25 -232
  59. package/dist/src/index.js.map +1 -1
  60. package/dist/src/lib/text-utils.d.ts +0 -24
  61. package/dist/src/lib/text-utils.d.ts.map +1 -1
  62. package/dist/src/lib/text-utils.js +2 -38
  63. package/dist/src/lib/text-utils.js.map +1 -1
  64. package/dist/src/observation/eid-linker.d.ts.map +1 -1
  65. package/dist/src/observation/eid-linker.js +1 -21
  66. package/dist/src/observation/eid-linker.js.map +1 -1
  67. package/dist/src/server/index.d.ts +0 -1
  68. package/dist/src/server/index.d.ts.map +1 -1
  69. package/dist/src/server/index.js +0 -1
  70. package/dist/src/server/index.js.map +1 -1
  71. package/dist/src/server/mcp-server.d.ts +6 -2
  72. package/dist/src/server/mcp-server.d.ts.map +1 -1
  73. package/dist/src/server/mcp-server.js +3 -91
  74. package/dist/src/server/mcp-server.js.map +1 -1
  75. package/dist/src/server/server-config.d.ts +4 -20
  76. package/dist/src/server/server-config.d.ts.map +1 -1
  77. package/dist/src/server/server-config.js +6 -50
  78. package/dist/src/server/server-config.js.map +1 -1
  79. package/dist/src/server/tool-registrar.types.d.ts +25 -0
  80. package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
  81. package/dist/src/server/tool-registrar.types.js +10 -0
  82. package/dist/src/server/tool-registrar.types.js.map +1 -0
  83. package/dist/src/server/tool-result-handler.d.ts +61 -0
  84. package/dist/src/server/tool-result-handler.d.ts.map +1 -0
  85. package/dist/src/server/tool-result-handler.js +155 -0
  86. package/dist/src/server/tool-result-handler.js.map +1 -0
  87. package/dist/src/session/session-controller.d.ts +124 -0
  88. package/dist/src/session/session-controller.d.ts.map +1 -0
  89. package/dist/src/session/session-controller.js +276 -0
  90. package/dist/src/session/session-controller.js.map +1 -0
  91. package/dist/src/shared/services/index.d.ts +0 -2
  92. package/dist/src/shared/services/index.d.ts.map +1 -1
  93. package/dist/src/shared/services/index.js +0 -2
  94. package/dist/src/shared/services/index.js.map +1 -1
  95. package/dist/src/shared/version.d.ts +10 -0
  96. package/dist/src/shared/version.d.ts.map +1 -0
  97. package/dist/src/shared/version.js +32 -0
  98. package/dist/src/shared/version.js.map +1 -0
  99. package/dist/src/snapshot/element-resolver.d.ts +3 -2
  100. package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
  101. package/dist/src/snapshot/element-resolver.js +83 -8
  102. package/dist/src/snapshot/element-resolver.js.map +1 -1
  103. package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
  104. package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
  105. package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
  106. package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
  107. package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
  108. package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
  109. package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
  110. package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
  111. package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
  112. package/dist/src/snapshot/extractors/state-extractor.js +22 -2
  113. package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
  114. package/dist/src/snapshot/extractors/types.d.ts +6 -0
  115. package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
  116. package/dist/src/snapshot/extractors/types.js.map +1 -1
  117. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
  118. package/dist/src/snapshot/snapshot-compiler.js +15 -2
  119. package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
  120. package/dist/src/snapshot/snapshot.types.d.ts +10 -1
  121. package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
  122. package/dist/src/snapshot/snapshot.types.js.map +1 -1
  123. package/dist/src/state/actionables-filter.d.ts.map +1 -1
  124. package/dist/src/state/actionables-filter.js +7 -3
  125. package/dist/src/state/actionables-filter.js.map +1 -1
  126. package/dist/src/state/atoms-extractor.d.ts.map +1 -1
  127. package/dist/src/state/atoms-extractor.js +3 -23
  128. package/dist/src/state/atoms-extractor.js.map +1 -1
  129. package/dist/src/state/diff-engine.d.ts.map +1 -1
  130. package/dist/src/state/diff-engine.js +6 -33
  131. package/dist/src/state/diff-engine.js.map +1 -1
  132. package/dist/src/state/element-identity.d.ts +3 -6
  133. package/dist/src/state/element-identity.d.ts.map +1 -1
  134. package/dist/src/state/element-identity.js +10 -7
  135. package/dist/src/state/element-identity.js.map +1 -1
  136. package/dist/src/state/element-ref.types.d.ts +5 -27
  137. package/dist/src/state/element-ref.types.d.ts.map +1 -1
  138. package/dist/src/state/state-manager.d.ts.map +1 -1
  139. package/dist/src/state/state-manager.js +3 -1
  140. package/dist/src/state/state-manager.js.map +1 -1
  141. package/dist/src/state/state-renderer.d.ts.map +1 -1
  142. package/dist/src/state/state-renderer.js +3 -1
  143. package/dist/src/state/state-renderer.js.map +1 -1
  144. package/dist/src/state/types.d.ts +2 -1
  145. package/dist/src/state/types.d.ts.map +1 -1
  146. package/dist/src/state/url-sanitization.d.ts +1 -1
  147. package/dist/src/state/url-sanitization.d.ts.map +1 -1
  148. package/dist/src/state/url-sanitization.js +29 -13
  149. package/dist/src/state/url-sanitization.js.map +1 -1
  150. package/dist/src/tools/action-context.d.ts +6 -11
  151. package/dist/src/tools/action-context.d.ts.map +1 -1
  152. package/dist/src/tools/action-context.js +10 -19
  153. package/dist/src/tools/action-context.js.map +1 -1
  154. package/dist/src/tools/action-stabilization.d.ts.map +1 -1
  155. package/dist/src/tools/action-stabilization.js +6 -0
  156. package/dist/src/tools/action-stabilization.js.map +1 -1
  157. package/dist/src/tools/browser-tools.d.ts +4 -2
  158. package/dist/src/tools/browser-tools.d.ts.map +1 -1
  159. package/dist/src/tools/browser-tools.js +7 -3
  160. package/dist/src/tools/browser-tools.js.map +1 -1
  161. package/dist/src/tools/canvas-tools.d.ts +2 -1
  162. package/dist/src/tools/canvas-tools.d.ts.map +1 -1
  163. package/dist/src/tools/canvas-tools.js +5 -7
  164. package/dist/src/tools/canvas-tools.js.map +1 -1
  165. package/dist/src/tools/errors.d.ts +2 -34
  166. package/dist/src/tools/errors.d.ts.map +1 -1
  167. package/dist/src/tools/errors.js +1 -44
  168. package/dist/src/tools/errors.js.map +1 -1
  169. package/dist/src/tools/execute-action.d.ts +4 -3
  170. package/dist/src/tools/execute-action.d.ts.map +1 -1
  171. package/dist/src/tools/execute-action.js +32 -23
  172. package/dist/src/tools/execute-action.js.map +1 -1
  173. package/dist/src/tools/form-tools.d.ts +3 -8
  174. package/dist/src/tools/form-tools.d.ts.map +1 -1
  175. package/dist/src/tools/form-tools.js +38 -18
  176. package/dist/src/tools/form-tools.js.map +1 -1
  177. package/dist/src/tools/index.d.ts +8 -6
  178. package/dist/src/tools/index.d.ts.map +1 -1
  179. package/dist/src/tools/index.js +10 -10
  180. package/dist/src/tools/index.js.map +1 -1
  181. package/dist/src/tools/interaction-tools.d.ts +6 -5
  182. package/dist/src/tools/interaction-tools.d.ts.map +1 -1
  183. package/dist/src/tools/interaction-tools.js +29 -32
  184. package/dist/src/tools/interaction-tools.js.map +1 -1
  185. package/dist/src/tools/navigation-tools.d.ts +7 -13
  186. package/dist/src/tools/navigation-tools.d.ts.map +1 -1
  187. package/dist/src/tools/navigation-tools.js +57 -59
  188. package/dist/src/tools/navigation-tools.js.map +1 -1
  189. package/dist/src/tools/network-tools.d.ts +10 -0
  190. package/dist/src/tools/network-tools.d.ts.map +1 -0
  191. package/dist/src/tools/network-tools.js +117 -0
  192. package/dist/src/tools/network-tools.js.map +1 -0
  193. package/dist/src/tools/observation-tools.d.ts +6 -5
  194. package/dist/src/tools/observation-tools.d.ts.map +1 -1
  195. package/dist/src/tools/observation-tools.js +30 -34
  196. package/dist/src/tools/observation-tools.js.map +1 -1
  197. package/dist/src/tools/readability-tools.d.ts +16 -0
  198. package/dist/src/tools/readability-tools.d.ts.map +1 -0
  199. package/dist/src/tools/readability-tools.js +45 -0
  200. package/dist/src/tools/readability-tools.js.map +1 -0
  201. package/dist/src/tools/response-builder.d.ts +20 -32
  202. package/dist/src/tools/response-builder.d.ts.map +1 -1
  203. package/dist/src/tools/response-builder.js +31 -47
  204. package/dist/src/tools/response-builder.js.map +1 -1
  205. package/dist/src/tools/stale-element-retry.d.ts.map +1 -1
  206. package/dist/src/tools/stale-element-retry.js +37 -2
  207. package/dist/src/tools/stale-element-retry.js.map +1 -1
  208. package/dist/src/tools/tool-context.d.ts +4 -36
  209. package/dist/src/tools/tool-context.d.ts.map +1 -1
  210. package/dist/src/tools/tool-context.js +6 -75
  211. package/dist/src/tools/tool-context.js.map +1 -1
  212. package/dist/src/tools/tool-context.types.d.ts +147 -0
  213. package/dist/src/tools/tool-context.types.d.ts.map +1 -0
  214. package/dist/src/tools/tool-context.types.js +11 -0
  215. package/dist/src/tools/tool-context.types.js.map +1 -0
  216. package/dist/src/tools/tool-registration.d.ts +25 -0
  217. package/dist/src/tools/tool-registration.d.ts.map +1 -0
  218. package/dist/src/tools/tool-registration.js +195 -0
  219. package/dist/src/tools/tool-registration.js.map +1 -0
  220. package/dist/src/tools/tool-schemas.d.ts +178 -1947
  221. package/dist/src/tools/tool-schemas.d.ts.map +1 -1
  222. package/dist/src/tools/tool-schemas.js +130 -302
  223. package/dist/src/tools/tool-schemas.js.map +1 -1
  224. package/dist/src/tools/viewport-tools.d.ts +4 -3
  225. package/dist/src/tools/viewport-tools.d.ts.map +1 -1
  226. package/dist/src/tools/viewport-tools.js +17 -21
  227. package/dist/src/tools/viewport-tools.js.map +1 -1
  228. package/dist/src/worker/chrome-worker-process.d.ts +4 -0
  229. package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
  230. package/dist/src/worker/chrome-worker-process.js +1 -1
  231. package/dist/src/worker/chrome-worker-process.js.map +1 -1
  232. package/dist/vitest.config.js +1 -1
  233. package/dist/vitest.config.js.map +1 -1
  234. package/dist/vitest.integration.config.d.ts +3 -0
  235. package/dist/vitest.integration.config.d.ts.map +1 -0
  236. package/dist/vitest.integration.config.js +11 -0
  237. package/dist/vitest.integration.config.js.map +1 -0
  238. package/package.json +20 -5
  239. package/dist/src/factpack/action-selector.d.ts +0 -36
  240. package/dist/src/factpack/action-selector.d.ts.map +0 -1
  241. package/dist/src/factpack/action-selector.js +0 -367
  242. package/dist/src/factpack/action-selector.js.map +0 -1
  243. package/dist/src/factpack/dialog-detector.d.ts +0 -19
  244. package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
  245. package/dist/src/factpack/dialog-detector.js +0 -354
  246. package/dist/src/factpack/dialog-detector.js.map +0 -1
  247. package/dist/src/factpack/form-detector.d.ts +0 -28
  248. package/dist/src/factpack/form-detector.d.ts.map +0 -1
  249. package/dist/src/factpack/form-detector.js +0 -555
  250. package/dist/src/factpack/form-detector.js.map +0 -1
  251. package/dist/src/factpack/index.d.ts +0 -32
  252. package/dist/src/factpack/index.d.ts.map +0 -1
  253. package/dist/src/factpack/index.js +0 -73
  254. package/dist/src/factpack/index.js.map +0 -1
  255. package/dist/src/factpack/page-classifier.d.ts +0 -22
  256. package/dist/src/factpack/page-classifier.d.ts.map +0 -1
  257. package/dist/src/factpack/page-classifier.js +0 -526
  258. package/dist/src/factpack/page-classifier.js.map +0 -1
  259. package/dist/src/factpack/types.d.ts +0 -307
  260. package/dist/src/factpack/types.d.ts.map +0 -1
  261. package/dist/src/factpack/types.js +0 -12
  262. package/dist/src/factpack/types.js.map +0 -1
  263. package/dist/src/lib/constants.d.ts +0 -27
  264. package/dist/src/lib/constants.d.ts.map +0 -1
  265. package/dist/src/lib/constants.js +0 -63
  266. package/dist/src/lib/constants.js.map +0 -1
  267. package/dist/src/lib/index.d.ts +0 -12
  268. package/dist/src/lib/index.d.ts.map +0 -1
  269. package/dist/src/lib/index.js +0 -17
  270. package/dist/src/lib/index.js.map +0 -1
  271. package/dist/src/lib/regions.d.ts +0 -29
  272. package/dist/src/lib/regions.d.ts.map +0 -1
  273. package/dist/src/lib/regions.js +0 -93
  274. package/dist/src/lib/regions.js.map +0 -1
  275. package/dist/src/lib/scoring.d.ts +0 -47
  276. package/dist/src/lib/scoring.d.ts.map +0 -1
  277. package/dist/src/lib/scoring.js +0 -79
  278. package/dist/src/lib/scoring.js.map +0 -1
  279. package/dist/src/lib/selectors.d.ts +0 -42
  280. package/dist/src/lib/selectors.d.ts.map +0 -1
  281. package/dist/src/lib/selectors.js +0 -138
  282. package/dist/src/lib/selectors.js.map +0 -1
  283. package/dist/src/renderer/budget-manager.d.ts +0 -46
  284. package/dist/src/renderer/budget-manager.d.ts.map +0 -1
  285. package/dist/src/renderer/budget-manager.js +0 -133
  286. package/dist/src/renderer/budget-manager.js.map +0 -1
  287. package/dist/src/renderer/constants.d.ts +0 -38
  288. package/dist/src/renderer/constants.d.ts.map +0 -1
  289. package/dist/src/renderer/constants.js +0 -29
  290. package/dist/src/renderer/constants.js.map +0 -1
  291. package/dist/src/renderer/index.d.ts +0 -12
  292. package/dist/src/renderer/index.d.ts.map +0 -1
  293. package/dist/src/renderer/index.js +0 -16
  294. package/dist/src/renderer/index.js.map +0 -1
  295. package/dist/src/renderer/section-renderers.d.ts +0 -42
  296. package/dist/src/renderer/section-renderers.d.ts.map +0 -1
  297. package/dist/src/renderer/section-renderers.js +0 -252
  298. package/dist/src/renderer/section-renderers.js.map +0 -1
  299. package/dist/src/renderer/token-counter.d.ts +0 -45
  300. package/dist/src/renderer/token-counter.d.ts.map +0 -1
  301. package/dist/src/renderer/token-counter.js +0 -65
  302. package/dist/src/renderer/token-counter.js.map +0 -1
  303. package/dist/src/renderer/types.d.ts +0 -71
  304. package/dist/src/renderer/types.d.ts.map +0 -1
  305. package/dist/src/renderer/types.js +0 -7
  306. package/dist/src/renderer/types.js.map +0 -1
  307. package/dist/src/renderer/xml-renderer.d.ts +0 -42
  308. package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
  309. package/dist/src/renderer/xml-renderer.js +0 -103
  310. package/dist/src/renderer/xml-renderer.js.map +0 -1
  311. package/dist/src/server/session-store.d.ts +0 -163
  312. package/dist/src/server/session-store.d.ts.map +0 -1
  313. package/dist/src/server/session-store.js +0 -248
  314. package/dist/src/server/session-store.js.map +0 -1
  315. package/dist/src/session/session-worker-binding.d.ts +0 -57
  316. package/dist/src/session/session-worker-binding.d.ts.map +0 -1
  317. package/dist/src/session/session-worker-binding.js +0 -109
  318. package/dist/src/session/session-worker-binding.js.map +0 -1
  319. package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
  320. package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
  321. package/dist/src/shared/services/dom-transformer.service.js +0 -190
  322. package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
  323. package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
  324. package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
  325. package/dist/src/shared/services/selector-builder.service.js +0 -240
  326. package/dist/src/shared/services/selector-builder.service.js.map +0 -1
  327. package/dist/src/state/constants.d.ts +0 -125
  328. package/dist/src/state/constants.d.ts.map +0 -1
  329. package/dist/src/state/constants.js +0 -131
  330. package/dist/src/state/constants.js.map +0 -1
  331. package/dist/src/tools/state-manager-registry.d.ts +0 -26
  332. package/dist/src/tools/state-manager-registry.d.ts.map +0 -1
  333. package/dist/src/tools/state-manager-registry.js +0 -39
  334. package/dist/src/tools/state-manager-registry.js.map +0 -1
@@ -1,354 +0,0 @@
1
- /**
2
- * Dialog Detector
3
- *
4
- * Detects dialogs/modals in a BaseSnapshot.
5
- *
6
- * Design: Generic First, Specific Second
7
- * 1. Detect ALL visible dialogs (always works)
8
- * 2. Optionally classify type (may return 'unknown')
9
- */
10
- import { QueryEngine } from '../query/query-engine.js';
11
- import { normalizeText } from '../lib/text-utils.js';
12
- // ============================================================================
13
- // Classification Patterns
14
- // ============================================================================
15
- /** Patterns for cookie consent dialogs */
16
- const COOKIE_PATTERNS = [
17
- /\bcookie/i,
18
- /\bconsent/i,
19
- /\baccept all/i,
20
- /\bprivacy policy/i,
21
- /\bprivacy settings/i,
22
- /\bmanage cookies/i,
23
- /\bgdpr/i,
24
- /\bccpa/i,
25
- ];
26
- /** Patterns for newsletter dialogs */
27
- const NEWSLETTER_PATTERNS = [
28
- /\bsubscribe/i,
29
- /\bnewsletter/i,
30
- /\bemail updates/i,
31
- /\bsign up for/i,
32
- /\bstay (in )?touch/i,
33
- /\bjoin our/i,
34
- ];
35
- /** Patterns for age gate dialogs */
36
- const AGE_GATE_PATTERNS = [
37
- /\bage verification/i,
38
- /\b21\+/i,
39
- /\b18\+/i,
40
- /\bverify (your )?age/i,
41
- /\bare you (over|at least)/i,
42
- /\bdate of birth/i,
43
- ];
44
- /** Patterns for login prompt dialogs */
45
- const LOGIN_PATTERNS = [
46
- /\bsign in/i,
47
- /\blog in/i,
48
- /\bpassword/i,
49
- /\bauthenticate/i,
50
- /\benter your credentials/i,
51
- ];
52
- /** Patterns for primary action buttons */
53
- const PRIMARY_ACTION_PATTERNS = [
54
- /\baccept/i,
55
- /\bagree/i,
56
- /\bconfirm/i,
57
- /\bsubmit/i,
58
- /\bcontinue/i,
59
- /\bok\b/i,
60
- /\byes/i,
61
- /\bsave/i,
62
- /\bdone/i,
63
- ];
64
- /** Patterns for secondary action buttons */
65
- const SECONDARY_ACTION_PATTERNS = [
66
- /\bdecline/i,
67
- /\breject/i,
68
- /\bno thanks/i,
69
- /\bno\b/i,
70
- /\bcancel/i,
71
- /\bskip/i,
72
- /\blater/i,
73
- /\bnot now/i,
74
- ];
75
- /** Patterns for dismiss buttons */
76
- const DISMISS_PATTERNS = [/\bclose/i, /\bdismiss/i, /\b[x×]\b/i, /^x$/i];
77
- // ============================================================================
78
- // Helper Functions
79
- // ============================================================================
80
- /**
81
- * Check if text matches any pattern in the list.
82
- */
83
- function matchesPatterns(text, patterns) {
84
- const normalized = normalizeText(text);
85
- return patterns.some((pattern) => pattern.test(normalized));
86
- }
87
- /**
88
- * Count pattern matches in text.
89
- */
90
- function countPatternMatches(text, patterns) {
91
- const normalized = normalizeText(text);
92
- return patterns.filter((pattern) => pattern.test(normalized)).length;
93
- }
94
- /**
95
- * Determine detection method from node attributes.
96
- */
97
- function getDetectionMethod(node) {
98
- const role = node.attributes?.role?.toLowerCase();
99
- if (role === 'alertdialog') {
100
- return 'role-alertdialog';
101
- }
102
- if (role === 'dialog') {
103
- return 'role-dialog';
104
- }
105
- // Check if it's an HTML dialog element (kind will be 'dialog')
106
- if (node.kind === 'dialog') {
107
- // Could be role or HTML - default to role-dialog if role attr present
108
- if (role) {
109
- return 'role-dialog';
110
- }
111
- return 'html-dialog';
112
- }
113
- return 'heuristic';
114
- }
115
- /**
116
- * Determine action role from label.
117
- */
118
- function classifyActionRole(label) {
119
- if (matchesPatterns(label, DISMISS_PATTERNS)) {
120
- return 'dismiss';
121
- }
122
- if (matchesPatterns(label, PRIMARY_ACTION_PATTERNS)) {
123
- return 'primary';
124
- }
125
- if (matchesPatterns(label, SECONDARY_ACTION_PATTERNS)) {
126
- return 'secondary';
127
- }
128
- return 'unknown';
129
- }
130
- /**
131
- * Extract dialog title from nearby heading context or first heading-like element.
132
- */
133
- function extractDialogTitle(dialogNode, engine) {
134
- // First try heading context
135
- if (dialogNode.where.heading_context) {
136
- return dialogNode.where.heading_context;
137
- }
138
- // Look for headings in the dialog's group
139
- if (dialogNode.where.group_id) {
140
- const headings = engine.find({
141
- kind: 'heading',
142
- group_id: dialogNode.where.group_id,
143
- limit: 1,
144
- });
145
- if (headings.matches.length > 0) {
146
- return headings.matches[0].node.label;
147
- }
148
- }
149
- return undefined;
150
- }
151
- /**
152
- * Find interactive actions within a dialog.
153
- */
154
- function extractDialogActions(dialogNode, engine) {
155
- const actions = [];
156
- // Find buttons and links in the same group or region as the dialog
157
- const interactiveKinds = ['button', 'link'];
158
- for (const kind of interactiveKinds) {
159
- // Try by group_id first
160
- if (dialogNode.where.group_id) {
161
- const matches = engine.find({
162
- kind,
163
- group_id: dialogNode.where.group_id,
164
- state: { visible: true },
165
- limit: 10,
166
- });
167
- for (const match of matches.matches) {
168
- const node = match.node;
169
- if (node.node_id === dialogNode.node_id)
170
- continue; // Skip the dialog itself
171
- actions.push({
172
- node_id: node.node_id,
173
- backend_node_id: node.backend_node_id,
174
- label: node.label,
175
- role: classifyActionRole(node.label),
176
- kind: node.kind,
177
- });
178
- }
179
- }
180
- // If no group_id or few results, try by region
181
- if (actions.length < 2 && dialogNode.where.region === 'dialog') {
182
- const regionMatches = engine.find({
183
- kind,
184
- region: 'dialog',
185
- state: { visible: true },
186
- limit: 10,
187
- });
188
- for (const match of regionMatches.matches) {
189
- const node = match.node;
190
- // Avoid duplicates
191
- if (actions.some((a) => a.node_id === node.node_id))
192
- continue;
193
- if (node.node_id === dialogNode.node_id)
194
- continue;
195
- actions.push({
196
- node_id: node.node_id,
197
- backend_node_id: node.backend_node_id,
198
- label: node.label,
199
- role: classifyActionRole(node.label),
200
- kind: node.kind,
201
- });
202
- }
203
- }
204
- }
205
- // Sort: primary first, then secondary, then dismiss, then unknown
206
- const roleOrder = {
207
- primary: 0,
208
- secondary: 1,
209
- dismiss: 2,
210
- unknown: 3,
211
- };
212
- actions.sort((a, b) => roleOrder[a.role] - roleOrder[b.role]);
213
- return actions;
214
- }
215
- /**
216
- * Collect all text content from dialog for pattern matching.
217
- */
218
- function collectDialogText(dialogNode, actions) {
219
- const parts = [];
220
- if (dialogNode.label) {
221
- parts.push(dialogNode.label);
222
- }
223
- if (dialogNode.where.heading_context) {
224
- parts.push(dialogNode.where.heading_context);
225
- }
226
- for (const action of actions) {
227
- if (action.label) {
228
- parts.push(action.label);
229
- }
230
- }
231
- return parts.join(' ');
232
- }
233
- /**
234
- * Classify dialog type based on content patterns.
235
- * Returns 'unknown' with low confidence if no patterns match.
236
- */
237
- function classifyDialogType(dialogNode, dialogText, detectionMethod) {
238
- const signals = [];
239
- let type = 'unknown';
240
- let confidence = 0.3; // Default low confidence for unknown
241
- // Check for alertdialog role first
242
- if (detectionMethod === 'role-alertdialog') {
243
- type = 'alert';
244
- confidence = 0.9;
245
- signals.push('role-alertdialog');
246
- return { type, confidence, signals };
247
- }
248
- // Count pattern matches for each type
249
- const cookieMatches = countPatternMatches(dialogText, COOKIE_PATTERNS);
250
- const newsletterMatches = countPatternMatches(dialogText, NEWSLETTER_PATTERNS);
251
- const ageGateMatches = countPatternMatches(dialogText, AGE_GATE_PATTERNS);
252
- const loginMatches = countPatternMatches(dialogText, LOGIN_PATTERNS);
253
- // Find best match (require at least 2 pattern matches for classification)
254
- const matches = [
255
- { type: 'cookie-consent', count: cookieMatches, patterns: 'cookie-patterns' },
256
- { type: 'newsletter', count: newsletterMatches, patterns: 'newsletter-patterns' },
257
- { type: 'age-gate', count: ageGateMatches, patterns: 'age-gate-patterns' },
258
- { type: 'login-prompt', count: loginMatches, patterns: 'login-patterns' },
259
- ];
260
- matches.sort((a, b) => b.count - a.count);
261
- if (matches[0].count >= 2) {
262
- type = matches[0].type;
263
- // Confidence based on match count
264
- confidence = Math.min(0.95, 0.6 + matches[0].count * 0.1);
265
- signals.push(`${matches[0].patterns}:${matches[0].count}`);
266
- }
267
- else if (matches[0].count === 1) {
268
- // Single match - still set type but with low confidence
269
- type = matches[0].type;
270
- confidence = 0.5;
271
- signals.push(`${matches[0].patterns}:1:weak`);
272
- }
273
- else {
274
- // No patterns matched - could be generic modal or confirm
275
- type = 'modal';
276
- confidence = 0.4;
277
- signals.push('no-pattern-match');
278
- }
279
- return { type, confidence, signals };
280
- }
281
- // ============================================================================
282
- // Main Detection Function
283
- // ============================================================================
284
- /**
285
- * Detect dialogs in a BaseSnapshot.
286
- *
287
- * @param snapshot - The snapshot to analyze
288
- * @returns Detection result with all dialogs and metadata
289
- */
290
- export function detectDialogs(snapshot) {
291
- const startTime = performance.now();
292
- const engine = new QueryEngine(snapshot);
293
- // Step 1: Find ALL dialog nodes (generic detection)
294
- // Query by kind='dialog' and region='dialog'
295
- const dialogByKind = engine.find({
296
- kind: 'dialog',
297
- state: { visible: true },
298
- limit: 50,
299
- });
300
- const dialogByRegion = engine.find({
301
- region: 'dialog',
302
- state: { visible: true },
303
- limit: 50,
304
- });
305
- // Combine and deduplicate
306
- const seenIds = new Set();
307
- const allDialogNodes = [];
308
- for (const match of dialogByKind.matches) {
309
- if (!seenIds.has(match.node.node_id)) {
310
- seenIds.add(match.node.node_id);
311
- allDialogNodes.push(match.node);
312
- }
313
- }
314
- for (const match of dialogByRegion.matches) {
315
- if (!seenIds.has(match.node.node_id)) {
316
- seenIds.add(match.node.node_id);
317
- allDialogNodes.push(match.node);
318
- }
319
- }
320
- // Step 2: For each dialog, extract info and classify
321
- const dialogs = [];
322
- for (const dialogNode of allDialogNodes) {
323
- const detectionMethod = getDetectionMethod(dialogNode);
324
- const title = extractDialogTitle(dialogNode, engine);
325
- const actions = extractDialogActions(dialogNode, engine);
326
- const dialogText = collectDialogText(dialogNode, actions);
327
- const classification = classifyDialogType(dialogNode, dialogText, detectionMethod);
328
- // Determine if modal (alertdialog or has aria-modal)
329
- const isModal = detectionMethod === 'role-alertdialog' || dialogNode.attributes?.role === 'alertdialog';
330
- dialogs.push({
331
- node_id: dialogNode.node_id,
332
- backend_node_id: dialogNode.backend_node_id,
333
- bbox: dialogNode.layout.bbox,
334
- is_modal: isModal,
335
- title,
336
- actions,
337
- detection_method: detectionMethod,
338
- type: classification.type,
339
- type_confidence: classification.confidence,
340
- classification_signals: classification.signals,
341
- });
342
- }
343
- const detectionTimeMs = performance.now() - startTime;
344
- return {
345
- dialogs,
346
- has_blocking_dialog: dialogs.some((d) => d.is_modal),
347
- meta: {
348
- total_detected: dialogs.length,
349
- classified_count: dialogs.filter((d) => d.type !== 'unknown').length,
350
- detection_time_ms: detectionTimeMs,
351
- },
352
- };
353
- }
354
- //# sourceMappingURL=dialog-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-detector.js","sourceRoot":"","sources":["../../../src/factpack/dialog-detector.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Form Detector
3
- *
4
- * Detects forms and extracts field information from a BaseSnapshot.
5
- *
6
- * Design: Generic First, Specific Second
7
- * 1. Detect ALL forms with their fields (always works)
8
- * 2. Infer field semantics (may return 'unknown')
9
- * 3. Infer form purpose (may return 'generic')
10
- */
11
- import type { BaseSnapshot } from '../snapshot/snapshot.types.js';
12
- import type { FormDetectionResult } from './types.js';
13
- /**
14
- * Options for form detection.
15
- */
16
- export interface FormDetectionOptions {
17
- /** Include disabled fields (default: true) */
18
- include_disabled_fields?: boolean;
19
- }
20
- /**
21
- * Detect forms in a BaseSnapshot.
22
- *
23
- * @param snapshot - The snapshot to analyze
24
- * @param options - Detection options
25
- * @returns Detection result with all forms and metadata
26
- */
27
- export declare function detectForms(snapshot: BaseSnapshot, options?: FormDetectionOptions): FormDetectionResult;
28
- //# sourceMappingURL=form-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-detector.d.ts","sourceRoot":"","sources":["../../../src/factpack/form-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAG1F,OAAO,KAAK,EACV,mBAAmB,EAOpB,MAAM,YAAY,CAAC;AAigBpB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAqErB"}