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,618 @@
1
+ /**
2
+ * State Manager
3
+ *
4
+ * Central orchestrator for state tracking and response generation.
5
+ * Coordinates layer detection, diff computation, actionables filtering, and atoms extraction.
6
+ *
7
+ * Security: Masks sensitive values (passwords, tokens) and sanitizes URLs.
8
+ * Reliability: Includes concurrency protection and error recovery.
9
+ */
10
+ import { createHash, randomUUID } from 'crypto';
11
+ import { computeEid, resolveEidCollision } from './element-identity.js';
12
+ import { detectLayers } from './layer-detector.js';
13
+ import { computeDiff } from './diff-engine.js';
14
+ import { selectActionables, isInteractiveKind } from './actionables-filter.js';
15
+ import { extractAtoms } from './atoms-extractor.js';
16
+ import { linkObservationsToSnapshot } from '../observation/index.js';
17
+ import { generateLocator } from './locator-generator.js';
18
+ import { ElementRegistry } from './element-registry.js';
19
+ import { validateSnapshotHealth, isErrorHealth } from '../snapshot/snapshot-health.js';
20
+ import { renderStateXml } from './state-renderer.js';
21
+ // ============================================================================
22
+ // Default Configuration
23
+ // ============================================================================
24
+ const DEFAULT_CONFIG = {
25
+ maxActionables: 1000, // Show all elements (practically unlimited)
26
+ };
27
+ // ============================================================================
28
+ // Security: Sensitive Field Detection
29
+ // ============================================================================
30
+ /**
31
+ * Sensitive field name patterns (case-insensitive).
32
+ * Values in these fields will be masked.
33
+ */
34
+ const SENSITIVE_FIELD_PATTERNS = [
35
+ 'password',
36
+ 'passwd',
37
+ 'pass',
38
+ 'secret',
39
+ 'token',
40
+ 'auth',
41
+ 'key',
42
+ 'api_key',
43
+ 'apikey',
44
+ 'otp',
45
+ 'pin',
46
+ 'cvv',
47
+ 'cvc',
48
+ 'ssn',
49
+ 'social',
50
+ 'credit',
51
+ 'card',
52
+ ];
53
+ /**
54
+ * Input types that should always be masked.
55
+ */
56
+ const MASKED_INPUT_TYPES = ['password'];
57
+ /**
58
+ * Input types with partial masking (show first/last chars).
59
+ */
60
+ const PARTIAL_MASK_TYPES = ['email', 'tel', 'phone'];
61
+ /**
62
+ * URL query parameters that are safe to keep.
63
+ * All others will be stripped.
64
+ */
65
+ const SAFE_QUERY_PARAMS = new Set([
66
+ 'page',
67
+ 'p',
68
+ 'sort',
69
+ 'order',
70
+ 'q',
71
+ 'query',
72
+ 'search',
73
+ 'tab',
74
+ 'view',
75
+ 'limit',
76
+ 'offset',
77
+ 'lang',
78
+ 'locale',
79
+ ]);
80
+ // ============================================================================
81
+ // State Manager Class
82
+ // ============================================================================
83
+ /**
84
+ * State manager for a single page.
85
+ * Tracks snapshots and generates state responses.
86
+ */
87
+ export class StateManager {
88
+ context;
89
+ isProcessing = false;
90
+ pendingSnapshot = null;
91
+ elementRegistry;
92
+ /**
93
+ * Create a new state manager.
94
+ *
95
+ * @param options - Initialization options
96
+ */
97
+ constructor(options) {
98
+ this.context = {
99
+ sessionId: options.sessionId ?? randomUUID(),
100
+ pageId: options.pageId,
101
+ stepCounter: 0,
102
+ currentSnapshot: null,
103
+ previousSnapshot: null,
104
+ currentDocId: null,
105
+ config: { ...DEFAULT_CONFIG, ...options.config },
106
+ };
107
+ this.elementRegistry = new ElementRegistry();
108
+ }
109
+ /**
110
+ * Get the element registry for this page.
111
+ * Used by action tools to resolve eid to ElementRef.
112
+ */
113
+ getElementRegistry() {
114
+ return this.elementRegistry;
115
+ }
116
+ /**
117
+ * Get the previous snapshot for this page.
118
+ * Used for dependency tracking to compute effects.
119
+ */
120
+ getPreviousSnapshot() {
121
+ return this.context.previousSnapshot;
122
+ }
123
+ /**
124
+ * Get the active layer for the current snapshot.
125
+ * Returns 'main' if no snapshot is available.
126
+ */
127
+ getActiveLayer() {
128
+ if (!this.context.currentSnapshot) {
129
+ return 'main';
130
+ }
131
+ const layerResult = detectLayers(this.context.currentSnapshot);
132
+ return layerResult.active;
133
+ }
134
+ /**
135
+ * Generate an error response.
136
+ *
137
+ * @param errorMessage - The error message to include
138
+ * @returns XML state response with error baseline
139
+ */
140
+ generateErrorResponse(errorMessage) {
141
+ return this.createErrorBaseline('error', errorMessage);
142
+ }
143
+ /**
144
+ * Generate state response for a new snapshot.
145
+ * Includes concurrency protection and error recovery.
146
+ *
147
+ * @param snapshot - Current snapshot
148
+ * @returns State response with StateHandle + Diff/Baseline + Actionables + Atoms
149
+ */
150
+ generateResponse(snapshot, options) {
151
+ // Concurrency protection: if already processing, use latest snapshot
152
+ if (this.isProcessing) {
153
+ this.pendingSnapshot = snapshot;
154
+ // Return a minimal baseline response while processing
155
+ return this.createErrorBaseline('concurrent_call', 'Response generation in progress');
156
+ }
157
+ this.isProcessing = true;
158
+ try {
159
+ const response = this.doGenerateResponse(snapshot, options);
160
+ // Check if there's a pending snapshot that came in during processing
161
+ if (this.pendingSnapshot) {
162
+ const pending = this.pendingSnapshot;
163
+ this.pendingSnapshot = null;
164
+ // Process the pending snapshot (recursively, but now isProcessing will be false)
165
+ this.isProcessing = false;
166
+ return this.generateResponse(pending, options);
167
+ }
168
+ return response;
169
+ }
170
+ catch (err) {
171
+ // Error recovery: return baseline with error reason
172
+ const errorMessage = err instanceof Error ? err.message : String(err);
173
+ return this.createErrorBaseline('error', errorMessage);
174
+ }
175
+ finally {
176
+ this.isProcessing = false;
177
+ }
178
+ }
179
+ /**
180
+ * Internal response generation (called with concurrency protection).
181
+ */
182
+ doGenerateResponse(snapshot, options) {
183
+ // Increment step counter
184
+ this.context.stepCounter++;
185
+ // Shift current snapshot to previous BEFORE baseline check
186
+ // This ensures the second call has previousSnapshot set correctly
187
+ this.context.previousSnapshot = this.context.currentSnapshot;
188
+ // Validate snapshot health (Bug #2: handle empty snapshots)
189
+ const health = validateSnapshotHealth(snapshot);
190
+ if (isErrorHealth(health)) {
191
+ // Return error baseline for empty/failed snapshots
192
+ return this.createErrorBaseline('error', health.message ?? 'Empty snapshot');
193
+ }
194
+ // Compute document ID
195
+ const docId = computeDocId(snapshot);
196
+ const isNavigation = docId !== this.context.currentDocId;
197
+ this.context.currentDocId = docId;
198
+ // Detect layers
199
+ const layerResult = detectLayers(snapshot);
200
+ // Update element registry with new snapshot
201
+ this.elementRegistry.updateFromSnapshot(snapshot, layerResult.active);
202
+ // Link observations to snapshot nodes (set eid for interactivity)
203
+ if (snapshot.observations) {
204
+ linkObservationsToSnapshot(snapshot.observations, snapshot, this.elementRegistry);
205
+ }
206
+ // Decide baseline vs diff and get reason
207
+ const baselineInfo = this.getBaselineInfo(snapshot, isNavigation);
208
+ // Generate state handle (with sanitized URL)
209
+ const state = this.generateStateHandle(snapshot, layerResult);
210
+ // Generate diff or baseline
211
+ const diff = baselineInfo.sendBaseline
212
+ ? { mode: 'baseline', reason: baselineInfo.reason }
213
+ : computeDiff(this.context.previousSnapshot, snapshot);
214
+ // Select actionables (scoped to active layer)
215
+ const context = {
216
+ activeLayer: layerResult.active,
217
+ };
218
+ // Get actionable nodes with focused element guarantee
219
+ const actionableNodes = this.selectActionablesWithFocusGuarantee(snapshot, layerResult.active, context);
220
+ // Format actionables (with sensitive value masking and ref for direct targeting)
221
+ const actionables = this.formatActionables(actionableNodes, layerResult.active, snapshot.snapshot_id);
222
+ // Count total actionables in active layer
223
+ const totalInLayer = snapshot.nodes.filter((n) => isInteractiveKind(n.kind) && n.state?.visible && getNodeLayer(n) === layerResult.active).length;
224
+ const counts = {
225
+ shown: actionables.length,
226
+ total_in_layer: totalInLayer,
227
+ };
228
+ // Limits applied
229
+ const limits = {
230
+ max_actionables: this.context.config.maxActionables,
231
+ actionables_capped: totalInLayer > this.context.config.maxActionables,
232
+ };
233
+ // Extract atoms
234
+ const atoms = extractAtoms(snapshot);
235
+ // Store current snapshot (previous was already shifted at the start)
236
+ this.context.currentSnapshot = snapshot;
237
+ // Estimate tokens
238
+ const tokens = this.estimateTokens({ state, diff, actionables, atoms, counts, limits });
239
+ const response = {
240
+ state,
241
+ diff,
242
+ actionables,
243
+ counts,
244
+ limits,
245
+ atoms,
246
+ tokens,
247
+ };
248
+ // Add observations if present in snapshot
249
+ if (snapshot.observations) {
250
+ response.observations = snapshot.observations;
251
+ }
252
+ // Return dense XML representation
253
+ return renderStateXml(response, options);
254
+ }
255
+ /**
256
+ * Get baseline decision info with reason.
257
+ *
258
+ * Baselines are only sent when absolutely necessary:
259
+ * - first: No previous snapshot (LLM has no context)
260
+ * - navigation: URL changed (old elements no longer exist)
261
+ * - error: State corrupted, need to resync
262
+ *
263
+ * For same-page mutations (autocomplete, dropdowns, modals), we always
264
+ * send diffs regardless of how many elements changed. The LLM already
265
+ * has context from the previous response - repeating unchanged elements
266
+ * wastes context window tokens.
267
+ */
268
+ getBaselineInfo(_snapshot, isNavigation) {
269
+ if (!this.context.previousSnapshot) {
270
+ return { sendBaseline: true, reason: 'first' };
271
+ }
272
+ if (isNavigation) {
273
+ return { sendBaseline: true, reason: 'navigation' };
274
+ }
275
+ // Always use diff for same-page mutations - no threshold or periodic baselines
276
+ return { sendBaseline: false, reason: 'first' }; // reason unused when not baseline
277
+ }
278
+ /**
279
+ * Create error baseline response for recovery.
280
+ * Always uses 'error' reason - the specific error type is in the message.
281
+ */
282
+ createErrorBaseline(_reason, errorMessage) {
283
+ // Minimal state for error baseline
284
+ const state = {
285
+ sid: this.context.sessionId,
286
+ step: this.context.stepCounter,
287
+ doc: {
288
+ url: '',
289
+ origin: '',
290
+ title: '',
291
+ doc_id: '',
292
+ nav_type: 'soft',
293
+ history_idx: 0,
294
+ },
295
+ layer: {
296
+ active: 'main',
297
+ stack: ['main'],
298
+ pointer_lock: false,
299
+ },
300
+ timing: {
301
+ ts: new Date().toISOString(),
302
+ dom_ready: false,
303
+ network_busy: false,
304
+ },
305
+ hash: {
306
+ ui: '',
307
+ layer: '',
308
+ },
309
+ };
310
+ const atoms = { viewport: { w: 0, h: 0, dpr: 1 }, scroll: { x: 0, y: 0 } };
311
+ const response = {
312
+ state,
313
+ diff: { mode: 'baseline', reason: 'error', error: errorMessage },
314
+ actionables: [],
315
+ counts: { shown: 0, total_in_layer: 0 },
316
+ limits: { max_actionables: this.context.config.maxActionables, actionables_capped: false },
317
+ atoms,
318
+ tokens: 0,
319
+ };
320
+ return renderStateXml(response);
321
+ }
322
+ /**
323
+ * Select actionables with guaranteed focus element inclusion.
324
+ * Also prioritizes modal close/cancel affordances.
325
+ */
326
+ selectActionablesWithFocusGuarantee(snapshot, activeLayer, context) {
327
+ const maxCount = this.context.config.maxActionables;
328
+ // Find focused element first
329
+ const focusedNode = snapshot.nodes.find((n) => n.state?.focused &&
330
+ isInteractiveKind(n.kind) &&
331
+ n.state?.visible &&
332
+ getNodeLayer(n) === activeLayer);
333
+ // Find modal close/cancel affordances (high priority in modal layer)
334
+ const closeAffordances = [];
335
+ if (activeLayer === 'modal') {
336
+ for (const node of snapshot.nodes) {
337
+ if (!isInteractiveKind(node.kind) || !node.state?.visible)
338
+ continue;
339
+ if (getNodeLayer(node) !== activeLayer)
340
+ continue;
341
+ const label = node.label.toLowerCase();
342
+ const isCloseAffordance = label.includes('close') ||
343
+ label.includes('cancel') ||
344
+ label.includes('dismiss') ||
345
+ label === 'x' ||
346
+ label === '×';
347
+ if (isCloseAffordance) {
348
+ closeAffordances.push(node);
349
+ }
350
+ }
351
+ }
352
+ // Get regular scored actionables
353
+ const regularActionables = selectActionables(snapshot, activeLayer, maxCount, context);
354
+ // Build final list: focused first, then close affordances, then others
355
+ const result = [];
356
+ const includedNodeIds = new Set();
357
+ // 1. Add focused element if present
358
+ if (focusedNode) {
359
+ result.push(focusedNode);
360
+ includedNodeIds.add(focusedNode.node_id);
361
+ }
362
+ // 2. Add close affordances (up to 2)
363
+ for (const node of closeAffordances.slice(0, 2)) {
364
+ if (!includedNodeIds.has(node.node_id)) {
365
+ result.push(node);
366
+ includedNodeIds.add(node.node_id);
367
+ }
368
+ }
369
+ // 3. Fill remaining slots with regular actionables
370
+ for (const node of regularActionables) {
371
+ if (result.length >= maxCount)
372
+ break;
373
+ if (!includedNodeIds.has(node.node_id)) {
374
+ result.push(node);
375
+ includedNodeIds.add(node.node_id);
376
+ }
377
+ }
378
+ return result;
379
+ }
380
+ /**
381
+ * Generate state handle with sanitized URL.
382
+ */
383
+ generateStateHandle(snapshot, layerResult) {
384
+ const sanitizedUrl = sanitizeUrl(snapshot.url);
385
+ const url = new URL(snapshot.url);
386
+ const dom_ready = snapshot.meta.node_count > 0 &&
387
+ !snapshot.meta.warnings?.some((warning) => warning.toLowerCase().includes('dom extraction failed'));
388
+ return {
389
+ sid: this.context.sessionId,
390
+ step: this.context.stepCounter,
391
+ doc: {
392
+ url: sanitizedUrl,
393
+ origin: url.origin,
394
+ title: snapshot.title,
395
+ doc_id: this.context.currentDocId ?? '',
396
+ nav_type: this.context.stepCounter === 1 ? 'hard' : 'soft',
397
+ history_idx: 0,
398
+ },
399
+ layer: {
400
+ active: layerResult.active,
401
+ stack: layerResult.stack.map((l) => l.type),
402
+ focus_eid: layerResult.focusEid,
403
+ pointer_lock: layerResult.pointerLock,
404
+ },
405
+ timing: {
406
+ ts: new Date().toISOString(),
407
+ dom_ready,
408
+ network_busy: false,
409
+ },
410
+ hash: {
411
+ ui: computeUiHash(snapshot),
412
+ layer: computeLayerHash(layerResult.stack.map((l) => l.type)),
413
+ },
414
+ };
415
+ }
416
+ /**
417
+ * Format actionables with sensitive value masking.
418
+ * Now includes ref for direct element targeting.
419
+ */
420
+ formatActionables(nodes, activeLayer, snapshotId) {
421
+ const actionables = [];
422
+ // Used only for fallback case when element not in registry
423
+ const fallbackUsedEids = new Set();
424
+ for (const node of nodes) {
425
+ // Look up EID from registry - single source of truth
426
+ // Registry was updated in generateResponse() before this method is called
427
+ let eid = this.elementRegistry.getEidBySnapshotAndBackendNodeId(snapshotId, node.backend_node_id);
428
+ if (!eid) {
429
+ // Defensive fallback: compute if not in registry
430
+ // This can happen for non-interactive elements or edge cases
431
+ const baseEid = computeEid(node, activeLayer);
432
+ eid = resolveEidCollision(baseEid, fallbackUsedEids);
433
+ fallbackUsedEids.add(eid);
434
+ }
435
+ const loc = generateLocator(node, activeLayer);
436
+ // Build element target ref for direct interaction
437
+ const ref = {
438
+ snapshot_id: snapshotId,
439
+ backend_node_id: node.backend_node_id,
440
+ };
441
+ const actionable = {
442
+ eid,
443
+ kind: node.kind,
444
+ name: node.label,
445
+ role: node.attributes?.role ?? node.kind,
446
+ vis: node.state?.visible ?? false,
447
+ ena: node.state?.enabled ?? false,
448
+ ref,
449
+ loc,
450
+ ctx: {
451
+ layer: getNodeLayer(node),
452
+ region: node.where.region ?? 'unknown',
453
+ },
454
+ };
455
+ // Optional state flags (only if true)
456
+ if (node.state?.checked)
457
+ actionable.chk = true;
458
+ if (node.state?.selected)
459
+ actionable.sel = true;
460
+ if (node.state?.expanded)
461
+ actionable.exp = true;
462
+ if (node.state?.focused)
463
+ actionable.foc = true;
464
+ if (node.state?.required)
465
+ actionable.req = true;
466
+ if (node.state?.invalid)
467
+ actionable.inv = true;
468
+ if (node.state?.readonly)
469
+ actionable.rdo = true;
470
+ // Masked value hint (P0 security fix)
471
+ if (node.attributes?.value) {
472
+ actionable.val_hint = maskValue(node.attributes.value, node.attributes?.input_type, node.label);
473
+ }
474
+ if (node.attributes?.placeholder) {
475
+ actionable.placeholder = node.attributes.placeholder;
476
+ }
477
+ if (node.attributes?.href) {
478
+ actionable.href = sanitizeHref(node.attributes.href);
479
+ }
480
+ if (node.attributes?.input_type) {
481
+ actionable.type = node.attributes.input_type;
482
+ }
483
+ actionables.push(actionable);
484
+ }
485
+ return actionables;
486
+ }
487
+ /**
488
+ * Estimate token count for response.
489
+ */
490
+ estimateTokens(response) {
491
+ const jsonString = JSON.stringify(response);
492
+ return Math.ceil(jsonString.length / 4);
493
+ }
494
+ }
495
+ // ============================================================================
496
+ // Security: Value Masking
497
+ // ============================================================================
498
+ /**
499
+ * Mask sensitive values in val_hint.
500
+ *
501
+ * Rules:
502
+ * - password type: always full mask
503
+ * - sensitive field names: always full mask
504
+ * - email/tel: partial mask (show first/last chars)
505
+ * - default: truncate to 12 chars, mask middle
506
+ */
507
+ function maskValue(value, inputType, label) {
508
+ // Strip newlines first
509
+ const cleanValue = value.replace(/[\r\n]/g, ' ').trim();
510
+ if (!cleanValue)
511
+ return '';
512
+ // Password type: always full mask
513
+ if (inputType && MASKED_INPUT_TYPES.includes(inputType.toLowerCase())) {
514
+ return '••••••••';
515
+ }
516
+ // Check sensitive field names
517
+ const lowerLabel = (label ?? '').toLowerCase();
518
+ for (const pattern of SENSITIVE_FIELD_PATTERNS) {
519
+ if (lowerLabel.includes(pattern)) {
520
+ return '***';
521
+ }
522
+ }
523
+ // Email/tel: partial mask
524
+ if (inputType && PARTIAL_MASK_TYPES.includes(inputType.toLowerCase())) {
525
+ return partialMask(cleanValue);
526
+ }
527
+ // Default: truncate and partial mask if long
528
+ if (cleanValue.length <= 12) {
529
+ return cleanValue;
530
+ }
531
+ return partialMask(cleanValue.substring(0, 12));
532
+ }
533
+ /**
534
+ * Partial mask: show first 2 and last 2 chars.
535
+ * Example: "example@email.com" -> "ex•••om"
536
+ */
537
+ function partialMask(value) {
538
+ if (value.length <= 4) {
539
+ return '••••';
540
+ }
541
+ const first = value.substring(0, 2);
542
+ const last = value.substring(value.length - 2);
543
+ return `${first}•••${last}`;
544
+ }
545
+ // ============================================================================
546
+ // Security: URL Sanitization
547
+ // ============================================================================
548
+ /**
549
+ * Sanitize URL by stripping sensitive query parameters.
550
+ * Only keeps safe params like page, sort, q.
551
+ */
552
+ function sanitizeUrl(rawUrl) {
553
+ try {
554
+ const url = new URL(rawUrl);
555
+ // Build new search params with only safe ones
556
+ const safeParams = new URLSearchParams();
557
+ for (const [key, value] of url.searchParams) {
558
+ if (SAFE_QUERY_PARAMS.has(key.toLowerCase())) {
559
+ safeParams.set(key, value);
560
+ }
561
+ }
562
+ // Reconstruct URL with sanitized params
563
+ url.search = safeParams.toString();
564
+ return url.toString();
565
+ }
566
+ catch {
567
+ // If URL parsing fails, return origin only
568
+ return rawUrl.split('?')[0];
569
+ }
570
+ }
571
+ /**
572
+ * Sanitize href attribute (remove tokens from URLs).
573
+ */
574
+ function sanitizeHref(href) {
575
+ // For relative URLs, return as-is
576
+ if (!href.startsWith('http://') && !href.startsWith('https://')) {
577
+ return href;
578
+ }
579
+ return sanitizeUrl(href);
580
+ }
581
+ // ============================================================================
582
+ // Utilities
583
+ // ============================================================================
584
+ /**
585
+ * Compute document ID from snapshot.
586
+ *
587
+ * Uses only URL origin + pathname for navigation detection.
588
+ * This ensures DOM mutations (like autocomplete suggestions appearing)
589
+ * are NOT falsely detected as navigation events.
590
+ *
591
+ * NOTE: Previously this included a hash of the first 10 interactive node IDs,
592
+ * which caused false navigation detection when typing triggered autocomplete
593
+ * or other dynamic UI updates. See: https://github.com/lespaceman/agent-web-interface/issues/XXX
594
+ */
595
+ function computeDocId(snapshot) {
596
+ const url = new URL(snapshot.url);
597
+ // Only use origin + pathname for navigation detection
598
+ // Query params and fragments are ignored (same page, different state)
599
+ return hash(`${url.origin}:${url.pathname}`);
600
+ }
601
+ function computeUiHash(snapshot) {
602
+ const interactiveNodeIds = snapshot.nodes
603
+ .filter((n) => isInteractiveKind(n.kind) && n.state?.visible)
604
+ .map((n) => computeEid(n))
605
+ .join(',');
606
+ return hash(interactiveNodeIds).substring(0, 6);
607
+ }
608
+ function computeLayerHash(stack) {
609
+ return hash(stack.join(',')).substring(0, 6);
610
+ }
611
+ function hash(input) {
612
+ return createHash('sha256').update(input).digest('hex').substring(0, 12);
613
+ }
614
+ function getNodeLayer(node) {
615
+ const region = node.where.region ?? 'unknown';
616
+ return region === 'dialog' ? 'modal' : 'main';
617
+ }
618
+ //# sourceMappingURL=state-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../../src/state/state-manager.ts"],"names":[],"mappings":"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"}