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,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Network Tracker
|
|
3
|
+
*
|
|
4
|
+
* Tracks in-flight network requests for a page and provides a reliable
|
|
5
|
+
* "network quiet" wait mechanism. Unlike Puppeteer's waitForNetworkIdle(),
|
|
6
|
+
* this tracks requests triggered after page load (e.g., by user actions).
|
|
7
|
+
*
|
|
8
|
+
* Uses a generation counter to safely handle navigation - late events from
|
|
9
|
+
* previous documents are ignored.
|
|
10
|
+
*/
|
|
11
|
+
/** Default quiet window - time with 0 inflight requests to consider "idle" */
|
|
12
|
+
const DEFAULT_QUIET_WINDOW_MS = 500;
|
|
13
|
+
/**
|
|
14
|
+
* Tracks network requests for a single page.
|
|
15
|
+
*
|
|
16
|
+
* Attach to a page via `attach()`, then use `waitForQuiet()` to wait for
|
|
17
|
+
* network activity to settle. Call `markNavigation()` when navigating to
|
|
18
|
+
* safely reset state without race conditions.
|
|
19
|
+
*/
|
|
20
|
+
export class PageNetworkTracker {
|
|
21
|
+
page = null;
|
|
22
|
+
inflightCount = 0;
|
|
23
|
+
generation = 0;
|
|
24
|
+
currentGeneration = 0;
|
|
25
|
+
// Quiet window state
|
|
26
|
+
quietTimer = null;
|
|
27
|
+
quietWindowMs = DEFAULT_QUIET_WINDOW_MS;
|
|
28
|
+
quietResolvers = [];
|
|
29
|
+
// Event handlers (stored for cleanup via page.off())
|
|
30
|
+
onRequest = null;
|
|
31
|
+
onRequestFinished = null;
|
|
32
|
+
onRequestFailed = null;
|
|
33
|
+
/**
|
|
34
|
+
* Attach network event listeners to a page.
|
|
35
|
+
*
|
|
36
|
+
* Must be called before `waitForQuiet()` can be used.
|
|
37
|
+
* Safe to call multiple times - will detach previous listeners first.
|
|
38
|
+
*/
|
|
39
|
+
attach(page) {
|
|
40
|
+
if (this.page) {
|
|
41
|
+
this.detach();
|
|
42
|
+
}
|
|
43
|
+
this.page = page;
|
|
44
|
+
this.generation++;
|
|
45
|
+
this.currentGeneration = this.generation;
|
|
46
|
+
this.inflightCount = 0;
|
|
47
|
+
this.createAndAttachHandlers(page);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Detach all event listeners and cleanup timers.
|
|
51
|
+
*
|
|
52
|
+
* Call this when the page is closed or no longer needs tracking.
|
|
53
|
+
*/
|
|
54
|
+
detach() {
|
|
55
|
+
if (this.page) {
|
|
56
|
+
this.removeHandlers(this.page);
|
|
57
|
+
}
|
|
58
|
+
this.onRequest = null;
|
|
59
|
+
this.onRequestFinished = null;
|
|
60
|
+
this.onRequestFailed = null;
|
|
61
|
+
this.page = null;
|
|
62
|
+
this.cancelQuietTimer();
|
|
63
|
+
for (const { resolve, timeoutId } of this.quietResolvers) {
|
|
64
|
+
clearTimeout(timeoutId);
|
|
65
|
+
resolve(false);
|
|
66
|
+
}
|
|
67
|
+
this.quietResolvers = [];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Mark that a navigation occurred.
|
|
71
|
+
*
|
|
72
|
+
* This safely resets state by bumping the generation counter, so any
|
|
73
|
+
* late events from the previous document are ignored. Use this instead
|
|
74
|
+
* of directly resetting state to avoid race conditions.
|
|
75
|
+
*/
|
|
76
|
+
markNavigation() {
|
|
77
|
+
this.generation++;
|
|
78
|
+
this.currentGeneration = this.generation;
|
|
79
|
+
this.inflightCount = 0;
|
|
80
|
+
this.cancelQuietTimer();
|
|
81
|
+
if (this.page) {
|
|
82
|
+
this.removeHandlers(this.page);
|
|
83
|
+
this.createAndAttachHandlers(this.page);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Wait for network to become quiet (no inflight requests for quietWindowMs).
|
|
88
|
+
*
|
|
89
|
+
* @param timeoutMs - Maximum time to wait before returning false
|
|
90
|
+
* @param quietWindowMs - Time with 0 inflight requests to consider "idle"
|
|
91
|
+
* @returns true if network became quiet, false if timed out (never throws)
|
|
92
|
+
*/
|
|
93
|
+
async waitForQuiet(timeoutMs, quietWindowMs = DEFAULT_QUIET_WINDOW_MS) {
|
|
94
|
+
// Store the quiet window for checkQuiet() to use
|
|
95
|
+
this.quietWindowMs = quietWindowMs;
|
|
96
|
+
return new Promise((resolve) => {
|
|
97
|
+
const hardTimeout = setTimeout(() => {
|
|
98
|
+
// Remove this resolver from the list
|
|
99
|
+
const index = this.quietResolvers.findIndex((r) => r.timeoutId === hardTimeout);
|
|
100
|
+
if (index !== -1) {
|
|
101
|
+
this.quietResolvers.splice(index, 1);
|
|
102
|
+
}
|
|
103
|
+
resolve(false);
|
|
104
|
+
}, timeoutMs);
|
|
105
|
+
this.quietResolvers.push({ resolve, timeoutId: hardTimeout });
|
|
106
|
+
// If already idle, start quiet timer immediately
|
|
107
|
+
if (this.inflightCount === 0) {
|
|
108
|
+
this.startQuietTimer();
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get current inflight request count (for debugging/testing).
|
|
114
|
+
*/
|
|
115
|
+
getInflightCount() {
|
|
116
|
+
return this.inflightCount;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if tracker is attached to a page.
|
|
120
|
+
*/
|
|
121
|
+
isAttached() {
|
|
122
|
+
return this.page !== null;
|
|
123
|
+
}
|
|
124
|
+
// --- Private methods ---
|
|
125
|
+
cancelQuietTimer() {
|
|
126
|
+
if (this.quietTimer) {
|
|
127
|
+
clearTimeout(this.quietTimer);
|
|
128
|
+
this.quietTimer = null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
checkQuiet() {
|
|
132
|
+
if (this.inflightCount === 0 && this.quietResolvers.length > 0) {
|
|
133
|
+
this.startQuietTimer();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
startQuietTimer() {
|
|
137
|
+
this.cancelQuietTimer();
|
|
138
|
+
this.quietTimer = setTimeout(() => {
|
|
139
|
+
this.quietTimer = null;
|
|
140
|
+
for (const { resolve, timeoutId } of this.quietResolvers) {
|
|
141
|
+
clearTimeout(timeoutId);
|
|
142
|
+
resolve(true);
|
|
143
|
+
}
|
|
144
|
+
this.quietResolvers = [];
|
|
145
|
+
}, this.quietWindowMs);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create and attach event handlers for the current generation.
|
|
149
|
+
*/
|
|
150
|
+
createAndAttachHandlers(page) {
|
|
151
|
+
const gen = this.currentGeneration;
|
|
152
|
+
this.onRequest = (req) => {
|
|
153
|
+
if (this.currentGeneration !== gen)
|
|
154
|
+
return;
|
|
155
|
+
if (req.resourceType() === 'websocket')
|
|
156
|
+
return;
|
|
157
|
+
this.inflightCount++;
|
|
158
|
+
this.cancelQuietTimer();
|
|
159
|
+
};
|
|
160
|
+
this.onRequestFinished = (req) => {
|
|
161
|
+
if (this.currentGeneration !== gen)
|
|
162
|
+
return;
|
|
163
|
+
if (req.resourceType() === 'websocket')
|
|
164
|
+
return;
|
|
165
|
+
this.inflightCount = Math.max(0, this.inflightCount - 1);
|
|
166
|
+
this.checkQuiet();
|
|
167
|
+
};
|
|
168
|
+
this.onRequestFailed = (req) => {
|
|
169
|
+
if (this.currentGeneration !== gen)
|
|
170
|
+
return;
|
|
171
|
+
if (req.resourceType() === 'websocket')
|
|
172
|
+
return;
|
|
173
|
+
this.inflightCount = Math.max(0, this.inflightCount - 1);
|
|
174
|
+
this.checkQuiet();
|
|
175
|
+
};
|
|
176
|
+
page.on('request', this.onRequest);
|
|
177
|
+
page.on('requestfinished', this.onRequestFinished);
|
|
178
|
+
page.on('requestfailed', this.onRequestFailed);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Remove event handlers from a page.
|
|
182
|
+
*/
|
|
183
|
+
removeHandlers(page) {
|
|
184
|
+
if (this.onRequest) {
|
|
185
|
+
page.off('request', this.onRequest);
|
|
186
|
+
}
|
|
187
|
+
if (this.onRequestFinished) {
|
|
188
|
+
page.off('requestfinished', this.onRequestFinished);
|
|
189
|
+
}
|
|
190
|
+
if (this.onRequestFailed) {
|
|
191
|
+
page.off('requestfailed', this.onRequestFailed);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// --- Global Registry ---
|
|
196
|
+
/**
|
|
197
|
+
* WeakMap registry for page-scoped trackers.
|
|
198
|
+
*
|
|
199
|
+
* Using WeakMap keyed by Page object provides automatic cleanup when
|
|
200
|
+
* the Page is garbage collected, avoiding memory leaks.
|
|
201
|
+
*/
|
|
202
|
+
const trackers = new WeakMap();
|
|
203
|
+
/**
|
|
204
|
+
* Get or create a network tracker for a page.
|
|
205
|
+
*
|
|
206
|
+
* Note: This does NOT automatically attach the tracker.
|
|
207
|
+
* Call `tracker.attach(page)` after getting the tracker.
|
|
208
|
+
*/
|
|
209
|
+
export function getOrCreateTracker(page) {
|
|
210
|
+
let tracker = trackers.get(page);
|
|
211
|
+
if (!tracker) {
|
|
212
|
+
tracker = new PageNetworkTracker();
|
|
213
|
+
trackers.set(page, tracker);
|
|
214
|
+
}
|
|
215
|
+
return tracker;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Remove and detach the tracker for a page.
|
|
219
|
+
*
|
|
220
|
+
* Call this when a page is closed to ensure proper cleanup.
|
|
221
|
+
*/
|
|
222
|
+
export function removeTracker(page) {
|
|
223
|
+
const tracker = trackers.get(page);
|
|
224
|
+
if (tracker) {
|
|
225
|
+
tracker.detach();
|
|
226
|
+
trackers.delete(page);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if a page has a tracker attached.
|
|
231
|
+
*/
|
|
232
|
+
export function hasTracker(page) {
|
|
233
|
+
return trackers.has(page);
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=page-network-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-network-tracker.js","sourceRoot":"","sources":["../../../src/browser/page-network-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks active Puppeteer pages and their CDP sessions.
|
|
5
|
+
* Provides a central registry for page lifecycle management.
|
|
6
|
+
*/
|
|
7
|
+
import type { Page } from 'puppeteer-core';
|
|
8
|
+
import type { CdpClient } from '../cdp/cdp-client.interface.js';
|
|
9
|
+
/**
|
|
10
|
+
* Handle to a registered page with its CDP session
|
|
11
|
+
*/
|
|
12
|
+
export interface PageHandle {
|
|
13
|
+
/** Unique identifier for this page */
|
|
14
|
+
page_id: string;
|
|
15
|
+
/** Puppeteer Page instance */
|
|
16
|
+
page: Page;
|
|
17
|
+
/** CDP client for this page */
|
|
18
|
+
cdp: CdpClient;
|
|
19
|
+
/** When the page was registered */
|
|
20
|
+
created_at: Date;
|
|
21
|
+
/** Current URL (may be stale) */
|
|
22
|
+
url?: string;
|
|
23
|
+
/** Page title (may be stale) */
|
|
24
|
+
title?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Registry for tracking active pages
|
|
28
|
+
*/
|
|
29
|
+
export declare class PageRegistry {
|
|
30
|
+
private readonly pages;
|
|
31
|
+
/** Most recently used page ID for default resolution */
|
|
32
|
+
private mruPageId;
|
|
33
|
+
/**
|
|
34
|
+
* Register a new page with its CDP session
|
|
35
|
+
*
|
|
36
|
+
* @param page - Puppeteer Page instance
|
|
37
|
+
* @param cdp - CDP client for the page
|
|
38
|
+
* @returns PageHandle with unique page_id
|
|
39
|
+
* @throws Error if page is already closed
|
|
40
|
+
*/
|
|
41
|
+
register(page: Page, cdp: CdpClient): PageHandle;
|
|
42
|
+
/**
|
|
43
|
+
* Get a page handle by its ID
|
|
44
|
+
*
|
|
45
|
+
* @param page_id - The page identifier
|
|
46
|
+
* @returns PageHandle if found, undefined otherwise
|
|
47
|
+
*/
|
|
48
|
+
get(page_id: string): PageHandle | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Remove a page from the registry
|
|
51
|
+
*
|
|
52
|
+
* @param page_id - The page identifier
|
|
53
|
+
* @returns true if page was removed, false if not found
|
|
54
|
+
*/
|
|
55
|
+
remove(page_id: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* List all registered pages
|
|
58
|
+
*
|
|
59
|
+
* @returns Array of all PageHandle objects
|
|
60
|
+
*/
|
|
61
|
+
list(): PageHandle[];
|
|
62
|
+
/**
|
|
63
|
+
* Remove all pages from the registry
|
|
64
|
+
*/
|
|
65
|
+
clear(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get the number of registered pages
|
|
68
|
+
*
|
|
69
|
+
* @returns Current page count
|
|
70
|
+
*/
|
|
71
|
+
size(): number;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a page is registered
|
|
74
|
+
*
|
|
75
|
+
* @param page_id - The page identifier
|
|
76
|
+
* @returns true if page exists
|
|
77
|
+
*/
|
|
78
|
+
has(page_id: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Replace a page handle in the registry.
|
|
81
|
+
*
|
|
82
|
+
* Used for CDP session rebinding - keeps the same page_id but
|
|
83
|
+
* updates the handle with a new CDP session.
|
|
84
|
+
*
|
|
85
|
+
* @param page_id - Page ID to replace
|
|
86
|
+
* @param handle - New handle to store
|
|
87
|
+
* @returns true if replaced, false if page_id not found
|
|
88
|
+
*/
|
|
89
|
+
replace(page_id: string, handle: PageHandle): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Update metadata for a page
|
|
92
|
+
*
|
|
93
|
+
* @param page_id - The page identifier
|
|
94
|
+
* @param metadata - Partial metadata to update
|
|
95
|
+
* @returns true if updated, false if page not found
|
|
96
|
+
*/
|
|
97
|
+
updateMetadata(page_id: string, metadata: Partial<Pick<PageHandle, 'url' | 'title'>>): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Find a handle by its Puppeteer Page instance
|
|
100
|
+
*
|
|
101
|
+
* @param page - Puppeteer Page instance to find
|
|
102
|
+
* @returns PageHandle if found, undefined otherwise
|
|
103
|
+
*/
|
|
104
|
+
findByPage(page: Page): PageHandle | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Find all handles with a matching URL
|
|
107
|
+
*
|
|
108
|
+
* @param url - URL to search for
|
|
109
|
+
* @returns Array of matching PageHandle objects
|
|
110
|
+
*/
|
|
111
|
+
findByUrl(url: string): PageHandle[];
|
|
112
|
+
/**
|
|
113
|
+
* Check if a page handle is still valid (page not closed, CDP active)
|
|
114
|
+
*
|
|
115
|
+
* Use this to detect stale handles before performing operations.
|
|
116
|
+
*
|
|
117
|
+
* @param page_id - The page identifier
|
|
118
|
+
* @returns true if the handle exists and both page and CDP session are active
|
|
119
|
+
*/
|
|
120
|
+
isValid(page_id: string): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Touch a page to mark it as most recently used.
|
|
123
|
+
*
|
|
124
|
+
* @param page_id - The page identifier
|
|
125
|
+
* @returns true if the page exists and was touched, false otherwise
|
|
126
|
+
*/
|
|
127
|
+
touch(page_id: string): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Get the most recently used page.
|
|
130
|
+
*
|
|
131
|
+
* Falls back to the first registered page if MRU is not set.
|
|
132
|
+
*
|
|
133
|
+
* @returns PageHandle for MRU page, or undefined if no pages
|
|
134
|
+
*/
|
|
135
|
+
getMostRecent(): PageHandle | undefined;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=page-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-registry.d.ts","sourceRoot":"","sources":["../../../src/browser/page-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,IAAI,EAAE,IAAI,CAAC;IAEX,+BAA+B;IAC/B,GAAG,EAAE,SAAS,CAAC;IAEf,mCAAmC;IACnC,UAAU,EAAE,IAAI,CAAC;IAEjB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,wDAAwD;IACxD,OAAO,CAAC,SAAS,CAAuB;IAExC;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,UAAU;IAsBhD;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI5C;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAUhC;;;;OAIG;IACH,IAAI,IAAI,UAAU,EAAE;IAIpB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;;OAIG;IACH,IAAI,IAAI,MAAM;IAId;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B;;;;;;;;;OASG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO;IAQrD;;;;;;OAMG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO;IAgB9F;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS;IAI9C;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE;IAIpC;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASjC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ/B;;;;;;OAMG;IACH,aAAa,IAAI,UAAU,GAAG,SAAS;CAOxC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks active Puppeteer pages and their CDP sessions.
|
|
5
|
+
* Provides a central registry for page lifecycle management.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Registry for tracking active pages
|
|
10
|
+
*/
|
|
11
|
+
export class PageRegistry {
|
|
12
|
+
pages = new Map();
|
|
13
|
+
/** Most recently used page ID for default resolution */
|
|
14
|
+
mruPageId = null;
|
|
15
|
+
/**
|
|
16
|
+
* Register a new page with its CDP session
|
|
17
|
+
*
|
|
18
|
+
* @param page - Puppeteer Page instance
|
|
19
|
+
* @param cdp - CDP client for the page
|
|
20
|
+
* @returns PageHandle with unique page_id
|
|
21
|
+
* @throws Error if page is already closed
|
|
22
|
+
*/
|
|
23
|
+
register(page, cdp) {
|
|
24
|
+
// Validate page is not closed (Puppeteer uses isClosed())
|
|
25
|
+
if (page.isClosed()) {
|
|
26
|
+
throw new Error('Cannot register a closed page');
|
|
27
|
+
}
|
|
28
|
+
const page_id = `page-${randomUUID()}`;
|
|
29
|
+
const handle = {
|
|
30
|
+
page_id,
|
|
31
|
+
page,
|
|
32
|
+
cdp,
|
|
33
|
+
created_at: new Date(),
|
|
34
|
+
url: page.url?.(),
|
|
35
|
+
};
|
|
36
|
+
this.pages.set(page_id, handle);
|
|
37
|
+
this.mruPageId = page_id;
|
|
38
|
+
return handle;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get a page handle by its ID
|
|
42
|
+
*
|
|
43
|
+
* @param page_id - The page identifier
|
|
44
|
+
* @returns PageHandle if found, undefined otherwise
|
|
45
|
+
*/
|
|
46
|
+
get(page_id) {
|
|
47
|
+
return this.pages.get(page_id);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Remove a page from the registry
|
|
51
|
+
*
|
|
52
|
+
* @param page_id - The page identifier
|
|
53
|
+
* @returns true if page was removed, false if not found
|
|
54
|
+
*/
|
|
55
|
+
remove(page_id) {
|
|
56
|
+
const deleted = this.pages.delete(page_id);
|
|
57
|
+
if (deleted && this.mruPageId === page_id) {
|
|
58
|
+
// Transfer MRU to first remaining page, or null if empty
|
|
59
|
+
const firstRemaining = this.pages.values().next().value;
|
|
60
|
+
this.mruPageId = firstRemaining?.page_id ?? null;
|
|
61
|
+
}
|
|
62
|
+
return deleted;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* List all registered pages
|
|
66
|
+
*
|
|
67
|
+
* @returns Array of all PageHandle objects
|
|
68
|
+
*/
|
|
69
|
+
list() {
|
|
70
|
+
return Array.from(this.pages.values());
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Remove all pages from the registry
|
|
74
|
+
*/
|
|
75
|
+
clear() {
|
|
76
|
+
this.pages.clear();
|
|
77
|
+
this.mruPageId = null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the number of registered pages
|
|
81
|
+
*
|
|
82
|
+
* @returns Current page count
|
|
83
|
+
*/
|
|
84
|
+
size() {
|
|
85
|
+
return this.pages.size;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if a page is registered
|
|
89
|
+
*
|
|
90
|
+
* @param page_id - The page identifier
|
|
91
|
+
* @returns true if page exists
|
|
92
|
+
*/
|
|
93
|
+
has(page_id) {
|
|
94
|
+
return this.pages.has(page_id);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Replace a page handle in the registry.
|
|
98
|
+
*
|
|
99
|
+
* Used for CDP session rebinding - keeps the same page_id but
|
|
100
|
+
* updates the handle with a new CDP session.
|
|
101
|
+
*
|
|
102
|
+
* @param page_id - Page ID to replace
|
|
103
|
+
* @param handle - New handle to store
|
|
104
|
+
* @returns true if replaced, false if page_id not found
|
|
105
|
+
*/
|
|
106
|
+
replace(page_id, handle) {
|
|
107
|
+
if (!this.pages.has(page_id)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
this.pages.set(page_id, handle);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Update metadata for a page
|
|
115
|
+
*
|
|
116
|
+
* @param page_id - The page identifier
|
|
117
|
+
* @param metadata - Partial metadata to update
|
|
118
|
+
* @returns true if updated, false if page not found
|
|
119
|
+
*/
|
|
120
|
+
updateMetadata(page_id, metadata) {
|
|
121
|
+
const handle = this.pages.get(page_id);
|
|
122
|
+
if (!handle) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
if (metadata.url !== undefined) {
|
|
126
|
+
handle.url = metadata.url;
|
|
127
|
+
}
|
|
128
|
+
if (metadata.title !== undefined) {
|
|
129
|
+
handle.title = metadata.title;
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Find a handle by its Puppeteer Page instance
|
|
135
|
+
*
|
|
136
|
+
* @param page - Puppeteer Page instance to find
|
|
137
|
+
* @returns PageHandle if found, undefined otherwise
|
|
138
|
+
*/
|
|
139
|
+
findByPage(page) {
|
|
140
|
+
return this.list().find((h) => h.page === page);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Find all handles with a matching URL
|
|
144
|
+
*
|
|
145
|
+
* @param url - URL to search for
|
|
146
|
+
* @returns Array of matching PageHandle objects
|
|
147
|
+
*/
|
|
148
|
+
findByUrl(url) {
|
|
149
|
+
return this.list().filter((h) => h.url === url);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check if a page handle is still valid (page not closed, CDP active)
|
|
153
|
+
*
|
|
154
|
+
* Use this to detect stale handles before performing operations.
|
|
155
|
+
*
|
|
156
|
+
* @param page_id - The page identifier
|
|
157
|
+
* @returns true if the handle exists and both page and CDP session are active
|
|
158
|
+
*/
|
|
159
|
+
isValid(page_id) {
|
|
160
|
+
const handle = this.pages.get(page_id);
|
|
161
|
+
if (!handle) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return !handle.page.isClosed() && handle.cdp.isActive();
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Touch a page to mark it as most recently used.
|
|
168
|
+
*
|
|
169
|
+
* @param page_id - The page identifier
|
|
170
|
+
* @returns true if the page exists and was touched, false otherwise
|
|
171
|
+
*/
|
|
172
|
+
touch(page_id) {
|
|
173
|
+
if (this.pages.has(page_id)) {
|
|
174
|
+
this.mruPageId = page_id;
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the most recently used page.
|
|
181
|
+
*
|
|
182
|
+
* Falls back to the first registered page if MRU is not set.
|
|
183
|
+
*
|
|
184
|
+
* @returns PageHandle for MRU page, or undefined if no pages
|
|
185
|
+
*/
|
|
186
|
+
getMostRecent() {
|
|
187
|
+
if (this.mruPageId && this.pages.has(this.mruPageId)) {
|
|
188
|
+
return this.pages.get(this.mruPageId);
|
|
189
|
+
}
|
|
190
|
+
// Fallback to first page
|
|
191
|
+
return this.pages.values().next().value;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=page-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-registry.js","sourceRoot":"","sources":["../../../src/browser/page-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Stabilization Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for waiting on network activity to settle.
|
|
5
|
+
* Used by session-manager and execute-action.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: This module uses PageNetworkTracker for reliable network idle
|
|
8
|
+
* detection. Unlike Puppeteer's waitForNetworkIdle(), the tracker
|
|
9
|
+
* monitors actual request/response events and works for in-page actions
|
|
10
|
+
* (not just navigation load states).
|
|
11
|
+
*/
|
|
12
|
+
import type { Page } from 'puppeteer-core';
|
|
13
|
+
/** Default timeout for network idle waiting after actions (ms) */
|
|
14
|
+
export declare const ACTION_NETWORK_IDLE_TIMEOUT_MS = 3000;
|
|
15
|
+
/** Default timeout for network idle waiting after navigation (ms) */
|
|
16
|
+
export declare const NAVIGATION_NETWORK_IDLE_TIMEOUT_MS = 5000;
|
|
17
|
+
/** Default quiet window - time with 0 inflight requests to consider "idle" (ms) */
|
|
18
|
+
export declare const DEFAULT_QUIET_WINDOW_MS = 500;
|
|
19
|
+
/**
|
|
20
|
+
* Wait for network to become quiet (no pending requests for 500ms).
|
|
21
|
+
*
|
|
22
|
+
* This catches pending API calls triggered by actions. Uses PageNetworkTracker
|
|
23
|
+
* which monitors request/response events directly, providing reliable detection
|
|
24
|
+
* of network activity for both navigation and in-page actions.
|
|
25
|
+
*
|
|
26
|
+
* Unlike Puppeteer's waitForNetworkIdle(), this works correctly
|
|
27
|
+
* for fetch/XHR requests triggered by user actions after page load.
|
|
28
|
+
*
|
|
29
|
+
* @param page - Puppeteer Page instance
|
|
30
|
+
* @param timeoutMs - Maximum time to wait for network idle
|
|
31
|
+
* @param quietWindowMs - Time with 0 inflight requests to consider "idle" (default: 500ms)
|
|
32
|
+
* @returns Whether network became idle (false = timed out, but that's OK - never throws)
|
|
33
|
+
*/
|
|
34
|
+
export declare function waitForNetworkQuiet(page: Page, timeoutMs: number, quietWindowMs?: number): Promise<boolean>;
|
|
35
|
+
//# sourceMappingURL=page-stabilization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-stabilization.d.ts","sourceRoot":"","sources":["../../../src/browser/page-stabilization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,kEAAkE;AAClE,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,qEAAqE;AACrE,eAAO,MAAM,kCAAkC,OAAO,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,MAAgC,GAC9C,OAAO,CAAC,OAAO,CAAC,CASlB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Stabilization Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for waiting on network activity to settle.
|
|
5
|
+
* Used by session-manager and execute-action.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: This module uses PageNetworkTracker for reliable network idle
|
|
8
|
+
* detection. Unlike Puppeteer's waitForNetworkIdle(), the tracker
|
|
9
|
+
* monitors actual request/response events and works for in-page actions
|
|
10
|
+
* (not just navigation load states).
|
|
11
|
+
*/
|
|
12
|
+
import { getOrCreateTracker } from './page-network-tracker.js';
|
|
13
|
+
/** Default timeout for network idle waiting after actions (ms) */
|
|
14
|
+
export const ACTION_NETWORK_IDLE_TIMEOUT_MS = 3000;
|
|
15
|
+
/** Default timeout for network idle waiting after navigation (ms) */
|
|
16
|
+
export const NAVIGATION_NETWORK_IDLE_TIMEOUT_MS = 5000;
|
|
17
|
+
/** Default quiet window - time with 0 inflight requests to consider "idle" (ms) */
|
|
18
|
+
export const DEFAULT_QUIET_WINDOW_MS = 500;
|
|
19
|
+
/**
|
|
20
|
+
* Wait for network to become quiet (no pending requests for 500ms).
|
|
21
|
+
*
|
|
22
|
+
* This catches pending API calls triggered by actions. Uses PageNetworkTracker
|
|
23
|
+
* which monitors request/response events directly, providing reliable detection
|
|
24
|
+
* of network activity for both navigation and in-page actions.
|
|
25
|
+
*
|
|
26
|
+
* Unlike Puppeteer's waitForNetworkIdle(), this works correctly
|
|
27
|
+
* for fetch/XHR requests triggered by user actions after page load.
|
|
28
|
+
*
|
|
29
|
+
* @param page - Puppeteer Page instance
|
|
30
|
+
* @param timeoutMs - Maximum time to wait for network idle
|
|
31
|
+
* @param quietWindowMs - Time with 0 inflight requests to consider "idle" (default: 500ms)
|
|
32
|
+
* @returns Whether network became idle (false = timed out, but that's OK - never throws)
|
|
33
|
+
*/
|
|
34
|
+
export async function waitForNetworkQuiet(page, timeoutMs, quietWindowMs = DEFAULT_QUIET_WINDOW_MS) {
|
|
35
|
+
const tracker = getOrCreateTracker(page);
|
|
36
|
+
// Ensure tracker is attached (may not be if page was created outside SessionManager)
|
|
37
|
+
if (!tracker.isAttached()) {
|
|
38
|
+
tracker.attach(page);
|
|
39
|
+
}
|
|
40
|
+
return tracker.waitForQuiet(timeoutMs, quietWindowMs);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=page-stabilization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-stabilization.js","sourceRoot":"","sources":["../../../src/browser/page-stabilization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,kEAAkE;AAClE,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAEnD,qEAAqE;AACrE,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,CAAC;AAEvD,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAU,EACV,SAAiB,EACjB,gBAAwB,uBAAuB;IAE/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzC,qFAAqF;IACrF,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC"}
|