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