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,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Renderer
|
|
3
|
+
*
|
|
4
|
+
* Converts internal state representation (StateResponse) into a dense XML format
|
|
5
|
+
* optimized for LLM context windows.
|
|
6
|
+
*
|
|
7
|
+
* In diff mode, only renders changed elements (added + changed) to minimize tokens.
|
|
8
|
+
* In baseline mode, renders all actionables.
|
|
9
|
+
*/
|
|
10
|
+
import type { StateResponseObject, ActionableInfo, RenderOptions } from './types.js';
|
|
11
|
+
import type { DOMObservation, ObservationGroups } from '../observation/observation.types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Trim a region's elements to head + tail, dropping the middle.
|
|
14
|
+
*
|
|
15
|
+
* @param elements - Full list of actionable elements in a region
|
|
16
|
+
* @param limits - How many to keep from the start (head) and end (tail)
|
|
17
|
+
* @returns The kept elements and count of trimmed elements
|
|
18
|
+
*/
|
|
19
|
+
export declare function trimRegionElements(elements: ActionableInfo[], limits: {
|
|
20
|
+
head: number;
|
|
21
|
+
tail: number;
|
|
22
|
+
}): {
|
|
23
|
+
kept: ActionableInfo[];
|
|
24
|
+
trimmedCount: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Render a StateResponseObject as a dense XML string.
|
|
28
|
+
*
|
|
29
|
+
* @param response - Internal state response object
|
|
30
|
+
* @param options - Optional rendering options (e.g., trimRegions)
|
|
31
|
+
* @returns Dense XML string
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderStateXml(response: StateResponseObject, options?: RenderOptions): string;
|
|
34
|
+
/**
|
|
35
|
+
* Render observations section if there are any significant observations.
|
|
36
|
+
*
|
|
37
|
+
* Output format (flattened, no wrapper elements):
|
|
38
|
+
* <observations>
|
|
39
|
+
* <appeared when="action" eid="dialog-001" role="dialog">...</appeared>
|
|
40
|
+
* <appeared when="prior" eid="toast-002" role="alert" age_ms="1500">...</appeared>
|
|
41
|
+
* </observations>
|
|
42
|
+
*/
|
|
43
|
+
export declare function renderObservations(observations: ObservationGroups): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Render a single observation as XML lines.
|
|
46
|
+
*
|
|
47
|
+
* Output format:
|
|
48
|
+
* <appeared when="action" eid="dialog-001" role="dialog" delay_ms="200">
|
|
49
|
+
* <heading eid="dlg-title">My Cart</heading>
|
|
50
|
+
* <text>Your cart is empty.</text>
|
|
51
|
+
* <button eid="btn-shop">Continue Shopping</button>
|
|
52
|
+
* </appeared>
|
|
53
|
+
*
|
|
54
|
+
* Or without children:
|
|
55
|
+
* <appeared when="action" eid="toast-001" role="alert">Error message</appeared>
|
|
56
|
+
*
|
|
57
|
+
* @param obs - The observation to render
|
|
58
|
+
* @param when - 'action' for duringAction, 'prior' for sincePrevious
|
|
59
|
+
* @param indent - Number of spaces for indentation
|
|
60
|
+
* @returns Array of XML lines
|
|
61
|
+
*/
|
|
62
|
+
export declare function renderSingleObservation(obs: DOMObservation, when: 'action' | 'prior', indent: number): string[];
|
|
63
|
+
//# sourceMappingURL=state-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-renderer.d.ts","sourceRoot":"","sources":["../../../src/state/state-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AA2B7F;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EAAE,EAC1B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CASlD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAiG7F;AAkJD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAwB5E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CA2BV"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Renderer
|
|
3
|
+
*
|
|
4
|
+
* Converts internal state representation (StateResponse) into a dense XML format
|
|
5
|
+
* optimized for LLM context windows.
|
|
6
|
+
*
|
|
7
|
+
* In diff mode, only renders changed elements (added + changed) to minimize tokens.
|
|
8
|
+
* In baseline mode, renders all actionables.
|
|
9
|
+
*/
|
|
10
|
+
import { escapeXml } from '../lib/text-utils.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Region Trimming Configuration
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/** When 'false', disables region trimming globally regardless of per-tool options. Default: enabled. */
|
|
15
|
+
const TRIM_ENABLED = process.env.AWI_TRIM_REGIONS !== 'false';
|
|
16
|
+
/**
|
|
17
|
+
* Per-region limits for trimming actionable elements in snapshot responses.
|
|
18
|
+
* For each region, keep the first `head` and last `tail` elements; trim the middle.
|
|
19
|
+
*/
|
|
20
|
+
const REGION_TRIM_LIMITS = {
|
|
21
|
+
header: { head: 3, tail: 2 },
|
|
22
|
+
nav: { head: 3, tail: 2 },
|
|
23
|
+
main: { head: 5, tail: 5 },
|
|
24
|
+
aside: { head: 3, tail: 2 },
|
|
25
|
+
footer: { head: 2, tail: 2 },
|
|
26
|
+
dialog: { head: 5, tail: 5 },
|
|
27
|
+
search: { head: 2, tail: 2 },
|
|
28
|
+
form: { head: 5, tail: 3 },
|
|
29
|
+
};
|
|
30
|
+
const DEFAULT_TRIM_LIMITS = { head: 5, tail: 3 };
|
|
31
|
+
/**
|
|
32
|
+
* Trim a region's elements to head + tail, dropping the middle.
|
|
33
|
+
*
|
|
34
|
+
* @param elements - Full list of actionable elements in a region
|
|
35
|
+
* @param limits - How many to keep from the start (head) and end (tail)
|
|
36
|
+
* @returns The kept elements and count of trimmed elements
|
|
37
|
+
*/
|
|
38
|
+
export function trimRegionElements(elements, limits) {
|
|
39
|
+
const total = limits.head + limits.tail;
|
|
40
|
+
if (elements.length <= total)
|
|
41
|
+
return { kept: elements, trimmedCount: 0 };
|
|
42
|
+
const head = elements.slice(0, limits.head);
|
|
43
|
+
const tail = limits.tail > 0 ? elements.slice(-limits.tail) : [];
|
|
44
|
+
const trimmedCount = elements.length - total;
|
|
45
|
+
return { kept: [...head, ...tail], trimmedCount };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Render a StateResponseObject as a dense XML string.
|
|
49
|
+
*
|
|
50
|
+
* @param response - Internal state response object
|
|
51
|
+
* @param options - Optional rendering options (e.g., trimRegions)
|
|
52
|
+
* @returns Dense XML string
|
|
53
|
+
*/
|
|
54
|
+
export function renderStateXml(response, options) {
|
|
55
|
+
const { state, diff, actionables, atoms } = response;
|
|
56
|
+
const lines = [];
|
|
57
|
+
// 1. Root and Meta
|
|
58
|
+
lines.push(`<state step="${state.step}" title="${escapeXml(state.doc.title)}" url="${escapeXml(state.doc.url)}">`);
|
|
59
|
+
const view = `${atoms.viewport.w}x${atoms.viewport.h}`;
|
|
60
|
+
const scroll = `${atoms.scroll.x},${atoms.scroll.y}`;
|
|
61
|
+
lines.push(` <meta view="${view}" scroll="${scroll}" layer="${state.layer.active}" />`);
|
|
62
|
+
// 2. Diff/Baseline indicator
|
|
63
|
+
if (diff.mode === 'baseline') {
|
|
64
|
+
lines.push(` <baseline reason="${diff.reason}"${diff.error ? ` error="${escapeXml(diff.error)}"` : ''} />`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const d = diff;
|
|
68
|
+
// Build flattened diff attributes
|
|
69
|
+
const diffAttrs = ['type="mutation"'];
|
|
70
|
+
if (d.diff.doc) {
|
|
71
|
+
diffAttrs.push(`nav="${d.diff.doc.nav_type}"`);
|
|
72
|
+
}
|
|
73
|
+
if (d.diff.actionables.added.length > 0) {
|
|
74
|
+
diffAttrs.push(`added="${d.diff.actionables.added.length}"`);
|
|
75
|
+
}
|
|
76
|
+
if (d.diff.actionables.removed.length > 0) {
|
|
77
|
+
diffAttrs.push(`removed="${d.diff.actionables.removed.length}"`);
|
|
78
|
+
}
|
|
79
|
+
// Check if there are mutations to render inline
|
|
80
|
+
const { textChanged, statusAppeared } = d.diff.mutations;
|
|
81
|
+
const hasMutations = textChanged.length > 0 || statusAppeared.length > 0;
|
|
82
|
+
if (hasMutations) {
|
|
83
|
+
lines.push(` <diff ${diffAttrs.join(' ')}>`);
|
|
84
|
+
// Render mutations directly without wrapper
|
|
85
|
+
for (const change of textChanged) {
|
|
86
|
+
const from = escapeXml(change.from);
|
|
87
|
+
const to = escapeXml(change.to);
|
|
88
|
+
lines.push(` <text-changed id="${change.eid}">${from} → ${to}</text-changed>`);
|
|
89
|
+
}
|
|
90
|
+
for (const status of statusAppeared) {
|
|
91
|
+
const text = escapeXml(status.text);
|
|
92
|
+
lines.push(` <status id="${status.eid}" role="${status.role}">${text}</status>`);
|
|
93
|
+
}
|
|
94
|
+
lines.push(` </diff>`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
lines.push(` <diff ${diffAttrs.join(' ')} />`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// 3. Observations (if present)
|
|
101
|
+
if (response.observations) {
|
|
102
|
+
const obsLines = renderObservations(response.observations);
|
|
103
|
+
if (obsLines.length > 0) {
|
|
104
|
+
lines.push(...obsLines);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// 4. Actionables (Grouped by Region)
|
|
108
|
+
// In diff mode: only render added/changed elements (unless in overlay layer)
|
|
109
|
+
// In baseline mode: render all elements
|
|
110
|
+
const activeLayer = state.layer.active;
|
|
111
|
+
const filteredActionables = filterActionablesForMode(actionables, diff, activeLayer);
|
|
112
|
+
const regions = groupActionablesByRegion(filteredActionables);
|
|
113
|
+
const shouldTrim = TRIM_ENABLED && options?.trimRegions === true;
|
|
114
|
+
for (const [regionName, items] of Object.entries(regions)) {
|
|
115
|
+
const limits = REGION_TRIM_LIMITS[regionName] ?? DEFAULT_TRIM_LIMITS;
|
|
116
|
+
const { kept, trimmedCount } = shouldTrim
|
|
117
|
+
? trimRegionElements(items, limits)
|
|
118
|
+
: { kept: items, trimmedCount: 0 };
|
|
119
|
+
lines.push(` <region name="${regionName}">`);
|
|
120
|
+
for (const item of kept) {
|
|
121
|
+
lines.push(` ${renderActionable(item, diff)}`);
|
|
122
|
+
}
|
|
123
|
+
if (trimmedCount > 0) {
|
|
124
|
+
lines.push(` <!-- trimmed ${trimmedCount} items. Use find_elements with region=${regionName} to see all -->`);
|
|
125
|
+
}
|
|
126
|
+
lines.push(` </region>`);
|
|
127
|
+
}
|
|
128
|
+
lines.push(`</state>`);
|
|
129
|
+
return lines.join('\n');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Overlay layer types that should always show all actionables.
|
|
133
|
+
* When in these layers, we show all elements regardless of diff mode
|
|
134
|
+
* because the user needs to see the overlay content to interact with it.
|
|
135
|
+
*
|
|
136
|
+
* These values correspond to non-'main' values of LayerDetectionResult.active.
|
|
137
|
+
* See layer-detector.ts for detection logic.
|
|
138
|
+
*/
|
|
139
|
+
const OVERLAY_LAYERS = new Set(['modal', 'popover', 'drawer']);
|
|
140
|
+
/**
|
|
141
|
+
* Filter actionables based on diff mode and active layer.
|
|
142
|
+
*
|
|
143
|
+
* In baseline mode: return all actionables
|
|
144
|
+
* In diff mode with overlay layer: return all actionables (user needs to see overlay content)
|
|
145
|
+
* In diff mode with main layer: return only added elements + elements with property changes
|
|
146
|
+
* (visibility, enabled, checked, selected, expanded, focused, value, label)
|
|
147
|
+
*/
|
|
148
|
+
function filterActionablesForMode(actionables, diff, activeLayer) {
|
|
149
|
+
// Baseline mode: return all
|
|
150
|
+
if (diff.mode === 'baseline') {
|
|
151
|
+
return actionables;
|
|
152
|
+
}
|
|
153
|
+
// Overlay layers (modal, popover, drawer): always show all actionables
|
|
154
|
+
// The user needs to see the overlay content to interact with it
|
|
155
|
+
if (OVERLAY_LAYERS.has(activeLayer)) {
|
|
156
|
+
return actionables;
|
|
157
|
+
}
|
|
158
|
+
// Diff mode with main layer: only include added and changed elements
|
|
159
|
+
const d = diff;
|
|
160
|
+
const addedSet = new Set(d.diff.actionables.added);
|
|
161
|
+
const changedSet = new Set(d.diff.actionables.changed.map((c) => c.eid));
|
|
162
|
+
return actionables.filter((item) => addedSet.has(item.eid) || changedSet.has(item.eid));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Render a single actionable element as XML.
|
|
166
|
+
* In diff mode, can optionally mark elements as 'new' if they were just added.
|
|
167
|
+
*/
|
|
168
|
+
function renderActionable(item, _diff) {
|
|
169
|
+
const tag = mapKindToTag(item.kind);
|
|
170
|
+
const attrs = [`id="${item.eid}"`];
|
|
171
|
+
// State flags (descriptive names with boolean values)
|
|
172
|
+
if (!item.ena)
|
|
173
|
+
attrs.push(`enabled="false"`);
|
|
174
|
+
if (!item.vis)
|
|
175
|
+
attrs.push(`visible="false"`);
|
|
176
|
+
if (item.chk)
|
|
177
|
+
attrs.push(`checked="true"`);
|
|
178
|
+
if (item.sel)
|
|
179
|
+
attrs.push(`selected="true"`);
|
|
180
|
+
if (item.exp)
|
|
181
|
+
attrs.push(`expanded="true"`);
|
|
182
|
+
if (item.foc)
|
|
183
|
+
attrs.push(`focused="true"`);
|
|
184
|
+
// Attributes
|
|
185
|
+
if (item.val_hint)
|
|
186
|
+
attrs.push(`val="${escapeXml(item.val_hint)}"`);
|
|
187
|
+
if (item.type)
|
|
188
|
+
attrs.push(`type="${escapeXml(item.type)}"`);
|
|
189
|
+
if (item.href)
|
|
190
|
+
attrs.push(`href="${escapeXml(item.href)}"`);
|
|
191
|
+
const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';
|
|
192
|
+
const content = escapeXml(item.name);
|
|
193
|
+
return `<${tag}${attrStr}>${content}</${tag}>`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Map semantic kind to short XML tag names.
|
|
197
|
+
*/
|
|
198
|
+
function mapKindToTag(kind) {
|
|
199
|
+
switch (kind.toLowerCase()) {
|
|
200
|
+
case 'button':
|
|
201
|
+
return 'btn';
|
|
202
|
+
case 'link':
|
|
203
|
+
return 'link';
|
|
204
|
+
case 'textbox':
|
|
205
|
+
return 'inp';
|
|
206
|
+
case 'checkbox':
|
|
207
|
+
return 'chk';
|
|
208
|
+
case 'radio':
|
|
209
|
+
return 'rad';
|
|
210
|
+
case 'combobox':
|
|
211
|
+
return 'sel';
|
|
212
|
+
case 'image':
|
|
213
|
+
return 'img';
|
|
214
|
+
case 'heading':
|
|
215
|
+
return 'h';
|
|
216
|
+
default:
|
|
217
|
+
return 'elt';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Group actionables by their semantic region.
|
|
222
|
+
*/
|
|
223
|
+
function groupActionablesByRegion(actionables) {
|
|
224
|
+
const regions = {};
|
|
225
|
+
for (const item of actionables) {
|
|
226
|
+
// Use semantic region, fallback to 'main' if unknown
|
|
227
|
+
const region = item.ctx.region === 'unknown' ? 'main' : item.ctx.region;
|
|
228
|
+
if (!regions[region])
|
|
229
|
+
regions[region] = [];
|
|
230
|
+
regions[region].push(item);
|
|
231
|
+
}
|
|
232
|
+
return regions;
|
|
233
|
+
}
|
|
234
|
+
// ============================================================================
|
|
235
|
+
// Observation Rendering
|
|
236
|
+
// ============================================================================
|
|
237
|
+
/**
|
|
238
|
+
* Deduplicate observations by tag + text content.
|
|
239
|
+
* When multiple observations have the same tag and text (e.g., nested wrapper divs),
|
|
240
|
+
* keep only the one with the highest significance score.
|
|
241
|
+
*
|
|
242
|
+
* This prevents noisy duplicate entries from nested DOM structures like:
|
|
243
|
+
* <div class="toast"><div class="wrapper"><span>message</span></div></div>
|
|
244
|
+
* where multiple divs would all report the same text content.
|
|
245
|
+
*/
|
|
246
|
+
function deduplicateObservations(observations) {
|
|
247
|
+
if (observations.length <= 1) {
|
|
248
|
+
return observations;
|
|
249
|
+
}
|
|
250
|
+
// Group by tag + truncated text (first 50 chars to handle slight variations)
|
|
251
|
+
const byContent = new Map();
|
|
252
|
+
for (const obs of observations) {
|
|
253
|
+
const textKey = obs.content.text.substring(0, 50).trim();
|
|
254
|
+
const key = `${obs.content.tag}:${textKey}`;
|
|
255
|
+
const existing = byContent.get(key);
|
|
256
|
+
if (!existing || obs.significance > existing.significance) {
|
|
257
|
+
// Keep the observation with higher significance
|
|
258
|
+
byContent.set(key, obs);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return Array.from(byContent.values());
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Render observations section if there are any significant observations.
|
|
265
|
+
*
|
|
266
|
+
* Output format (flattened, no wrapper elements):
|
|
267
|
+
* <observations>
|
|
268
|
+
* <appeared when="action" eid="dialog-001" role="dialog">...</appeared>
|
|
269
|
+
* <appeared when="prior" eid="toast-002" role="alert" age_ms="1500">...</appeared>
|
|
270
|
+
* </observations>
|
|
271
|
+
*/
|
|
272
|
+
export function renderObservations(observations) {
|
|
273
|
+
const { duringAction, sincePrevious } = observations;
|
|
274
|
+
if (duringAction.length === 0 && sincePrevious.length === 0) {
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
// Deduplicate observations to avoid noisy duplicates from nested elements
|
|
278
|
+
const dedupedDuringAction = deduplicateObservations(duringAction);
|
|
279
|
+
const dedupedSincePrevious = deduplicateObservations(sincePrevious);
|
|
280
|
+
const lines = [];
|
|
281
|
+
lines.push(' <observations>');
|
|
282
|
+
// Render all observations with when="action" or when="prior" attribute
|
|
283
|
+
for (const obs of dedupedDuringAction) {
|
|
284
|
+
lines.push(...renderSingleObservation(obs, 'action', 4));
|
|
285
|
+
}
|
|
286
|
+
for (const obs of dedupedSincePrevious) {
|
|
287
|
+
lines.push(...renderSingleObservation(obs, 'prior', 4));
|
|
288
|
+
}
|
|
289
|
+
lines.push(' </observations>');
|
|
290
|
+
return lines;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Render a single observation as XML lines.
|
|
294
|
+
*
|
|
295
|
+
* Output format:
|
|
296
|
+
* <appeared when="action" eid="dialog-001" role="dialog" delay_ms="200">
|
|
297
|
+
* <heading eid="dlg-title">My Cart</heading>
|
|
298
|
+
* <text>Your cart is empty.</text>
|
|
299
|
+
* <button eid="btn-shop">Continue Shopping</button>
|
|
300
|
+
* </appeared>
|
|
301
|
+
*
|
|
302
|
+
* Or without children:
|
|
303
|
+
* <appeared when="action" eid="toast-001" role="alert">Error message</appeared>
|
|
304
|
+
*
|
|
305
|
+
* @param obs - The observation to render
|
|
306
|
+
* @param when - 'action' for duringAction, 'prior' for sincePrevious
|
|
307
|
+
* @param indent - Number of spaces for indentation
|
|
308
|
+
* @returns Array of XML lines
|
|
309
|
+
*/
|
|
310
|
+
export function renderSingleObservation(obs, when, indent) {
|
|
311
|
+
const pad = ' '.repeat(indent);
|
|
312
|
+
const lines = [];
|
|
313
|
+
// Build attributes (flattened, no nested elements)
|
|
314
|
+
const attrs = [`when="${when}"`];
|
|
315
|
+
if (obs.eid)
|
|
316
|
+
attrs.push(`eid="${obs.eid}"`);
|
|
317
|
+
if (obs.content.role)
|
|
318
|
+
attrs.push(`role="${obs.content.role}"`);
|
|
319
|
+
if (obs.delayMs)
|
|
320
|
+
attrs.push(`delay_ms="${obs.delayMs}"`);
|
|
321
|
+
if (obs.ageMs)
|
|
322
|
+
attrs.push(`age_ms="${obs.ageMs}"`);
|
|
323
|
+
if (obs.signals.wasShortLived)
|
|
324
|
+
attrs.push('transient="true"');
|
|
325
|
+
const hasChildren = obs.children && obs.children.length > 0;
|
|
326
|
+
if (hasChildren) {
|
|
327
|
+
lines.push(`${pad}<${obs.type} ${attrs.join(' ')}>`);
|
|
328
|
+
for (const child of obs.children) {
|
|
329
|
+
const childAttrs = child.eid ? ` eid="${child.eid}"` : '';
|
|
330
|
+
lines.push(`${pad} <${child.tag}${childAttrs}>${escapeXml(child.text)}</${child.tag}>`);
|
|
331
|
+
}
|
|
332
|
+
lines.push(`${pad}</${obs.type}>`);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const text = escapeXml(obs.content.text);
|
|
336
|
+
lines.push(`${pad}<${obs.type} ${attrs.join(' ')}>${text}</${obs.type}>`);
|
|
337
|
+
}
|
|
338
|
+
return lines;
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=state-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-renderer.js","sourceRoot":"","sources":["../../../src/state/state-renderer.ts"],"names":[],"mappings":"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"}
|