agent-web-interface 4.3.0 → 4.5.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/dist/src/browser/browser-session-config.d.ts +33 -0
- package/dist/src/browser/browser-session-config.d.ts.map +1 -0
- package/dist/src/browser/browser-session-config.js +24 -0
- package/dist/src/browser/browser-session-config.js.map +1 -0
- package/dist/src/browser/connection-utils.d.ts +48 -0
- package/dist/src/browser/connection-utils.d.ts.map +1 -0
- package/dist/src/browser/connection-utils.js +129 -0
- package/dist/src/browser/connection-utils.js.map +1 -0
- package/dist/src/browser/ensure-browser.d.ts +12 -27
- package/dist/src/browser/ensure-browser.d.ts.map +1 -1
- package/dist/src/browser/ensure-browser.js +104 -37
- package/dist/src/browser/ensure-browser.js.map +1 -1
- package/dist/src/browser/index.d.ts +4 -1
- package/dist/src/browser/index.d.ts.map +1 -1
- package/dist/src/browser/index.js +3 -1
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/session-manager.d.ts +21 -89
- package/dist/src/browser/session-manager.d.ts.map +1 -1
- package/dist/src/browser/session-manager.js +122 -132
- package/dist/src/browser/session-manager.js.map +1 -1
- package/dist/src/browser/session-manager.types.d.ts +102 -0
- package/dist/src/browser/session-manager.types.d.ts.map +1 -0
- package/dist/src/browser/session-manager.types.js +11 -0
- package/dist/src/browser/session-manager.types.js.map +1 -0
- package/dist/src/cli/args.d.ts +12 -18
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +35 -40
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/form/constraint-extraction.d.ts +36 -0
- package/dist/src/form/constraint-extraction.d.ts.map +1 -0
- package/dist/src/form/constraint-extraction.js +117 -0
- package/dist/src/form/constraint-extraction.js.map +1 -0
- package/dist/src/form/field-extractor.d.ts.map +1 -1
- package/dist/src/form/field-extractor.js +16 -450
- package/dist/src/form/field-extractor.js.map +1 -1
- package/dist/src/form/field-state-extractor.d.ts +22 -0
- package/dist/src/form/field-state-extractor.d.ts.map +1 -0
- package/dist/src/form/field-state-extractor.js +55 -0
- package/dist/src/form/field-state-extractor.js.map +1 -0
- package/dist/src/form/form-actions.d.ts +45 -0
- package/dist/src/form/form-actions.d.ts.map +1 -0
- package/dist/src/form/form-actions.js +108 -0
- package/dist/src/form/form-actions.js.map +1 -0
- package/dist/src/form/form-detector.d.ts +0 -36
- package/dist/src/form/form-detector.d.ts.map +1 -1
- package/dist/src/form/form-detector.js +11 -376
- package/dist/src/form/form-detector.js.map +1 -1
- package/dist/src/form/form-state.d.ts.map +1 -1
- package/dist/src/form/form-state.js +16 -4
- package/dist/src/form/form-state.js.map +1 -1
- package/dist/src/form/input-clustering.d.ts +15 -0
- package/dist/src/form/input-clustering.d.ts.map +1 -0
- package/dist/src/form/input-clustering.js +61 -0
- package/dist/src/form/input-clustering.js.map +1 -0
- package/dist/src/form/intent-inference.d.ts +28 -0
- package/dist/src/form/intent-inference.d.ts.map +1 -0
- package/dist/src/form/intent-inference.js +137 -0
- package/dist/src/form/intent-inference.js.map +1 -0
- package/dist/src/form/purpose-inference.d.ts +50 -0
- package/dist/src/form/purpose-inference.d.ts.map +1 -0
- package/dist/src/form/purpose-inference.js +313 -0
- package/dist/src/form/purpose-inference.js.map +1 -0
- package/dist/src/form/submit-detection.d.ts +36 -0
- package/dist/src/form/submit-detection.d.ts.map +1 -0
- package/dist/src/form/submit-detection.js +101 -0
- package/dist/src/form/submit-detection.js.map +1 -0
- package/dist/src/form/types.d.ts +2 -2
- package/dist/src/gateway/http-gateway.d.ts +56 -0
- package/dist/src/gateway/http-gateway.d.ts.map +1 -0
- package/dist/src/gateway/http-gateway.js +229 -0
- package/dist/src/gateway/http-gateway.js.map +1 -0
- package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
- package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
- package/dist/src/gateway/json-rpc-errors.js +11 -0
- package/dist/src/gateway/json-rpc-errors.js.map +1 -0
- package/dist/src/gateway/session-router.d.ts +80 -0
- package/dist/src/gateway/session-router.d.ts.map +1 -0
- package/dist/src/gateway/session-router.js +177 -0
- package/dist/src/gateway/session-router.js.map +1 -0
- package/dist/src/http-entry.d.ts +20 -0
- package/dist/src/http-entry.d.ts.map +1 -0
- package/dist/src/http-entry.js +112 -0
- package/dist/src/http-entry.js.map +1 -0
- package/dist/src/index.d.ts +1 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +25 -227
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/text-utils.d.ts +0 -24
- package/dist/src/lib/text-utils.d.ts.map +1 -1
- package/dist/src/lib/text-utils.js +2 -38
- package/dist/src/lib/text-utils.js.map +1 -1
- package/dist/src/observation/eid-linker.d.ts.map +1 -1
- package/dist/src/observation/eid-linker.js +1 -21
- package/dist/src/observation/eid-linker.js.map +1 -1
- package/dist/src/observation/observation-accumulator.d.ts +1 -1
- package/dist/src/observation/observation-accumulator.js +1 -1
- package/dist/src/observation/observer-script.d.ts +1 -1
- package/dist/src/observation/observer-script.d.ts.map +1 -1
- package/dist/src/observation/observer-script.js +129 -7
- package/dist/src/observation/observer-script.js.map +1 -1
- package/dist/src/query/disambiguation.d.ts +18 -0
- package/dist/src/query/disambiguation.d.ts.map +1 -0
- package/dist/src/query/disambiguation.js +123 -0
- package/dist/src/query/disambiguation.js.map +1 -0
- package/dist/src/query/fuzzy-match.d.ts +17 -0
- package/dist/src/query/fuzzy-match.d.ts.map +1 -0
- package/dist/src/query/fuzzy-match.js +34 -0
- package/dist/src/query/fuzzy-match.js.map +1 -0
- package/dist/src/query/index.d.ts +3 -0
- package/dist/src/query/index.d.ts.map +1 -1
- package/dist/src/query/index.js +6 -0
- package/dist/src/query/index.js.map +1 -1
- package/dist/src/query/query-engine.d.ts +0 -35
- package/dist/src/query/query-engine.d.ts.map +1 -1
- package/dist/src/query/query-engine.js +9 -309
- package/dist/src/query/query-engine.js.map +1 -1
- package/dist/src/query/scoring.d.ts +52 -0
- package/dist/src/query/scoring.d.ts.map +1 -0
- package/dist/src/query/scoring.js +162 -0
- package/dist/src/query/scoring.js.map +1 -0
- package/dist/src/server/index.d.ts +0 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +0 -1
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/mcp-server.d.ts +6 -2
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/mcp-server.js +3 -91
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/server/server-config.d.ts +4 -20
- package/dist/src/server/server-config.d.ts.map +1 -1
- package/dist/src/server/server-config.js +6 -50
- package/dist/src/server/server-config.js.map +1 -1
- package/dist/src/server/tool-registrar.types.d.ts +25 -0
- package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
- package/dist/src/server/tool-registrar.types.js +10 -0
- package/dist/src/server/tool-registrar.types.js.map +1 -0
- package/dist/src/server/tool-result-handler.d.ts +61 -0
- package/dist/src/server/tool-result-handler.d.ts.map +1 -0
- package/dist/src/server/tool-result-handler.js +137 -0
- package/dist/src/server/tool-result-handler.js.map +1 -0
- package/dist/src/session/session-controller.d.ts +123 -0
- package/dist/src/session/session-controller.d.ts.map +1 -0
- package/dist/src/session/session-controller.js +273 -0
- package/dist/src/session/session-controller.js.map +1 -0
- package/dist/src/shared/services/index.d.ts +0 -2
- package/dist/src/shared/services/index.d.ts.map +1 -1
- package/dist/src/shared/services/index.js +0 -2
- package/dist/src/shared/services/index.js.map +1 -1
- package/dist/src/shared/version.d.ts +10 -0
- package/dist/src/shared/version.d.ts.map +1 -0
- package/dist/src/shared/version.js +32 -0
- package/dist/src/shared/version.js.map +1 -0
- package/dist/src/snapshot/element-resolver.d.ts +27 -15
- package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
- package/dist/src/snapshot/element-resolver.js +196 -91
- package/dist/src/snapshot/element-resolver.js.map +1 -1
- package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
- package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/ax-extractor.d.ts +1 -1
- package/dist/src/snapshot/extractors/ax-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/ax-extractor.js +4 -1
- package/dist/src/snapshot/extractors/ax-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/index.d.ts +1 -1
- package/dist/src/snapshot/extractors/index.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/index.js +1 -1
- package/dist/src/snapshot/extractors/index.js.map +1 -1
- package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
- package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
- package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/region-resolver.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/region-resolver.js +8 -0
- package/dist/src/snapshot/extractors/region-resolver.js.map +1 -1
- package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
- package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/state-extractor.js +22 -2
- package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/types.d.ts +14 -0
- package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/types.js +16 -0
- package/dist/src/snapshot/extractors/types.js.map +1 -1
- package/dist/src/snapshot/frame-context.d.ts +68 -0
- package/dist/src/snapshot/frame-context.d.ts.map +1 -0
- package/dist/src/snapshot/frame-context.js +131 -0
- package/dist/src/snapshot/frame-context.js.map +1 -0
- package/dist/src/snapshot/heading-index.d.ts +28 -0
- package/dist/src/snapshot/heading-index.d.ts.map +1 -0
- package/dist/src/snapshot/heading-index.js +108 -0
- package/dist/src/snapshot/heading-index.js.map +1 -0
- package/dist/src/snapshot/index.d.ts +5 -3
- package/dist/src/snapshot/index.d.ts.map +1 -1
- package/dist/src/snapshot/index.js +3 -2
- package/dist/src/snapshot/index.js.map +1 -1
- package/dist/src/snapshot/kind-mapping.d.ts +30 -0
- package/dist/src/snapshot/kind-mapping.d.ts.map +1 -0
- package/dist/src/snapshot/kind-mapping.js +114 -0
- package/dist/src/snapshot/kind-mapping.js.map +1 -0
- package/dist/src/snapshot/node-filter.d.ts +31 -0
- package/dist/src/snapshot/node-filter.d.ts.map +1 -0
- package/dist/src/snapshot/node-filter.js +137 -0
- package/dist/src/snapshot/node-filter.js.map +1 -0
- package/dist/src/snapshot/node-synthesizer.d.ts +62 -0
- package/dist/src/snapshot/node-synthesizer.d.ts.map +1 -0
- package/dist/src/snapshot/node-synthesizer.js +185 -0
- package/dist/src/snapshot/node-synthesizer.js.map +1 -0
- package/dist/src/snapshot/snapshot-compiler.d.ts +2 -36
- package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.js +40 -549
- package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
- package/dist/src/snapshot/snapshot.types.d.ts +17 -3
- package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot.types.js +8 -0
- package/dist/src/snapshot/snapshot.types.js.map +1 -1
- package/dist/src/state/actionables-filter.d.ts +5 -0
- package/dist/src/state/actionables-filter.d.ts.map +1 -1
- package/dist/src/state/actionables-filter.js +28 -6
- package/dist/src/state/actionables-filter.js.map +1 -1
- package/dist/src/state/atoms-extractor.d.ts.map +1 -1
- package/dist/src/state/atoms-extractor.js +3 -23
- package/dist/src/state/atoms-extractor.js.map +1 -1
- package/dist/src/state/diff-engine.d.ts.map +1 -1
- package/dist/src/state/diff-engine.js +9 -36
- package/dist/src/state/diff-engine.js.map +1 -1
- package/dist/src/state/element-identity.d.ts +3 -6
- package/dist/src/state/element-identity.d.ts.map +1 -1
- package/dist/src/state/element-identity.js +10 -7
- package/dist/src/state/element-identity.js.map +1 -1
- package/dist/src/state/element-ref.types.d.ts +5 -27
- package/dist/src/state/element-ref.types.d.ts.map +1 -1
- package/dist/src/state/element-registry.d.ts.map +1 -1
- package/dist/src/state/element-registry.js +6 -4
- package/dist/src/state/element-registry.js.map +1 -1
- package/dist/src/state/hash-utils.d.ts +24 -0
- package/dist/src/state/hash-utils.d.ts.map +1 -0
- package/dist/src/state/hash-utils.js +41 -0
- package/dist/src/state/hash-utils.js.map +1 -0
- package/dist/src/state/layer-detector.d.ts.map +1 -1
- package/dist/src/state/layer-detector.js +15 -286
- package/dist/src/state/layer-detector.js.map +1 -1
- package/dist/src/state/layer-detectors/drawer-detector.d.ts +32 -0
- package/dist/src/state/layer-detectors/drawer-detector.d.ts.map +1 -0
- package/dist/src/state/layer-detectors/drawer-detector.js +96 -0
- package/dist/src/state/layer-detectors/drawer-detector.js.map +1 -0
- package/dist/src/state/layer-detectors/index.d.ts +10 -0
- package/dist/src/state/layer-detectors/index.d.ts.map +1 -0
- package/dist/src/state/layer-detectors/index.js +10 -0
- package/dist/src/state/layer-detectors/index.js.map +1 -0
- package/dist/src/state/layer-detectors/modal-detector.d.ts +30 -0
- package/dist/src/state/layer-detectors/modal-detector.d.ts.map +1 -0
- package/dist/src/state/layer-detectors/modal-detector.js +127 -0
- package/dist/src/state/layer-detectors/modal-detector.js.map +1 -0
- package/dist/src/state/layer-detectors/popover-detector.d.ts +20 -0
- package/dist/src/state/layer-detectors/popover-detector.d.ts.map +1 -0
- package/dist/src/state/layer-detectors/popover-detector.js +76 -0
- package/dist/src/state/layer-detectors/popover-detector.js.map +1 -0
- package/dist/src/state/layer-detectors/toast-detector.d.ts +24 -0
- package/dist/src/state/layer-detectors/toast-detector.d.ts.map +1 -0
- package/dist/src/state/layer-detectors/toast-detector.js +48 -0
- package/dist/src/state/layer-detectors/toast-detector.js.map +1 -0
- package/dist/src/state/region-mapping.d.ts +13 -0
- package/dist/src/state/region-mapping.d.ts.map +1 -0
- package/dist/src/state/region-mapping.js +25 -0
- package/dist/src/state/region-mapping.js.map +1 -0
- package/dist/src/state/state-manager.d.ts.map +1 -1
- package/dist/src/state/state-manager.js +11 -193
- package/dist/src/state/state-manager.js.map +1 -1
- package/dist/src/state/state-renderer.d.ts.map +1 -1
- package/dist/src/state/state-renderer.js +17 -3
- package/dist/src/state/state-renderer.js.map +1 -1
- package/dist/src/state/types.d.ts +10 -5
- package/dist/src/state/types.d.ts.map +1 -1
- package/dist/src/state/url-sanitization.d.ts +22 -0
- package/dist/src/state/url-sanitization.d.ts.map +1 -0
- package/dist/src/state/url-sanitization.js +76 -0
- package/dist/src/state/url-sanitization.js.map +1 -0
- package/dist/src/state/value-masking.d.ts +36 -0
- package/dist/src/state/value-masking.d.ts.map +1 -0
- package/dist/src/state/value-masking.js +86 -0
- package/dist/src/state/value-masking.js.map +1 -0
- package/dist/src/tools/action-context.d.ts +55 -0
- package/dist/src/tools/action-context.d.ts.map +1 -0
- package/dist/src/tools/action-context.js +69 -0
- package/dist/src/tools/action-context.js.map +1 -0
- package/dist/src/tools/action-stabilization.d.ts +48 -0
- package/dist/src/tools/action-stabilization.d.ts.map +1 -0
- package/dist/src/tools/action-stabilization.js +93 -0
- package/dist/src/tools/action-stabilization.js.map +1 -0
- package/dist/src/tools/browser-tools.d.ts +9 -167
- package/dist/src/tools/browser-tools.d.ts.map +1 -1
- package/dist/src/tools/browser-tools.js +15 -651
- package/dist/src/tools/browser-tools.js.map +1 -1
- package/dist/src/tools/canvas-tools.d.ts +2 -1
- package/dist/src/tools/canvas-tools.d.ts.map +1 -1
- package/dist/src/tools/canvas-tools.js +5 -7
- package/dist/src/tools/canvas-tools.js.map +1 -1
- package/dist/src/tools/effect-tracker.d.ts +25 -0
- package/dist/src/tools/effect-tracker.d.ts.map +1 -0
- package/dist/src/tools/effect-tracker.js +69 -0
- package/dist/src/tools/effect-tracker.js.map +1 -0
- package/dist/src/tools/errors.d.ts +2 -34
- package/dist/src/tools/errors.d.ts.map +1 -1
- package/dist/src/tools/errors.js +1 -44
- package/dist/src/tools/errors.js.map +1 -1
- package/dist/src/tools/execute-action.d.ts +5 -34
- package/dist/src/tools/execute-action.d.ts.map +1 -1
- package/dist/src/tools/execute-action.js +37 -297
- package/dist/src/tools/execute-action.js.map +1 -1
- package/dist/src/tools/form-tools.d.ts +5 -10
- package/dist/src/tools/form-tools.d.ts.map +1 -1
- package/dist/src/tools/form-tools.js +42 -22
- package/dist/src/tools/form-tools.js.map +1 -1
- package/dist/src/tools/index.d.ts +6 -6
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +16 -17
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/interaction-tools.d.ts +47 -0
- package/dist/src/tools/interaction-tools.d.ts.map +1 -0
- package/dist/src/tools/interaction-tools.js +135 -0
- package/dist/src/tools/interaction-tools.js.map +1 -0
- package/dist/src/tools/navigation-detection.d.ts +31 -0
- package/dist/src/tools/navigation-detection.d.ts.map +1 -0
- package/dist/src/tools/navigation-detection.js +46 -0
- package/dist/src/tools/navigation-detection.js.map +1 -0
- package/dist/src/tools/navigation-tools.d.ts +51 -0
- package/dist/src/tools/navigation-tools.d.ts.map +1 -0
- package/dist/src/tools/navigation-tools.js +171 -0
- package/dist/src/tools/navigation-tools.js.map +1 -0
- package/dist/src/tools/observation-tools.d.ts +54 -0
- package/dist/src/tools/observation-tools.d.ts.map +1 -0
- package/dist/src/tools/observation-tools.js +243 -0
- package/dist/src/tools/observation-tools.js.map +1 -0
- package/dist/src/tools/readability-tools.d.ts +16 -0
- package/dist/src/tools/readability-tools.d.ts.map +1 -0
- package/dist/src/tools/readability-tools.js +45 -0
- package/dist/src/tools/readability-tools.js.map +1 -0
- package/dist/src/tools/response-builder.d.ts +20 -32
- package/dist/src/tools/response-builder.d.ts.map +1 -1
- package/dist/src/tools/response-builder.js +32 -48
- package/dist/src/tools/response-builder.js.map +1 -1
- package/dist/src/tools/stale-element-retry.d.ts +37 -0
- package/dist/src/tools/stale-element-retry.d.ts.map +1 -0
- package/dist/src/tools/stale-element-retry.js +103 -0
- package/dist/src/tools/stale-element-retry.js.map +1 -0
- package/dist/src/tools/tool-context.d.ts +4 -36
- package/dist/src/tools/tool-context.d.ts.map +1 -1
- package/dist/src/tools/tool-context.js +6 -75
- package/dist/src/tools/tool-context.js.map +1 -1
- package/dist/src/tools/tool-context.types.d.ts +141 -0
- package/dist/src/tools/tool-context.types.d.ts.map +1 -0
- package/dist/src/tools/tool-context.types.js +11 -0
- package/dist/src/tools/tool-context.types.js.map +1 -0
- package/dist/src/tools/tool-registration.d.ts +25 -0
- package/dist/src/tools/tool-registration.d.ts.map +1 -0
- package/dist/src/tools/tool-registration.js +180 -0
- package/dist/src/tools/tool-registration.js.map +1 -0
- package/dist/src/tools/tool-schemas.d.ts +176 -1950
- package/dist/src/tools/tool-schemas.d.ts.map +1 -1
- package/dist/src/tools/tool-schemas.js +80 -320
- package/dist/src/tools/tool-schemas.js.map +1 -1
- package/dist/src/tools/viewport-tools.d.ts +37 -0
- package/dist/src/tools/viewport-tools.d.ts.map +1 -0
- package/dist/src/tools/viewport-tools.js +101 -0
- package/dist/src/tools/viewport-tools.js.map +1 -0
- package/dist/src/worker/chrome-worker-process.d.ts +4 -0
- package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
- package/dist/src/worker/chrome-worker-process.js +1 -1
- package/dist/src/worker/chrome-worker-process.js.map +1 -1
- package/package.json +7 -3
- package/dist/src/factpack/action-selector.d.ts +0 -36
- package/dist/src/factpack/action-selector.d.ts.map +0 -1
- package/dist/src/factpack/action-selector.js +0 -367
- package/dist/src/factpack/action-selector.js.map +0 -1
- package/dist/src/factpack/dialog-detector.d.ts +0 -19
- package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
- package/dist/src/factpack/dialog-detector.js +0 -354
- package/dist/src/factpack/dialog-detector.js.map +0 -1
- package/dist/src/factpack/form-detector.d.ts +0 -28
- package/dist/src/factpack/form-detector.d.ts.map +0 -1
- package/dist/src/factpack/form-detector.js +0 -555
- package/dist/src/factpack/form-detector.js.map +0 -1
- package/dist/src/factpack/index.d.ts +0 -32
- package/dist/src/factpack/index.d.ts.map +0 -1
- package/dist/src/factpack/index.js +0 -73
- package/dist/src/factpack/index.js.map +0 -1
- package/dist/src/factpack/page-classifier.d.ts +0 -22
- package/dist/src/factpack/page-classifier.d.ts.map +0 -1
- package/dist/src/factpack/page-classifier.js +0 -526
- package/dist/src/factpack/page-classifier.js.map +0 -1
- package/dist/src/factpack/types.d.ts +0 -307
- package/dist/src/factpack/types.d.ts.map +0 -1
- package/dist/src/factpack/types.js +0 -12
- package/dist/src/factpack/types.js.map +0 -1
- package/dist/src/lib/constants.d.ts +0 -27
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -63
- package/dist/src/lib/constants.js.map +0 -1
- package/dist/src/lib/index.d.ts +0 -12
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -17
- package/dist/src/lib/index.js.map +0 -1
- package/dist/src/lib/regions.d.ts +0 -29
- package/dist/src/lib/regions.d.ts.map +0 -1
- package/dist/src/lib/regions.js +0 -93
- package/dist/src/lib/regions.js.map +0 -1
- package/dist/src/lib/scoring.d.ts +0 -47
- package/dist/src/lib/scoring.d.ts.map +0 -1
- package/dist/src/lib/scoring.js +0 -79
- package/dist/src/lib/scoring.js.map +0 -1
- package/dist/src/lib/selectors.d.ts +0 -42
- package/dist/src/lib/selectors.d.ts.map +0 -1
- package/dist/src/lib/selectors.js +0 -138
- package/dist/src/lib/selectors.js.map +0 -1
- package/dist/src/renderer/budget-manager.d.ts +0 -46
- package/dist/src/renderer/budget-manager.d.ts.map +0 -1
- package/dist/src/renderer/budget-manager.js +0 -133
- package/dist/src/renderer/budget-manager.js.map +0 -1
- package/dist/src/renderer/constants.d.ts +0 -38
- package/dist/src/renderer/constants.d.ts.map +0 -1
- package/dist/src/renderer/constants.js +0 -29
- package/dist/src/renderer/constants.js.map +0 -1
- package/dist/src/renderer/index.d.ts +0 -12
- package/dist/src/renderer/index.d.ts.map +0 -1
- package/dist/src/renderer/index.js +0 -16
- package/dist/src/renderer/index.js.map +0 -1
- package/dist/src/renderer/section-renderers.d.ts +0 -42
- package/dist/src/renderer/section-renderers.d.ts.map +0 -1
- package/dist/src/renderer/section-renderers.js +0 -252
- package/dist/src/renderer/section-renderers.js.map +0 -1
- package/dist/src/renderer/token-counter.d.ts +0 -45
- package/dist/src/renderer/token-counter.d.ts.map +0 -1
- package/dist/src/renderer/token-counter.js +0 -65
- package/dist/src/renderer/token-counter.js.map +0 -1
- package/dist/src/renderer/types.d.ts +0 -71
- package/dist/src/renderer/types.d.ts.map +0 -1
- package/dist/src/renderer/types.js +0 -7
- package/dist/src/renderer/types.js.map +0 -1
- package/dist/src/renderer/xml-renderer.d.ts +0 -42
- package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
- package/dist/src/renderer/xml-renderer.js +0 -103
- package/dist/src/renderer/xml-renderer.js.map +0 -1
- package/dist/src/server/session-store.d.ts +0 -163
- package/dist/src/server/session-store.d.ts.map +0 -1
- package/dist/src/server/session-store.js +0 -248
- package/dist/src/server/session-store.js.map +0 -1
- package/dist/src/session/session-worker-binding.d.ts +0 -57
- package/dist/src/session/session-worker-binding.d.ts.map +0 -1
- package/dist/src/session/session-worker-binding.js +0 -109
- package/dist/src/session/session-worker-binding.js.map +0 -1
- package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
- package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
- package/dist/src/shared/services/dom-transformer.service.js +0 -190
- package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
- package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
- package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
- package/dist/src/shared/services/selector-builder.service.js +0 -240
- package/dist/src/shared/services/selector-builder.service.js.map +0 -1
- package/dist/src/state/constants.d.ts +0 -125
- package/dist/src/state/constants.d.ts.map +0 -1
- package/dist/src/state/constants.js +0 -131
- package/dist/src/state/constants.js.map +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heading Index Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds a heading context index mapping each backendNodeId to its
|
|
5
|
+
* heading context based on DOM order traversal.
|
|
6
|
+
*
|
|
7
|
+
* @module snapshot/heading-index
|
|
8
|
+
*/
|
|
9
|
+
import type { DomExtractionResult, AxExtractionResult } from './extractors/index.js';
|
|
10
|
+
import type { AdjacencyMaps, IdMapsByContext } from './frame-context.js';
|
|
11
|
+
/**
|
|
12
|
+
* Build heading index mapping each backendNodeId to its heading context.
|
|
13
|
+
* Uses DOM order to determine the most recent preceding heading.
|
|
14
|
+
* Also traverses into shadow roots and iframe content documents.
|
|
15
|
+
*
|
|
16
|
+
* Heading context is isolated at iframe boundaries:
|
|
17
|
+
* - Heading from parent document does NOT propagate into iframe
|
|
18
|
+
* - Heading from iframe does NOT propagate back to parent document
|
|
19
|
+
* - Shadow DOM shares heading context with its host document
|
|
20
|
+
*
|
|
21
|
+
* @param domResult - DOM extraction result
|
|
22
|
+
* @param axResult - AX extraction result for heading names
|
|
23
|
+
* @param idMapsByContext - Context-scoped ID maps for aria-labelledby resolution
|
|
24
|
+
* @param adjacencyMaps - Precomputed maps for shadow roots and content documents
|
|
25
|
+
* @returns Map of backendNodeId -> heading context string
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildHeadingIndex(domResult: DomExtractionResult, axResult: AxExtractionResult | undefined, idMapsByContext: IdMapsByContext, adjacencyMaps: AdjacencyMaps): Map<number, string>;
|
|
28
|
+
//# sourceMappingURL=heading-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heading-index.d.ts","sourceRoot":"","sources":["../../../src/snapshot/heading-index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGrF,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,GAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA2FrB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heading Index Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds a heading context index mapping each backendNodeId to its
|
|
5
|
+
* heading context based on DOM order traversal.
|
|
6
|
+
*
|
|
7
|
+
* @module snapshot/heading-index
|
|
8
|
+
*/
|
|
9
|
+
import { resolveLabel } from './extractors/index.js';
|
|
10
|
+
import { getTextContent } from '../lib/text-utils.js';
|
|
11
|
+
import { getIdMapForNode } from './frame-context.js';
|
|
12
|
+
/**
|
|
13
|
+
* Build heading index mapping each backendNodeId to its heading context.
|
|
14
|
+
* Uses DOM order to determine the most recent preceding heading.
|
|
15
|
+
* Also traverses into shadow roots and iframe content documents.
|
|
16
|
+
*
|
|
17
|
+
* Heading context is isolated at iframe boundaries:
|
|
18
|
+
* - Heading from parent document does NOT propagate into iframe
|
|
19
|
+
* - Heading from iframe does NOT propagate back to parent document
|
|
20
|
+
* - Shadow DOM shares heading context with its host document
|
|
21
|
+
*
|
|
22
|
+
* @param domResult - DOM extraction result
|
|
23
|
+
* @param axResult - AX extraction result for heading names
|
|
24
|
+
* @param idMapsByContext - Context-scoped ID maps for aria-labelledby resolution
|
|
25
|
+
* @param adjacencyMaps - Precomputed maps for shadow roots and content documents
|
|
26
|
+
* @returns Map of backendNodeId -> heading context string
|
|
27
|
+
*/
|
|
28
|
+
export function buildHeadingIndex(domResult, axResult, idMapsByContext, adjacencyMaps) {
|
|
29
|
+
const headingIndex = new Map();
|
|
30
|
+
const shadowHostSet = new Set(domResult.shadowRoots);
|
|
31
|
+
// Helper to check if a node is a heading and resolve its name
|
|
32
|
+
function isHeading(backendNodeId) {
|
|
33
|
+
const domNode = domResult.nodes.get(backendNodeId);
|
|
34
|
+
const axNode = axResult?.nodes.get(backendNodeId);
|
|
35
|
+
// Check AX role first
|
|
36
|
+
const scopedIdMap = domNode ? getIdMapForNode(domNode, idMapsByContext) : undefined;
|
|
37
|
+
if (axNode?.role === 'heading') {
|
|
38
|
+
// Priority: AX name -> resolveLabel -> DOM text content
|
|
39
|
+
let name = axNode.name;
|
|
40
|
+
if (!name && domNode) {
|
|
41
|
+
const labelResult = resolveLabel(domNode, axNode, scopedIdMap);
|
|
42
|
+
if (labelResult.source !== 'none') {
|
|
43
|
+
name = labelResult.label;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
name ??= getTextContent(backendNodeId, domResult.nodes);
|
|
47
|
+
return { isHeading: true, name };
|
|
48
|
+
}
|
|
49
|
+
// Check DOM tag (H1-H6)
|
|
50
|
+
if (domNode?.nodeName?.match(/^H[1-6]$/i)) {
|
|
51
|
+
// Priority: AX name -> resolveLabel -> DOM text content
|
|
52
|
+
let name = axNode?.name;
|
|
53
|
+
if (!name) {
|
|
54
|
+
const labelResult = resolveLabel(domNode, axNode, scopedIdMap);
|
|
55
|
+
if (labelResult.source !== 'none') {
|
|
56
|
+
name = labelResult.label;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
name ??= getTextContent(backendNodeId, domResult.nodes);
|
|
60
|
+
return { isHeading: true, name };
|
|
61
|
+
}
|
|
62
|
+
return { isHeading: false };
|
|
63
|
+
}
|
|
64
|
+
// Traverse DOM in pre-order, passing and returning heading context
|
|
65
|
+
function traverse(nodeId, currentHeading) {
|
|
66
|
+
const node = domResult.nodes.get(nodeId);
|
|
67
|
+
if (!node)
|
|
68
|
+
return currentHeading;
|
|
69
|
+
// Check if this node is a heading
|
|
70
|
+
const headingInfo = isHeading(nodeId);
|
|
71
|
+
if (headingInfo.isHeading && headingInfo.name) {
|
|
72
|
+
currentHeading = headingInfo.name;
|
|
73
|
+
}
|
|
74
|
+
// Record the current heading context for this node
|
|
75
|
+
if (currentHeading) {
|
|
76
|
+
headingIndex.set(nodeId, currentHeading);
|
|
77
|
+
}
|
|
78
|
+
// 1. Process light DOM children first (pre-order DFS)
|
|
79
|
+
// Heading context propagates and updates through light DOM
|
|
80
|
+
if (node.childNodeIds) {
|
|
81
|
+
for (const childId of node.childNodeIds) {
|
|
82
|
+
currentHeading = traverse(childId, currentHeading) ?? currentHeading;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// 2. If this node hosts a shadow root, traverse shadow content (O(1) lookup)
|
|
86
|
+
// Shadow DOM shares heading context with host document (same logical document)
|
|
87
|
+
if (shadowHostSet.has(nodeId)) {
|
|
88
|
+
const shadowRoots = adjacencyMaps.shadowRootsByHost.get(nodeId) ?? [];
|
|
89
|
+
for (const shadowRootId of shadowRoots) {
|
|
90
|
+
currentHeading = traverse(shadowRootId, currentHeading) ?? currentHeading;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// 3. If this node is an iframe, traverse content document (O(1) lookup)
|
|
94
|
+
// IMPORTANT: Heading context resets at iframe boundary (separate document)
|
|
95
|
+
// - Pass undefined to reset context inside iframe
|
|
96
|
+
// - Discard returned heading (iframe headings don't affect parent)
|
|
97
|
+
if (node.frameId || node.nodeName.toUpperCase() === 'IFRAME') {
|
|
98
|
+
const contentDocs = adjacencyMaps.contentDocsByFrame.get(nodeId) ?? [];
|
|
99
|
+
for (const contentDocId of contentDocs) {
|
|
100
|
+
traverse(contentDocId, undefined);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return currentHeading;
|
|
104
|
+
}
|
|
105
|
+
traverse(domResult.rootId, undefined);
|
|
106
|
+
return headingIndex;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=heading-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heading-index.js","sourceRoot":"","sources":["../../../src/snapshot/heading-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* @module snapshot
|
|
7
7
|
*/
|
|
8
8
|
export type { BaseSnapshot, Viewport, SnapshotMeta, ReadableNode, NodeKind, SemanticRegion, NodeLocation, NodeLayout, BBox, BoundingBox, ScreenZone, NodeState, NodeLocators, NodeAttributes, SnapshotOptions, SnapshotResult, } from './snapshot.types.js';
|
|
9
|
-
export { isInteractiveNode, isReadableNode, isStructuralNode } from './snapshot.types.js';
|
|
9
|
+
export { isInteractiveNode, isReadableNode, isStructuralNode, isLiveRegionNode, } from './snapshot.types.js';
|
|
10
10
|
export { SnapshotStore, type SnapshotEntry, type SnapshotStoreOptions, type SnapshotStoreStats, } from './snapshot-store.js';
|
|
11
|
-
export { clickByBackendNodeId, clickAtCoordinates, clickAtElementOffset, getElementTopLeft, dragBetweenCoordinates, typeByBackendNodeId, pressKey, selectOption, hoverByBackendNodeId, scrollIntoView, scrollPage, clearFocusedText, MODIFIER_ALT, MODIFIER_CTRL, MODIFIER_META, MODIFIER_SHIFT, } from './element-resolver.js';
|
|
12
|
-
export { SnapshotCompiler, compileSnapshot
|
|
11
|
+
export { clickByBackendNodeId, clickAtCoordinates, clickAtElementOffset, getElementTopLeft, dragBetweenCoordinates, dispatchWheelEvent, typeByBackendNodeId, pressKey, selectOption, hoverByBackendNodeId, scrollIntoView, scrollPage, clearFocusedText, MODIFIER_ALT, MODIFIER_CTRL, MODIFIER_META, MODIFIER_SHIFT, } from './element-resolver.js';
|
|
12
|
+
export { SnapshotCompiler, compileSnapshot } from './snapshot-compiler.js';
|
|
13
|
+
export type { CompileOptions } from './kind-mapping.js';
|
|
14
|
+
export { sliceWithOverlayPriority } from './node-filter.js';
|
|
13
15
|
export * from './extractors/index.js';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,cAAc,uBAAuB,CAAC"}
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
* @module snapshot
|
|
7
7
|
*/
|
|
8
8
|
// Type guards
|
|
9
|
-
export { isInteractiveNode, isReadableNode, isStructuralNode } from './snapshot.types.js';
|
|
9
|
+
export { isInteractiveNode, isReadableNode, isStructuralNode, isLiveRegionNode, } from './snapshot.types.js';
|
|
10
10
|
// Store
|
|
11
11
|
export { SnapshotStore, } from './snapshot-store.js';
|
|
12
12
|
// Element resolver - CDP input functions
|
|
13
|
-
export { clickByBackendNodeId, clickAtCoordinates, clickAtElementOffset, getElementTopLeft, dragBetweenCoordinates, typeByBackendNodeId, pressKey, selectOption, hoverByBackendNodeId, scrollIntoView, scrollPage, clearFocusedText, MODIFIER_ALT, MODIFIER_CTRL, MODIFIER_META, MODIFIER_SHIFT, } from './element-resolver.js';
|
|
13
|
+
export { clickByBackendNodeId, clickAtCoordinates, clickAtElementOffset, getElementTopLeft, dragBetweenCoordinates, dispatchWheelEvent, typeByBackendNodeId, pressKey, selectOption, hoverByBackendNodeId, scrollIntoView, scrollPage, clearFocusedText, MODIFIER_ALT, MODIFIER_CTRL, MODIFIER_META, MODIFIER_SHIFT, } from './element-resolver.js';
|
|
14
14
|
// Snapshot compiler
|
|
15
15
|
export { SnapshotCompiler, compileSnapshot } from './snapshot-compiler.js';
|
|
16
|
+
export { sliceWithOverlayPriority } from './node-filter.js';
|
|
16
17
|
// Extractors (advanced usage)
|
|
17
18
|
export * from './extractors/index.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,cAAc;AACd,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,cAAc;AACd,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,QAAQ;AACR,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAC;AAE7B,yCAAyC;AACzC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,8BAA8B;AAC9B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind Mapping
|
|
3
|
+
*
|
|
4
|
+
* Maps AX roles and HTML tags to NodeKind values.
|
|
5
|
+
*
|
|
6
|
+
* @module snapshot/kind-mapping
|
|
7
|
+
*/
|
|
8
|
+
import type { NodeKind, SnapshotOptions } from './snapshot.types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Snapshot compiler options
|
|
11
|
+
*/
|
|
12
|
+
export interface CompileOptions extends Partial<SnapshotOptions> {
|
|
13
|
+
/** Include readable content nodes (headings, paragraphs). Default: true */
|
|
14
|
+
includeReadable?: boolean;
|
|
15
|
+
/** Extract bounding boxes and layout info. Default: true */
|
|
16
|
+
includeLayout?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Default compile options
|
|
20
|
+
*/
|
|
21
|
+
export declare const DEFAULT_OPTIONS: Required<CompileOptions>;
|
|
22
|
+
/**
|
|
23
|
+
* Map AX role to NodeKind.
|
|
24
|
+
*/
|
|
25
|
+
export declare function mapRoleToKind(role: string | undefined): NodeKind | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Get NodeKind from HTML tag name.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getKindFromTag(tagName: string): NodeKind | undefined;
|
|
30
|
+
//# sourceMappingURL=kind-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kind-mapping.d.ts","sourceRoot":"","sources":["../../../src/snapshot/kind-mapping.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,cAAc,CAQpD,CAAC;AAoFF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAG5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEpE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind Mapping
|
|
3
|
+
*
|
|
4
|
+
* Maps AX roles and HTML tags to NodeKind values.
|
|
5
|
+
*
|
|
6
|
+
* @module snapshot/kind-mapping
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Default compile options
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_OPTIONS = {
|
|
12
|
+
include_hidden: false,
|
|
13
|
+
max_nodes: 2000,
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
redact_sensitive: true,
|
|
16
|
+
include_values: true, // Enable value extraction with password redaction
|
|
17
|
+
includeReadable: true,
|
|
18
|
+
includeLayout: true,
|
|
19
|
+
};
|
|
20
|
+
/** AX role → NodeKind lookup (hoisted to avoid per-call allocation) */
|
|
21
|
+
const ROLE_TO_KIND = {
|
|
22
|
+
// Interactive
|
|
23
|
+
button: 'button',
|
|
24
|
+
link: 'link',
|
|
25
|
+
textbox: 'input',
|
|
26
|
+
searchbox: 'input',
|
|
27
|
+
combobox: 'combobox',
|
|
28
|
+
listbox: 'select',
|
|
29
|
+
checkbox: 'checkbox',
|
|
30
|
+
radio: 'radio',
|
|
31
|
+
switch: 'switch',
|
|
32
|
+
slider: 'slider',
|
|
33
|
+
spinbutton: 'slider',
|
|
34
|
+
tab: 'tab',
|
|
35
|
+
menuitem: 'menuitem',
|
|
36
|
+
menuitemcheckbox: 'menuitem',
|
|
37
|
+
menuitemradio: 'menuitem',
|
|
38
|
+
option: 'menuitem',
|
|
39
|
+
// Readable
|
|
40
|
+
heading: 'heading',
|
|
41
|
+
paragraph: 'paragraph',
|
|
42
|
+
text: 'text',
|
|
43
|
+
statictext: 'text',
|
|
44
|
+
list: 'list',
|
|
45
|
+
listitem: 'listitem',
|
|
46
|
+
tree: 'list',
|
|
47
|
+
treeitem: 'listitem',
|
|
48
|
+
image: 'image',
|
|
49
|
+
img: 'image',
|
|
50
|
+
figure: 'image',
|
|
51
|
+
canvas: 'canvas',
|
|
52
|
+
table: 'table',
|
|
53
|
+
grid: 'table',
|
|
54
|
+
treegrid: 'table',
|
|
55
|
+
// Structural
|
|
56
|
+
form: 'form',
|
|
57
|
+
dialog: 'dialog',
|
|
58
|
+
alertdialog: 'dialog',
|
|
59
|
+
navigation: 'navigation',
|
|
60
|
+
region: 'section',
|
|
61
|
+
article: 'section',
|
|
62
|
+
main: 'section',
|
|
63
|
+
banner: 'section',
|
|
64
|
+
complementary: 'section',
|
|
65
|
+
contentinfo: 'section',
|
|
66
|
+
// Live region / ephemeral feedback
|
|
67
|
+
alert: 'alert',
|
|
68
|
+
status: 'status',
|
|
69
|
+
log: 'log',
|
|
70
|
+
marquee: 'log',
|
|
71
|
+
timer: 'timer',
|
|
72
|
+
tooltip: 'tooltip',
|
|
73
|
+
progressbar: 'progressbar',
|
|
74
|
+
};
|
|
75
|
+
/** HTML tag → NodeKind lookup (hoisted to avoid per-call allocation) */
|
|
76
|
+
const TAG_TO_KIND = {
|
|
77
|
+
BUTTON: 'button',
|
|
78
|
+
A: 'link',
|
|
79
|
+
INPUT: 'input',
|
|
80
|
+
TEXTAREA: 'textarea',
|
|
81
|
+
SELECT: 'select',
|
|
82
|
+
H1: 'heading',
|
|
83
|
+
H2: 'heading',
|
|
84
|
+
H3: 'heading',
|
|
85
|
+
H4: 'heading',
|
|
86
|
+
H5: 'heading',
|
|
87
|
+
H6: 'heading',
|
|
88
|
+
P: 'paragraph',
|
|
89
|
+
IMG: 'image',
|
|
90
|
+
TABLE: 'table',
|
|
91
|
+
UL: 'list',
|
|
92
|
+
OL: 'list',
|
|
93
|
+
LI: 'listitem',
|
|
94
|
+
FORM: 'form',
|
|
95
|
+
DIALOG: 'dialog',
|
|
96
|
+
NAV: 'navigation',
|
|
97
|
+
OPTION: 'menuitem',
|
|
98
|
+
CANVAS: 'canvas',
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Map AX role to NodeKind.
|
|
102
|
+
*/
|
|
103
|
+
export function mapRoleToKind(role) {
|
|
104
|
+
if (!role)
|
|
105
|
+
return undefined;
|
|
106
|
+
return ROLE_TO_KIND[role.toLowerCase()];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get NodeKind from HTML tag name.
|
|
110
|
+
*/
|
|
111
|
+
export function getKindFromTag(tagName) {
|
|
112
|
+
return TAG_TO_KIND[tagName.toUpperCase()];
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=kind-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kind-mapping.js","sourceRoot":"","sources":["../../../src/snapshot/kind-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Filtering
|
|
3
|
+
*
|
|
4
|
+
* Filters noise nodes and slices to budget while preserving overlay content.
|
|
5
|
+
*
|
|
6
|
+
* @module snapshot/node-filter
|
|
7
|
+
*/
|
|
8
|
+
import type { ReadableNode } from './snapshot.types.js';
|
|
9
|
+
import type { RawNodeData, RawDomNode, RawAxNode } from './extractors/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Filter out noise nodes to reduce snapshot size.
|
|
12
|
+
*
|
|
13
|
+
* Filters:
|
|
14
|
+
* 1. Empty list/listitem containers with no semantic name AND no interactive descendants
|
|
15
|
+
* 2. StaticText/text nodes that mirror their parent's label exactly
|
|
16
|
+
*/
|
|
17
|
+
export declare function filterNoiseNodes(nodes: ReadableNode[], domTree: Map<number, RawDomNode>, axTree: Map<number, RawAxNode>): ReadableNode[];
|
|
18
|
+
/**
|
|
19
|
+
* Slice nodes to max_nodes budget while preserving high z-index overlay content.
|
|
20
|
+
*
|
|
21
|
+
* Portal-rendered content (dropdowns, popovers, modals) appears at the end of
|
|
22
|
+
* DOM order. On heavy pages, a naive slice truncates it.
|
|
23
|
+
*
|
|
24
|
+
* Strategy:
|
|
25
|
+
* 1. Partition nodes into overlay (z-index > threshold) and main
|
|
26
|
+
* 2. Take all overlay nodes (up to 30% of budget)
|
|
27
|
+
* 3. Fill remaining budget with main nodes (DOM order)
|
|
28
|
+
* 4. Re-sort by original DOM order
|
|
29
|
+
*/
|
|
30
|
+
export declare function sliceWithOverlayPriority(nodes: RawNodeData[], maxNodes: number): RawNodeData[];
|
|
31
|
+
//# sourceMappingURL=node-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-filter.d.ts","sourceRoot":"","sources":["../../../src/snapshot/node-filter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGhF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAC7B,YAAY,EAAE,CAkFhB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CA2C9F"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Filtering
|
|
3
|
+
*
|
|
4
|
+
* Filters noise nodes and slices to budget while preserving overlay content.
|
|
5
|
+
*
|
|
6
|
+
* @module snapshot/node-filter
|
|
7
|
+
*/
|
|
8
|
+
import { isInteractiveKind } from '../state/actionables-filter.js';
|
|
9
|
+
/**
|
|
10
|
+
* Filter out noise nodes to reduce snapshot size.
|
|
11
|
+
*
|
|
12
|
+
* Filters:
|
|
13
|
+
* 1. Empty list/listitem containers with no semantic name AND no interactive descendants
|
|
14
|
+
* 2. StaticText/text nodes that mirror their parent's label exactly
|
|
15
|
+
*/
|
|
16
|
+
export function filterNoiseNodes(nodes, domTree, axTree) {
|
|
17
|
+
// Build set of interactive node backend IDs for descendant checking
|
|
18
|
+
const interactiveBackendIds = new Set(nodes.filter((n) => isInteractiveKind(n.kind)).map((n) => n.backend_node_id));
|
|
19
|
+
// Build parent-child relationship from DOM tree
|
|
20
|
+
const childToParent = new Map();
|
|
21
|
+
for (const [nodeId, domNode] of domTree) {
|
|
22
|
+
if (domNode.parentId !== undefined) {
|
|
23
|
+
childToParent.set(nodeId, domNode.parentId);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Check if a node has any interactive descendants in the DOM tree
|
|
27
|
+
const hasInteractiveDescendant = (nodeId) => {
|
|
28
|
+
const domNode = domTree.get(nodeId);
|
|
29
|
+
if (!domNode)
|
|
30
|
+
return false;
|
|
31
|
+
// Check direct children
|
|
32
|
+
if (domNode.childNodeIds) {
|
|
33
|
+
for (const childId of domNode.childNodeIds) {
|
|
34
|
+
if (interactiveBackendIds.has(childId)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (hasInteractiveDescendant(childId)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
};
|
|
44
|
+
// Get label of parent node in the node list
|
|
45
|
+
const getParentLabel = (nodeId) => {
|
|
46
|
+
const parentId = childToParent.get(nodeId);
|
|
47
|
+
if (parentId === undefined)
|
|
48
|
+
return undefined;
|
|
49
|
+
// Look up parent in our node list
|
|
50
|
+
const parentNode = nodes.find((n) => n.backend_node_id === parentId);
|
|
51
|
+
if (parentNode) {
|
|
52
|
+
return parentNode.label;
|
|
53
|
+
}
|
|
54
|
+
// Parent might be further up - check AX tree for parent's name
|
|
55
|
+
const parentAx = axTree.get(parentId);
|
|
56
|
+
return parentAx?.name;
|
|
57
|
+
};
|
|
58
|
+
// Container kinds that can be noisy when empty
|
|
59
|
+
const containerKinds = new Set(['list', 'listitem']);
|
|
60
|
+
// Text kinds that can duplicate parent labels
|
|
61
|
+
const textKinds = new Set(['text']);
|
|
62
|
+
return nodes.filter((node) => {
|
|
63
|
+
// Rule 1: Filter empty container nodes without interactive descendants
|
|
64
|
+
if (containerKinds.has(node.kind)) {
|
|
65
|
+
const hasSemanticName = node.label && node.label.trim().length > 0;
|
|
66
|
+
if (!hasSemanticName) {
|
|
67
|
+
const hasInteractive = hasInteractiveDescendant(node.backend_node_id);
|
|
68
|
+
if (!hasInteractive) {
|
|
69
|
+
return false; // Filter out empty container without interactive content
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Rule 2: Filter text nodes that mirror parent's label
|
|
74
|
+
if (textKinds.has(node.kind)) {
|
|
75
|
+
const parentLabel = getParentLabel(node.backend_node_id);
|
|
76
|
+
if (parentLabel && node.label) {
|
|
77
|
+
// Normalize and compare
|
|
78
|
+
const normalizedParent = parentLabel.trim().toLowerCase();
|
|
79
|
+
const normalizedNode = node.label.trim().toLowerCase();
|
|
80
|
+
if (normalizedNode === normalizedParent) {
|
|
81
|
+
return false; // Filter out duplicate text
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return true; // Keep the node
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Slice nodes to max_nodes budget while preserving high z-index overlay content.
|
|
90
|
+
*
|
|
91
|
+
* Portal-rendered content (dropdowns, popovers, modals) appears at the end of
|
|
92
|
+
* DOM order. On heavy pages, a naive slice truncates it.
|
|
93
|
+
*
|
|
94
|
+
* Strategy:
|
|
95
|
+
* 1. Partition nodes into overlay (z-index > threshold) and main
|
|
96
|
+
* 2. Take all overlay nodes (up to 30% of budget)
|
|
97
|
+
* 3. Fill remaining budget with main nodes (DOM order)
|
|
98
|
+
* 4. Re-sort by original DOM order
|
|
99
|
+
*/
|
|
100
|
+
export function sliceWithOverlayPriority(nodes, maxNodes) {
|
|
101
|
+
if (nodes.length <= maxNodes) {
|
|
102
|
+
return nodes;
|
|
103
|
+
}
|
|
104
|
+
const OVERLAY_Z_THRESHOLD = 100;
|
|
105
|
+
const MAX_OVERLAY_RATIO = 0.3;
|
|
106
|
+
const overlayNodes = [];
|
|
107
|
+
const mainNodes = [];
|
|
108
|
+
for (const node of nodes) {
|
|
109
|
+
const zIndex = node.layout?.zIndex;
|
|
110
|
+
if (zIndex !== undefined && zIndex > OVERLAY_Z_THRESHOLD) {
|
|
111
|
+
overlayNodes.push(node);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
mainNodes.push(node);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// No overlay content → simple slice
|
|
118
|
+
if (overlayNodes.length === 0) {
|
|
119
|
+
return nodes.slice(0, maxNodes);
|
|
120
|
+
}
|
|
121
|
+
// Reserve budget for overlay (capped at 30% of total)
|
|
122
|
+
const maxOverlay = Math.min(overlayNodes.length, Math.floor(maxNodes * MAX_OVERLAY_RATIO));
|
|
123
|
+
const overlaySlice = overlayNodes.slice(0, maxOverlay);
|
|
124
|
+
// Fill remaining budget with main content
|
|
125
|
+
const mainBudget = maxNodes - overlaySlice.length;
|
|
126
|
+
const mainSlice = mainNodes.slice(0, mainBudget);
|
|
127
|
+
// Merge and re-sort by original DOM order
|
|
128
|
+
const merged = [...mainSlice, ...overlaySlice];
|
|
129
|
+
const indexMap = new Map(nodes.map((n, i) => [n.backendNodeId, i]));
|
|
130
|
+
merged.sort((a, b) => {
|
|
131
|
+
const ia = indexMap.get(a.backendNodeId) ?? Infinity;
|
|
132
|
+
const ib = indexMap.get(b.backendNodeId) ?? Infinity;
|
|
133
|
+
return ia - ib;
|
|
134
|
+
});
|
|
135
|
+
return merged;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=node-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-filter.js","sourceRoot":"","sources":["../../../src/snapshot/node-filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Synthesizer
|
|
3
|
+
*
|
|
4
|
+
* Synthesizes nodes from DOM data that the AX tree misses or misclassifies:
|
|
5
|
+
* - Option nodes from <select> children (often marked as ignored by Chrome)
|
|
6
|
+
* - Canvas nodes (classified as generic/ignored by AX tree)
|
|
7
|
+
* - Toast library nodes (promoted to alert role for unsemantic toast libraries)
|
|
8
|
+
*
|
|
9
|
+
* @module snapshot/node-synthesizer
|
|
10
|
+
*/
|
|
11
|
+
import type { RawNodeData, RawDomNode, DomExtractionResult } from './extractors/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* Data attributes used by unsemantic toast libraries.
|
|
14
|
+
* Keep in sync with TOAST_LIBRARY_SELECTOR in observer-script.ts.
|
|
15
|
+
*/
|
|
16
|
+
export declare const TOAST_DATA_ATTRS: string[];
|
|
17
|
+
/**
|
|
18
|
+
* CSS class substrings used by unsemantic toast libraries.
|
|
19
|
+
* Keep in sync with TOAST_LIBRARY_SELECTOR in observer-script.ts.
|
|
20
|
+
*/
|
|
21
|
+
export declare const TOAST_CLASS_PATTERNS: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Check if a DOM node belongs to a known unsemantic toast library.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isToastLibraryNode(domNode: RawDomNode): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Synthesize option nodes from <select> children.
|
|
28
|
+
*
|
|
29
|
+
* Chrome's AX tree often marks <option> nodes as ignored when the select
|
|
30
|
+
* is collapsed, and their bounding boxes are zero (OS-rendered).
|
|
31
|
+
* We inject them from the DOM so AI agents can discover available options.
|
|
32
|
+
*
|
|
33
|
+
* @param nodesToProcess - Current node list (mutated in place)
|
|
34
|
+
* @param domResult - DOM extraction result
|
|
35
|
+
*/
|
|
36
|
+
export declare function synthesizeOptionNodes(nodesToProcess: RawNodeData[], domResult: DomExtractionResult): void;
|
|
37
|
+
/**
|
|
38
|
+
* Synthesize canvas nodes from DOM.
|
|
39
|
+
*
|
|
40
|
+
* Canvas elements are classified as generic/ignored by the AX tree,
|
|
41
|
+
* so we inject them from the DOM so AI agents can discover and interact with them.
|
|
42
|
+
*
|
|
43
|
+
* @param nodesToProcess - Current node list (mutated in place)
|
|
44
|
+
* @param domResult - DOM extraction result
|
|
45
|
+
*/
|
|
46
|
+
export declare function synthesizeCanvasNodes(nodesToProcess: RawNodeData[], domResult: DomExtractionResult): void;
|
|
47
|
+
/**
|
|
48
|
+
* Promote unsemantic toast library nodes to alert role.
|
|
49
|
+
*
|
|
50
|
+
* Popular toast libraries (Sonner, react-hot-toast, Toastify, Ant Design, Chakra UI)
|
|
51
|
+
* don't use ARIA roles. Detect them by data attributes and CSS classes.
|
|
52
|
+
* Selectors mirror TOAST_LIBRARY_SELECTOR in observer-script.ts — keep in sync.
|
|
53
|
+
*
|
|
54
|
+
* Some toast elements (e.g., Sonner's <li data-sonner-toast>) are already in
|
|
55
|
+
* nodesToProcess via the AX tree (as listitem/generic), so we must also override
|
|
56
|
+
* their axNode role — not just add new nodes.
|
|
57
|
+
*
|
|
58
|
+
* @param nodesToProcess - Current node list (mutated in place)
|
|
59
|
+
* @param domResult - DOM extraction result
|
|
60
|
+
*/
|
|
61
|
+
export declare function promoteToastNodes(nodesToProcess: RawNodeData[], domResult: DomExtractionResult): void;
|
|
62
|
+
//# sourceMappingURL=node-synthesizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-synthesizer.d.ts","sourceRoot":"","sources":["../../../src/snapshot/node-synthesizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EAEV,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAG/B;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAA0C,CAAC;AAExE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UAKhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAgB/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,WAAW,EAAE,EAC7B,SAAS,EAAE,mBAAmB,GAC7B,IAAI,CA6DN;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,WAAW,EAAE,EAC7B,SAAS,EAAE,mBAAmB,GAC7B,IAAI,CAsBN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,WAAW,EAAE,EAC7B,SAAS,EAAE,mBAAmB,GAC7B,IAAI,CA2BN"}
|