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,403 @@
1
+ /**
2
+ * EID Linker
3
+ *
4
+ * Links DOM observations to snapshot nodes by semantic matching.
5
+ * Since observations are captured in browser context (no access to CDP backend_node_id),
6
+ * we perform post-hoc matching after snapshot capture using semantic signals:
7
+ * - Tag → Kind mapping
8
+ * - Role matching
9
+ * - Label/text fuzzy matching
10
+ */
11
+ import { fuzzyTokensMatch, tokenizeForMatching } from '../lib/text-utils.js';
12
+ // ============================================================================
13
+ // Scoring Constants
14
+ // ============================================================================
15
+ /** Score contribution for tag/kind match (required for any match) */
16
+ const SCORE_TAG_MATCH = 0.3;
17
+ /** Score contribution for ARIA role match */
18
+ const SCORE_ROLE_MATCH = 0.25;
19
+ /** Score contribution for text/label match */
20
+ const SCORE_TEXT_MATCH = 0.3;
21
+ /** Score contribution for dialog context match */
22
+ const SCORE_DIALOG_CONTEXT = 0.15;
23
+ /**
24
+ * Estimated delay in ms for elements that appeared after initial page load.
25
+ * Used when appearedAfterDelay signal is true but exact timing is unavailable.
26
+ * Based on typical async content loading patterns (API responses, lazy loading).
27
+ */
28
+ const ESTIMATED_DELAY_MS = 200;
29
+ // ============================================================================
30
+ // Tag to Kind Mapping
31
+ // ============================================================================
32
+ /**
33
+ * Map HTML tags from observations to possible NodeKind values in snapshots.
34
+ * A tag can map to multiple kinds since role can change the semantic meaning.
35
+ */
36
+ const TAG_TO_KINDS = {
37
+ // Links
38
+ a: ['link'],
39
+ // Buttons
40
+ button: ['button'],
41
+ // Inputs
42
+ input: ['input', 'checkbox', 'radio', 'switch', 'slider'],
43
+ textarea: ['textarea'],
44
+ select: ['select', 'combobox'],
45
+ // Structural with role variants
46
+ div: ['generic', 'dialog', 'section', 'button', 'link'],
47
+ span: ['generic', 'text'],
48
+ section: ['section', 'generic'],
49
+ // Dialog-specific
50
+ dialog: ['dialog'],
51
+ // Navigation
52
+ nav: ['navigation'],
53
+ form: ['form'],
54
+ // Content
55
+ h1: ['heading'],
56
+ h2: ['heading'],
57
+ h3: ['heading'],
58
+ h4: ['heading'],
59
+ h5: ['heading'],
60
+ h6: ['heading'],
61
+ p: ['paragraph', 'text'],
62
+ img: ['image'],
63
+ // Lists
64
+ ul: ['list'],
65
+ ol: ['list'],
66
+ li: ['listitem'],
67
+ // Media
68
+ video: ['media'],
69
+ audio: ['media'],
70
+ // Table
71
+ table: ['table'],
72
+ };
73
+ /**
74
+ * Role to Kind mapping - when observation has explicit ARIA role.
75
+ */
76
+ const ROLE_TO_KIND = {
77
+ alert: 'generic', // alerts are typically generic divs with role
78
+ alertdialog: 'dialog',
79
+ dialog: 'dialog',
80
+ button: 'button',
81
+ link: 'link',
82
+ textbox: 'input',
83
+ checkbox: 'checkbox',
84
+ radio: 'radio',
85
+ combobox: 'combobox',
86
+ listbox: 'combobox',
87
+ menu: 'navigation',
88
+ menuitem: 'menuitem',
89
+ tab: 'tab',
90
+ tabpanel: 'section',
91
+ navigation: 'navigation',
92
+ form: 'form',
93
+ search: 'form',
94
+ };
95
+ // ============================================================================
96
+ // Core Functions
97
+ // ============================================================================
98
+ /**
99
+ * Link observations to snapshot nodes by computing eids.
100
+ *
101
+ * Mutates observations in-place, setting the `eid` field for matched observations.
102
+ * Only processes 'appeared' observations (disappeared elements don't exist in snapshot).
103
+ *
104
+ * @param observations - Observation groups to link
105
+ * @param snapshot - Current snapshot to match against
106
+ * @param registry - Element registry for eid lookup
107
+ * @param options - Matching configuration
108
+ * @returns Statistics about linking operation
109
+ */
110
+ export function linkObservationsToSnapshot(observations, snapshot, registry, options = {}) {
111
+ // Build index once for efficient lookup
112
+ const nodeIndex = buildNodeIndex(snapshot);
113
+ // Pre-filter interactive nodes once (O(n)) instead of per-observation (O(m*n))
114
+ const interactiveNodes = buildInteractiveNodeList(snapshot);
115
+ let linked = 0;
116
+ let unlinked = 0;
117
+ // Collect all appeared observations from both groups
118
+ const toProcess = [
119
+ ...observations.duringAction.filter((o) => o.type === 'appeared'),
120
+ ...observations.sincePrevious.filter((o) => o.type === 'appeared'),
121
+ ];
122
+ for (const observation of toProcess) {
123
+ const match = findBestMatch(observation, nodeIndex, options);
124
+ if (match) {
125
+ // Look up eid from registry using backend_node_id
126
+ const eid = registry.getEidByBackendNodeId(match.backend_node_id);
127
+ if (eid) {
128
+ observation.eid = eid;
129
+ // Extract children from the matched container using pre-filtered list
130
+ const children = extractObservationChildren(match, interactiveNodes, registry);
131
+ if (children.length > 0) {
132
+ observation.children = children;
133
+ }
134
+ // Extract delay from appearedAfterDelay signal
135
+ if (observation.signals.appearedAfterDelay) {
136
+ observation.delayMs = ESTIMATED_DELAY_MS;
137
+ }
138
+ linked++;
139
+ }
140
+ else {
141
+ unlinked++;
142
+ }
143
+ }
144
+ else {
145
+ unlinked++;
146
+ }
147
+ }
148
+ return {
149
+ linked,
150
+ unlinked,
151
+ total: toProcess.length,
152
+ };
153
+ }
154
+ /**
155
+ * Build an index of snapshot nodes by kind for efficient lookup.
156
+ *
157
+ * @param snapshot - Snapshot to index
158
+ * @returns Map from NodeKind to array of nodes
159
+ */
160
+ export function buildNodeIndex(snapshot) {
161
+ const index = new Map();
162
+ for (const node of snapshot.nodes) {
163
+ const kind = node.kind;
164
+ const nodes = index.get(kind) ?? [];
165
+ nodes.push(node);
166
+ index.set(kind, nodes);
167
+ }
168
+ return index;
169
+ }
170
+ /**
171
+ * Find the best matching node for an observation.
172
+ *
173
+ * @param observation - The observation to match
174
+ * @param nodeIndex - Pre-built index of nodes by kind
175
+ * @param options - Matching options
176
+ * @returns Best matching node or undefined if no match meets threshold
177
+ */
178
+ export function findBestMatch(observation, nodeIndex, options = {}) {
179
+ const { minMatchScore = 0.5 } = options;
180
+ // Get candidate kinds based on tag and role
181
+ const candidateKinds = getCandidateKinds(observation);
182
+ // Collect all candidate nodes
183
+ const candidates = [];
184
+ for (const kind of candidateKinds) {
185
+ const nodesOfKind = nodeIndex.get(kind);
186
+ if (nodesOfKind) {
187
+ candidates.push(...nodesOfKind);
188
+ }
189
+ }
190
+ if (candidates.length === 0) {
191
+ return undefined;
192
+ }
193
+ // Score each candidate and find best match
194
+ let bestMatch;
195
+ let bestScore = minMatchScore; // Must exceed threshold
196
+ for (const node of candidates) {
197
+ const score = computeMatchScore(observation, node, options);
198
+ if (score > bestScore) {
199
+ bestScore = score;
200
+ bestMatch = node;
201
+ }
202
+ }
203
+ return bestMatch;
204
+ }
205
+ /**
206
+ * Get candidate NodeKind values for an observation based on tag and role.
207
+ */
208
+ export function getCandidateKinds(observation) {
209
+ const tag = observation.content.tag.toLowerCase();
210
+ const role = observation.content.role?.toLowerCase();
211
+ const kinds = new Set();
212
+ // Add kinds from tag mapping
213
+ const tagKinds = TAG_TO_KINDS[tag];
214
+ if (tagKinds) {
215
+ for (const kind of tagKinds) {
216
+ kinds.add(kind);
217
+ }
218
+ }
219
+ // Add kind from role mapping (higher priority when present)
220
+ if (role && role in ROLE_TO_KIND) {
221
+ kinds.add(ROLE_TO_KIND[role]);
222
+ }
223
+ // Fallback to generic if nothing matched
224
+ if (kinds.size === 0) {
225
+ kinds.add('generic');
226
+ }
227
+ return Array.from(kinds);
228
+ }
229
+ /**
230
+ * Compute match score between an observation and a snapshot node.
231
+ *
232
+ * Scoring breakdown:
233
+ * - Tag/Kind match: 0.3 (required - if no match, return 0)
234
+ * - Role match: 0.25
235
+ * - Label fuzzy match: 0.3
236
+ * - Dialog context match: 0.15
237
+ *
238
+ * @param observation - DOM observation
239
+ * @param node - Snapshot node
240
+ * @param options - Matching options
241
+ * @returns Score from 0-1 (0 = no match, 1 = perfect match)
242
+ */
243
+ export function computeMatchScore(observation, node, options = {}) {
244
+ const { fuzzyTextMatch = true, minTokenOverlap = 0.5 } = options;
245
+ const content = observation.content;
246
+ let score = 0;
247
+ // Tag/Kind match check (required)
248
+ const candidateKinds = getCandidateKinds(observation);
249
+ if (!candidateKinds.includes(node.kind)) {
250
+ return 0; // No match possible
251
+ }
252
+ score += SCORE_TAG_MATCH;
253
+ // Role match (when observation has explicit role that matches node kind)
254
+ const role = content.role?.toLowerCase();
255
+ if (role &&
256
+ role in ROLE_TO_KIND &&
257
+ ROLE_TO_KIND[role] === node.kind) {
258
+ score += SCORE_ROLE_MATCH;
259
+ }
260
+ // Label/text matching
261
+ if (content.text && node.label) {
262
+ const normalizedObsText = content.text.toLowerCase().trim();
263
+ const normalizedNodeLabel = node.label.toLowerCase().trim();
264
+ // Exact match
265
+ if (normalizedObsText === normalizedNodeLabel) {
266
+ score += SCORE_TEXT_MATCH;
267
+ }
268
+ else if (fuzzyTextMatch) {
269
+ // Fuzzy match
270
+ const obsTokens = tokenizeForMatching(normalizedObsText, 10, 2);
271
+ const nodeTokens = tokenizeForMatching(normalizedNodeLabel, 10, 2);
272
+ const result = fuzzyTokensMatch(nodeTokens, obsTokens, { minTokenOverlap });
273
+ if (result.isMatch) {
274
+ score += SCORE_TEXT_MATCH * result.score;
275
+ }
276
+ }
277
+ }
278
+ // Dialog context bonus - if observation is dialog and node is in dialog region
279
+ if (observation.signals.isDialog && node.where.region === 'dialog') {
280
+ score += SCORE_DIALOG_CONTEXT;
281
+ }
282
+ // Cap at 1.0
283
+ return Math.min(score, 1.0);
284
+ }
285
+ // ============================================================================
286
+ // Child Extraction
287
+ // ============================================================================
288
+ /** Maximum number of children to extract per observation */
289
+ const MAX_OBSERVATION_CHILDREN = 5;
290
+ /** Interactive node kinds that qualify as observation children */
291
+ const INTERACTIVE_KINDS = [
292
+ 'button',
293
+ 'link',
294
+ 'input',
295
+ 'textarea',
296
+ 'select',
297
+ 'combobox',
298
+ 'checkbox',
299
+ 'radio',
300
+ 'switch',
301
+ 'slider',
302
+ 'tab',
303
+ 'menuitem',
304
+ ];
305
+ /**
306
+ * Check if a node kind is interactive (actionable).
307
+ */
308
+ function isInteractiveKind(kind) {
309
+ return INTERACTIVE_KINDS.includes(kind);
310
+ }
311
+ /**
312
+ * Check if a node qualifies as an extractable child (interactive or heading with label).
313
+ */
314
+ function isExtractableChild(node) {
315
+ // Must have a visible label
316
+ if (!node.label || node.label.trim() === '')
317
+ return false;
318
+ // Must be interactive or a heading
319
+ return isInteractiveKind(node.kind) || node.kind === 'heading';
320
+ }
321
+ /**
322
+ * Build a pre-filtered list of interactive nodes for child extraction.
323
+ * This is O(n) and done once per snapshot, avoiding O(m*n) when processing m observations.
324
+ *
325
+ * @param snapshot - Snapshot to filter
326
+ * @returns Array of nodes that qualify as observation children
327
+ */
328
+ export function buildInteractiveNodeList(snapshot) {
329
+ return snapshot.nodes.filter(isExtractableChild);
330
+ }
331
+ /**
332
+ * Check if a bounding box is contained within another.
333
+ */
334
+ function isNodeInsideContainer(nodeBbox, containerBbox) {
335
+ return (nodeBbox.x >= containerBbox.x &&
336
+ nodeBbox.y >= containerBbox.y &&
337
+ nodeBbox.x + nodeBbox.w <= containerBbox.x + containerBbox.w &&
338
+ nodeBbox.y + nodeBbox.h <= containerBbox.y + containerBbox.h);
339
+ }
340
+ /**
341
+ * Map NodeKind to child tag name for XML output.
342
+ */
343
+ function mapKindToChildTag(kind) {
344
+ switch (kind) {
345
+ case 'button':
346
+ return 'button';
347
+ case 'link':
348
+ return 'link';
349
+ case 'heading':
350
+ return 'heading';
351
+ case 'input':
352
+ case 'textarea':
353
+ return 'input';
354
+ case 'select':
355
+ case 'combobox':
356
+ return 'select';
357
+ case 'checkbox':
358
+ case 'radio':
359
+ case 'switch':
360
+ return 'checkbox';
361
+ case 'slider':
362
+ return 'slider';
363
+ case 'tab':
364
+ case 'menuitem':
365
+ return 'tab';
366
+ default:
367
+ return 'text';
368
+ }
369
+ }
370
+ /**
371
+ * Extract notable children from an observation's matched node.
372
+ *
373
+ * Finds interactive elements and headings that are visually contained within
374
+ * the observation container, up to MAX_OBSERVATION_CHILDREN limit.
375
+ *
376
+ * @param matchedNode - The snapshot node that matched the observation
377
+ * @param interactiveNodes - Pre-filtered list of interactive nodes (from buildInteractiveNodeList)
378
+ * @param registry - Element registry for eid lookup
379
+ * @returns Array of observation children (interactive elements and headings)
380
+ */
381
+ export function extractObservationChildren(matchedNode, interactiveNodes, registry) {
382
+ const children = [];
383
+ const containerBbox = matchedNode.layout.bbox;
384
+ for (const node of interactiveNodes) {
385
+ // Skip the container itself
386
+ if (node.backend_node_id === matchedNode.backend_node_id)
387
+ continue;
388
+ // Skip nodes not inside the container
389
+ if (!isNodeInsideContainer(node.layout.bbox, containerBbox))
390
+ continue;
391
+ const eid = registry.getEidByBackendNodeId(node.backend_node_id);
392
+ children.push({
393
+ tag: mapKindToChildTag(node.kind),
394
+ eid: eid,
395
+ text: node.label,
396
+ });
397
+ // Limit children to prevent bloat
398
+ if (children.length >= MAX_OBSERVATION_CHILDREN)
399
+ break;
400
+ }
401
+ return children;
402
+ }
403
+ //# sourceMappingURL=eid-linker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eid-linker.js","sourceRoot":"","sources":["../../../src/observation/eid-linker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * DOM Observation module.
3
+ *
4
+ * Captures significant DOM mutations (toasts, dialogs, banners, overlays)
5
+ * that appear during or between actions.
6
+ */
7
+ export type { SignificanceSignals, ObservedContent, DOMObservation, RawMutationEntry, ObservationGroups, } from './observation.types.js';
8
+ export { SIGNIFICANCE_WEIGHTS, SIGNIFICANCE_THRESHOLD, computeSignificance, } from './observation.types.js';
9
+ export { ObservationAccumulator, observationAccumulator } from './observation-accumulator.js';
10
+ export { OBSERVATION_OBSERVER_SCRIPT } from './observer-script.js';
11
+ export { linkObservationsToSnapshot, type EidLinkerOptions, type EidLinkingResult, } from './eid-linker.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/observation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAG9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EACL,0BAA0B,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * DOM Observation module.
3
+ *
4
+ * Captures significant DOM mutations (toasts, dialogs, banners, overlays)
5
+ * that appear during or between actions.
6
+ */
7
+ // Constants and functions
8
+ export { SIGNIFICANCE_WEIGHTS, SIGNIFICANCE_THRESHOLD, computeSignificance, } from './observation.types.js';
9
+ // Accumulator
10
+ export { ObservationAccumulator, observationAccumulator } from './observation-accumulator.js';
11
+ // Browser script
12
+ export { OBSERVATION_OBSERVER_SCRIPT } from './observer-script.js';
13
+ // EID Linker
14
+ export { linkObservationsToSnapshot, } from './eid-linker.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/observation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,0BAA0B;AAC1B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,cAAc;AACd,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE9F,iBAAiB;AACjB,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE,aAAa;AACb,OAAO,EACL,0BAA0B,GAG3B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Manages persistent DOM observation for a page.
3
+ *
4
+ * Lifecycle:
5
+ * - inject() on page creation
6
+ * - ensureInjected() after navigation (document context changes)
7
+ * - getObservations() to retrieve significant mutations
8
+ */
9
+ import type { Page } from 'puppeteer-core';
10
+ import type { ObservationGroups } from './observation.types.js';
11
+ /**
12
+ * Manages persistent DOM observation for a page.
13
+ */
14
+ export declare class ObservationAccumulator {
15
+ /**
16
+ * Inject the persistent observer into the page.
17
+ * Safe to call multiple times - checks for existing injection.
18
+ */
19
+ inject(page: Page): Promise<void>;
20
+ /**
21
+ * Ensure observer is injected and valid (re-inject if needed after navigation).
22
+ *
23
+ * After navigation or page content changes, the observer might be stale
24
+ * (observing a detached body). We check if the observer's body reference
25
+ * matches the current document.body and only re-inject if stale.
26
+ *
27
+ * This preserves accumulated observations when the observer is still valid.
28
+ */
29
+ ensureInjected(page: Page): Promise<void>;
30
+ /**
31
+ * Get observations for an action.
32
+ * Returns both action-scoped and unreported accumulated observations.
33
+ */
34
+ getObservations(page: Page, actionStartTime: number): Promise<ObservationGroups>;
35
+ /**
36
+ * Get accumulated observations without action context.
37
+ * Used by capture_snapshot to report accumulated changes.
38
+ */
39
+ getAccumulatedObservations(page: Page): Promise<ObservationGroups>;
40
+ /**
41
+ * Convert raw mutation entry to DOMObservation.
42
+ */
43
+ private rawToObservation;
44
+ /**
45
+ * Reset observation log (call after navigation).
46
+ */
47
+ reset(page: Page): Promise<void>;
48
+ /**
49
+ * Check if there are any unreported observations.
50
+ */
51
+ hasUnreported(page: Page): Promise<boolean>;
52
+ /**
53
+ * Filter observations by significance threshold.
54
+ */
55
+ filterBySignificance(observations: ObservationGroups, threshold?: number): ObservationGroups;
56
+ }
57
+ export declare const observationAccumulator: ObservationAccumulator;
58
+ //# sourceMappingURL=observation-accumulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-accumulator.d.ts","sourceRoot":"","sources":["../../../src/observation/observation-accumulator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,sBAAsB;IACjC;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IASvC;;;;;;;;OAQG;IACG,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC/C;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsCtF;;;OAGG;IACG,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6BxE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAcjD;;OAEG;IACH,oBAAoB,CAClB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,GAAE,MAA+B,GACzC,iBAAiB;CAMrB;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}