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.
- package/LICENSE +21 -0
- package/README.md +226 -0
- package/dist/src/browser/ensure-browser.d.ts +39 -0
- package/dist/src/browser/ensure-browser.d.ts.map +1 -0
- package/dist/src/browser/ensure-browser.js +65 -0
- package/dist/src/browser/ensure-browser.js.map +1 -0
- package/dist/src/browser/index.d.ts +8 -0
- package/dist/src/browser/index.d.ts.map +1 -0
- package/dist/src/browser/index.js +8 -0
- package/dist/src/browser/index.js.map +1 -0
- package/dist/src/browser/page-network-tracker.d.ts +96 -0
- package/dist/src/browser/page-network-tracker.d.ts.map +1 -0
- package/dist/src/browser/page-network-tracker.js +235 -0
- package/dist/src/browser/page-network-tracker.js.map +1 -0
- package/dist/src/browser/page-registry.d.ts +137 -0
- package/dist/src/browser/page-registry.d.ts.map +1 -0
- package/dist/src/browser/page-registry.js +194 -0
- package/dist/src/browser/page-registry.js.map +1 -0
- package/dist/src/browser/page-stabilization.d.ts +35 -0
- package/dist/src/browser/page-stabilization.d.ts.map +1 -0
- package/dist/src/browser/page-stabilization.js +42 -0
- package/dist/src/browser/page-stabilization.js.map +1 -0
- package/dist/src/browser/session-manager.d.ts +336 -0
- package/dist/src/browser/session-manager.d.ts.map +1 -0
- package/dist/src/browser/session-manager.js +964 -0
- package/dist/src/browser/session-manager.js.map +1 -0
- package/dist/src/cdp/cdp-client.interface.d.ts +193 -0
- package/dist/src/cdp/cdp-client.interface.d.ts.map +1 -0
- package/dist/src/cdp/cdp-client.interface.js +9 -0
- package/dist/src/cdp/cdp-client.interface.js.map +1 -0
- package/dist/src/cdp/index.d.ts +9 -0
- package/dist/src/cdp/index.d.ts.map +1 -0
- package/dist/src/cdp/index.js +8 -0
- package/dist/src/cdp/index.js.map +1 -0
- package/dist/src/cdp/puppeteer-cdp-client.d.ts +97 -0
- package/dist/src/cdp/puppeteer-cdp-client.d.ts.map +1 -0
- package/dist/src/cdp/puppeteer-cdp-client.js +273 -0
- package/dist/src/cdp/puppeteer-cdp-client.js.map +1 -0
- package/dist/src/cli/args.d.ts +35 -0
- package/dist/src/cli/args.d.ts.map +1 -0
- package/dist/src/cli/args.js +76 -0
- package/dist/src/cli/args.js.map +1 -0
- package/dist/src/delta/dom-stabilizer.d.ts +46 -0
- package/dist/src/delta/dom-stabilizer.d.ts.map +1 -0
- package/dist/src/delta/dom-stabilizer.js +121 -0
- package/dist/src/delta/dom-stabilizer.js.map +1 -0
- package/dist/src/delta/index.d.ts +8 -0
- package/dist/src/delta/index.d.ts.map +1 -0
- package/dist/src/delta/index.js +7 -0
- package/dist/src/delta/index.js.map +1 -0
- package/dist/src/factpack/action-selector.d.ts +36 -0
- package/dist/src/factpack/action-selector.d.ts.map +1 -0
- package/dist/src/factpack/action-selector.js +367 -0
- package/dist/src/factpack/action-selector.js.map +1 -0
- package/dist/src/factpack/dialog-detector.d.ts +19 -0
- package/dist/src/factpack/dialog-detector.d.ts.map +1 -0
- package/dist/src/factpack/dialog-detector.js +354 -0
- package/dist/src/factpack/dialog-detector.js.map +1 -0
- package/dist/src/factpack/form-detector.d.ts +28 -0
- package/dist/src/factpack/form-detector.d.ts.map +1 -0
- package/dist/src/factpack/form-detector.js +555 -0
- package/dist/src/factpack/form-detector.js.map +1 -0
- package/dist/src/factpack/index.d.ts +32 -0
- package/dist/src/factpack/index.d.ts.map +1 -0
- package/dist/src/factpack/index.js +73 -0
- package/dist/src/factpack/index.js.map +1 -0
- package/dist/src/factpack/page-classifier.d.ts +22 -0
- package/dist/src/factpack/page-classifier.d.ts.map +1 -0
- package/dist/src/factpack/page-classifier.js +526 -0
- package/dist/src/factpack/page-classifier.js.map +1 -0
- package/dist/src/factpack/types.d.ts +307 -0
- package/dist/src/factpack/types.d.ts.map +1 -0
- package/dist/src/factpack/types.js +12 -0
- package/dist/src/factpack/types.js.map +1 -0
- package/dist/src/form/dependency-tracker.d.ts +108 -0
- package/dist/src/form/dependency-tracker.d.ts.map +1 -0
- package/dist/src/form/dependency-tracker.js +298 -0
- package/dist/src/form/dependency-tracker.js.map +1 -0
- package/dist/src/form/field-extractor.d.ts +32 -0
- package/dist/src/form/field-extractor.d.ts.map +1 -0
- package/dist/src/form/field-extractor.js +544 -0
- package/dist/src/form/field-extractor.js.map +1 -0
- package/dist/src/form/form-detector.d.ts +103 -0
- package/dist/src/form/form-detector.d.ts.map +1 -0
- package/dist/src/form/form-detector.js +704 -0
- package/dist/src/form/form-detector.js.map +1 -0
- package/dist/src/form/form-state.d.ts +23 -0
- package/dist/src/form/form-state.d.ts.map +1 -0
- package/dist/src/form/form-state.js +39 -0
- package/dist/src/form/form-state.js.map +1 -0
- package/dist/src/form/index.d.ts +23 -0
- package/dist/src/form/index.d.ts.map +1 -0
- package/dist/src/form/index.js +27 -0
- package/dist/src/form/index.js.map +1 -0
- package/dist/src/form/runtime-value-reader.d.ts +72 -0
- package/dist/src/form/runtime-value-reader.d.ts.map +1 -0
- package/dist/src/form/runtime-value-reader.js +232 -0
- package/dist/src/form/runtime-value-reader.js.map +1 -0
- package/dist/src/form/types.d.ts +384 -0
- package/dist/src/form/types.d.ts.map +1 -0
- package/dist/src/form/types.js +17 -0
- package/dist/src/form/types.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +212 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/constants.d.ts +27 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +63 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/index.d.ts +12 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +17 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/regions.d.ts +29 -0
- package/dist/src/lib/regions.d.ts.map +1 -0
- package/dist/src/lib/regions.js +93 -0
- package/dist/src/lib/regions.js.map +1 -0
- package/dist/src/lib/scoring.d.ts +47 -0
- package/dist/src/lib/scoring.d.ts.map +1 -0
- package/dist/src/lib/scoring.js +79 -0
- package/dist/src/lib/scoring.js.map +1 -0
- package/dist/src/lib/selectors.d.ts +42 -0
- package/dist/src/lib/selectors.d.ts.map +1 -0
- package/dist/src/lib/selectors.js +138 -0
- package/dist/src/lib/selectors.js.map +1 -0
- package/dist/src/lib/text-utils.d.ts +155 -0
- package/dist/src/lib/text-utils.d.ts.map +1 -0
- package/dist/src/lib/text-utils.js +391 -0
- package/dist/src/lib/text-utils.js.map +1 -0
- package/dist/src/observation/eid-linker.d.ts +104 -0
- package/dist/src/observation/eid-linker.d.ts.map +1 -0
- package/dist/src/observation/eid-linker.js +403 -0
- package/dist/src/observation/eid-linker.js.map +1 -0
- package/dist/src/observation/index.d.ts +12 -0
- package/dist/src/observation/index.d.ts.map +1 -0
- package/dist/src/observation/index.js +15 -0
- package/dist/src/observation/index.js.map +1 -0
- package/dist/src/observation/observation-accumulator.d.ts +58 -0
- package/dist/src/observation/observation-accumulator.d.ts.map +1 -0
- package/dist/src/observation/observation-accumulator.js +213 -0
- package/dist/src/observation/observation-accumulator.js.map +1 -0
- package/dist/src/observation/observation.types.d.ts +139 -0
- package/dist/src/observation/observation.types.d.ts.map +1 -0
- package/dist/src/observation/observation.types.js +59 -0
- package/dist/src/observation/observation.types.js.map +1 -0
- package/dist/src/observation/observer-script.d.ts +19 -0
- package/dist/src/observation/observer-script.d.ts.map +1 -0
- package/dist/src/observation/observer-script.js +569 -0
- package/dist/src/observation/observer-script.js.map +1 -0
- package/dist/src/query/index.d.ts +9 -0
- package/dist/src/query/index.d.ts.map +1 -0
- package/dist/src/query/index.js +10 -0
- package/dist/src/query/index.js.map +1 -0
- package/dist/src/query/query-engine.d.ts +111 -0
- package/dist/src/query/query-engine.d.ts.map +1 -0
- package/dist/src/query/query-engine.js +509 -0
- package/dist/src/query/query-engine.js.map +1 -0
- package/dist/src/query/types/index.d.ts +5 -0
- package/dist/src/query/types/index.d.ts.map +1 -0
- package/dist/src/query/types/index.js +5 -0
- package/dist/src/query/types/index.js.map +1 -0
- package/dist/src/query/types/query.types.d.ts +141 -0
- package/dist/src/query/types/query.types.d.ts.map +1 -0
- package/dist/src/query/types/query.types.js +19 -0
- package/dist/src/query/types/query.types.js.map +1 -0
- package/dist/src/renderer/budget-manager.d.ts +46 -0
- package/dist/src/renderer/budget-manager.d.ts.map +1 -0
- package/dist/src/renderer/budget-manager.js +133 -0
- package/dist/src/renderer/budget-manager.js.map +1 -0
- package/dist/src/renderer/constants.d.ts +38 -0
- package/dist/src/renderer/constants.d.ts.map +1 -0
- package/dist/src/renderer/constants.js +29 -0
- package/dist/src/renderer/constants.js.map +1 -0
- package/dist/src/renderer/index.d.ts +12 -0
- package/dist/src/renderer/index.d.ts.map +1 -0
- package/dist/src/renderer/index.js +16 -0
- package/dist/src/renderer/index.js.map +1 -0
- package/dist/src/renderer/section-renderers.d.ts +42 -0
- package/dist/src/renderer/section-renderers.d.ts.map +1 -0
- package/dist/src/renderer/section-renderers.js +252 -0
- package/dist/src/renderer/section-renderers.js.map +1 -0
- package/dist/src/renderer/token-counter.d.ts +45 -0
- package/dist/src/renderer/token-counter.d.ts.map +1 -0
- package/dist/src/renderer/token-counter.js +65 -0
- package/dist/src/renderer/token-counter.js.map +1 -0
- package/dist/src/renderer/types.d.ts +71 -0
- package/dist/src/renderer/types.d.ts.map +1 -0
- package/dist/src/renderer/types.js +7 -0
- package/dist/src/renderer/types.js.map +1 -0
- package/dist/src/renderer/xml-renderer.d.ts +42 -0
- package/dist/src/renderer/xml-renderer.d.ts.map +1 -0
- package/dist/src/renderer/xml-renderer.js +103 -0
- package/dist/src/renderer/xml-renderer.js.map +1 -0
- package/dist/src/server/index.d.ts +8 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +8 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/mcp-server.d.ts +59 -0
- package/dist/src/server/mcp-server.d.ts.map +1 -0
- package/dist/src/server/mcp-server.js +140 -0
- package/dist/src/server/mcp-server.js.map +1 -0
- package/dist/src/server/server-config.d.ts +41 -0
- package/dist/src/server/server-config.d.ts.map +1 -0
- package/dist/src/server/server-config.js +80 -0
- package/dist/src/server/server-config.js.map +1 -0
- package/dist/src/server/session-store.d.ts +148 -0
- package/dist/src/server/session-store.d.ts.map +1 -0
- package/dist/src/server/session-store.js +224 -0
- package/dist/src/server/session-store.js.map +1 -0
- package/dist/src/shared/errors/browser-session.error.d.ts +102 -0
- package/dist/src/shared/errors/browser-session.error.d.ts.map +1 -0
- package/dist/src/shared/errors/browser-session.error.js +153 -0
- package/dist/src/shared/errors/browser-session.error.js.map +1 -0
- package/dist/src/shared/errors/index.d.ts +5 -0
- package/dist/src/shared/errors/index.d.ts.map +1 -0
- package/dist/src/shared/errors/index.js +5 -0
- package/dist/src/shared/errors/index.js.map +1 -0
- package/dist/src/shared/services/dom-transformer.service.d.ts +71 -0
- package/dist/src/shared/services/dom-transformer.service.d.ts.map +1 -0
- package/dist/src/shared/services/dom-transformer.service.js +190 -0
- package/dist/src/shared/services/dom-transformer.service.js.map +1 -0
- package/dist/src/shared/services/index.d.ts +7 -0
- package/dist/src/shared/services/index.d.ts.map +1 -0
- package/dist/src/shared/services/index.js +7 -0
- package/dist/src/shared/services/index.js.map +1 -0
- package/dist/src/shared/services/logging.service.d.ts +154 -0
- package/dist/src/shared/services/logging.service.d.ts.map +1 -0
- package/dist/src/shared/services/logging.service.js +267 -0
- package/dist/src/shared/services/logging.service.js.map +1 -0
- package/dist/src/shared/services/selector-builder.service.d.ts +53 -0
- package/dist/src/shared/services/selector-builder.service.d.ts.map +1 -0
- package/dist/src/shared/services/selector-builder.service.js +240 -0
- package/dist/src/shared/services/selector-builder.service.js.map +1 -0
- package/dist/src/shared/types/base.types.d.ts +45 -0
- package/dist/src/shared/types/base.types.d.ts.map +1 -0
- package/dist/src/shared/types/base.types.js +8 -0
- package/dist/src/shared/types/base.types.js.map +1 -0
- package/dist/src/shared/types/index.d.ts +5 -0
- package/dist/src/shared/types/index.d.ts.map +1 -0
- package/dist/src/shared/types/index.js +5 -0
- package/dist/src/shared/types/index.js.map +1 -0
- package/dist/src/snapshot/element-resolver.d.ts +102 -0
- package/dist/src/snapshot/element-resolver.d.ts.map +1 -0
- package/dist/src/snapshot/element-resolver.js +379 -0
- package/dist/src/snapshot/element-resolver.js.map +1 -0
- package/dist/src/snapshot/extractors/attribute-extractor.d.ts +40 -0
- package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/attribute-extractor.js +237 -0
- package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -0
- package/dist/src/snapshot/extractors/ax-extractor.d.ts +36 -0
- package/dist/src/snapshot/extractors/ax-extractor.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/ax-extractor.js +144 -0
- package/dist/src/snapshot/extractors/ax-extractor.js.map +1 -0
- package/dist/src/snapshot/extractors/dom-extractor.d.ts +21 -0
- package/dist/src/snapshot/extractors/dom-extractor.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/dom-extractor.js +137 -0
- package/dist/src/snapshot/extractors/dom-extractor.js.map +1 -0
- package/dist/src/snapshot/extractors/grouping-resolver.d.ts +39 -0
- package/dist/src/snapshot/extractors/grouping-resolver.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/grouping-resolver.js +260 -0
- package/dist/src/snapshot/extractors/grouping-resolver.js.map +1 -0
- package/dist/src/snapshot/extractors/index.d.ts +19 -0
- package/dist/src/snapshot/extractors/index.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/index.js +27 -0
- package/dist/src/snapshot/extractors/index.js.map +1 -0
- package/dist/src/snapshot/extractors/label-resolver.d.ts +44 -0
- package/dist/src/snapshot/extractors/label-resolver.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/label-resolver.js +173 -0
- package/dist/src/snapshot/extractors/label-resolver.js.map +1 -0
- package/dist/src/snapshot/extractors/layout-extractor.d.ts +52 -0
- package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/layout-extractor.js +382 -0
- package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -0
- package/dist/src/snapshot/extractors/locator-builder.d.ts +27 -0
- package/dist/src/snapshot/extractors/locator-builder.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/locator-builder.js +223 -0
- package/dist/src/snapshot/extractors/locator-builder.js.map +1 -0
- package/dist/src/snapshot/extractors/region-resolver.d.ts +31 -0
- package/dist/src/snapshot/extractors/region-resolver.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/region-resolver.js +168 -0
- package/dist/src/snapshot/extractors/region-resolver.js.map +1 -0
- package/dist/src/snapshot/extractors/state-extractor.d.ts +30 -0
- package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/state-extractor.js +181 -0
- package/dist/src/snapshot/extractors/state-extractor.js.map +1 -0
- package/dist/src/snapshot/extractors/types.d.ts +213 -0
- package/dist/src/snapshot/extractors/types.d.ts.map +1 -0
- package/dist/src/snapshot/extractors/types.js +145 -0
- package/dist/src/snapshot/extractors/types.js.map +1 -0
- package/dist/src/snapshot/index.d.ts +14 -0
- package/dist/src/snapshot/index.d.ts.map +1 -0
- package/dist/src/snapshot/index.js +18 -0
- package/dist/src/snapshot/index.js.map +1 -0
- package/dist/src/snapshot/snapshot-compiler.d.ts +73 -0
- package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -0
- package/dist/src/snapshot/snapshot-compiler.js +763 -0
- package/dist/src/snapshot/snapshot-compiler.js.map +1 -0
- package/dist/src/snapshot/snapshot-health.d.ts +97 -0
- package/dist/src/snapshot/snapshot-health.d.ts.map +1 -0
- package/dist/src/snapshot/snapshot-health.js +214 -0
- package/dist/src/snapshot/snapshot-health.js.map +1 -0
- package/dist/src/snapshot/snapshot-store.d.ts +137 -0
- package/dist/src/snapshot/snapshot-store.d.ts.map +1 -0
- package/dist/src/snapshot/snapshot-store.js +202 -0
- package/dist/src/snapshot/snapshot-store.js.map +1 -0
- package/dist/src/snapshot/snapshot.types.d.ts +250 -0
- package/dist/src/snapshot/snapshot.types.d.ts.map +1 -0
- package/dist/src/snapshot/snapshot.types.js +54 -0
- package/dist/src/snapshot/snapshot.types.js.map +1 -0
- package/dist/src/state/actionables-filter.d.ts +47 -0
- package/dist/src/state/actionables-filter.d.ts.map +1 -0
- package/dist/src/state/actionables-filter.js +173 -0
- package/dist/src/state/actionables-filter.js.map +1 -0
- package/dist/src/state/atoms-extractor.d.ts +23 -0
- package/dist/src/state/atoms-extractor.d.ts.map +1 -0
- package/dist/src/state/atoms-extractor.js +160 -0
- package/dist/src/state/atoms-extractor.js.map +1 -0
- package/dist/src/state/constants.d.ts +125 -0
- package/dist/src/state/constants.d.ts.map +1 -0
- package/dist/src/state/constants.js +131 -0
- package/dist/src/state/constants.js.map +1 -0
- package/dist/src/state/diff-engine.d.ts +23 -0
- package/dist/src/state/diff-engine.d.ts.map +1 -0
- package/dist/src/state/diff-engine.js +475 -0
- package/dist/src/state/diff-engine.js.map +1 -0
- package/dist/src/state/element-identity.d.ts +75 -0
- package/dist/src/state/element-identity.d.ts.map +1 -0
- package/dist/src/state/element-identity.js +129 -0
- package/dist/src/state/element-identity.js.map +1 -0
- package/dist/src/state/element-ref.types.d.ts +135 -0
- package/dist/src/state/element-ref.types.d.ts.map +1 -0
- package/dist/src/state/element-ref.types.js +13 -0
- package/dist/src/state/element-ref.types.js.map +1 -0
- package/dist/src/state/element-registry.d.ts +118 -0
- package/dist/src/state/element-registry.d.ts.map +1 -0
- package/dist/src/state/element-registry.js +222 -0
- package/dist/src/state/element-registry.js.map +1 -0
- package/dist/src/state/health.types.d.ts +93 -0
- package/dist/src/state/health.types.d.ts.map +1 -0
- package/dist/src/state/health.types.js +56 -0
- package/dist/src/state/health.types.js.map +1 -0
- package/dist/src/state/layer-detector.d.ts +23 -0
- package/dist/src/state/layer-detector.d.ts.map +1 -0
- package/dist/src/state/layer-detector.js +368 -0
- package/dist/src/state/layer-detector.js.map +1 -0
- package/dist/src/state/locator-generator.d.ts +21 -0
- package/dist/src/state/locator-generator.d.ts.map +1 -0
- package/dist/src/state/locator-generator.js +137 -0
- package/dist/src/state/locator-generator.js.map +1 -0
- package/dist/src/state/state-manager.d.ts +104 -0
- package/dist/src/state/state-manager.d.ts.map +1 -0
- package/dist/src/state/state-manager.js +618 -0
- package/dist/src/state/state-manager.js.map +1 -0
- package/dist/src/state/state-renderer.d.ts +63 -0
- package/dist/src/state/state-renderer.d.ts.map +1 -0
- package/dist/src/state/state-renderer.js +340 -0
- package/dist/src/state/state-renderer.js.map +1 -0
- package/dist/src/state/types.d.ts +353 -0
- package/dist/src/state/types.d.ts.map +1 -0
- package/dist/src/state/types.js +8 -0
- package/dist/src/state/types.js.map +1 -0
- package/dist/src/tools/browser-tools.d.ts +140 -0
- package/dist/src/tools/browser-tools.d.ts.map +1 -0
- package/dist/src/tools/browser-tools.js +657 -0
- package/dist/src/tools/browser-tools.js.map +1 -0
- package/dist/src/tools/errors.d.ts +63 -0
- package/dist/src/tools/errors.d.ts.map +1 -0
- package/dist/src/tools/errors.js +86 -0
- package/dist/src/tools/errors.js.map +1 -0
- package/dist/src/tools/execute-action.d.ts +135 -0
- package/dist/src/tools/execute-action.d.ts.map +1 -0
- package/dist/src/tools/execute-action.js +579 -0
- package/dist/src/tools/execute-action.js.map +1 -0
- package/dist/src/tools/form-tools.d.ts +109 -0
- package/dist/src/tools/form-tools.d.ts.map +1 -0
- package/dist/src/tools/form-tools.js +434 -0
- package/dist/src/tools/form-tools.js.map +1 -0
- package/dist/src/tools/index.d.ts +11 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +49 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/response-builder.d.ts +98 -0
- package/dist/src/tools/response-builder.d.ts.map +1 -0
- package/dist/src/tools/response-builder.js +219 -0
- package/dist/src/tools/response-builder.js.map +1 -0
- package/dist/src/tools/tool-schemas.d.ts +2482 -0
- package/dist/src/tools/tool-schemas.d.ts.map +1 -0
- package/dist/src/tools/tool-schemas.js +606 -0
- package/dist/src/tools/tool-schemas.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +16 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Identity
|
|
3
|
+
*
|
|
4
|
+
* Generate stable, semantic element IDs (eids) that survive DOM mutations.
|
|
5
|
+
* Uses semantic hashing instead of transient CDP backend_node_id.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash } from 'crypto';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// EID Generation
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Compute stable semantic element ID for a node.
|
|
13
|
+
*
|
|
14
|
+
* Uses hash of semantic components:
|
|
15
|
+
* - Role (or kind)
|
|
16
|
+
* - Accessible name (normalized label)
|
|
17
|
+
* - Href (for links)
|
|
18
|
+
* - Landmark path (region + group_path)
|
|
19
|
+
* - Layer context (modal vs main - prevents collision across layers)
|
|
20
|
+
* - Position hint (heading context from group_path - scroll-stable)
|
|
21
|
+
* - Shadow path (disambiguates elements in different shadow roots)
|
|
22
|
+
*
|
|
23
|
+
* @param node - Node to compute EID for
|
|
24
|
+
* @param layer - Optional layer context for disambiguation
|
|
25
|
+
* @returns 12-character hex hash
|
|
26
|
+
*/
|
|
27
|
+
export function computeEid(node, layer) {
|
|
28
|
+
// Shadow path ensures elements in different shadow roots get unique EIDs
|
|
29
|
+
// even if they have identical semantic properties
|
|
30
|
+
const shadowPath = node.find?.shadow_path?.join('/') ?? '';
|
|
31
|
+
const components = [
|
|
32
|
+
node.attributes?.role ?? node.kind,
|
|
33
|
+
normalizeAccessibleName(node.label),
|
|
34
|
+
node.attributes?.href ?? '',
|
|
35
|
+
computeLandmarkPath(node),
|
|
36
|
+
layer ?? computeLayerFromRegion(node),
|
|
37
|
+
computePositionHint(node),
|
|
38
|
+
shadowPath,
|
|
39
|
+
];
|
|
40
|
+
return hashComponents(components);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compute layer from node region.
|
|
44
|
+
* Used when explicit layer not provided.
|
|
45
|
+
*
|
|
46
|
+
* @param node - Node to check
|
|
47
|
+
* @returns Layer name
|
|
48
|
+
*/
|
|
49
|
+
function computeLayerFromRegion(node) {
|
|
50
|
+
const region = node.where.region ?? 'unknown';
|
|
51
|
+
return region === 'dialog' ? 'modal' : 'main';
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Normalize accessible name for stable hashing.
|
|
55
|
+
* - Trim whitespace
|
|
56
|
+
* - Lowercase
|
|
57
|
+
* - Collapse multiple spaces
|
|
58
|
+
* - Cap length at 100 chars
|
|
59
|
+
*
|
|
60
|
+
* @param label - Raw label text
|
|
61
|
+
* @returns Normalized label
|
|
62
|
+
*/
|
|
63
|
+
export function normalizeAccessibleName(label) {
|
|
64
|
+
return label.trim().toLowerCase().replace(/\s+/g, ' ').substring(0, 100);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compute landmark path for a node.
|
|
68
|
+
* Format: "region/group1/group2"
|
|
69
|
+
*
|
|
70
|
+
* @param node - Node to compute path for
|
|
71
|
+
* @returns Landmark path string
|
|
72
|
+
*/
|
|
73
|
+
export function computeLandmarkPath(node) {
|
|
74
|
+
const region = node.where.region ?? 'unknown';
|
|
75
|
+
const path = node.where.group_path ?? [];
|
|
76
|
+
return `${region}/${path.join('/')}`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Compute position hint for stable EID disambiguation.
|
|
80
|
+
*
|
|
81
|
+
* Uses only scroll-stable semantic context:
|
|
82
|
+
* - Nearest heading from group_path (semantic grouping)
|
|
83
|
+
*
|
|
84
|
+
* Note: Viewport-dependent data (screen_zone, bbox quadrant) was removed
|
|
85
|
+
* because it caused EID instability when scrolling. The collision resolution
|
|
86
|
+
* mechanism (resolveEidCollision) handles any increased collision rate.
|
|
87
|
+
*
|
|
88
|
+
* @param node - Node to compute hint for
|
|
89
|
+
* @returns Position hint string
|
|
90
|
+
*/
|
|
91
|
+
export function computePositionHint(node) {
|
|
92
|
+
// Use last group from group_path as stable semantic context
|
|
93
|
+
const groupPath = node.where.group_path ?? [];
|
|
94
|
+
return groupPath.length > 0 ? groupPath[groupPath.length - 1] : '';
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Hash string components to generate EID.
|
|
98
|
+
* Uses SHA-256 and returns first 12 hex chars.
|
|
99
|
+
*
|
|
100
|
+
* @param components - String components to hash
|
|
101
|
+
* @returns 12-character hex hash
|
|
102
|
+
*/
|
|
103
|
+
export function hashComponents(components) {
|
|
104
|
+
const combined = components.join('::');
|
|
105
|
+
const hash = createHash('sha256').update(combined).digest('hex');
|
|
106
|
+
return hash.substring(0, 12);
|
|
107
|
+
}
|
|
108
|
+
// ============================================================================
|
|
109
|
+
// EID Collision Handling
|
|
110
|
+
// ============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Resolve EID collisions by appending suffix.
|
|
113
|
+
* If EID already exists in map, append "-2", "-3", etc.
|
|
114
|
+
*
|
|
115
|
+
* @param baseEid - Base EID before collision resolution
|
|
116
|
+
* @param existingEids - Set of already-used EIDs
|
|
117
|
+
* @returns Unique EID
|
|
118
|
+
*/
|
|
119
|
+
export function resolveEidCollision(baseEid, existingEids) {
|
|
120
|
+
if (!existingEids.has(baseEid)) {
|
|
121
|
+
return baseEid;
|
|
122
|
+
}
|
|
123
|
+
let suffix = 2;
|
|
124
|
+
while (existingEids.has(`${baseEid}-${suffix}`)) {
|
|
125
|
+
suffix++;
|
|
126
|
+
}
|
|
127
|
+
return `${baseEid}-${suffix}`;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=element-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-identity.js","sourceRoot":"","sources":["../../../src/state/element-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Reference Types
|
|
3
|
+
*
|
|
4
|
+
* Core types for the ElementRef architecture that unifies element identification.
|
|
5
|
+
* ElementRef wires together stable semantic identity (eid) with actionable targeting data.
|
|
6
|
+
*
|
|
7
|
+
* Key principles:
|
|
8
|
+
* - `eid` is the stable semantic identity (survives DOM mutations)
|
|
9
|
+
* - `ref` contains targeting data for actual interactions
|
|
10
|
+
* - Actions resolve via eid → ref, never use eid directly as a click target
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* ElementRef - Unified element reference with stable identity and actionable locators.
|
|
14
|
+
*/
|
|
15
|
+
export interface ElementRef {
|
|
16
|
+
/** Stable semantic identity - 12-char hash based on role+name+landmark+position */
|
|
17
|
+
eid: string;
|
|
18
|
+
/** Targeting reference - how to actually find/click this element */
|
|
19
|
+
ref: ElementTargetRef;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* ElementTargetRef - Actual targeting data for an element.
|
|
23
|
+
* Contains multiple strategies for robustness.
|
|
24
|
+
*/
|
|
25
|
+
export interface ElementTargetRef {
|
|
26
|
+
/** Snapshot that produced this ref - for staleness detection */
|
|
27
|
+
snapshot_id: string;
|
|
28
|
+
/** CDP backend node ID - primary targeting method */
|
|
29
|
+
backend_node_id: number;
|
|
30
|
+
/** CDP frame ID - for cross-frame targeting */
|
|
31
|
+
frame_id: string;
|
|
32
|
+
/** CDP loader ID - changes on navigation, for staleness detection */
|
|
33
|
+
loader_id: string;
|
|
34
|
+
/** Locator strategies for fallback/re-resolution */
|
|
35
|
+
locators: ElementLocators;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* ElementLocators - Multiple strategies for finding an element.
|
|
39
|
+
*/
|
|
40
|
+
export interface ElementLocators {
|
|
41
|
+
/** Preferred: AX tree locator (most stable) */
|
|
42
|
+
preferred: {
|
|
43
|
+
ax: string;
|
|
44
|
+
};
|
|
45
|
+
/** Fallback: CSS selector */
|
|
46
|
+
fallback?: {
|
|
47
|
+
css: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* SnapshotHealth - Validation result for a snapshot.
|
|
52
|
+
* Used to detect and handle empty/failed snapshots.
|
|
53
|
+
*/
|
|
54
|
+
export interface SnapshotHealth {
|
|
55
|
+
/** Whether snapshot is usable for actions */
|
|
56
|
+
valid: boolean;
|
|
57
|
+
/** Reason for invalidity or partial status */
|
|
58
|
+
reason?: 'empty' | 'error' | 'partial';
|
|
59
|
+
/** Human-readable message */
|
|
60
|
+
message?: string;
|
|
61
|
+
/** Metrics for debugging */
|
|
62
|
+
metrics?: SnapshotHealthMetrics;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Snapshot health metrics for debugging.
|
|
66
|
+
*/
|
|
67
|
+
export interface SnapshotHealthMetrics {
|
|
68
|
+
node_count: number;
|
|
69
|
+
interactive_count: number;
|
|
70
|
+
capture_duration_ms?: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* ClickOutcome - Result of a click action with navigation awareness.
|
|
74
|
+
* Differentiates between "element gone due to navigation" vs "element stale due to DOM mutation".
|
|
75
|
+
*/
|
|
76
|
+
export type ClickOutcome = ClickOutcomeSuccess | ClickOutcomeStaleElement | ClickOutcomeElementNotFound | ClickOutcomeError;
|
|
77
|
+
/**
|
|
78
|
+
* Click succeeded, optionally with navigation.
|
|
79
|
+
*/
|
|
80
|
+
export interface ClickOutcomeSuccess {
|
|
81
|
+
status: 'success';
|
|
82
|
+
/** Whether the click triggered a page navigation */
|
|
83
|
+
navigated: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Element was stale (removed from DOM).
|
|
87
|
+
*/
|
|
88
|
+
export interface ClickOutcomeStaleElement {
|
|
89
|
+
status: 'stale_element';
|
|
90
|
+
/** Why the element became stale */
|
|
91
|
+
reason: 'dom_mutation' | 'navigation';
|
|
92
|
+
/** Whether retry was attempted */
|
|
93
|
+
retried: boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Element not found by eid.
|
|
97
|
+
*/
|
|
98
|
+
export interface ClickOutcomeElementNotFound {
|
|
99
|
+
status: 'element_not_found';
|
|
100
|
+
/** The eid that wasn't found */
|
|
101
|
+
eid: string;
|
|
102
|
+
/** Last known label for debugging */
|
|
103
|
+
last_known_label?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Error during click.
|
|
107
|
+
*/
|
|
108
|
+
export interface ClickOutcomeError {
|
|
109
|
+
status: 'error';
|
|
110
|
+
/** Error message */
|
|
111
|
+
message: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* EidRegistry - Internal state for tracking eid → ElementRef mappings.
|
|
115
|
+
*/
|
|
116
|
+
export interface EidRegistry {
|
|
117
|
+
/** Map eid -> current ElementRef (updated on each snapshot) */
|
|
118
|
+
byEid: Map<string, ElementRef>;
|
|
119
|
+
/** Map snapshot_id:backend_node_id -> eid (reverse lookup) */
|
|
120
|
+
backendToEid: Map<string, string>;
|
|
121
|
+
/** Last seen step for each eid (for staleness detection) */
|
|
122
|
+
lastSeenStep: Map<string, number>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Result of updating the registry with a new snapshot.
|
|
126
|
+
*/
|
|
127
|
+
export interface RegistryUpdateResult {
|
|
128
|
+
/** New eids added in this snapshot */
|
|
129
|
+
added: string[];
|
|
130
|
+
/** Eids no longer present (removed from DOM) */
|
|
131
|
+
removed: string[];
|
|
132
|
+
/** Eids that were updated with new targeting data */
|
|
133
|
+
updated: string[];
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=element-ref.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-ref.types.d.ts","sourceRoot":"","sources":["../../../src/state/element-ref.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IAEZ,oEAAoE;IACpE,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IAEpB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IAExB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IAEjB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAElB,oDAAoD;IACpD,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,KAAK,EAAE,OAAO,CAAC;IAEf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,mBAAmB,GACnB,wBAAwB,GACxB,2BAA2B,GAC3B,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAC;IACxB,mCAAmC;IACnC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAC;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE/B,8DAA8D;IAC9D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,4DAA4D;IAC5D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Reference Types
|
|
3
|
+
*
|
|
4
|
+
* Core types for the ElementRef architecture that unifies element identification.
|
|
5
|
+
* ElementRef wires together stable semantic identity (eid) with actionable targeting data.
|
|
6
|
+
*
|
|
7
|
+
* Key principles:
|
|
8
|
+
* - `eid` is the stable semantic identity (survives DOM mutations)
|
|
9
|
+
* - `ref` contains targeting data for actual interactions
|
|
10
|
+
* - Actions resolve via eid → ref, never use eid directly as a click target
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=element-ref.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-ref.types.js","sourceRoot":"","sources":["../../../src/state/element-ref.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages eid → ElementRef mappings across snapshots.
|
|
5
|
+
* Provides lookup by eid for action tools, enabling the transition from
|
|
6
|
+
* transient node_id to stable semantic eid for element targeting.
|
|
7
|
+
*
|
|
8
|
+
* Key responsibilities:
|
|
9
|
+
* - Build ElementRef from ReadableNode
|
|
10
|
+
* - Track eid across snapshot updates
|
|
11
|
+
* - Provide lookup by eid for action tools
|
|
12
|
+
* - Detect stale elements
|
|
13
|
+
*/
|
|
14
|
+
import type { BaseSnapshot } from '../snapshot/snapshot.types.js';
|
|
15
|
+
import type { ElementRef, RegistryUpdateResult } from './element-ref.types.js';
|
|
16
|
+
/**
|
|
17
|
+
* ElementRegistry - Manages eid → ElementRef mappings across snapshots.
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* 1. Call updateFromSnapshot() after each new snapshot
|
|
21
|
+
* 2. Use getByEid() in action tools to resolve eid to ElementRef
|
|
22
|
+
* 3. Use getEidByBackendNodeId() for reverse lookup (legacy node_id support)
|
|
23
|
+
*/
|
|
24
|
+
export declare class ElementRegistry {
|
|
25
|
+
private registry;
|
|
26
|
+
private currentStep;
|
|
27
|
+
private currentSnapshotId;
|
|
28
|
+
/**
|
|
29
|
+
* Update registry with new snapshot.
|
|
30
|
+
* Builds ElementRef for each interactive node and tracks changes.
|
|
31
|
+
*
|
|
32
|
+
* @param snapshot - New snapshot to process
|
|
33
|
+
* @param activeLayer - Active layer for eid computation
|
|
34
|
+
* @returns List of added, removed, and updated eids
|
|
35
|
+
*/
|
|
36
|
+
updateFromSnapshot(snapshot: BaseSnapshot, activeLayer: string): RegistryUpdateResult;
|
|
37
|
+
/**
|
|
38
|
+
* Build ElementRef from ReadableNode.
|
|
39
|
+
*
|
|
40
|
+
* @param node - Source node
|
|
41
|
+
* @param eid - Computed eid
|
|
42
|
+
* @param snapshotId - Snapshot ID
|
|
43
|
+
* @param activeLayer - Active layer for locator scoping
|
|
44
|
+
* @returns ElementRef
|
|
45
|
+
*/
|
|
46
|
+
private buildElementRef;
|
|
47
|
+
/**
|
|
48
|
+
* Lookup element by eid.
|
|
49
|
+
*
|
|
50
|
+
* @param eid - Element ID to lookup
|
|
51
|
+
* @returns ElementRef or undefined if not found
|
|
52
|
+
*/
|
|
53
|
+
getByEid(eid: string): ElementRef | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Lookup eid by backend_node_id in current snapshot.
|
|
56
|
+
* Used for backwards compatibility with node_id-based tools.
|
|
57
|
+
*
|
|
58
|
+
* @param backendNodeId - CDP backend node ID
|
|
59
|
+
* @returns eid or undefined
|
|
60
|
+
*/
|
|
61
|
+
getEidByBackendNodeId(backendNodeId: number): string | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Lookup eid by backend_node_id in any snapshot.
|
|
64
|
+
*
|
|
65
|
+
* @param snapshotId - Snapshot ID
|
|
66
|
+
* @param backendNodeId - CDP backend node ID
|
|
67
|
+
* @returns eid or undefined
|
|
68
|
+
*/
|
|
69
|
+
getEidBySnapshotAndBackendNodeId(snapshotId: string, backendNodeId: number): string | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Get all current eids.
|
|
72
|
+
*
|
|
73
|
+
* @returns Array of all tracked eids
|
|
74
|
+
*/
|
|
75
|
+
getAllEids(): string[];
|
|
76
|
+
/**
|
|
77
|
+
* Check if an eid is stale (not seen in recent snapshots).
|
|
78
|
+
*
|
|
79
|
+
* @param eid - Element ID to check
|
|
80
|
+
* @param maxStaleSteps - Maximum steps since last seen (default: 2)
|
|
81
|
+
* @returns true if stale
|
|
82
|
+
*/
|
|
83
|
+
isStale(eid: string, maxStaleSteps?: number): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Get current step counter.
|
|
86
|
+
*/
|
|
87
|
+
getCurrentStep(): number;
|
|
88
|
+
/**
|
|
89
|
+
* Get current snapshot ID.
|
|
90
|
+
*/
|
|
91
|
+
getCurrentSnapshotId(): string;
|
|
92
|
+
/**
|
|
93
|
+
* Clear registry (on session close or full navigation).
|
|
94
|
+
*/
|
|
95
|
+
clear(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get number of tracked elements.
|
|
98
|
+
*/
|
|
99
|
+
size(): number;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get or create element registry for a page.
|
|
103
|
+
*
|
|
104
|
+
* @param pageId - Page ID
|
|
105
|
+
* @returns ElementRegistry instance
|
|
106
|
+
*/
|
|
107
|
+
export declare function getElementRegistry(pageId: string): ElementRegistry;
|
|
108
|
+
/**
|
|
109
|
+
* Remove element registry for a page (call on page close).
|
|
110
|
+
*
|
|
111
|
+
* @param pageId - Page ID
|
|
112
|
+
*/
|
|
113
|
+
export declare function removeElementRegistry(pageId: string): void;
|
|
114
|
+
/**
|
|
115
|
+
* Clear all element registries (call on session close).
|
|
116
|
+
*/
|
|
117
|
+
export declare function clearAllElementRegistries(): void;
|
|
118
|
+
//# sourceMappingURL=element-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-registry.d.ts","sourceRoot":"","sources":["../../../src/state/element-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACV,UAAU,EAGV,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAShC;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAId;IAEF,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,iBAAiB,CAAM;IAE/B;;;;;;;OAOG;IACH,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,oBAAoB;IAmDrF;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7C;;;;;;OAMG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhE;;;;;;OAMG;IACH,gCAAgC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/F;;;;OAIG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,OAAO;IAMhD;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAKlE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages eid → ElementRef mappings across snapshots.
|
|
5
|
+
* Provides lookup by eid for action tools, enabling the transition from
|
|
6
|
+
* transient node_id to stable semantic eid for element targeting.
|
|
7
|
+
*
|
|
8
|
+
* Key responsibilities:
|
|
9
|
+
* - Build ElementRef from ReadableNode
|
|
10
|
+
* - Track eid across snapshot updates
|
|
11
|
+
* - Provide lookup by eid for action tools
|
|
12
|
+
* - Detect stale elements
|
|
13
|
+
*/
|
|
14
|
+
import { computeEid, resolveEidCollision } from './element-identity.js';
|
|
15
|
+
import { generateLocator } from './locator-generator.js';
|
|
16
|
+
import { isInteractiveKind } from './actionables-filter.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Element Registry Class
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* ElementRegistry - Manages eid → ElementRef mappings across snapshots.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* 1. Call updateFromSnapshot() after each new snapshot
|
|
25
|
+
* 2. Use getByEid() in action tools to resolve eid to ElementRef
|
|
26
|
+
* 3. Use getEidByBackendNodeId() for reverse lookup (legacy node_id support)
|
|
27
|
+
*/
|
|
28
|
+
export class ElementRegistry {
|
|
29
|
+
registry = {
|
|
30
|
+
byEid: new Map(),
|
|
31
|
+
backendToEid: new Map(),
|
|
32
|
+
lastSeenStep: new Map(),
|
|
33
|
+
};
|
|
34
|
+
currentStep = 0;
|
|
35
|
+
currentSnapshotId = '';
|
|
36
|
+
/**
|
|
37
|
+
* Update registry with new snapshot.
|
|
38
|
+
* Builds ElementRef for each interactive node and tracks changes.
|
|
39
|
+
*
|
|
40
|
+
* @param snapshot - New snapshot to process
|
|
41
|
+
* @param activeLayer - Active layer for eid computation
|
|
42
|
+
* @returns List of added, removed, and updated eids
|
|
43
|
+
*/
|
|
44
|
+
updateFromSnapshot(snapshot, activeLayer) {
|
|
45
|
+
this.currentStep++;
|
|
46
|
+
this.currentSnapshotId = snapshot.snapshot_id;
|
|
47
|
+
const previousEids = new Set(this.registry.byEid.keys());
|
|
48
|
+
const currentEids = new Set();
|
|
49
|
+
const usedEids = new Set();
|
|
50
|
+
const added = [];
|
|
51
|
+
const updated = [];
|
|
52
|
+
// Process all interactive nodes
|
|
53
|
+
for (const node of snapshot.nodes) {
|
|
54
|
+
// Only track interactive elements
|
|
55
|
+
if (!isInteractiveKind(node.kind))
|
|
56
|
+
continue;
|
|
57
|
+
// Compute eid (with collision resolution)
|
|
58
|
+
const baseEid = computeEid(node, activeLayer);
|
|
59
|
+
const eid = resolveEidCollision(baseEid, usedEids);
|
|
60
|
+
usedEids.add(eid);
|
|
61
|
+
currentEids.add(eid);
|
|
62
|
+
// Build ElementRef
|
|
63
|
+
const ref = this.buildElementRef(node, eid, snapshot.snapshot_id, activeLayer);
|
|
64
|
+
// Track whether this is new or updated
|
|
65
|
+
if (!previousEids.has(eid)) {
|
|
66
|
+
added.push(eid);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
updated.push(eid);
|
|
70
|
+
}
|
|
71
|
+
// Update registry
|
|
72
|
+
this.registry.byEid.set(eid, ref);
|
|
73
|
+
this.registry.backendToEid.set(`${snapshot.snapshot_id}:${node.backend_node_id}`, eid);
|
|
74
|
+
this.registry.lastSeenStep.set(eid, this.currentStep);
|
|
75
|
+
}
|
|
76
|
+
// Find removed eids (present in previous, not in current)
|
|
77
|
+
const removed = [];
|
|
78
|
+
for (const eid of previousEids) {
|
|
79
|
+
if (!currentEids.has(eid)) {
|
|
80
|
+
removed.push(eid);
|
|
81
|
+
// Don't delete immediately - keep for staleness detection
|
|
82
|
+
// Mark as not seen in current step (lastSeenStep not updated)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { added, removed, updated };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build ElementRef from ReadableNode.
|
|
89
|
+
*
|
|
90
|
+
* @param node - Source node
|
|
91
|
+
* @param eid - Computed eid
|
|
92
|
+
* @param snapshotId - Snapshot ID
|
|
93
|
+
* @param activeLayer - Active layer for locator scoping
|
|
94
|
+
* @returns ElementRef
|
|
95
|
+
*/
|
|
96
|
+
buildElementRef(node, eid, snapshotId, activeLayer) {
|
|
97
|
+
const locatorInfo = generateLocator(node, activeLayer);
|
|
98
|
+
const ref = {
|
|
99
|
+
snapshot_id: snapshotId,
|
|
100
|
+
backend_node_id: node.backend_node_id,
|
|
101
|
+
frame_id: node.frame_id,
|
|
102
|
+
loader_id: node.loader_id,
|
|
103
|
+
locators: {
|
|
104
|
+
preferred: locatorInfo.preferred,
|
|
105
|
+
fallback: locatorInfo.fallback,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
return { eid, ref };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Lookup element by eid.
|
|
112
|
+
*
|
|
113
|
+
* @param eid - Element ID to lookup
|
|
114
|
+
* @returns ElementRef or undefined if not found
|
|
115
|
+
*/
|
|
116
|
+
getByEid(eid) {
|
|
117
|
+
return this.registry.byEid.get(eid);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Lookup eid by backend_node_id in current snapshot.
|
|
121
|
+
* Used for backwards compatibility with node_id-based tools.
|
|
122
|
+
*
|
|
123
|
+
* @param backendNodeId - CDP backend node ID
|
|
124
|
+
* @returns eid or undefined
|
|
125
|
+
*/
|
|
126
|
+
getEidByBackendNodeId(backendNodeId) {
|
|
127
|
+
return this.registry.backendToEid.get(`${this.currentSnapshotId}:${backendNodeId}`);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Lookup eid by backend_node_id in any snapshot.
|
|
131
|
+
*
|
|
132
|
+
* @param snapshotId - Snapshot ID
|
|
133
|
+
* @param backendNodeId - CDP backend node ID
|
|
134
|
+
* @returns eid or undefined
|
|
135
|
+
*/
|
|
136
|
+
getEidBySnapshotAndBackendNodeId(snapshotId, backendNodeId) {
|
|
137
|
+
return this.registry.backendToEid.get(`${snapshotId}:${backendNodeId}`);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get all current eids.
|
|
141
|
+
*
|
|
142
|
+
* @returns Array of all tracked eids
|
|
143
|
+
*/
|
|
144
|
+
getAllEids() {
|
|
145
|
+
return Array.from(this.registry.byEid.keys());
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Check if an eid is stale (not seen in recent snapshots).
|
|
149
|
+
*
|
|
150
|
+
* @param eid - Element ID to check
|
|
151
|
+
* @param maxStaleSteps - Maximum steps since last seen (default: 2)
|
|
152
|
+
* @returns true if stale
|
|
153
|
+
*/
|
|
154
|
+
isStale(eid, maxStaleSteps = 2) {
|
|
155
|
+
const lastSeen = this.registry.lastSeenStep.get(eid);
|
|
156
|
+
if (lastSeen === undefined)
|
|
157
|
+
return true;
|
|
158
|
+
return this.currentStep - lastSeen > maxStaleSteps;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get current step counter.
|
|
162
|
+
*/
|
|
163
|
+
getCurrentStep() {
|
|
164
|
+
return this.currentStep;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get current snapshot ID.
|
|
168
|
+
*/
|
|
169
|
+
getCurrentSnapshotId() {
|
|
170
|
+
return this.currentSnapshotId;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Clear registry (on session close or full navigation).
|
|
174
|
+
*/
|
|
175
|
+
clear() {
|
|
176
|
+
this.registry.byEid.clear();
|
|
177
|
+
this.registry.backendToEid.clear();
|
|
178
|
+
this.registry.lastSeenStep.clear();
|
|
179
|
+
this.currentStep = 0;
|
|
180
|
+
this.currentSnapshotId = '';
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get number of tracked elements.
|
|
184
|
+
*/
|
|
185
|
+
size() {
|
|
186
|
+
return this.registry.byEid.size;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// ============================================================================
|
|
190
|
+
// Registry Factory
|
|
191
|
+
// ============================================================================
|
|
192
|
+
/**
|
|
193
|
+
* Global registry of element registries (one per page).
|
|
194
|
+
*/
|
|
195
|
+
const registries = new Map();
|
|
196
|
+
/**
|
|
197
|
+
* Get or create element registry for a page.
|
|
198
|
+
*
|
|
199
|
+
* @param pageId - Page ID
|
|
200
|
+
* @returns ElementRegistry instance
|
|
201
|
+
*/
|
|
202
|
+
export function getElementRegistry(pageId) {
|
|
203
|
+
if (!registries.has(pageId)) {
|
|
204
|
+
registries.set(pageId, new ElementRegistry());
|
|
205
|
+
}
|
|
206
|
+
return registries.get(pageId);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Remove element registry for a page (call on page close).
|
|
210
|
+
*
|
|
211
|
+
* @param pageId - Page ID
|
|
212
|
+
*/
|
|
213
|
+
export function removeElementRegistry(pageId) {
|
|
214
|
+
registries.delete(pageId);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Clear all element registries (call on session close).
|
|
218
|
+
*/
|
|
219
|
+
export function clearAllElementRegistries() {
|
|
220
|
+
registries.clear();
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=element-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-registry.js","sourceRoot":"","sources":["../../../src/state/element-registry.ts"],"names":[],"mappings":"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"}
|