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,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for interactive element discovery
|
|
3
|
+
*
|
|
4
|
+
* These constants define what elements are considered interactive
|
|
5
|
+
* for browser automation purposes.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* ARIA roles that indicate interactive elements
|
|
9
|
+
*/
|
|
10
|
+
export declare const INTERACTIVE_ROLES: Set<string>;
|
|
11
|
+
/**
|
|
12
|
+
* HTML tags that are inherently interactive
|
|
13
|
+
*/
|
|
14
|
+
export declare const INTERACTIVE_TAGS: Set<string>;
|
|
15
|
+
/**
|
|
16
|
+
* ARIA roles that indicate form input controls
|
|
17
|
+
*/
|
|
18
|
+
export declare const ARIA_INPUT_ROLES: Set<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Click handler attributes that indicate clickable elements
|
|
21
|
+
*/
|
|
22
|
+
export declare const CLICK_HANDLER_ATTRIBUTES: string[];
|
|
23
|
+
/**
|
|
24
|
+
* Generic HTML tags that shouldn't be used for selector hints
|
|
25
|
+
*/
|
|
26
|
+
export declare const GENERIC_TAGS: Set<string>;
|
|
27
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,aAkB5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAS3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAS3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB,UAAkD,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,YAAY,aAAyE,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for interactive element discovery
|
|
3
|
+
*
|
|
4
|
+
* These constants define what elements are considered interactive
|
|
5
|
+
* for browser automation purposes.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* ARIA roles that indicate interactive elements
|
|
9
|
+
*/
|
|
10
|
+
export const INTERACTIVE_ROLES = new Set([
|
|
11
|
+
'button',
|
|
12
|
+
'link',
|
|
13
|
+
'textbox',
|
|
14
|
+
'searchbox',
|
|
15
|
+
'combobox',
|
|
16
|
+
'listbox',
|
|
17
|
+
'menuitem',
|
|
18
|
+
'menuitemcheckbox',
|
|
19
|
+
'menuitemradio',
|
|
20
|
+
'option',
|
|
21
|
+
'radio',
|
|
22
|
+
'checkbox',
|
|
23
|
+
'switch',
|
|
24
|
+
'tab',
|
|
25
|
+
'slider',
|
|
26
|
+
'spinbutton',
|
|
27
|
+
'scrollbar',
|
|
28
|
+
]);
|
|
29
|
+
/**
|
|
30
|
+
* HTML tags that are inherently interactive
|
|
31
|
+
*/
|
|
32
|
+
export const INTERACTIVE_TAGS = new Set([
|
|
33
|
+
'a',
|
|
34
|
+
'button',
|
|
35
|
+
'input',
|
|
36
|
+
'select',
|
|
37
|
+
'textarea',
|
|
38
|
+
'option',
|
|
39
|
+
'details',
|
|
40
|
+
'summary',
|
|
41
|
+
]);
|
|
42
|
+
/**
|
|
43
|
+
* ARIA roles that indicate form input controls
|
|
44
|
+
*/
|
|
45
|
+
export const ARIA_INPUT_ROLES = new Set([
|
|
46
|
+
'radio',
|
|
47
|
+
'checkbox',
|
|
48
|
+
'switch',
|
|
49
|
+
'combobox',
|
|
50
|
+
'option',
|
|
51
|
+
'menuitemradio',
|
|
52
|
+
'menuitemcheckbox',
|
|
53
|
+
'tab',
|
|
54
|
+
]);
|
|
55
|
+
/**
|
|
56
|
+
* Click handler attributes that indicate clickable elements
|
|
57
|
+
*/
|
|
58
|
+
export const CLICK_HANDLER_ATTRIBUTES = ['onclick', '@click', 'v-on:click', 'ng-click'];
|
|
59
|
+
/**
|
|
60
|
+
* Generic HTML tags that shouldn't be used for selector hints
|
|
61
|
+
*/
|
|
62
|
+
export const GENERIC_TAGS = new Set(['html', 'body', 'main', 'article', 'section', 'div', 'span']);
|
|
63
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,QAAQ;IACR,MAAM;IACN,SAAS;IACT,WAAW;IACX,UAAU;IACV,SAAS;IACT,UAAU;IACV,kBAAkB;IAClB,eAAe;IACf,QAAQ;IACR,OAAO;IACP,UAAU;IACV,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,WAAW;CACZ,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACtC,GAAG;IACH,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACtC,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,KAAK;CACN,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAExF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable algorithms and utilities extracted from the original implementation
|
|
3
|
+
*
|
|
4
|
+
* These modules contain pure, framework-agnostic code that can be used
|
|
5
|
+
* in the new BaseSnapshot/Query Engine implementation.
|
|
6
|
+
*/
|
|
7
|
+
export { INTERACTIVE_ROLES, INTERACTIVE_TAGS, ARIA_INPUT_ROLES, CLICK_HANDLER_ATTRIBUTES, GENERIC_TAGS, } from './constants.js';
|
|
8
|
+
export { resolveRegion, getRegisteredRegions, STRUCTURED_REGION_SELECTORS, type NamedRegion, type RegionResolution, } from './regions.js';
|
|
9
|
+
export { scoreElement, dedupeByKey, rankByRelevance, type RankingMode, type ScoringSignals, type ScoredCandidate, type ScoreOptions, } from './scoring.js';
|
|
10
|
+
export { normalizeText, sanitizeAccessibleHint, truncate, escapeAttributeValue, escapeAttrSelectorValue, cssEscape, escapeXPathValue, tokenizeForMatching, fuzzyTokenMatch, levenshteinDistance, stringSimilarity, fuzzyTokensMatch, getTextContent, type TextContentNode, type FuzzyTokenMatchOptions, type FuzzyTokenMatchResult, } from './text-utils.js';
|
|
11
|
+
export { buildRoleSelector, buildAriaLabelSelector, buildNameSelector, buildTextContentXPath, buildAxSelector, combineRoleAndAttribute, isLikelyHtmlNameAttribute, } from './selectors.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,2BAA2B,EAC3B,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable algorithms and utilities extracted from the original implementation
|
|
3
|
+
*
|
|
4
|
+
* These modules contain pure, framework-agnostic code that can be used
|
|
5
|
+
* in the new BaseSnapshot/Query Engine implementation.
|
|
6
|
+
*/
|
|
7
|
+
// Constants for element discovery
|
|
8
|
+
export { INTERACTIVE_ROLES, INTERACTIVE_TAGS, ARIA_INPUT_ROLES, CLICK_HANDLER_ATTRIBUTES, GENERIC_TAGS, } from './constants.js';
|
|
9
|
+
// Semantic region resolution
|
|
10
|
+
export { resolveRegion, getRegisteredRegions, STRUCTURED_REGION_SELECTORS, } from './regions.js';
|
|
11
|
+
// Element scoring and ranking
|
|
12
|
+
export { scoreElement, dedupeByKey, rankByRelevance, } from './scoring.js';
|
|
13
|
+
// Text processing utilities
|
|
14
|
+
export { normalizeText, sanitizeAccessibleHint, truncate, escapeAttributeValue, escapeAttrSelectorValue, cssEscape, escapeXPathValue, tokenizeForMatching, fuzzyTokenMatch, levenshteinDistance, stringSimilarity, fuzzyTokensMatch, getTextContent, } from './text-utils.js';
|
|
15
|
+
// Selector building utilities
|
|
16
|
+
export { buildRoleSelector, buildAriaLabelSelector, buildNameSelector, buildTextContentXPath, buildAxSelector, combineRoleAndAttribute, isLikelyHtmlNameAttribute, } from './selectors.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kCAAkC;AAClC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,6BAA6B;AAC7B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,2BAA2B,GAG5B,MAAM,cAAc,CAAC;AAEtB,8BAA8B;AAC9B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,GAKhB,MAAM,cAAc,CAAC;AAEtB,4BAA4B;AAC5B,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GAIf,MAAM,iBAAiB,CAAC;AAEzB,8BAA8B;AAC9B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Region Resolver
|
|
3
|
+
*
|
|
4
|
+
* Maps string region names to CSS selectors and keywords
|
|
5
|
+
* for scoping element discovery to specific page areas.
|
|
6
|
+
*/
|
|
7
|
+
export interface NamedRegion {
|
|
8
|
+
summary: string;
|
|
9
|
+
cssSelector: string;
|
|
10
|
+
keywords: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface RegionResolution {
|
|
13
|
+
cssSelector?: string;
|
|
14
|
+
summary: string;
|
|
15
|
+
keywords?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a region string to its CSS selector and metadata
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveRegion(region?: string): RegionResolution;
|
|
21
|
+
/**
|
|
22
|
+
* Get all registered region names
|
|
23
|
+
*/
|
|
24
|
+
export declare function getRegisteredRegions(): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Structured region selectors for content extraction
|
|
27
|
+
*/
|
|
28
|
+
export declare const STRUCTURED_REGION_SELECTORS: Record<string, string>;
|
|
29
|
+
//# sourceMappingURL=regions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../../../src/lib/regions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuDD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAwB/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM9D,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Region Resolver
|
|
3
|
+
*
|
|
4
|
+
* Maps string region names to CSS selectors and keywords
|
|
5
|
+
* for scoping element discovery to specific page areas.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Mapping of region aliases to their properties
|
|
9
|
+
*/
|
|
10
|
+
const NAMED_REGIONS = {};
|
|
11
|
+
function registerRegion(aliases, region) {
|
|
12
|
+
for (const alias of aliases) {
|
|
13
|
+
NAMED_REGIONS[alias] = region;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Header/Navigation
|
|
17
|
+
registerRegion(['header', 'top', 'topnav', 'navigation', 'nav'], {
|
|
18
|
+
summary: 'header',
|
|
19
|
+
cssSelector: 'header',
|
|
20
|
+
keywords: ['header', 'banner', 'nav', 'globalnav'],
|
|
21
|
+
});
|
|
22
|
+
// Footer
|
|
23
|
+
registerRegion(['footer', 'bottom'], {
|
|
24
|
+
summary: 'footer',
|
|
25
|
+
cssSelector: 'footer',
|
|
26
|
+
keywords: ['footer', 'contentinfo'],
|
|
27
|
+
});
|
|
28
|
+
// Main content
|
|
29
|
+
registerRegion(['main', 'content'], {
|
|
30
|
+
summary: 'main content',
|
|
31
|
+
cssSelector: 'main',
|
|
32
|
+
keywords: ['main', 'content'],
|
|
33
|
+
});
|
|
34
|
+
// Sidebar
|
|
35
|
+
registerRegion(['sidebar', 'aside'], {
|
|
36
|
+
summary: 'sidebar',
|
|
37
|
+
cssSelector: 'aside',
|
|
38
|
+
keywords: ['sidebar', 'aside', 'complementary'],
|
|
39
|
+
});
|
|
40
|
+
// Hero section
|
|
41
|
+
registerRegion(['hero'], {
|
|
42
|
+
summary: 'hero region',
|
|
43
|
+
cssSelector: '[data-hero]',
|
|
44
|
+
keywords: ['hero'],
|
|
45
|
+
});
|
|
46
|
+
// Dialog/Modal
|
|
47
|
+
registerRegion(['dialog', 'modal'], {
|
|
48
|
+
summary: 'dialog',
|
|
49
|
+
cssSelector: '[role="dialog"], dialog',
|
|
50
|
+
keywords: ['dialog', 'modal'],
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Resolve a region string to its CSS selector and metadata
|
|
54
|
+
*/
|
|
55
|
+
export function resolveRegion(region) {
|
|
56
|
+
if (!region) {
|
|
57
|
+
return { summary: 'main frame' };
|
|
58
|
+
}
|
|
59
|
+
const normalized = region.trim().toLowerCase();
|
|
60
|
+
if (!normalized) {
|
|
61
|
+
return { summary: 'main frame' };
|
|
62
|
+
}
|
|
63
|
+
const named = NAMED_REGIONS[normalized];
|
|
64
|
+
if (named) {
|
|
65
|
+
return {
|
|
66
|
+
cssSelector: named.cssSelector,
|
|
67
|
+
summary: named.summary,
|
|
68
|
+
keywords: [...named.keywords],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Unknown region - treat as nearText search hint
|
|
72
|
+
return {
|
|
73
|
+
summary: region,
|
|
74
|
+
keywords: normalized.split(/\s+/).filter(Boolean),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all registered region names
|
|
79
|
+
*/
|
|
80
|
+
export function getRegisteredRegions() {
|
|
81
|
+
return Object.keys(NAMED_REGIONS);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Structured region selectors for content extraction
|
|
85
|
+
*/
|
|
86
|
+
export const STRUCTURED_REGION_SELECTORS = {
|
|
87
|
+
header: 'header',
|
|
88
|
+
main: 'main',
|
|
89
|
+
footer: 'footer',
|
|
90
|
+
sidebar: 'aside,[role="complementary"]',
|
|
91
|
+
article: 'article',
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=regions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.js","sourceRoot":"","sources":["../../../src/lib/regions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Scoring and Ranking Engine
|
|
3
|
+
*
|
|
4
|
+
* Multi-signal scoring system for ranking discovered elements
|
|
5
|
+
* by relevance to user intent.
|
|
6
|
+
*/
|
|
7
|
+
export type RankingMode = 'balanced' | 'semantic-first' | 'visual-first';
|
|
8
|
+
export interface ScoringSignals {
|
|
9
|
+
role?: string;
|
|
10
|
+
hasName: boolean;
|
|
11
|
+
hasLabel: boolean;
|
|
12
|
+
hasCssSelector: boolean;
|
|
13
|
+
hasXpathSelector: boolean;
|
|
14
|
+
hasAxSelector: boolean;
|
|
15
|
+
bboxArea: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ScoredCandidate<T> {
|
|
18
|
+
item: T;
|
|
19
|
+
relevance: number;
|
|
20
|
+
signals: ScoringSignals;
|
|
21
|
+
}
|
|
22
|
+
export interface ScoreOptions {
|
|
23
|
+
/** Filter/prioritize by ARIA roles */
|
|
24
|
+
roles?: string[];
|
|
25
|
+
/** Ranking strategy */
|
|
26
|
+
rankingMode?: RankingMode;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Score an element based on multiple signals
|
|
30
|
+
*/
|
|
31
|
+
export declare function scoreElement<T>(item: T, getRole: (item: T) => string | undefined, getName: (item: T) => string | undefined, getLabel: (item: T) => string | undefined, getSelectors: (item: T) => {
|
|
32
|
+
css?: string;
|
|
33
|
+
xpath?: string;
|
|
34
|
+
ax?: string;
|
|
35
|
+
}, getBbox: (item: T) => {
|
|
36
|
+
w: number;
|
|
37
|
+
h: number;
|
|
38
|
+
} | undefined, options?: ScoreOptions): ScoredCandidate<T>;
|
|
39
|
+
/**
|
|
40
|
+
* Deduplicate scored candidates by a key function
|
|
41
|
+
*/
|
|
42
|
+
export declare function dedupeByKey<T>(candidates: ScoredCandidate<T>[], getKey: (item: T) => string): ScoredCandidate<T>[];
|
|
43
|
+
/**
|
|
44
|
+
* Rank candidates by relevance (descending)
|
|
45
|
+
*/
|
|
46
|
+
export declare function rankByRelevance<T>(candidates: ScoredCandidate<T>[]): ScoredCandidate<T>[];
|
|
47
|
+
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../../src/lib/scoring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,uBAAuB;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,EACxC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,EACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,EACzC,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACxE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAC1D,OAAO,GAAE,YAAiB,GACzB,eAAe,CAAC,CAAC,CAAC,CAgDpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAChC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAC1B,eAAe,CAAC,CAAC,CAAC,EAAE,CAYtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAEzF"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Scoring and Ranking Engine
|
|
3
|
+
*
|
|
4
|
+
* Multi-signal scoring system for ranking discovered elements
|
|
5
|
+
* by relevance to user intent.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Score an element based on multiple signals
|
|
9
|
+
*/
|
|
10
|
+
export function scoreElement(item, getRole, getName, getLabel, getSelectors, getBbox, options = {}) {
|
|
11
|
+
const normalizedRoles = (options.roles ?? []).map((role) => role.toLowerCase());
|
|
12
|
+
const rankingMode = options.rankingMode ?? 'balanced';
|
|
13
|
+
let relevance = 0;
|
|
14
|
+
const role = getRole(item)?.toLowerCase();
|
|
15
|
+
// Role matching
|
|
16
|
+
if (normalizedRoles.length === 0 && role) {
|
|
17
|
+
relevance += 0.5; // Any role is a positive signal
|
|
18
|
+
}
|
|
19
|
+
if (role && normalizedRoles.includes(role)) {
|
|
20
|
+
relevance += 2; // Exact role match is strong
|
|
21
|
+
}
|
|
22
|
+
// Name/label presence and length
|
|
23
|
+
const name = getName(item);
|
|
24
|
+
const label = getLabel(item);
|
|
25
|
+
const nameLen = name?.trim().length ?? 0;
|
|
26
|
+
const labelLen = label?.trim().length ?? 0;
|
|
27
|
+
if (nameLen > 0)
|
|
28
|
+
relevance += Math.min(1.5, nameLen / 20);
|
|
29
|
+
if (labelLen > 0)
|
|
30
|
+
relevance += Math.min(1, labelLen / 30);
|
|
31
|
+
// Selector availability
|
|
32
|
+
const selectors = getSelectors(item);
|
|
33
|
+
if (selectors.css)
|
|
34
|
+
relevance += 0.3;
|
|
35
|
+
if (selectors.xpath)
|
|
36
|
+
relevance += 0.2;
|
|
37
|
+
if (selectors.ax)
|
|
38
|
+
relevance += 0.1;
|
|
39
|
+
// Ranking mode boosts
|
|
40
|
+
if (rankingMode === 'semantic-first' && role)
|
|
41
|
+
relevance += 0.5;
|
|
42
|
+
const bbox = getBbox(item);
|
|
43
|
+
if (rankingMode === 'visual-first' && bbox)
|
|
44
|
+
relevance += 0.5;
|
|
45
|
+
return {
|
|
46
|
+
item,
|
|
47
|
+
relevance,
|
|
48
|
+
signals: {
|
|
49
|
+
role: role ?? 'unknown',
|
|
50
|
+
hasName: nameLen > 0,
|
|
51
|
+
hasLabel: labelLen > 0,
|
|
52
|
+
hasCssSelector: Boolean(selectors.css),
|
|
53
|
+
hasXpathSelector: Boolean(selectors.xpath),
|
|
54
|
+
hasAxSelector: Boolean(selectors.ax),
|
|
55
|
+
bboxArea: bbox ? bbox.w * bbox.h : 0,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Deduplicate scored candidates by a key function
|
|
61
|
+
*/
|
|
62
|
+
export function dedupeByKey(candidates, getKey) {
|
|
63
|
+
const seen = new Map();
|
|
64
|
+
for (const candidate of candidates) {
|
|
65
|
+
const key = getKey(candidate.item);
|
|
66
|
+
const existing = seen.get(key);
|
|
67
|
+
if (!existing || candidate.relevance > existing.relevance) {
|
|
68
|
+
seen.set(key, candidate);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return Array.from(seen.values());
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Rank candidates by relevance (descending)
|
|
75
|
+
*/
|
|
76
|
+
export function rankByRelevance(candidates) {
|
|
77
|
+
return [...candidates].sort((a, b) => b.relevance - a.relevance);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../../src/lib/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selector Building Utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions for building CSS and XPath selectors
|
|
5
|
+
* from semantic element information.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Build CSS selector for a given ARIA role
|
|
9
|
+
* Maps roles to both native HTML elements and ARIA attributes
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildRoleSelector(role?: string): string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Build CSS attribute selector for aria-label
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildAriaLabelSelector(label: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Build CSS attribute selector for name attribute
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildNameSelector(name: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Build XPath selector for text content matching
|
|
22
|
+
* Used when accessible name comes from text content (not HTML attribute)
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildTextContentXPath(text: string, role?: string): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Build AX selector format: role=button[name*="..."]
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildAxSelector(role?: string, name?: string, label?: string): string | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Combine role selector with attribute clause
|
|
31
|
+
*/
|
|
32
|
+
export declare function combineRoleAndAttribute(roleSelector?: string, attrClause?: string): string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Determine if element.name likely represents an HTML name attribute
|
|
35
|
+
* vs an accessible name computed from text content
|
|
36
|
+
*
|
|
37
|
+
* HTML name attribute is only valid on specific elements:
|
|
38
|
+
* - Form elements: input, button, select, textarea, fieldset
|
|
39
|
+
* - Embedded content: iframe, object
|
|
40
|
+
*/
|
|
41
|
+
export declare function isLikelyHtmlNameAttribute(role?: string): boolean;
|
|
42
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/lib/selectors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiCnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBhG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAcpB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAahE"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selector Building Utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions for building CSS and XPath selectors
|
|
5
|
+
* from semantic element information.
|
|
6
|
+
*/
|
|
7
|
+
import { escapeAttributeValue, escapeXPathValue, tokenizeForMatching } from './text-utils.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build CSS selector for a given ARIA role
|
|
10
|
+
* Maps roles to both native HTML elements and ARIA attributes
|
|
11
|
+
*/
|
|
12
|
+
export function buildRoleSelector(role) {
|
|
13
|
+
if (!role)
|
|
14
|
+
return undefined;
|
|
15
|
+
const normalized = role.trim().toLowerCase();
|
|
16
|
+
switch (normalized) {
|
|
17
|
+
case 'link':
|
|
18
|
+
return 'a,[role="link"]';
|
|
19
|
+
case 'button':
|
|
20
|
+
return 'button,[role="button"],input[type="button"],input[type="submit"],input[type="reset"]';
|
|
21
|
+
case 'textbox':
|
|
22
|
+
case 'searchbox':
|
|
23
|
+
return 'input[type="text"],input[type="search"],textarea,[role="textbox"]';
|
|
24
|
+
case 'checkbox':
|
|
25
|
+
return 'input[type="checkbox"],[role="checkbox"]';
|
|
26
|
+
case 'radio':
|
|
27
|
+
return 'input[type="radio"],[role="radio"]';
|
|
28
|
+
case 'combobox':
|
|
29
|
+
return 'select,[role="combobox"],input[list]';
|
|
30
|
+
case 'listbox':
|
|
31
|
+
return 'select[multiple],[role="listbox"]';
|
|
32
|
+
case 'option':
|
|
33
|
+
return 'option,[role="option"]';
|
|
34
|
+
case 'tab':
|
|
35
|
+
return '[role="tab"],.tab';
|
|
36
|
+
case 'menuitem':
|
|
37
|
+
return '[role="menuitem"],[role="menuitemcheckbox"],[role="menuitemradio"]';
|
|
38
|
+
case 'switch':
|
|
39
|
+
return '[role="switch"]';
|
|
40
|
+
case 'slider':
|
|
41
|
+
return 'input[type="range"],[role="slider"]';
|
|
42
|
+
default:
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build CSS attribute selector for aria-label
|
|
48
|
+
*/
|
|
49
|
+
export function buildAriaLabelSelector(label) {
|
|
50
|
+
const escaped = escapeAttributeValue(label);
|
|
51
|
+
return `[aria-label*="${escaped}"]`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build CSS attribute selector for name attribute
|
|
55
|
+
*/
|
|
56
|
+
export function buildNameSelector(name) {
|
|
57
|
+
const escaped = escapeAttributeValue(name);
|
|
58
|
+
return `[name*="${escaped}"]`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build XPath selector for text content matching
|
|
62
|
+
* Used when accessible name comes from text content (not HTML attribute)
|
|
63
|
+
*/
|
|
64
|
+
export function buildTextContentXPath(text, role) {
|
|
65
|
+
const tokens = tokenizeForMatching(text);
|
|
66
|
+
if (tokens.length === 0)
|
|
67
|
+
return undefined;
|
|
68
|
+
const parts = [];
|
|
69
|
+
// Add role constraint if available
|
|
70
|
+
if (role) {
|
|
71
|
+
parts.push(`@role='${escapeXPathValue(role)}'`);
|
|
72
|
+
}
|
|
73
|
+
// Add text matching for each significant token
|
|
74
|
+
const textMatches = tokens
|
|
75
|
+
.map((token) => `contains(., '${escapeXPathValue(token)}')`)
|
|
76
|
+
.join(' and ');
|
|
77
|
+
parts.push(textMatches);
|
|
78
|
+
return `//*[${parts.join(' and ')}]`;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Build AX selector format: role=button[name*="..."]
|
|
82
|
+
*/
|
|
83
|
+
export function buildAxSelector(role, name, label) {
|
|
84
|
+
const qualifierSource = name ?? label;
|
|
85
|
+
const snippet = qualifierSource?.trim();
|
|
86
|
+
if (!role && !snippet) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
if (!snippet && role) {
|
|
90
|
+
return `role=${role}`;
|
|
91
|
+
}
|
|
92
|
+
if (!snippet) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const qualifierKey = name ? 'name' : 'label';
|
|
96
|
+
const qualifier = escapeAttributeValue(snippet, 160);
|
|
97
|
+
const prefix = role ? `role=${role}` : '';
|
|
98
|
+
return `${prefix}[${qualifierKey}*="${qualifier}"]`.trim();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Combine role selector with attribute clause
|
|
102
|
+
*/
|
|
103
|
+
export function combineRoleAndAttribute(roleSelector, attrClause) {
|
|
104
|
+
if (roleSelector && attrClause) {
|
|
105
|
+
return roleSelector
|
|
106
|
+
.split(',')
|
|
107
|
+
.map((segment) => `${segment.trim()}${attrClause}`)
|
|
108
|
+
.join(',');
|
|
109
|
+
}
|
|
110
|
+
if (roleSelector) {
|
|
111
|
+
return roleSelector;
|
|
112
|
+
}
|
|
113
|
+
if (attrClause) {
|
|
114
|
+
return `*${attrClause}`;
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Determine if element.name likely represents an HTML name attribute
|
|
120
|
+
* vs an accessible name computed from text content
|
|
121
|
+
*
|
|
122
|
+
* HTML name attribute is only valid on specific elements:
|
|
123
|
+
* - Form elements: input, button, select, textarea, fieldset
|
|
124
|
+
* - Embedded content: iframe, object
|
|
125
|
+
*/
|
|
126
|
+
export function isLikelyHtmlNameAttribute(role) {
|
|
127
|
+
if (!role)
|
|
128
|
+
return true; // No role info, assume it could be HTML name attribute
|
|
129
|
+
const normalized = role.toLowerCase();
|
|
130
|
+
// Native HTML elements that have actual name attributes
|
|
131
|
+
const NATIVE_HTML_ROLES = new Set([
|
|
132
|
+
'textbox', // Could be <input> or <textarea> with name attribute
|
|
133
|
+
'searchbox', // Could be <input type="search"> with name attribute
|
|
134
|
+
'combobox', // Could be <select> with name attribute
|
|
135
|
+
]);
|
|
136
|
+
return NATIVE_HTML_ROLES.has(normalized);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../../src/lib/selectors.ts"],"names":[],"mappings":"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"}
|