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,129 @@
1
+ /**
2
+ * Element Identity
3
+ *
4
+ * Generate stable, semantic element IDs (eids) that survive DOM mutations.
5
+ * Uses semantic hashing instead of transient CDP backend_node_id.
6
+ */
7
+ import { createHash } from 'crypto';
8
+ // ============================================================================
9
+ // EID Generation
10
+ // ============================================================================
11
+ /**
12
+ * Compute stable semantic element ID for a node.
13
+ *
14
+ * Uses hash of semantic components:
15
+ * - Role (or kind)
16
+ * - Accessible name (normalized label)
17
+ * - Href (for links)
18
+ * - Landmark path (region + group_path)
19
+ * - Layer context (modal vs main - prevents collision across layers)
20
+ * - Position hint (heading context from group_path - scroll-stable)
21
+ * - Shadow path (disambiguates elements in different shadow roots)
22
+ *
23
+ * @param node - Node to compute EID for
24
+ * @param layer - Optional layer context for disambiguation
25
+ * @returns 12-character hex hash
26
+ */
27
+ export function computeEid(node, layer) {
28
+ // Shadow path ensures elements in different shadow roots get unique EIDs
29
+ // even if they have identical semantic properties
30
+ const shadowPath = node.find?.shadow_path?.join('/') ?? '';
31
+ const components = [
32
+ node.attributes?.role ?? node.kind,
33
+ normalizeAccessibleName(node.label),
34
+ node.attributes?.href ?? '',
35
+ computeLandmarkPath(node),
36
+ layer ?? computeLayerFromRegion(node),
37
+ computePositionHint(node),
38
+ shadowPath,
39
+ ];
40
+ return hashComponents(components);
41
+ }
42
+ /**
43
+ * Compute layer from node region.
44
+ * Used when explicit layer not provided.
45
+ *
46
+ * @param node - Node to check
47
+ * @returns Layer name
48
+ */
49
+ function computeLayerFromRegion(node) {
50
+ const region = node.where.region ?? 'unknown';
51
+ return region === 'dialog' ? 'modal' : 'main';
52
+ }
53
+ /**
54
+ * Normalize accessible name for stable hashing.
55
+ * - Trim whitespace
56
+ * - Lowercase
57
+ * - Collapse multiple spaces
58
+ * - Cap length at 100 chars
59
+ *
60
+ * @param label - Raw label text
61
+ * @returns Normalized label
62
+ */
63
+ export function normalizeAccessibleName(label) {
64
+ return label.trim().toLowerCase().replace(/\s+/g, ' ').substring(0, 100);
65
+ }
66
+ /**
67
+ * Compute landmark path for a node.
68
+ * Format: "region/group1/group2"
69
+ *
70
+ * @param node - Node to compute path for
71
+ * @returns Landmark path string
72
+ */
73
+ export function computeLandmarkPath(node) {
74
+ const region = node.where.region ?? 'unknown';
75
+ const path = node.where.group_path ?? [];
76
+ return `${region}/${path.join('/')}`;
77
+ }
78
+ /**
79
+ * Compute position hint for stable EID disambiguation.
80
+ *
81
+ * Uses only scroll-stable semantic context:
82
+ * - Nearest heading from group_path (semantic grouping)
83
+ *
84
+ * Note: Viewport-dependent data (screen_zone, bbox quadrant) was removed
85
+ * because it caused EID instability when scrolling. The collision resolution
86
+ * mechanism (resolveEidCollision) handles any increased collision rate.
87
+ *
88
+ * @param node - Node to compute hint for
89
+ * @returns Position hint string
90
+ */
91
+ export function computePositionHint(node) {
92
+ // Use last group from group_path as stable semantic context
93
+ const groupPath = node.where.group_path ?? [];
94
+ return groupPath.length > 0 ? groupPath[groupPath.length - 1] : '';
95
+ }
96
+ /**
97
+ * Hash string components to generate EID.
98
+ * Uses SHA-256 and returns first 12 hex chars.
99
+ *
100
+ * @param components - String components to hash
101
+ * @returns 12-character hex hash
102
+ */
103
+ export function hashComponents(components) {
104
+ const combined = components.join('::');
105
+ const hash = createHash('sha256').update(combined).digest('hex');
106
+ return hash.substring(0, 12);
107
+ }
108
+ // ============================================================================
109
+ // EID Collision Handling
110
+ // ============================================================================
111
+ /**
112
+ * Resolve EID collisions by appending suffix.
113
+ * If EID already exists in map, append "-2", "-3", etc.
114
+ *
115
+ * @param baseEid - Base EID before collision resolution
116
+ * @param existingEids - Set of already-used EIDs
117
+ * @returns Unique EID
118
+ */
119
+ export function resolveEidCollision(baseEid, existingEids) {
120
+ if (!existingEids.has(baseEid)) {
121
+ return baseEid;
122
+ }
123
+ let suffix = 2;
124
+ while (existingEids.has(`${baseEid}-${suffix}`)) {
125
+ suffix++;
126
+ }
127
+ return `${baseEid}-${suffix}`;
128
+ }
129
+ //# sourceMappingURL=element-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-identity.js","sourceRoot":"","sources":["../../../src/state/element-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Element Reference Types
3
+ *
4
+ * Core types for the ElementRef architecture that unifies element identification.
5
+ * ElementRef wires together stable semantic identity (eid) with actionable targeting data.
6
+ *
7
+ * Key principles:
8
+ * - `eid` is the stable semantic identity (survives DOM mutations)
9
+ * - `ref` contains targeting data for actual interactions
10
+ * - Actions resolve via eid → ref, never use eid directly as a click target
11
+ */
12
+ /**
13
+ * ElementRef - Unified element reference with stable identity and actionable locators.
14
+ */
15
+ export interface ElementRef {
16
+ /** Stable semantic identity - 12-char hash based on role+name+landmark+position */
17
+ eid: string;
18
+ /** Targeting reference - how to actually find/click this element */
19
+ ref: ElementTargetRef;
20
+ }
21
+ /**
22
+ * ElementTargetRef - Actual targeting data for an element.
23
+ * Contains multiple strategies for robustness.
24
+ */
25
+ export interface ElementTargetRef {
26
+ /** Snapshot that produced this ref - for staleness detection */
27
+ snapshot_id: string;
28
+ /** CDP backend node ID - primary targeting method */
29
+ backend_node_id: number;
30
+ /** CDP frame ID - for cross-frame targeting */
31
+ frame_id: string;
32
+ /** CDP loader ID - changes on navigation, for staleness detection */
33
+ loader_id: string;
34
+ /** Locator strategies for fallback/re-resolution */
35
+ locators: ElementLocators;
36
+ }
37
+ /**
38
+ * ElementLocators - Multiple strategies for finding an element.
39
+ */
40
+ export interface ElementLocators {
41
+ /** Preferred: AX tree locator (most stable) */
42
+ preferred: {
43
+ ax: string;
44
+ };
45
+ /** Fallback: CSS selector */
46
+ fallback?: {
47
+ css: string;
48
+ };
49
+ }
50
+ /**
51
+ * SnapshotHealth - Validation result for a snapshot.
52
+ * Used to detect and handle empty/failed snapshots.
53
+ */
54
+ export interface SnapshotHealth {
55
+ /** Whether snapshot is usable for actions */
56
+ valid: boolean;
57
+ /** Reason for invalidity or partial status */
58
+ reason?: 'empty' | 'error' | 'partial';
59
+ /** Human-readable message */
60
+ message?: string;
61
+ /** Metrics for debugging */
62
+ metrics?: SnapshotHealthMetrics;
63
+ }
64
+ /**
65
+ * Snapshot health metrics for debugging.
66
+ */
67
+ export interface SnapshotHealthMetrics {
68
+ node_count: number;
69
+ interactive_count: number;
70
+ capture_duration_ms?: number;
71
+ }
72
+ /**
73
+ * ClickOutcome - Result of a click action with navigation awareness.
74
+ * Differentiates between "element gone due to navigation" vs "element stale due to DOM mutation".
75
+ */
76
+ export type ClickOutcome = ClickOutcomeSuccess | ClickOutcomeStaleElement | ClickOutcomeElementNotFound | ClickOutcomeError;
77
+ /**
78
+ * Click succeeded, optionally with navigation.
79
+ */
80
+ export interface ClickOutcomeSuccess {
81
+ status: 'success';
82
+ /** Whether the click triggered a page navigation */
83
+ navigated: boolean;
84
+ }
85
+ /**
86
+ * Element was stale (removed from DOM).
87
+ */
88
+ export interface ClickOutcomeStaleElement {
89
+ status: 'stale_element';
90
+ /** Why the element became stale */
91
+ reason: 'dom_mutation' | 'navigation';
92
+ /** Whether retry was attempted */
93
+ retried: boolean;
94
+ }
95
+ /**
96
+ * Element not found by eid.
97
+ */
98
+ export interface ClickOutcomeElementNotFound {
99
+ status: 'element_not_found';
100
+ /** The eid that wasn't found */
101
+ eid: string;
102
+ /** Last known label for debugging */
103
+ last_known_label?: string;
104
+ }
105
+ /**
106
+ * Error during click.
107
+ */
108
+ export interface ClickOutcomeError {
109
+ status: 'error';
110
+ /** Error message */
111
+ message: string;
112
+ }
113
+ /**
114
+ * EidRegistry - Internal state for tracking eid → ElementRef mappings.
115
+ */
116
+ export interface EidRegistry {
117
+ /** Map eid -> current ElementRef (updated on each snapshot) */
118
+ byEid: Map<string, ElementRef>;
119
+ /** Map snapshot_id:backend_node_id -> eid (reverse lookup) */
120
+ backendToEid: Map<string, string>;
121
+ /** Last seen step for each eid (for staleness detection) */
122
+ lastSeenStep: Map<string, number>;
123
+ }
124
+ /**
125
+ * Result of updating the registry with a new snapshot.
126
+ */
127
+ export interface RegistryUpdateResult {
128
+ /** New eids added in this snapshot */
129
+ added: string[];
130
+ /** Eids no longer present (removed from DOM) */
131
+ removed: string[];
132
+ /** Eids that were updated with new targeting data */
133
+ updated: string[];
134
+ }
135
+ //# sourceMappingURL=element-ref.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-ref.types.d.ts","sourceRoot":"","sources":["../../../src/state/element-ref.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IAEZ,oEAAoE;IACpE,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IAEpB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IAExB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IAEjB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAElB,oDAAoD;IACpD,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,KAAK,EAAE,OAAO,CAAC;IAEf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,mBAAmB,GACnB,wBAAwB,GACxB,2BAA2B,GAC3B,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAC;IACxB,mCAAmC;IACnC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAC;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE/B,8DAA8D;IAC9D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,4DAA4D;IAC5D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Element Reference Types
3
+ *
4
+ * Core types for the ElementRef architecture that unifies element identification.
5
+ * ElementRef wires together stable semantic identity (eid) with actionable targeting data.
6
+ *
7
+ * Key principles:
8
+ * - `eid` is the stable semantic identity (survives DOM mutations)
9
+ * - `ref` contains targeting data for actual interactions
10
+ * - Actions resolve via eid → ref, never use eid directly as a click target
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=element-ref.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-ref.types.js","sourceRoot":"","sources":["../../../src/state/element-ref.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Element Registry
3
+ *
4
+ * Manages eid → ElementRef mappings across snapshots.
5
+ * Provides lookup by eid for action tools, enabling the transition from
6
+ * transient node_id to stable semantic eid for element targeting.
7
+ *
8
+ * Key responsibilities:
9
+ * - Build ElementRef from ReadableNode
10
+ * - Track eid across snapshot updates
11
+ * - Provide lookup by eid for action tools
12
+ * - Detect stale elements
13
+ */
14
+ import type { BaseSnapshot } from '../snapshot/snapshot.types.js';
15
+ import type { ElementRef, RegistryUpdateResult } from './element-ref.types.js';
16
+ /**
17
+ * ElementRegistry - Manages eid → ElementRef mappings across snapshots.
18
+ *
19
+ * Usage:
20
+ * 1. Call updateFromSnapshot() after each new snapshot
21
+ * 2. Use getByEid() in action tools to resolve eid to ElementRef
22
+ * 3. Use getEidByBackendNodeId() for reverse lookup (legacy node_id support)
23
+ */
24
+ export declare class ElementRegistry {
25
+ private registry;
26
+ private currentStep;
27
+ private currentSnapshotId;
28
+ /**
29
+ * Update registry with new snapshot.
30
+ * Builds ElementRef for each interactive node and tracks changes.
31
+ *
32
+ * @param snapshot - New snapshot to process
33
+ * @param activeLayer - Active layer for eid computation
34
+ * @returns List of added, removed, and updated eids
35
+ */
36
+ updateFromSnapshot(snapshot: BaseSnapshot, activeLayer: string): RegistryUpdateResult;
37
+ /**
38
+ * Build ElementRef from ReadableNode.
39
+ *
40
+ * @param node - Source node
41
+ * @param eid - Computed eid
42
+ * @param snapshotId - Snapshot ID
43
+ * @param activeLayer - Active layer for locator scoping
44
+ * @returns ElementRef
45
+ */
46
+ private buildElementRef;
47
+ /**
48
+ * Lookup element by eid.
49
+ *
50
+ * @param eid - Element ID to lookup
51
+ * @returns ElementRef or undefined if not found
52
+ */
53
+ getByEid(eid: string): ElementRef | undefined;
54
+ /**
55
+ * Lookup eid by backend_node_id in current snapshot.
56
+ * Used for backwards compatibility with node_id-based tools.
57
+ *
58
+ * @param backendNodeId - CDP backend node ID
59
+ * @returns eid or undefined
60
+ */
61
+ getEidByBackendNodeId(backendNodeId: number): string | undefined;
62
+ /**
63
+ * Lookup eid by backend_node_id in any snapshot.
64
+ *
65
+ * @param snapshotId - Snapshot ID
66
+ * @param backendNodeId - CDP backend node ID
67
+ * @returns eid or undefined
68
+ */
69
+ getEidBySnapshotAndBackendNodeId(snapshotId: string, backendNodeId: number): string | undefined;
70
+ /**
71
+ * Get all current eids.
72
+ *
73
+ * @returns Array of all tracked eids
74
+ */
75
+ getAllEids(): string[];
76
+ /**
77
+ * Check if an eid is stale (not seen in recent snapshots).
78
+ *
79
+ * @param eid - Element ID to check
80
+ * @param maxStaleSteps - Maximum steps since last seen (default: 2)
81
+ * @returns true if stale
82
+ */
83
+ isStale(eid: string, maxStaleSteps?: number): boolean;
84
+ /**
85
+ * Get current step counter.
86
+ */
87
+ getCurrentStep(): number;
88
+ /**
89
+ * Get current snapshot ID.
90
+ */
91
+ getCurrentSnapshotId(): string;
92
+ /**
93
+ * Clear registry (on session close or full navigation).
94
+ */
95
+ clear(): void;
96
+ /**
97
+ * Get number of tracked elements.
98
+ */
99
+ size(): number;
100
+ }
101
+ /**
102
+ * Get or create element registry for a page.
103
+ *
104
+ * @param pageId - Page ID
105
+ * @returns ElementRegistry instance
106
+ */
107
+ export declare function getElementRegistry(pageId: string): ElementRegistry;
108
+ /**
109
+ * Remove element registry for a page (call on page close).
110
+ *
111
+ * @param pageId - Page ID
112
+ */
113
+ export declare function removeElementRegistry(pageId: string): void;
114
+ /**
115
+ * Clear all element registries (call on session close).
116
+ */
117
+ export declare function clearAllElementRegistries(): void;
118
+ //# sourceMappingURL=element-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-registry.d.ts","sourceRoot":"","sources":["../../../src/state/element-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACV,UAAU,EAGV,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAShC;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAId;IAEF,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,iBAAiB,CAAM;IAE/B;;;;;;;OAOG;IACH,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,oBAAoB;IAmDrF;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7C;;;;;;OAMG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhE;;;;;;OAMG;IACH,gCAAgC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/F;;;;OAIG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,OAAO;IAMhD;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAKlE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Element Registry
3
+ *
4
+ * Manages eid → ElementRef mappings across snapshots.
5
+ * Provides lookup by eid for action tools, enabling the transition from
6
+ * transient node_id to stable semantic eid for element targeting.
7
+ *
8
+ * Key responsibilities:
9
+ * - Build ElementRef from ReadableNode
10
+ * - Track eid across snapshot updates
11
+ * - Provide lookup by eid for action tools
12
+ * - Detect stale elements
13
+ */
14
+ import { computeEid, resolveEidCollision } from './element-identity.js';
15
+ import { generateLocator } from './locator-generator.js';
16
+ import { isInteractiveKind } from './actionables-filter.js';
17
+ // ============================================================================
18
+ // Element Registry Class
19
+ // ============================================================================
20
+ /**
21
+ * ElementRegistry - Manages eid → ElementRef mappings across snapshots.
22
+ *
23
+ * Usage:
24
+ * 1. Call updateFromSnapshot() after each new snapshot
25
+ * 2. Use getByEid() in action tools to resolve eid to ElementRef
26
+ * 3. Use getEidByBackendNodeId() for reverse lookup (legacy node_id support)
27
+ */
28
+ export class ElementRegistry {
29
+ registry = {
30
+ byEid: new Map(),
31
+ backendToEid: new Map(),
32
+ lastSeenStep: new Map(),
33
+ };
34
+ currentStep = 0;
35
+ currentSnapshotId = '';
36
+ /**
37
+ * Update registry with new snapshot.
38
+ * Builds ElementRef for each interactive node and tracks changes.
39
+ *
40
+ * @param snapshot - New snapshot to process
41
+ * @param activeLayer - Active layer for eid computation
42
+ * @returns List of added, removed, and updated eids
43
+ */
44
+ updateFromSnapshot(snapshot, activeLayer) {
45
+ this.currentStep++;
46
+ this.currentSnapshotId = snapshot.snapshot_id;
47
+ const previousEids = new Set(this.registry.byEid.keys());
48
+ const currentEids = new Set();
49
+ const usedEids = new Set();
50
+ const added = [];
51
+ const updated = [];
52
+ // Process all interactive nodes
53
+ for (const node of snapshot.nodes) {
54
+ // Only track interactive elements
55
+ if (!isInteractiveKind(node.kind))
56
+ continue;
57
+ // Compute eid (with collision resolution)
58
+ const baseEid = computeEid(node, activeLayer);
59
+ const eid = resolveEidCollision(baseEid, usedEids);
60
+ usedEids.add(eid);
61
+ currentEids.add(eid);
62
+ // Build ElementRef
63
+ const ref = this.buildElementRef(node, eid, snapshot.snapshot_id, activeLayer);
64
+ // Track whether this is new or updated
65
+ if (!previousEids.has(eid)) {
66
+ added.push(eid);
67
+ }
68
+ else {
69
+ updated.push(eid);
70
+ }
71
+ // Update registry
72
+ this.registry.byEid.set(eid, ref);
73
+ this.registry.backendToEid.set(`${snapshot.snapshot_id}:${node.backend_node_id}`, eid);
74
+ this.registry.lastSeenStep.set(eid, this.currentStep);
75
+ }
76
+ // Find removed eids (present in previous, not in current)
77
+ const removed = [];
78
+ for (const eid of previousEids) {
79
+ if (!currentEids.has(eid)) {
80
+ removed.push(eid);
81
+ // Don't delete immediately - keep for staleness detection
82
+ // Mark as not seen in current step (lastSeenStep not updated)
83
+ }
84
+ }
85
+ return { added, removed, updated };
86
+ }
87
+ /**
88
+ * Build ElementRef from ReadableNode.
89
+ *
90
+ * @param node - Source node
91
+ * @param eid - Computed eid
92
+ * @param snapshotId - Snapshot ID
93
+ * @param activeLayer - Active layer for locator scoping
94
+ * @returns ElementRef
95
+ */
96
+ buildElementRef(node, eid, snapshotId, activeLayer) {
97
+ const locatorInfo = generateLocator(node, activeLayer);
98
+ const ref = {
99
+ snapshot_id: snapshotId,
100
+ backend_node_id: node.backend_node_id,
101
+ frame_id: node.frame_id,
102
+ loader_id: node.loader_id,
103
+ locators: {
104
+ preferred: locatorInfo.preferred,
105
+ fallback: locatorInfo.fallback,
106
+ },
107
+ };
108
+ return { eid, ref };
109
+ }
110
+ /**
111
+ * Lookup element by eid.
112
+ *
113
+ * @param eid - Element ID to lookup
114
+ * @returns ElementRef or undefined if not found
115
+ */
116
+ getByEid(eid) {
117
+ return this.registry.byEid.get(eid);
118
+ }
119
+ /**
120
+ * Lookup eid by backend_node_id in current snapshot.
121
+ * Used for backwards compatibility with node_id-based tools.
122
+ *
123
+ * @param backendNodeId - CDP backend node ID
124
+ * @returns eid or undefined
125
+ */
126
+ getEidByBackendNodeId(backendNodeId) {
127
+ return this.registry.backendToEid.get(`${this.currentSnapshotId}:${backendNodeId}`);
128
+ }
129
+ /**
130
+ * Lookup eid by backend_node_id in any snapshot.
131
+ *
132
+ * @param snapshotId - Snapshot ID
133
+ * @param backendNodeId - CDP backend node ID
134
+ * @returns eid or undefined
135
+ */
136
+ getEidBySnapshotAndBackendNodeId(snapshotId, backendNodeId) {
137
+ return this.registry.backendToEid.get(`${snapshotId}:${backendNodeId}`);
138
+ }
139
+ /**
140
+ * Get all current eids.
141
+ *
142
+ * @returns Array of all tracked eids
143
+ */
144
+ getAllEids() {
145
+ return Array.from(this.registry.byEid.keys());
146
+ }
147
+ /**
148
+ * Check if an eid is stale (not seen in recent snapshots).
149
+ *
150
+ * @param eid - Element ID to check
151
+ * @param maxStaleSteps - Maximum steps since last seen (default: 2)
152
+ * @returns true if stale
153
+ */
154
+ isStale(eid, maxStaleSteps = 2) {
155
+ const lastSeen = this.registry.lastSeenStep.get(eid);
156
+ if (lastSeen === undefined)
157
+ return true;
158
+ return this.currentStep - lastSeen > maxStaleSteps;
159
+ }
160
+ /**
161
+ * Get current step counter.
162
+ */
163
+ getCurrentStep() {
164
+ return this.currentStep;
165
+ }
166
+ /**
167
+ * Get current snapshot ID.
168
+ */
169
+ getCurrentSnapshotId() {
170
+ return this.currentSnapshotId;
171
+ }
172
+ /**
173
+ * Clear registry (on session close or full navigation).
174
+ */
175
+ clear() {
176
+ this.registry.byEid.clear();
177
+ this.registry.backendToEid.clear();
178
+ this.registry.lastSeenStep.clear();
179
+ this.currentStep = 0;
180
+ this.currentSnapshotId = '';
181
+ }
182
+ /**
183
+ * Get number of tracked elements.
184
+ */
185
+ size() {
186
+ return this.registry.byEid.size;
187
+ }
188
+ }
189
+ // ============================================================================
190
+ // Registry Factory
191
+ // ============================================================================
192
+ /**
193
+ * Global registry of element registries (one per page).
194
+ */
195
+ const registries = new Map();
196
+ /**
197
+ * Get or create element registry for a page.
198
+ *
199
+ * @param pageId - Page ID
200
+ * @returns ElementRegistry instance
201
+ */
202
+ export function getElementRegistry(pageId) {
203
+ if (!registries.has(pageId)) {
204
+ registries.set(pageId, new ElementRegistry());
205
+ }
206
+ return registries.get(pageId);
207
+ }
208
+ /**
209
+ * Remove element registry for a page (call on page close).
210
+ *
211
+ * @param pageId - Page ID
212
+ */
213
+ export function removeElementRegistry(pageId) {
214
+ registries.delete(pageId);
215
+ }
216
+ /**
217
+ * Clear all element registries (call on session close).
218
+ */
219
+ export function clearAllElementRegistries() {
220
+ registries.clear();
221
+ }
222
+ //# sourceMappingURL=element-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-registry.js","sourceRoot":"","sources":["../../../src/state/element-registry.ts"],"names":[],"mappings":"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"}