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,579 @@
1
+ /**
2
+ * Execute Action
3
+ *
4
+ * Action execution wrapper with StateManager integration.
5
+ * Captures snapshot and generates StateHandle + Diff + Actionables response.
6
+ * Includes automatic retry logic for stale element errors.
7
+ *
8
+ * Navigation-aware click outcome model for better error classification.
9
+ */
10
+ import { compileSnapshot } from '../snapshot/index.js';
11
+ import { stabilizeDom } from '../delta/dom-stabilizer.js';
12
+ import { StateManager } from '../state/state-manager.js';
13
+ import { createHealthyRuntime } from '../state/health.types.js';
14
+ import { observationAccumulator } from '../observation/index.js';
15
+ import { ATTACHMENT_SIGNIFICANCE_THRESHOLD } from '../observation/observation.types.js';
16
+ import { waitForNetworkQuiet, ACTION_NETWORK_IDLE_TIMEOUT_MS, NAVIGATION_NETWORK_IDLE_TIMEOUT_MS, } from '../browser/page-stabilization.js';
17
+ import { getDependencyTracker, createObservedEffect } from '../form/index.js';
18
+ // ============================================================================
19
+ // State Manager Registry
20
+ // ============================================================================
21
+ /**
22
+ * Global registry of state managers (one per page).
23
+ */
24
+ const stateManagers = new Map();
25
+ /**
26
+ * Get or create state manager for a page.
27
+ *
28
+ * @param pageId - Page ID
29
+ * @returns State manager instance
30
+ */
31
+ export function getStateManager(pageId) {
32
+ if (!stateManagers.has(pageId)) {
33
+ stateManagers.set(pageId, new StateManager({ pageId }));
34
+ }
35
+ return stateManagers.get(pageId);
36
+ }
37
+ /**
38
+ * Remove state manager for a page (call on page close).
39
+ *
40
+ * @param pageId - Page ID
41
+ */
42
+ export function removeStateManager(pageId) {
43
+ stateManagers.delete(pageId);
44
+ }
45
+ /**
46
+ * Clear all state managers (call on session close).
47
+ */
48
+ export function clearAllStateManagers() {
49
+ stateManagers.clear();
50
+ }
51
+ // ============================================================================
52
+ // Dependency Tracking Helpers
53
+ // ============================================================================
54
+ /**
55
+ * Compute an ObservedEffect by comparing snapshots before and after an action.
56
+ *
57
+ * This function analyzes differences between two snapshots to determine:
58
+ * - Which elements became enabled/disabled
59
+ * - Which elements appeared/disappeared
60
+ * - Which elements had their values change
61
+ *
62
+ * @param triggerEid - EID of the element that triggered the action
63
+ * @param actionType - Type of action performed
64
+ * @param prevSnapshot - Snapshot before the action (null if first action)
65
+ * @param currSnapshot - Snapshot after the action
66
+ * @returns ObservedEffect if meaningful changes detected, null otherwise
67
+ */
68
+ function computeObservedEffect(triggerEid, actionType, prevSnapshot, currSnapshot) {
69
+ // Skip if no previous snapshot to compare
70
+ if (!prevSnapshot) {
71
+ return null;
72
+ }
73
+ // Build maps of enabled/visible states
74
+ const beforeEids = new Map();
75
+ const beforeVisible = new Set();
76
+ const beforeValues = new Map();
77
+ for (const node of prevSnapshot.nodes) {
78
+ beforeEids.set(node.node_id, node.state?.enabled ?? true);
79
+ if (node.state?.visible) {
80
+ beforeVisible.add(node.node_id);
81
+ }
82
+ if (node.attributes?.value !== undefined) {
83
+ beforeValues.set(node.node_id, node.attributes.value);
84
+ }
85
+ }
86
+ const afterEids = new Map();
87
+ const afterVisible = new Set();
88
+ const valueChanges = [];
89
+ for (const node of currSnapshot.nodes) {
90
+ afterEids.set(node.node_id, node.state?.enabled ?? true);
91
+ if (node.state?.visible) {
92
+ afterVisible.add(node.node_id);
93
+ }
94
+ // Detect value changes
95
+ const prevValue = beforeValues.get(node.node_id);
96
+ const currValue = node.attributes?.value;
97
+ if (currValue !== undefined && currValue !== prevValue) {
98
+ // Skip if this is the trigger element itself (self-change from typing)
99
+ if (node.node_id !== triggerEid) {
100
+ valueChanges.push(node.node_id);
101
+ }
102
+ }
103
+ }
104
+ // Create the observed effect
105
+ const effect = createObservedEffect(triggerEid, actionType, beforeEids, afterEids, beforeVisible, afterVisible, valueChanges);
106
+ // Only return if there are meaningful changes
107
+ const hasChanges = effect.enabled.length > 0 ||
108
+ effect.disabled.length > 0 ||
109
+ effect.appeared.length > 0 ||
110
+ effect.disappeared.length > 0 ||
111
+ effect.value_changed.length > 0;
112
+ return hasChanges ? effect : null;
113
+ }
114
+ /**
115
+ * Check if an error is a stale element error.
116
+ */
117
+ function isStaleElementError(err) {
118
+ if (!(err instanceof Error))
119
+ return false;
120
+ const message = err.message.toLowerCase();
121
+ return (message.includes('no node found for given backend id') ||
122
+ message.includes('protocol error (dom.scrollintoviewifneeded)') ||
123
+ message.includes('node is detached from document') ||
124
+ message.includes('node has been deleted'));
125
+ }
126
+ /**
127
+ * Capture snapshot without recovery (fallback path).
128
+ */
129
+ async function captureSnapshotFallback(handle) {
130
+ const snapshot = await compileSnapshot(handle.cdp, handle.page, handle.page_id);
131
+ return { snapshot, runtime_health: createHealthyRuntime() };
132
+ }
133
+ // ============================================================================
134
+ // Navigation-Aware Stabilization
135
+ // ============================================================================
136
+ /**
137
+ * Stabilize page after an action using tiered waiting strategy.
138
+ *
139
+ * This addresses the core issue: actions may trigger API calls that complete
140
+ * after DOM mutations settle. The tiered approach:
141
+ *
142
+ * 1. Wait for DOM to stabilize (MutationObserver) - catches SPA rendering
143
+ * 2. Wait for network to quiet down (networkidle) - catches pending API calls
144
+ * 3. If DOM stabilization fails (navigation), fall back to network idle wait
145
+ *
146
+ * Timeouts are generous but never throw - we proceed even if network stays busy
147
+ * (common with analytics, long-polling, websockets).
148
+ *
149
+ * @param page - Puppeteer Page instance
150
+ * @param networkTimeoutMs - Optional custom timeout for network idle (default: 3000ms)
151
+ * @returns Stabilization result with status
152
+ */
153
+ async function stabilizeAfterAction(page, networkTimeoutMs = ACTION_NETWORK_IDLE_TIMEOUT_MS) {
154
+ // Step 1: Try MutationObserver-based DOM stabilization first
155
+ const result = await stabilizeDom(page);
156
+ // Step 2: Handle based on DOM stabilization result
157
+ if (result.status === 'stable' || result.status === 'timeout') {
158
+ // DOM settled (or timed out) - now wait for network to quiet down
159
+ // This catches API calls that haven't rendered to DOM yet
160
+ const networkIdle = await waitForNetworkQuiet(page, networkTimeoutMs);
161
+ if (!networkIdle && result.status === 'stable') {
162
+ // DOM was stable but network didn't idle - add a note
163
+ return {
164
+ ...result,
165
+ warning: result.warning ?? 'Network did not reach idle state within timeout',
166
+ };
167
+ }
168
+ return result;
169
+ }
170
+ // status === 'error' means page.evaluate() failed, likely due to navigation
171
+ // Fall back to waiting for network idle on the new page
172
+ try {
173
+ // Wait for network to settle on the new page
174
+ await waitForNetworkQuiet(page, networkTimeoutMs);
175
+ return {
176
+ status: 'stable',
177
+ waitTimeMs: result.waitTimeMs,
178
+ warning: 'Navigation detected; waited for networkidle',
179
+ };
180
+ }
181
+ catch (waitError) {
182
+ // If network wait also fails, the page might be in an unusual state
183
+ // Return the original error but with additional context
184
+ const message = waitError instanceof Error ? waitError.message : String(waitError);
185
+ return {
186
+ status: 'error',
187
+ waitTimeMs: result.waitTimeMs,
188
+ warning: `${result.warning}. Fallback network wait also failed: ${message}`,
189
+ };
190
+ }
191
+ }
192
+ /**
193
+ * Stabilize page after explicit navigation (goto, back, forward, reload).
194
+ *
195
+ * Uses a longer network timeout since navigations typically trigger more
196
+ * requests than in-page actions.
197
+ *
198
+ * @param page - Puppeteer Page instance
199
+ * @returns Stabilization result with status
200
+ */
201
+ export async function stabilizeAfterNavigation(page) {
202
+ return stabilizeAfterAction(page, NAVIGATION_NETWORK_IDLE_TIMEOUT_MS);
203
+ }
204
+ /**
205
+ * Execute a mutating action with automatic snapshot capture and state response generation.
206
+ *
207
+ * Simple flow:
208
+ * 1. Record pre-action timestamp for observation capture
209
+ * 2. Execute action (try/catch with retry for stale elements)
210
+ * 3. Stabilize DOM
211
+ * 4. Capture observations from the action window
212
+ * 5. Capture snapshot
213
+ * 6. Generate state_response
214
+ * 7. Return {success, state_response, metadata}
215
+ *
216
+ * @param handle - Page handle with CDP client
217
+ * @param action - The action to execute
218
+ * @returns Action result with page brief and metadata
219
+ */
220
+ export async function executeAction(handle, action, captureSnapshot) {
221
+ let success = true;
222
+ let error;
223
+ // Record pre-action timestamp for observation capture
224
+ const actionStartTime = Date.now();
225
+ // Ensure observation accumulator is injected
226
+ await observationAccumulator.ensureInjected(handle.page);
227
+ // Execute action - if this throws, we catch and return error
228
+ try {
229
+ await action();
230
+ }
231
+ catch (err) {
232
+ success = false;
233
+ error = err instanceof Error ? err.message : String(err);
234
+ }
235
+ // Stabilize page after action (handles both SPA updates and full navigations)
236
+ await stabilizeAfterAction(handle.page);
237
+ // Capture observations from the action window
238
+ const observations = await observationAccumulator.getObservations(handle.page, actionStartTime);
239
+ // Capture snapshot
240
+ const capture = captureSnapshot ?? (() => captureSnapshotFallback(handle));
241
+ const captureResult = await capture();
242
+ const snapshot = captureResult.snapshot;
243
+ // Filter observations to reduce noise (threshold 5 requires semantic signals)
244
+ const filteredObservations = observationAccumulator.filterBySignificance(observations, ATTACHMENT_SIGNIFICANCE_THRESHOLD);
245
+ // Attach observations to snapshot if any were captured
246
+ if (filteredObservations.duringAction.length > 0 ||
247
+ filteredObservations.sincePrevious.length > 0) {
248
+ snapshot.observations = filteredObservations;
249
+ }
250
+ // Generate state response using StateManager
251
+ const stateManager = getStateManager(handle.page_id);
252
+ const state_response = stateManager.generateResponse(snapshot);
253
+ return {
254
+ success,
255
+ snapshot_id: snapshot.snapshot_id,
256
+ node_count: snapshot.meta.node_count,
257
+ interactive_count: snapshot.meta.interactive_count,
258
+ state_response,
259
+ error,
260
+ snapshot,
261
+ runtime_health: captureResult.runtime_health,
262
+ };
263
+ }
264
+ /**
265
+ * Execute an element-based action with automatic retry on stale element errors.
266
+ *
267
+ * If the element becomes stale, this will:
268
+ * 1. Capture a fresh snapshot
269
+ * 2. Find the element by label
270
+ * 3. Retry the action once with the fresh backend_node_id
271
+ *
272
+ * Also captures DOM observations during the action window.
273
+ *
274
+ * @param handle - Page handle with CDP client
275
+ * @param node - The target node from snapshot
276
+ * @param action - The action to execute (takes backend_node_id)
277
+ * @param snapshotStore - Snapshot store to update with fresh snapshot
278
+ * @returns Action result with page brief and metadata
279
+ */
280
+ export async function executeActionWithRetry(handle, node, action, snapshotStore, captureSnapshot) {
281
+ let success = true;
282
+ let error;
283
+ let retried = false;
284
+ // Record pre-action timestamp for observation capture
285
+ const actionStartTime = Date.now();
286
+ // Ensure observation accumulator is injected
287
+ await observationAccumulator.ensureInjected(handle.page);
288
+ const capture = captureSnapshot ?? (() => captureSnapshotFallback(handle));
289
+ // Try the action
290
+ try {
291
+ await action(node.backend_node_id);
292
+ }
293
+ catch (err) {
294
+ // Check if this is a stale element error
295
+ if (isStaleElementError(err)) {
296
+ retried = true;
297
+ try {
298
+ // Capture fresh snapshot
299
+ const freshSnapshot = (await capture()).snapshot;
300
+ // Update snapshot store if provided
301
+ if (snapshotStore) {
302
+ snapshotStore.store(handle.page_id, freshSnapshot);
303
+ }
304
+ // Find element by label in fresh snapshot
305
+ const freshNode = freshSnapshot.nodes.find((n) => n.label === node.label && n.kind === node.kind);
306
+ if (!freshNode) {
307
+ throw new Error(`Element no longer found after refresh: ${node.label}`);
308
+ }
309
+ // Retry action with fresh backend_node_id
310
+ await action(freshNode.backend_node_id);
311
+ }
312
+ catch (retryErr) {
313
+ success = false;
314
+ error =
315
+ retryErr instanceof Error
316
+ ? `Retry failed: ${retryErr.message}`
317
+ : `Retry failed: ${String(retryErr)}`;
318
+ }
319
+ }
320
+ else {
321
+ // Not a stale element error - propagate immediately
322
+ success = false;
323
+ error = err instanceof Error ? err.message : String(err);
324
+ }
325
+ }
326
+ // Stabilize page after action (handles both SPA updates and full navigations)
327
+ await stabilizeAfterAction(handle.page);
328
+ // Capture observations from the action window
329
+ const observations = await observationAccumulator.getObservations(handle.page, actionStartTime);
330
+ // Capture final snapshot
331
+ const captureResult = await capture();
332
+ const snapshot = captureResult.snapshot;
333
+ // Filter observations to reduce noise (threshold 5 requires semantic signals)
334
+ const filteredObservations = observationAccumulator.filterBySignificance(observations, ATTACHMENT_SIGNIFICANCE_THRESHOLD);
335
+ // Attach observations to snapshot if any were captured
336
+ if (filteredObservations.duringAction.length > 0 ||
337
+ filteredObservations.sincePrevious.length > 0) {
338
+ snapshot.observations = filteredObservations;
339
+ }
340
+ // Generate state response using StateManager
341
+ const stateManager = getStateManager(handle.page_id);
342
+ // Get previous snapshot BEFORE generateResponse shifts it
343
+ const prevSnapshot = stateManager.getPreviousSnapshot();
344
+ const state_response = stateManager.generateResponse(snapshot);
345
+ // Record effect for dependency tracking (after state response, so we have prevSnapshot)
346
+ if (success) {
347
+ const effect = computeObservedEffect(node.node_id, 'type', prevSnapshot, snapshot);
348
+ if (effect) {
349
+ getDependencyTracker().recordEffect(handle.page_id, effect);
350
+ }
351
+ }
352
+ // Add note about retry if it happened
353
+ if (retried && success) {
354
+ error = 'Element was stale; automatically retried with fresh reference';
355
+ }
356
+ return {
357
+ success,
358
+ snapshot_id: snapshot.snapshot_id,
359
+ node_count: snapshot.meta.node_count,
360
+ interactive_count: snapshot.meta.interactive_count,
361
+ state_response,
362
+ error,
363
+ snapshot,
364
+ runtime_health: captureResult.runtime_health,
365
+ };
366
+ }
367
+ /**
368
+ * Capture current navigation state (URL and loaderId).
369
+ *
370
+ * @param handle - Page handle with CDP client
371
+ * @returns Navigation state with URL and optional loaderId
372
+ */
373
+ async function captureNavigationState(handle) {
374
+ const url = handle.page.url();
375
+ let loaderId;
376
+ try {
377
+ const frameTree = await handle.cdp.send('Page.getFrameTree', undefined);
378
+ loaderId = frameTree.frameTree.frame.loaderId;
379
+ }
380
+ catch {
381
+ // Ignore - we can still detect navigation via URL
382
+ }
383
+ return { url, loaderId };
384
+ }
385
+ /**
386
+ * Check if navigation occurred between two states.
387
+ *
388
+ * @param before - State before action
389
+ * @param after - State after action
390
+ * @returns True if navigation detected
391
+ */
392
+ function checkNavigationOccurred(before, after) {
393
+ // URL changed = navigation
394
+ if (before.url !== after.url) {
395
+ return true;
396
+ }
397
+ // LoaderId changed (and both defined) = navigation
398
+ if (before.loaderId !== undefined &&
399
+ after.loaderId !== undefined &&
400
+ before.loaderId !== after.loaderId) {
401
+ return true;
402
+ }
403
+ return false;
404
+ }
405
+ /**
406
+ * Handle stale element retry logic.
407
+ *
408
+ * @param handle - Page handle
409
+ * @param node - Original target node
410
+ * @param action - Action to retry
411
+ * @param capture - Snapshot capture function
412
+ * @param snapshotStore - Optional snapshot store to update
413
+ * @returns Retry result with success/error/outcome
414
+ */
415
+ async function handleStaleElementRetry(handle, node, action, capture, snapshotStore) {
416
+ try {
417
+ // Capture fresh snapshot
418
+ const freshSnapshot = (await capture()).snapshot;
419
+ // Update snapshot store if provided
420
+ if (snapshotStore) {
421
+ snapshotStore.store(handle.page_id, freshSnapshot);
422
+ }
423
+ // Find element by label in fresh snapshot
424
+ const freshNode = freshSnapshot.nodes.find((n) => n.label === node.label && n.kind === node.kind);
425
+ if (!freshNode) {
426
+ return {
427
+ success: false,
428
+ error: `Element no longer found after refresh: ${node.label}`,
429
+ outcome: {
430
+ status: 'element_not_found',
431
+ eid: '', // Will be filled by caller if available
432
+ last_known_label: node.label,
433
+ },
434
+ };
435
+ }
436
+ // Retry action with fresh backend_node_id
437
+ await action(freshNode.backend_node_id);
438
+ return {
439
+ success: true,
440
+ outcome: { status: 'stale_element', reason: 'dom_mutation', retried: true },
441
+ };
442
+ }
443
+ catch (retryErr) {
444
+ return {
445
+ success: false,
446
+ error: retryErr instanceof Error
447
+ ? `Retry failed: ${retryErr.message}`
448
+ : `Retry failed: ${String(retryErr)}`,
449
+ outcome: { status: 'stale_element', reason: 'dom_mutation', retried: true },
450
+ };
451
+ }
452
+ }
453
+ // ============================================================================
454
+ // Navigation-Aware Click Outcome
455
+ // ============================================================================
456
+ /**
457
+ * Execute an element-based click action with navigation-aware outcome detection.
458
+ *
459
+ * This extends executeActionWithRetry with:
460
+ * - Pre-click URL/loaderId capture
461
+ * - Post-click navigation detection
462
+ * - ClickOutcome classification (success/navigated vs stale_element)
463
+ * - DOM observation capture during the action window
464
+ *
465
+ * @param handle - Page handle with CDP client
466
+ * @param node - The target node from snapshot
467
+ * @param action - The action to execute (takes backend_node_id)
468
+ * @param snapshotStore - Snapshot store to update with fresh snapshot
469
+ * @returns ActionResultWithOutcome including ClickOutcome
470
+ */
471
+ export async function executeActionWithOutcome(handle, node, action, snapshotStore, captureSnapshot) {
472
+ let success = true;
473
+ let error;
474
+ let retried = false;
475
+ let outcome;
476
+ // Record pre-action timestamp for observation capture
477
+ const actionStartTime = Date.now();
478
+ // Ensure observation accumulator is injected
479
+ await observationAccumulator.ensureInjected(handle.page);
480
+ const capture = captureSnapshot ?? (() => captureSnapshotFallback(handle));
481
+ // Capture pre-click navigation state
482
+ const preClickState = await captureNavigationState(handle);
483
+ // Try the action
484
+ try {
485
+ await action(node.backend_node_id);
486
+ // Action succeeded - check if navigation occurred
487
+ const postClickState = await captureNavigationState(handle);
488
+ const navigated = checkNavigationOccurred(preClickState, postClickState);
489
+ // Clear dependency tracker on navigation (old dependencies no longer valid)
490
+ if (navigated) {
491
+ getDependencyTracker().clearPage(handle.page_id);
492
+ }
493
+ outcome = { status: 'success', navigated };
494
+ }
495
+ catch (err) {
496
+ // Check if this is a stale element error
497
+ if (isStaleElementError(err)) {
498
+ // Check if navigation caused the staleness
499
+ const currentState = await captureNavigationState(handle);
500
+ const isNavigation = checkNavigationOccurred(preClickState, currentState);
501
+ if (isNavigation) {
502
+ // Element gone due to navigation - this is often success!
503
+ // Clear dependency tracker on navigation (old dependencies no longer valid)
504
+ getDependencyTracker().clearPage(handle.page_id);
505
+ outcome = { status: 'success', navigated: true };
506
+ // Don't retry - navigation happened
507
+ }
508
+ else {
509
+ // Element stale due to DOM mutation - try retry
510
+ retried = true;
511
+ const retryResult = await handleStaleElementRetry(handle, node, action, capture, snapshotStore);
512
+ success = retryResult.success;
513
+ error = retryResult.error;
514
+ outcome = retryResult.outcome;
515
+ }
516
+ }
517
+ else {
518
+ // Not a stale element error - propagate immediately
519
+ success = false;
520
+ error = err instanceof Error ? err.message : String(err);
521
+ outcome = { status: 'error', message: error };
522
+ }
523
+ }
524
+ // Stabilize page after action (handles both SPA updates and full navigations)
525
+ await stabilizeAfterAction(handle.page);
526
+ // Capture observations from the action window
527
+ const observations = await observationAccumulator.getObservations(handle.page, actionStartTime);
528
+ // Capture final snapshot
529
+ const captureResult = await capture();
530
+ const snapshot = captureResult.snapshot;
531
+ // Filter observations to reduce noise (threshold 5 requires semantic signals)
532
+ const filteredObservations = observationAccumulator.filterBySignificance(observations, ATTACHMENT_SIGNIFICANCE_THRESHOLD);
533
+ // Attach observations to snapshot if any were captured
534
+ if (filteredObservations.duringAction.length > 0 ||
535
+ filteredObservations.sincePrevious.length > 0) {
536
+ snapshot.observations = filteredObservations;
537
+ }
538
+ // Late navigation detection: SPA/Turbo frameworks change URL asynchronously
539
+ // after the click resolves but before stabilization completes.
540
+ // Re-check URL now that the page has stabilized.
541
+ if (outcome.status === 'success' && !outcome.navigated) {
542
+ const postStabilizeUrl = handle.page.url();
543
+ if (postStabilizeUrl !== preClickState.url) {
544
+ outcome = { status: 'success', navigated: true };
545
+ getDependencyTracker().clearPage(handle.page_id);
546
+ }
547
+ }
548
+ // Determine if click caused a navigation (used for trimming and dependency tracking)
549
+ const didNavigate = outcome.status === 'success' && outcome.navigated;
550
+ // Generate state response using StateManager
551
+ // Trim regions when navigation occurred (same rationale as navigate() tool)
552
+ const stateManager = getStateManager(handle.page_id);
553
+ // Get previous snapshot BEFORE generateResponse shifts it
554
+ const prevSnapshot = stateManager.getPreviousSnapshot();
555
+ const state_response = stateManager.generateResponse(snapshot, didNavigate ? { trimRegions: true } : undefined);
556
+ // Record effect for dependency tracking (skip if navigation occurred - tracker was cleared)
557
+ if (success && !didNavigate) {
558
+ const effect = computeObservedEffect(node.node_id, 'click', prevSnapshot, snapshot);
559
+ if (effect) {
560
+ getDependencyTracker().recordEffect(handle.page_id, effect);
561
+ }
562
+ }
563
+ // Add note about retry if it happened and we recovered
564
+ if (retried && success) {
565
+ error = 'Element was stale; automatically retried with fresh reference';
566
+ }
567
+ return {
568
+ success,
569
+ outcome,
570
+ snapshot_id: snapshot.snapshot_id,
571
+ node_count: snapshot.meta.node_count,
572
+ interactive_count: snapshot.meta.interactive_count,
573
+ state_response,
574
+ error,
575
+ snapshot,
576
+ runtime_health: captureResult.runtime_health,
577
+ };
578
+ }
579
+ //# sourceMappingURL=execute-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-action.js","sourceRoot":"","sources":["../../../src/tools/execute-action.ts"],"names":[],"mappings":"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"}