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,93 @@
1
+ /**
2
+ * Health Types
3
+ *
4
+ * Types for tracking CDP session health, snapshot capture health,
5
+ * and runtime health information in tool responses.
6
+ *
7
+ * These types enable:
8
+ * - Specific failure classification (not just success/failure)
9
+ * - Degraded state detection (connected but CDP dead)
10
+ * - Recovery telemetry in responses
11
+ */
12
+ /**
13
+ * Snapshot health codes - specific reasons for snapshot failures.
14
+ * More granular than boolean valid/invalid.
15
+ */
16
+ export type SnapshotHealthCode = 'HEALTHY' | 'PENDING_DOM' | 'AX_EMPTY' | 'DOM_EMPTY' | 'CDP_SESSION_DEAD' | 'UNKNOWN';
17
+ /**
18
+ * CDP session health status.
19
+ * Tracks whether the CDP session is operational and if recovery occurred.
20
+ */
21
+ export interface CdpHealth {
22
+ /** Whether CDP session is operational */
23
+ ok: boolean;
24
+ /** Whether recovery was attempted and succeeded */
25
+ recovered?: boolean;
26
+ /** Recovery method used if recovery occurred */
27
+ recovery_method?: 'rebind';
28
+ /** Error message if not ok */
29
+ error?: string;
30
+ }
31
+ /**
32
+ * Detailed CDP health diagnostics from PuppeteerCdpClient.
33
+ */
34
+ export interface CdpHealthDiagnostics {
35
+ /** Whether session is active */
36
+ active: boolean;
37
+ /** Last error message if any */
38
+ lastError?: string;
39
+ /** Timestamp of last error */
40
+ lastErrorTime?: Date;
41
+ }
42
+ /**
43
+ * Snapshot capture health status.
44
+ * Tracks whether snapshot is usable and recovery details.
45
+ */
46
+ export interface SnapshotCaptureHealth {
47
+ /** Whether snapshot is usable */
48
+ ok: boolean;
49
+ /** Whether recovery was attempted */
50
+ recovered?: boolean;
51
+ /** Health code explaining status */
52
+ code: SnapshotHealthCode;
53
+ /** Number of capture attempts */
54
+ attempts?: number;
55
+ /** Human-readable message */
56
+ message?: string;
57
+ }
58
+ /**
59
+ * Runtime health info included in tool responses.
60
+ * This is additive - existing tool responses continue to work.
61
+ */
62
+ export interface RuntimeHealth {
63
+ /** CDP session health */
64
+ cdp: CdpHealth;
65
+ /** Snapshot capture health */
66
+ snapshot: SnapshotCaptureHealth;
67
+ }
68
+ /**
69
+ * Connection health for session-level status.
70
+ *
71
+ * Goes beyond binary connected/not-connected:
72
+ * - 'healthy': Browser connected, all CDP sessions operational
73
+ * - 'degraded': Browser connected, but some CDP sessions dead (recoverable)
74
+ * - 'failed': Browser disconnected
75
+ */
76
+ export type ConnectionHealth = 'healthy' | 'degraded' | 'failed';
77
+ /**
78
+ * Create a healthy runtime health status.
79
+ */
80
+ export declare function createHealthyRuntime(): RuntimeHealth;
81
+ /**
82
+ * Create a runtime health status with CDP recovery.
83
+ */
84
+ export declare function createRecoveredCdpRuntime(snapshotCode: SnapshotHealthCode): RuntimeHealth;
85
+ /**
86
+ * Create a runtime health status for snapshot failure.
87
+ */
88
+ export declare function createSnapshotFailureRuntime(code: SnapshotHealthCode, message?: string, attempts?: number): RuntimeHealth;
89
+ /**
90
+ * Create a runtime health status for CDP failure (not recoverable).
91
+ */
92
+ export declare function createCdpFailureRuntime(error: string): RuntimeHealth;
93
+ //# sourceMappingURL=health.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.types.d.ts","sourceRoot":"","sources":["../../../src/state/health.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,aAAa,GACb,UAAU,GACV,WAAW,GACX,kBAAkB,GAClB,SAAS,CAAC;AAMd;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB;AAMD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,8BAA8B;IAC9B,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAMjE;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,CAKpD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,kBAAkB,GAAG,aAAa,CAKzF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAUf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAKpE"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Health Types
3
+ *
4
+ * Types for tracking CDP session health, snapshot capture health,
5
+ * and runtime health information in tool responses.
6
+ *
7
+ * These types enable:
8
+ * - Specific failure classification (not just success/failure)
9
+ * - Degraded state detection (connected but CDP dead)
10
+ * - Recovery telemetry in responses
11
+ */
12
+ // ============================================================================
13
+ // Helpers
14
+ // ============================================================================
15
+ /**
16
+ * Create a healthy runtime health status.
17
+ */
18
+ export function createHealthyRuntime() {
19
+ return {
20
+ cdp: { ok: true },
21
+ snapshot: { ok: true, code: 'HEALTHY' },
22
+ };
23
+ }
24
+ /**
25
+ * Create a runtime health status with CDP recovery.
26
+ */
27
+ export function createRecoveredCdpRuntime(snapshotCode) {
28
+ return {
29
+ cdp: { ok: true, recovered: true, recovery_method: 'rebind' },
30
+ snapshot: { ok: snapshotCode === 'HEALTHY', code: snapshotCode },
31
+ };
32
+ }
33
+ /**
34
+ * Create a runtime health status for snapshot failure.
35
+ */
36
+ export function createSnapshotFailureRuntime(code, message, attempts) {
37
+ return {
38
+ cdp: { ok: true },
39
+ snapshot: {
40
+ ok: false,
41
+ code,
42
+ message,
43
+ attempts,
44
+ },
45
+ };
46
+ }
47
+ /**
48
+ * Create a runtime health status for CDP failure (not recoverable).
49
+ */
50
+ export function createCdpFailureRuntime(error) {
51
+ return {
52
+ cdp: { ok: false, error },
53
+ snapshot: { ok: false, code: 'CDP_SESSION_DEAD' },
54
+ };
55
+ }
56
+ //# sourceMappingURL=health.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.types.js","sourceRoot":"","sources":["../../../src/state/health.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmGH,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;QACjB,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,YAAgC;IACxE,OAAO;QACL,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE;QAC7D,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,KAAK,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;KACjE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAwB,EACxB,OAAgB,EAChB,QAAiB;IAEjB,OAAO;QACL,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;QACjB,QAAQ,EAAE;YACR,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,OAAO;YACP,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO;QACL,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QACzB,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Layer Detector
3
+ *
4
+ * Detect UI layers (modal > popover > drawer > main) to scope actionables correctly.
5
+ * Only return actionables from the active (topmost) layer.
6
+ */
7
+ import type { BaseSnapshot } from '../snapshot/snapshot.types.js';
8
+ import type { LayerDetectionResult } from './types.js';
9
+ /**
10
+ * Detect layers in the snapshot.
11
+ * Returns stack of layers with active (topmost) layer.
12
+ *
13
+ * Detection priority order:
14
+ * 1. Modal - role="dialog" + aria-modal="true", <dialog open>, high z-index + backdrop
15
+ * 2. Drawer - role="complementary" + edge-positioned + high z-index
16
+ * 3. Popover - role="menu", role="listbox" + z-index > 100
17
+ * 4. Main - Always present as base layer
18
+ *
19
+ * @param snapshot - Compiled snapshot
20
+ * @returns Layer detection result
21
+ */
22
+ export declare function detectLayers(snapshot: BaseSnapshot): LayerDetectionResult;
23
+ //# sourceMappingURL=layer-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-detector.d.ts","sourceRoot":"","sources":["../../../src/state/layer-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAA6B,MAAM,YAAY,CAAC;AAOlF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,oBAAoB,CAuDzE"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Layer Detector
3
+ *
4
+ * Detect UI layers (modal > popover > drawer > main) to scope actionables correctly.
5
+ * Only return actionables from the active (topmost) layer.
6
+ */
7
+ import { computeEid } from './element-identity.js';
8
+ // ============================================================================
9
+ // Layer Detection
10
+ // ============================================================================
11
+ /**
12
+ * Detect layers in the snapshot.
13
+ * Returns stack of layers with active (topmost) layer.
14
+ *
15
+ * Detection priority order:
16
+ * 1. Modal - role="dialog" + aria-modal="true", <dialog open>, high z-index + backdrop
17
+ * 2. Drawer - role="complementary" + edge-positioned + high z-index
18
+ * 3. Popover - role="menu", role="listbox" + z-index > 100
19
+ * 4. Main - Always present as base layer
20
+ *
21
+ * @param snapshot - Compiled snapshot
22
+ * @returns Layer detection result
23
+ */
24
+ export function detectLayers(snapshot) {
25
+ const candidates = [];
26
+ // Scan nodes for layer patterns
27
+ for (const node of snapshot.nodes) {
28
+ // Modal detection (highest priority)
29
+ const modalMatch = detectModal(node);
30
+ if (modalMatch) {
31
+ candidates.push(modalMatch);
32
+ continue;
33
+ }
34
+ // Drawer detection
35
+ const drawerMatch = detectDrawer(node);
36
+ if (drawerMatch) {
37
+ candidates.push(drawerMatch);
38
+ continue;
39
+ }
40
+ // Popover detection
41
+ const popoverMatch = detectPopover(node);
42
+ if (popoverMatch) {
43
+ candidates.push(popoverMatch);
44
+ }
45
+ }
46
+ // Sort by z-index (highest first), filter low confidence
47
+ candidates.sort((a, b) => (b.zIndex ?? 0) - (a.zIndex ?? 0));
48
+ const layers = candidates.filter((c) => c.confidence > 0.6);
49
+ // Build stack: main is always present
50
+ const stack = [{ type: 'main', isModal: false }];
51
+ // Add detected layers
52
+ for (const layer of layers) {
53
+ stack.push({
54
+ type: layer.type,
55
+ rootEid: layer.rootEid,
56
+ zIndex: layer.zIndex,
57
+ isModal: layer.isModal,
58
+ });
59
+ }
60
+ // Determine active layer (topmost)
61
+ const active = stack[stack.length - 1].type;
62
+ // Find focused element
63
+ const focusEid = detectFocusedElement(snapshot);
64
+ return {
65
+ stack,
66
+ active,
67
+ focusEid,
68
+ pointerLock: false, // TODO: detect from page
69
+ };
70
+ }
71
+ // ============================================================================
72
+ // Modal Detection
73
+ // ============================================================================
74
+ /**
75
+ * Detect if node is a modal layer.
76
+ *
77
+ * Patterns:
78
+ * - role="dialog" or role="alertdialog" + aria-modal="true"
79
+ * - <dialog open>
80
+ * - High z-index (>1000) with dialog role
81
+ * - React/Vue portal containers with modal content
82
+ *
83
+ * @param node - Node to check
84
+ * @returns Layer candidate or null
85
+ */
86
+ function detectModal(node) {
87
+ const attrs = node.attributes;
88
+ const role = node.attributes?.role;
89
+ // Pattern 1: role="dialog" or role="alertdialog" + aria-modal="true"
90
+ if ((role === 'dialog' || role === 'alertdialog') && attrs?.['aria-modal'] === 'true') {
91
+ return {
92
+ type: 'modal',
93
+ rootEid: computeEid(node, 'modal'),
94
+ zIndex: node.layout.zIndex ?? 0,
95
+ isModal: true,
96
+ confidence: 1.0,
97
+ };
98
+ }
99
+ // Pattern 2: <dialog> element with open attribute
100
+ if (node.kind === 'dialog' && attrs?.open === true) {
101
+ return {
102
+ type: 'modal',
103
+ rootEid: computeEid(node, 'modal'),
104
+ zIndex: node.layout.zIndex ?? 0,
105
+ isModal: true,
106
+ confidence: 0.95,
107
+ };
108
+ }
109
+ // Pattern 3: alertdialog without aria-modal (still modal by nature)
110
+ if (role === 'alertdialog') {
111
+ return {
112
+ type: 'modal',
113
+ rootEid: computeEid(node, 'modal'),
114
+ zIndex: node.layout.zIndex ?? 0,
115
+ isModal: true,
116
+ confidence: 0.9,
117
+ };
118
+ }
119
+ // Pattern 4: High z-index dialog (>1000)
120
+ if (role === 'dialog' && (node.layout.zIndex ?? 0) > 1000) {
121
+ return {
122
+ type: 'modal',
123
+ rootEid: computeEid(node, 'modal'),
124
+ zIndex: node.layout.zIndex ?? 0,
125
+ isModal: true,
126
+ confidence: 0.8,
127
+ };
128
+ }
129
+ // Pattern 5: Portal container detection (React/Vue/Angular)
130
+ // Common portal container patterns
131
+ if (isPortalContainer(node, attrs)) {
132
+ return {
133
+ type: 'modal',
134
+ rootEid: computeEid(node, 'modal'),
135
+ zIndex: node.layout.zIndex ?? 0,
136
+ isModal: true,
137
+ confidence: 0.75,
138
+ };
139
+ }
140
+ return null;
141
+ }
142
+ /**
143
+ * Check if node is a portal container (React/Vue/Angular patterns).
144
+ *
145
+ * @param node - Node to check
146
+ * @param attrs - Node attributes
147
+ * @returns True if portal container
148
+ */
149
+ function isPortalContainer(node, attrs) {
150
+ const zIndex = node.layout.zIndex ?? 0;
151
+ // Must have high z-index
152
+ if (zIndex < 100) {
153
+ return false;
154
+ }
155
+ // Check for common portal container attributes/classes
156
+ const className = attrs?.class ?? attrs?.className;
157
+ if (typeof className === 'string') {
158
+ const portalPatterns = [
159
+ 'modal',
160
+ 'dialog',
161
+ 'overlay',
162
+ 'portal',
163
+ 'ReactModal',
164
+ 'MuiModal',
165
+ 'chakra-modal',
166
+ 'ant-modal',
167
+ 'el-dialog', // Element UI
168
+ 'v-dialog', // Vuetify
169
+ ];
170
+ const lowerClassName = className.toLowerCase();
171
+ if (portalPatterns.some((p) => lowerClassName.includes(p.toLowerCase()))) {
172
+ return true;
173
+ }
174
+ }
175
+ // Check for data attributes indicating portal
176
+ const dataPortal = attrs?.['data-portal'];
177
+ const dataOverlay = attrs?.['data-overlay'];
178
+ const dataModal = attrs?.['data-modal'];
179
+ if (dataPortal === true || dataOverlay === true || dataModal === true) {
180
+ return true;
181
+ }
182
+ // Check for aria-hidden siblings pattern (portal often has aria-hidden on root)
183
+ // This is detected by high z-index + covering most of viewport
184
+ const bbox = node.layout.bbox;
185
+ if (bbox && zIndex > 500) {
186
+ // If element covers significant viewport area with high z-index
187
+ if (bbox.w > 200 && bbox.h > 200) {
188
+ return true;
189
+ }
190
+ }
191
+ return false;
192
+ }
193
+ // ============================================================================
194
+ // Drawer Detection
195
+ // ============================================================================
196
+ /**
197
+ * Detect if node is a drawer layer.
198
+ *
199
+ * Patterns:
200
+ * - role="complementary" or role="navigation" + edge-positioned + high z-index
201
+ * - Slide-in panel patterns from UI libraries
202
+ *
203
+ * @param node - Node to check
204
+ * @returns Layer candidate or null
205
+ */
206
+ function detectDrawer(node) {
207
+ const role = node.attributes?.role;
208
+ const zIndex = node.layout.zIndex ?? 0;
209
+ const attrs = node.attributes;
210
+ // Must have moderate z-index for overlay drawer
211
+ if (zIndex <= 50) {
212
+ return null;
213
+ }
214
+ // Pattern 1: Complementary role with high z-index
215
+ if (role === 'complementary' && zIndex > 100) {
216
+ return {
217
+ type: 'drawer',
218
+ rootEid: computeEid(node, 'drawer'),
219
+ zIndex,
220
+ isModal: false,
221
+ confidence: 0.7,
222
+ };
223
+ }
224
+ // Pattern 2: Navigation role with high z-index + edge position
225
+ if (role === 'navigation' && zIndex > 100) {
226
+ const bbox = node.layout.bbox;
227
+ if (bbox && isEdgePositioned(bbox)) {
228
+ return {
229
+ type: 'drawer',
230
+ rootEid: computeEid(node, 'drawer'),
231
+ zIndex,
232
+ isModal: false,
233
+ confidence: 0.75,
234
+ };
235
+ }
236
+ }
237
+ // Pattern 3: Common drawer class patterns
238
+ const className = attrs?.class ?? attrs?.className;
239
+ if (typeof className === 'string' && zIndex > 50) {
240
+ const drawerPatterns = [
241
+ 'drawer',
242
+ 'sidebar',
243
+ 'side-nav',
244
+ 'sidenav',
245
+ 'offcanvas',
246
+ 'slide-in',
247
+ 'MuiDrawer',
248
+ 'ant-drawer',
249
+ 'el-drawer',
250
+ 'v-navigation-drawer',
251
+ ];
252
+ const lowerClassName = className.toLowerCase();
253
+ if (drawerPatterns.some((p) => lowerClassName.includes(p.toLowerCase()))) {
254
+ return {
255
+ type: 'drawer',
256
+ rootEid: computeEid(node, 'drawer'),
257
+ zIndex,
258
+ isModal: false,
259
+ confidence: 0.7,
260
+ };
261
+ }
262
+ }
263
+ return null;
264
+ }
265
+ /**
266
+ * Check if bounding box is edge-positioned (left or right edge).
267
+ *
268
+ * @param bbox - Bounding box {x, y, w, h}
269
+ * @returns True if positioned at edge
270
+ */
271
+ function isEdgePositioned(bbox) {
272
+ // Left edge: x near 0
273
+ if (bbox.x < 10) {
274
+ return true;
275
+ }
276
+ // Right edge: x + width near typical viewport widths
277
+ // This is a heuristic - ideally we'd have viewport width
278
+ const rightEdge = bbox.x + bbox.w;
279
+ if (rightEdge > 1200 && bbox.x > 800) {
280
+ return true;
281
+ }
282
+ return false;
283
+ }
284
+ // ============================================================================
285
+ // Popover Detection
286
+ // ============================================================================
287
+ /**
288
+ * Detect if node is a popover layer.
289
+ *
290
+ * Patterns:
291
+ * - role="menu", "listbox", "tooltip", "dialog" (non-modal) + z-index > 100
292
+ * - Dropdown/popup class patterns
293
+ *
294
+ * @param node - Node to check
295
+ * @returns Layer candidate or null
296
+ */
297
+ function detectPopover(node) {
298
+ const role = node.attributes?.role;
299
+ const zIndex = node.layout.zIndex ?? 0;
300
+ const attrs = node.attributes;
301
+ if (zIndex <= 100) {
302
+ return null;
303
+ }
304
+ // Pattern 1: Standard popover roles
305
+ const popoverRoles = ['menu', 'listbox', 'tooltip', 'tree'];
306
+ if (role && popoverRoles.includes(role)) {
307
+ return {
308
+ type: 'popover',
309
+ rootEid: computeEid(node, 'popover'),
310
+ zIndex,
311
+ isModal: false,
312
+ confidence: 0.8,
313
+ };
314
+ }
315
+ // Pattern 2: Non-modal dialog (popup)
316
+ if (role === 'dialog' && attrs?.['aria-modal'] !== 'true') {
317
+ return {
318
+ type: 'popover',
319
+ rootEid: computeEid(node, 'popover'),
320
+ zIndex,
321
+ isModal: false,
322
+ confidence: 0.6,
323
+ };
324
+ }
325
+ // Pattern 3: Common popover/dropdown class patterns
326
+ const className = attrs?.class ?? attrs?.className;
327
+ if (typeof className === 'string') {
328
+ const popoverPatterns = [
329
+ 'dropdown',
330
+ 'popover',
331
+ 'popup',
332
+ 'tooltip',
333
+ 'menu',
334
+ 'autocomplete',
335
+ 'suggestions',
336
+ 'MuiPopover',
337
+ 'MuiMenu',
338
+ 'ant-dropdown',
339
+ 'el-dropdown',
340
+ 'el-popover',
341
+ ];
342
+ const lowerClassName = className.toLowerCase();
343
+ if (popoverPatterns.some((p) => lowerClassName.includes(p.toLowerCase()))) {
344
+ return {
345
+ type: 'popover',
346
+ rootEid: computeEid(node, 'popover'),
347
+ zIndex,
348
+ isModal: false,
349
+ confidence: 0.65,
350
+ };
351
+ }
352
+ }
353
+ return null;
354
+ }
355
+ // ============================================================================
356
+ // Focused Element Detection
357
+ // ============================================================================
358
+ /**
359
+ * Find currently focused element in snapshot.
360
+ *
361
+ * @param snapshot - Compiled snapshot
362
+ * @returns EID of focused element or undefined
363
+ */
364
+ function detectFocusedElement(snapshot) {
365
+ const focusedNode = snapshot.nodes.find((n) => n.state?.focused);
366
+ return focusedNode ? computeEid(focusedNode) : undefined;
367
+ }
368
+ //# sourceMappingURL=layer-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-detector.js","sourceRoot":"","sources":["../../../src/state/layer-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Locator Generator
3
+ *
4
+ * Generate stable locators for actionable elements.
5
+ * Preference order: AX (accessibility tree) > CSS > XPath (avoid)
6
+ *
7
+ * Locators are layer-scoped when in modal/drawer/popover layers.
8
+ */
9
+ import type { ReadableNode } from '../snapshot/snapshot.types.js';
10
+ import type { LocatorInfo } from './types.js';
11
+ /**
12
+ * Generate locator information for a node.
13
+ * Always includes preferred AX locator, optionally includes CSS fallback.
14
+ * Locators are scoped to the active layer when not in main.
15
+ *
16
+ * @param node - Node to generate locator for
17
+ * @param layer - Active layer for scoping (optional)
18
+ * @returns Locator information
19
+ */
20
+ export declare function generateLocator(node: ReadableNode, layer?: string): LocatorInfo;
21
+ //# sourceMappingURL=locator-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator-generator.d.ts","sourceRoot":"","sources":["../../../src/state/locator-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA+B9C;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAmB/E"}