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,475 @@
1
+ /**
2
+ * Diff Engine
3
+ *
4
+ * Compute incremental changes between snapshots.
5
+ * Returns added/removed/changed actionables and atoms.
6
+ */
7
+ import { computeEid } from './element-identity.js';
8
+ import { isInteractiveKind } from './actionables-filter.js';
9
+ import { detectLayers } from './layer-detector.js';
10
+ import { extractAtoms } from './atoms-extractor.js';
11
+ // ============================================================================
12
+ // Diff Computation
13
+ // ============================================================================
14
+ /**
15
+ * Compute diff between previous and current snapshots.
16
+ *
17
+ * Includes:
18
+ * - Document changes (URL, title, navigation type)
19
+ * - Layer changes (stack changes)
20
+ * - Actionables changes (added, removed, changed)
21
+ * - Atoms changes (viewport, scroll, loading, forms, notifications)
22
+ *
23
+ * @param prev - Previous snapshot
24
+ * @param curr - Current snapshot
25
+ * @returns Diff response
26
+ */
27
+ export function computeDiff(prev, curr) {
28
+ // Build EID maps for interactive elements
29
+ const prevMap = buildEidMap(prev);
30
+ const currMap = buildEidMap(curr);
31
+ // Find added/removed actionables
32
+ const added = findAdded(prevMap, currMap);
33
+ const removed = findRemoved(prevMap, currMap);
34
+ // Find changed actionables
35
+ const changed = findChanged(prevMap, currMap);
36
+ // Detect document change
37
+ const doc = detectDocumentChange(prev, curr);
38
+ // Detect layer change
39
+ const layer = detectLayerChange(prev, curr);
40
+ // Compute atomic diffs
41
+ const atoms = computeAtomicDiffs(prev, curr);
42
+ // Compute mutations (status-bearing readable elements)
43
+ const mutations = computeMutations(prev, curr);
44
+ // Determine if diff is empty (no meaningful changes)
45
+ const isEmpty = added.length === 0 &&
46
+ removed.length === 0 &&
47
+ changed.length === 0 &&
48
+ mutations.textChanged.length === 0 &&
49
+ mutations.statusAppeared.length === 0;
50
+ return {
51
+ mode: 'diff',
52
+ diff: {
53
+ doc,
54
+ layer,
55
+ actionables: {
56
+ added,
57
+ removed,
58
+ changed,
59
+ },
60
+ mutations,
61
+ isEmpty,
62
+ atoms,
63
+ },
64
+ };
65
+ }
66
+ // ============================================================================
67
+ // EID Map Building
68
+ // ============================================================================
69
+ /**
70
+ * Build map of EID -> node for visible interactive elements.
71
+ *
72
+ * @param snapshot - Snapshot to build map from
73
+ * @returns EID map
74
+ */
75
+ function buildEidMap(snapshot) {
76
+ const map = new Map();
77
+ for (const node of snapshot.nodes) {
78
+ // Only include visible interactive elements
79
+ if (!isInteractiveKind(node.kind) || !node.state?.visible) {
80
+ continue;
81
+ }
82
+ const eid = computeEid(node);
83
+ map.set(eid, node);
84
+ }
85
+ return map;
86
+ }
87
+ // ============================================================================
88
+ // Added/Removed Detection
89
+ // ============================================================================
90
+ /**
91
+ * Find added EIDs (present in current but not in previous).
92
+ *
93
+ * @param prevMap - Previous EID map
94
+ * @param currMap - Current EID map
95
+ * @returns Array of added EIDs
96
+ */
97
+ function findAdded(prevMap, currMap) {
98
+ const added = [];
99
+ for (const eid of currMap.keys()) {
100
+ if (!prevMap.has(eid)) {
101
+ added.push(eid);
102
+ }
103
+ }
104
+ return added;
105
+ }
106
+ /**
107
+ * Find removed EIDs (present in previous but not in current).
108
+ *
109
+ * @param prevMap - Previous EID map
110
+ * @param currMap - Current EID map
111
+ * @returns Array of removed EIDs
112
+ */
113
+ function findRemoved(prevMap, currMap) {
114
+ const removed = [];
115
+ for (const eid of prevMap.keys()) {
116
+ if (!currMap.has(eid)) {
117
+ removed.push(eid);
118
+ }
119
+ }
120
+ return removed;
121
+ }
122
+ // ============================================================================
123
+ // Changed Detection
124
+ // ============================================================================
125
+ /**
126
+ * Find changed actionables (present in both but with different state/attributes).
127
+ *
128
+ * @param prevMap - Previous EID map
129
+ * @param currMap - Current EID map
130
+ * @returns Array of changes
131
+ */
132
+ function findChanged(prevMap, currMap) {
133
+ const changed = [];
134
+ for (const [eid, currNode] of currMap) {
135
+ const prevNode = prevMap.get(eid);
136
+ if (!prevNode) {
137
+ continue; // Already in 'added' list
138
+ }
139
+ // Compare state and attributes
140
+ const diffs = compareNodes(eid, prevNode, currNode);
141
+ changed.push(...diffs);
142
+ }
143
+ return changed;
144
+ }
145
+ /**
146
+ * Compare two nodes and return list of property changes.
147
+ *
148
+ * @param eid - Element ID
149
+ * @param prev - Previous node
150
+ * @param curr - Current node
151
+ * @returns Array of changes
152
+ */
153
+ function compareNodes(eid, prev, curr) {
154
+ const changes = [];
155
+ // Compare state flags
156
+ const stateFields = [
157
+ 'visible',
158
+ 'enabled',
159
+ 'checked',
160
+ 'selected',
161
+ 'expanded',
162
+ 'focused',
163
+ 'required',
164
+ 'invalid',
165
+ 'readonly',
166
+ ];
167
+ for (const field of stateFields) {
168
+ const prevVal = prev.state?.[field];
169
+ const currVal = curr.state?.[field];
170
+ if (prevVal !== currVal) {
171
+ // Map to abbreviated keys
172
+ const abbrev = {
173
+ visible: 'vis',
174
+ enabled: 'ena',
175
+ checked: 'chk',
176
+ selected: 'sel',
177
+ expanded: 'exp',
178
+ focused: 'foc',
179
+ required: 'req',
180
+ invalid: 'inv',
181
+ readonly: 'rdo',
182
+ };
183
+ changes.push({
184
+ eid,
185
+ k: abbrev[field] || field,
186
+ from: prevVal,
187
+ to: currVal,
188
+ });
189
+ }
190
+ }
191
+ // Compare value attribute (for inputs)
192
+ if (prev.attributes?.value !== curr.attributes?.value) {
193
+ changes.push({
194
+ eid,
195
+ k: 'val',
196
+ from: prev.attributes?.value,
197
+ to: curr.attributes?.value,
198
+ });
199
+ }
200
+ // Compare label (text content)
201
+ if (prev.label !== curr.label) {
202
+ changes.push({
203
+ eid,
204
+ k: 'label',
205
+ from: prev.label,
206
+ to: curr.label,
207
+ });
208
+ }
209
+ return changes;
210
+ }
211
+ // ============================================================================
212
+ // Document Change Detection
213
+ // ============================================================================
214
+ /**
215
+ * Detect if document changed (URL or title).
216
+ *
217
+ * @param prev - Previous snapshot
218
+ * @param curr - Current snapshot
219
+ * @returns Document change or undefined
220
+ */
221
+ function detectDocumentChange(prev, curr) {
222
+ if (prev.url === curr.url && prev.title === curr.title) {
223
+ return undefined;
224
+ }
225
+ // Determine navigation type
226
+ const navType = determineNavType(prev.url, curr.url);
227
+ return {
228
+ from: { url: prev.url, title: prev.title },
229
+ to: { url: curr.url, title: curr.title },
230
+ nav_type: navType,
231
+ };
232
+ }
233
+ /**
234
+ * Determine navigation type (soft vs hard).
235
+ * Soft: Same pathname, different hash/search
236
+ * Hard: Different pathname
237
+ *
238
+ * @param prevUrl - Previous URL
239
+ * @param currUrl - Current URL
240
+ * @returns Navigation type
241
+ */
242
+ function determineNavType(prevUrl, currUrl) {
243
+ try {
244
+ const prev = new URL(prevUrl);
245
+ const curr = new URL(currUrl);
246
+ // Different pathname = hard navigation
247
+ if (prev.pathname !== curr.pathname) {
248
+ return 'hard';
249
+ }
250
+ // Same pathname = soft navigation
251
+ return 'soft';
252
+ }
253
+ catch {
254
+ // URL parsing failed, assume hard navigation
255
+ return 'hard';
256
+ }
257
+ }
258
+ // ============================================================================
259
+ // Layer Change Detection
260
+ // ============================================================================
261
+ /**
262
+ * Detect if layer stack changed.
263
+ *
264
+ * @param prev - Previous snapshot
265
+ * @param curr - Current snapshot
266
+ * @returns Layer change or undefined
267
+ */
268
+ function detectLayerChange(prev, curr) {
269
+ const prevLayers = detectLayers(prev);
270
+ const currLayers = detectLayers(curr);
271
+ // Compare stacks
272
+ const prevStack = prevLayers.stack.map((l) => l.type);
273
+ const currStack = currLayers.stack.map((l) => l.type);
274
+ if (arraysEqual(prevStack, currStack)) {
275
+ return undefined;
276
+ }
277
+ return {
278
+ stack_from: prevStack,
279
+ stack_to: currStack,
280
+ };
281
+ }
282
+ /**
283
+ * Check if two arrays are equal.
284
+ */
285
+ function arraysEqual(a, b) {
286
+ if (a.length !== b.length) {
287
+ return false;
288
+ }
289
+ for (let i = 0; i < a.length; i++) {
290
+ if (a[i] !== b[i]) {
291
+ return false;
292
+ }
293
+ }
294
+ return true;
295
+ }
296
+ // ============================================================================
297
+ // Atomic Diffs
298
+ // ============================================================================
299
+ /**
300
+ * Compute atomic state diffs (viewport, scroll, loading, forms, notifications).
301
+ *
302
+ * @param prev - Previous snapshot
303
+ * @param curr - Current snapshot
304
+ * @returns Array of atom changes
305
+ */
306
+ function computeAtomicDiffs(prev, curr) {
307
+ const prevAtoms = extractAtoms(prev);
308
+ const currAtoms = extractAtoms(curr);
309
+ const changes = [];
310
+ // Compare viewport
311
+ if (prevAtoms.viewport.w !== currAtoms.viewport.w) {
312
+ changes.push({ k: 'viewport.w', from: prevAtoms.viewport.w, to: currAtoms.viewport.w });
313
+ }
314
+ if (prevAtoms.viewport.h !== currAtoms.viewport.h) {
315
+ changes.push({ k: 'viewport.h', from: prevAtoms.viewport.h, to: currAtoms.viewport.h });
316
+ }
317
+ // Compare scroll
318
+ if (prevAtoms.scroll.x !== currAtoms.scroll.x) {
319
+ changes.push({ k: 'scroll.x', from: prevAtoms.scroll.x, to: currAtoms.scroll.x });
320
+ }
321
+ if (prevAtoms.scroll.y !== currAtoms.scroll.y) {
322
+ changes.push({ k: 'scroll.y', from: prevAtoms.scroll.y, to: currAtoms.scroll.y });
323
+ }
324
+ // Compare loading
325
+ if (prevAtoms.loading?.spinners !== currAtoms.loading?.spinners) {
326
+ changes.push({
327
+ k: 'loading.spinners',
328
+ from: prevAtoms.loading?.spinners,
329
+ to: currAtoms.loading?.spinners,
330
+ });
331
+ }
332
+ // Compare forms
333
+ if (prevAtoms.forms?.focused_field !== currAtoms.forms?.focused_field) {
334
+ changes.push({
335
+ k: 'forms.focused_field',
336
+ from: prevAtoms.forms?.focused_field,
337
+ to: currAtoms.forms?.focused_field,
338
+ });
339
+ }
340
+ if (prevAtoms.forms?.validation_errors !== currAtoms.forms?.validation_errors) {
341
+ changes.push({
342
+ k: 'forms.validation_errors',
343
+ from: prevAtoms.forms?.validation_errors,
344
+ to: currAtoms.forms?.validation_errors,
345
+ });
346
+ }
347
+ // Compare notifications
348
+ if (prevAtoms.notifications?.toasts !== currAtoms.notifications?.toasts) {
349
+ changes.push({
350
+ k: 'notifications.toasts',
351
+ from: prevAtoms.notifications?.toasts,
352
+ to: currAtoms.notifications?.toasts,
353
+ });
354
+ }
355
+ return changes;
356
+ }
357
+ // ============================================================================
358
+ // Mutations Detection (Status-bearing Readable Elements)
359
+ // ============================================================================
360
+ /**
361
+ * EVALUATION FLAG: Track all readable element mutations, not just ARIA status roles.
362
+ *
363
+ * When true: Tracks ALL visible readable nodes (text, heading, paragraph, etc.)
364
+ * When false: Only tracks nodes with ARIA roles: status, alert, log, progressbar
365
+ *
366
+ * This flag is for evaluation to determine if broader mutation tracking is useful.
367
+ * Search for "TRACK_ALL_READABLE_MUTATIONS" to find this flag.
368
+ *
369
+ * TODO: Remove or make permanent after evaluation is complete.
370
+ */
371
+ const TRACK_ALL_READABLE_MUTATIONS = false;
372
+ /**
373
+ * Maximum character length for mutation text content.
374
+ * Text exceeding this limit will be truncated with "..." suffix.
375
+ */
376
+ const MUTATION_TEXT_MAX_LENGTH = 100;
377
+ /**
378
+ * ARIA roles that indicate state-bearing elements.
379
+ * Only used when TRACK_ALL_READABLE_MUTATIONS is false.
380
+ */
381
+ const STATUS_ROLES = new Set(['status', 'alert', 'log', 'progressbar']);
382
+ /**
383
+ * Node kinds considered "readable" for mutation tracking.
384
+ * Used when TRACK_ALL_READABLE_MUTATIONS is true.
385
+ */
386
+ const READABLE_KINDS = new Set([
387
+ 'text',
388
+ 'heading',
389
+ 'paragraph',
390
+ 'listitem',
391
+ 'generic', // often used for dynamic content
392
+ ]);
393
+ /**
394
+ * Check if a node should be tracked for mutations.
395
+ *
396
+ * When TRACK_ALL_READABLE_MUTATIONS is true: tracks any readable node kind
397
+ * When false: only tracks nodes with specific ARIA roles (status, alert, log, progressbar)
398
+ */
399
+ function isTrackableNode(node) {
400
+ if (TRACK_ALL_READABLE_MUTATIONS) {
401
+ // Track any readable node kind
402
+ return READABLE_KINDS.has(node.kind);
403
+ }
404
+ // Only track nodes with status-bearing ARIA roles
405
+ const role = node.attributes?.role?.toLowerCase();
406
+ return role !== undefined && STATUS_ROLES.has(role);
407
+ }
408
+ /**
409
+ * Truncate text to max length, adding "..." if truncated.
410
+ */
411
+ function truncateText(text, maxLength = MUTATION_TEXT_MAX_LENGTH) {
412
+ const trimmed = text.trim();
413
+ if (trimmed.length <= maxLength) {
414
+ return trimmed;
415
+ }
416
+ return trimmed.substring(0, maxLength - 3) + '...';
417
+ }
418
+ /**
419
+ * Generate a readable element ID (rd-* prefix).
420
+ */
421
+ function computeReadableEid(node) {
422
+ const baseEid = computeEid(node);
423
+ return `rd-${baseEid.substring(0, 10)}`;
424
+ }
425
+ /**
426
+ * Build a map of trackable nodes keyed by a stable identifier.
427
+ * Uses backend_node_id as the key since it's stable within a session.
428
+ */
429
+ function buildTrackableNodeMap(snapshot) {
430
+ const map = new Map();
431
+ for (const node of snapshot.nodes) {
432
+ if (isTrackableNode(node) && node.state?.visible) {
433
+ map.set(node.backend_node_id, node);
434
+ }
435
+ }
436
+ return map;
437
+ }
438
+ /**
439
+ * Compute mutations in readable elements.
440
+ *
441
+ * Tracks:
442
+ * - Text changes in existing readable elements
443
+ * - New readable elements that appeared (with ARIA roles or all readable when flag is set)
444
+ */
445
+ function computeMutations(prev, curr) {
446
+ const prevMap = buildTrackableNodeMap(prev);
447
+ const currMap = buildTrackableNodeMap(curr);
448
+ const textChanged = [];
449
+ const statusAppeared = [];
450
+ // Find text changes and new elements
451
+ for (const [backendNodeId, currNode] of currMap) {
452
+ const prevNode = prevMap.get(backendNodeId);
453
+ if (prevNode) {
454
+ // Node existed before - check for text change
455
+ if (prevNode.label !== currNode.label) {
456
+ textChanged.push({
457
+ eid: computeReadableEid(currNode),
458
+ from: truncateText(prevNode.label),
459
+ to: truncateText(currNode.label),
460
+ });
461
+ }
462
+ }
463
+ else {
464
+ // New element appeared
465
+ const role = currNode.attributes?.role?.toLowerCase() ?? currNode.kind;
466
+ statusAppeared.push({
467
+ eid: computeReadableEid(currNode),
468
+ role,
469
+ text: truncateText(currNode.label),
470
+ });
471
+ }
472
+ }
473
+ return { textChanged, statusAppeared };
474
+ }
475
+ //# sourceMappingURL=diff-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-engine.js","sourceRoot":"","sources":["../../../src/state/diff-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
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 type { ReadableNode } from '../snapshot/snapshot.types.js';
8
+ /**
9
+ * Compute stable semantic element ID for a node.
10
+ *
11
+ * Uses hash of semantic components:
12
+ * - Role (or kind)
13
+ * - Accessible name (normalized label)
14
+ * - Href (for links)
15
+ * - Landmark path (region + group_path)
16
+ * - Layer context (modal vs main - prevents collision across layers)
17
+ * - Position hint (heading context from group_path - scroll-stable)
18
+ * - Shadow path (disambiguates elements in different shadow roots)
19
+ *
20
+ * @param node - Node to compute EID for
21
+ * @param layer - Optional layer context for disambiguation
22
+ * @returns 12-character hex hash
23
+ */
24
+ export declare function computeEid(node: ReadableNode, layer?: string): string;
25
+ /**
26
+ * Normalize accessible name for stable hashing.
27
+ * - Trim whitespace
28
+ * - Lowercase
29
+ * - Collapse multiple spaces
30
+ * - Cap length at 100 chars
31
+ *
32
+ * @param label - Raw label text
33
+ * @returns Normalized label
34
+ */
35
+ export declare function normalizeAccessibleName(label: string): string;
36
+ /**
37
+ * Compute landmark path for a node.
38
+ * Format: "region/group1/group2"
39
+ *
40
+ * @param node - Node to compute path for
41
+ * @returns Landmark path string
42
+ */
43
+ export declare function computeLandmarkPath(node: ReadableNode): string;
44
+ /**
45
+ * Compute position hint for stable EID disambiguation.
46
+ *
47
+ * Uses only scroll-stable semantic context:
48
+ * - Nearest heading from group_path (semantic grouping)
49
+ *
50
+ * Note: Viewport-dependent data (screen_zone, bbox quadrant) was removed
51
+ * because it caused EID instability when scrolling. The collision resolution
52
+ * mechanism (resolveEidCollision) handles any increased collision rate.
53
+ *
54
+ * @param node - Node to compute hint for
55
+ * @returns Position hint string
56
+ */
57
+ export declare function computePositionHint(node: ReadableNode): string;
58
+ /**
59
+ * Hash string components to generate EID.
60
+ * Uses SHA-256 and returns first 12 hex chars.
61
+ *
62
+ * @param components - String components to hash
63
+ * @returns 12-character hex hash
64
+ */
65
+ export declare function hashComponents(components: string[]): string;
66
+ /**
67
+ * Resolve EID collisions by appending suffix.
68
+ * If EID already exists in map, append "-2", "-3", etc.
69
+ *
70
+ * @param baseEid - Base EID before collision resolution
71
+ * @param existingEids - Set of already-used EIDs
72
+ * @returns Unique EID
73
+ */
74
+ export declare function resolveEidCollision(baseEid: string, existingEids: Set<string>): string;
75
+ //# sourceMappingURL=element-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-identity.d.ts","sourceRoot":"","sources":["../../../src/state/element-identity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMlE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBrE;AAcD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAI9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAI9D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAI3D;AAMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAWtF"}