@aotui/runtime 1.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/dist/adapters/aotui-driven-source.d.ts +106 -0
- package/dist/adapters/aotui-driven-source.js +549 -0
- package/dist/adapters/aotui-driven-source.js.map +1 -0
- package/dist/adapters/bridge/index.d.ts +94 -0
- package/dist/adapters/bridge/index.js +199 -0
- package/dist/adapters/bridge/index.js.map +1 -0
- package/dist/adapters/index.d.ts +7 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/session/index.d.ts +7 -0
- package/dist/adapters/session/index.js +2 -0
- package/dist/adapters/session/index.js.map +1 -0
- package/dist/adapters/session/session.d.ts +46 -0
- package/dist/adapters/session/session.js +76 -0
- package/dist/adapters/session/session.js.map +1 -0
- package/dist/adapters/session/types.d.ts +52 -0
- package/dist/adapters/session/types.js +7 -0
- package/dist/adapters/session/types.js.map +1 -0
- package/dist/adapters/system-instruction.d.ts +9 -0
- package/dist/adapters/system-instruction.js +434 -0
- package/dist/adapters/system-instruction.js.map +1 -0
- package/dist/benchmarks/dom-engine-comparison.d.ts +1 -0
- package/dist/benchmarks/dom-engine-comparison.js +84 -0
- package/dist/benchmarks/dom-engine-comparison.js.map +1 -0
- package/dist/benchmarks/shadow-dom-check.d.ts +1 -0
- package/dist/benchmarks/shadow-dom-check.js +44 -0
- package/dist/benchmarks/shadow-dom-check.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.js +314 -0
- package/dist/cli.js.map +1 -0
- package/dist/engine/app/config.d.ts +81 -0
- package/dist/engine/app/config.js +32 -0
- package/dist/engine/app/config.js.map +1 -0
- package/dist/engine/app/index.d.ts +14 -0
- package/dist/engine/app/index.js +33 -0
- package/dist/engine/app/index.js.map +1 -0
- package/dist/engine/app/manager.d.ts +194 -0
- package/dist/engine/app/manager.js +340 -0
- package/dist/engine/app/manager.js.map +1 -0
- package/dist/engine/app/registry.d.ts +138 -0
- package/dist/engine/app/registry.js +473 -0
- package/dist/engine/app/registry.js.map +1 -0
- package/dist/engine/app/worker-app-host.service.d.ts +62 -0
- package/dist/engine/app/worker-app-host.service.js +189 -0
- package/dist/engine/app/worker-app-host.service.js.map +1 -0
- package/dist/engine/app/worker-host.d.ts +139 -0
- package/dist/engine/app/worker-host.js +397 -0
- package/dist/engine/app/worker-host.js.map +1 -0
- package/dist/engine/app/worker-pool.d.ts +45 -0
- package/dist/engine/app/worker-pool.js +122 -0
- package/dist/engine/app/worker-pool.js.map +1 -0
- package/dist/engine/app/worker-sandbox.d.ts +152 -0
- package/dist/engine/app/worker-sandbox.js +290 -0
- package/dist/engine/app/worker-sandbox.js.map +1 -0
- package/dist/engine/core/desktop-logger.d.ts +69 -0
- package/dist/engine/core/desktop-logger.js +124 -0
- package/dist/engine/core/desktop-logger.js.map +1 -0
- package/dist/engine/core/desktop.d.ts +208 -0
- package/dist/engine/core/desktop.js +351 -0
- package/dist/engine/core/desktop.js.map +1 -0
- package/dist/engine/core/index.d.ts +12 -0
- package/dist/engine/core/index.js +28 -0
- package/dist/engine/core/index.js.map +1 -0
- package/dist/engine/core/llm-output-channel.d.ts +45 -0
- package/dist/engine/core/llm-output-channel.js +122 -0
- package/dist/engine/core/llm-output-channel.js.map +1 -0
- package/dist/engine/core/manager.d.ts +59 -0
- package/dist/engine/core/manager.js +131 -0
- package/dist/engine/core/manager.js.map +1 -0
- package/dist/engine/core/operation-log-buffer.d.ts +79 -0
- package/dist/engine/core/operation-log-buffer.js +108 -0
- package/dist/engine/core/operation-log-buffer.js.map +1 -0
- package/dist/engine/core/operation-log-formatter.d.ts +44 -0
- package/dist/engine/core/operation-log-formatter.js +180 -0
- package/dist/engine/core/operation-log-formatter.js.map +1 -0
- package/dist/engine/core/services/lock.service.d.ts +33 -0
- package/dist/engine/core/services/lock.service.js +99 -0
- package/dist/engine/core/services/lock.service.js.map +1 -0
- package/dist/engine/core/signal-bus.d.ts +84 -0
- package/dist/engine/core/signal-bus.js +160 -0
- package/dist/engine/core/signal-bus.js.map +1 -0
- package/dist/engine/core/signal-service.d.ts +42 -0
- package/dist/engine/core/signal-service.js +58 -0
- package/dist/engine/core/signal-service.js.map +1 -0
- package/dist/engine/system/dispatcher.d.ts +18 -0
- package/dist/engine/system/dispatcher.js +48 -0
- package/dist/engine/system/dispatcher.js.map +1 -0
- package/dist/engine/system/index.d.ts +10 -0
- package/dist/engine/system/index.js +20 -0
- package/dist/engine/system/index.js.map +1 -0
- package/dist/engine/system/operations/index.d.ts +26 -0
- package/dist/engine/system/operations/index.js +38 -0
- package/dist/engine/system/operations/index.js.map +1 -0
- package/dist/engine/system/operations/registry.d.ts +62 -0
- package/dist/engine/system/operations/registry.js +101 -0
- package/dist/engine/system/operations/registry.js.map +1 -0
- package/dist/engine/system/operations/system/close-app.d.ts +13 -0
- package/dist/engine/system/operations/system/close-app.js +43 -0
- package/dist/engine/system/operations/system/close-app.js.map +1 -0
- package/dist/engine/system/operations/system/dismount-view.d.ts +13 -0
- package/dist/engine/system/operations/system/dismount-view.js +48 -0
- package/dist/engine/system/operations/system/dismount-view.js.map +1 -0
- package/dist/engine/system/operations/system/index.d.ts +6 -0
- package/dist/engine/system/operations/system/index.js +7 -0
- package/dist/engine/system/operations/system/index.js.map +1 -0
- package/dist/engine/system/operations/system/open-app.d.ts +13 -0
- package/dist/engine/system/operations/system/open-app.js +43 -0
- package/dist/engine/system/operations/system/open-app.js.map +1 -0
- package/dist/engine/system/registry.d.ts +36 -0
- package/dist/engine/system/registry.js +101 -0
- package/dist/engine/system/registry.js.map +1 -0
- package/dist/engine/view/index.d.ts +13 -0
- package/dist/engine/view/index.js +20 -0
- package/dist/engine/view/index.js.map +1 -0
- package/dist/engine/view/manager.d.ts +42 -0
- package/dist/engine/view/manager.js +57 -0
- package/dist/engine/view/manager.js.map +1 -0
- package/dist/engine/view/snapshot/builder.d.ts +34 -0
- package/dist/engine/view/snapshot/builder.js +119 -0
- package/dist/engine/view/snapshot/builder.js.map +1 -0
- package/dist/engine/view/snapshot/formatter.d.ts +76 -0
- package/dist/engine/view/snapshot/formatter.js +297 -0
- package/dist/engine/view/snapshot/formatter.js.map +1 -0
- package/dist/engine/view/snapshot/index.d.ts +8 -0
- package/dist/engine/view/snapshot/index.js +8 -0
- package/dist/engine/view/snapshot/index.js.map +1 -0
- package/dist/engine/view/snapshot/templates.d.ts +41 -0
- package/dist/engine/view/snapshot/templates.js +317 -0
- package/dist/engine/view/snapshot/templates.js.map +1 -0
- package/dist/engine/view/transformer/__tests__/visitors/test-utils.d.ts +1 -0
- package/dist/engine/view/transformer/__tests__/visitors/test-utils.js +14 -0
- package/dist/engine/view/transformer/__tests__/visitors/test-utils.js.map +1 -0
- package/dist/engine/view/transformer/helpers.d.ts +19 -0
- package/dist/engine/view/transformer/helpers.js +32 -0
- package/dist/engine/view/transformer/helpers.js.map +1 -0
- package/dist/engine/view/transformer/index.d.ts +40 -0
- package/dist/engine/view/transformer/index.js +38 -0
- package/dist/engine/view/transformer/index.js.map +1 -0
- package/dist/engine/view/transformer/pure.d.ts +17 -0
- package/dist/engine/view/transformer/pure.js +124 -0
- package/dist/engine/view/transformer/pure.js.map +1 -0
- package/dist/engine/view/transformer/types.d.ts +31 -0
- package/dist/engine/view/transformer/types.js +16 -0
- package/dist/engine/view/transformer/types.js.map +1 -0
- package/dist/engine/view/transformer/visitors/application.visitor.d.ts +8 -0
- package/dist/engine/view/transformer/visitors/application.visitor.js +37 -0
- package/dist/engine/view/transformer/visitors/application.visitor.js.map +1 -0
- package/dist/engine/view/transformer/visitors/html.visitor.d.ts +8 -0
- package/dist/engine/view/transformer/visitors/html.visitor.js +161 -0
- package/dist/engine/view/transformer/visitors/html.visitor.js.map +1 -0
- package/dist/engine/view/transformer/visitors/index.d.ts +12 -0
- package/dist/engine/view/transformer/visitors/index.js +27 -0
- package/dist/engine/view/transformer/visitors/index.js.map +1 -0
- package/dist/engine/view/transformer/visitors/interface.d.ts +53 -0
- package/dist/engine/view/transformer/visitors/interface.js +8 -0
- package/dist/engine/view/transformer/visitors/interface.js.map +1 -0
- package/dist/engine/view/transformer/visitors/operation.visitor.d.ts +9 -0
- package/dist/engine/view/transformer/visitors/operation.visitor.js +122 -0
- package/dist/engine/view/transformer/visitors/operation.visitor.js.map +1 -0
- package/dist/engine/view/transformer/visitors/view-link.visitor.d.ts +15 -0
- package/dist/engine/view/transformer/visitors/view-link.visitor.js +98 -0
- package/dist/engine/view/transformer/visitors/view-link.visitor.js.map +1 -0
- package/dist/engine/view/transformer/visitors/view.visitor.d.ts +8 -0
- package/dist/engine/view/transformer/visitors/view.visitor.js +43 -0
- package/dist/engine/view/transformer/visitors/view.visitor.js.map +1 -0
- package/dist/engine/view/types.d.ts +70 -0
- package/dist/engine/view/types.js +17 -0
- package/dist/engine/view/types.js.map +1 -0
- package/dist/facades/facades.d.ts +40 -0
- package/dist/facades/facades.js +66 -0
- package/dist/facades/facades.js.map +1 -0
- package/dist/facades/index.d.ts +13 -0
- package/dist/facades/index.js +15 -0
- package/dist/facades/index.js.map +1 -0
- package/dist/factory/createKernel.d.ts +37 -0
- package/dist/factory/createKernel.js +42 -0
- package/dist/factory/createKernel.js.map +1 -0
- package/dist/factory/index.d.ts +9 -0
- package/dist/factory/index.js +10 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/browser.d.ts +20 -0
- package/dist/internal/browser.js +20 -0
- package/dist/internal/browser.js.map +1 -0
- package/dist/kernel/index.d.ts +120 -0
- package/dist/kernel/index.js +328 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/spi/app/aoapp.d.ts +86 -0
- package/dist/spi/app/aoapp.js +39 -0
- package/dist/spi/app/aoapp.js.map +1 -0
- package/dist/spi/app/app-config.interface.d.ts +9 -0
- package/dist/spi/app/app-config.interface.js +2 -0
- package/dist/spi/app/app-config.interface.js.map +1 -0
- package/dist/spi/app/app-factory.interface.d.ts +78 -0
- package/dist/spi/app/app-factory.interface.js +49 -0
- package/dist/spi/app/app-factory.interface.js.map +1 -0
- package/dist/spi/app/app-kernel.interface.d.ts +139 -0
- package/dist/spi/app/app-kernel.interface.js +2 -0
- package/dist/spi/app/app-kernel.interface.js.map +1 -0
- package/dist/spi/app/app.interface.d.ts +84 -0
- package/dist/spi/app/app.interface.js +8 -0
- package/dist/spi/app/app.interface.js.map +1 -0
- package/dist/spi/app/index.d.ts +26 -0
- package/dist/spi/app/index.js +13 -0
- package/dist/spi/app/index.js.map +1 -0
- package/dist/spi/app/public-types.d.ts +309 -0
- package/dist/spi/app/public-types.js +17 -0
- package/dist/spi/app/public-types.js.map +1 -0
- package/dist/spi/app/ref-exporter.interface.d.ts +23 -0
- package/dist/spi/app/ref-exporter.interface.js +10 -0
- package/dist/spi/app/ref-exporter.interface.js.map +1 -0
- package/dist/spi/app/store.interface.d.ts +45 -0
- package/dist/spi/app/store.interface.js +11 -0
- package/dist/spi/app/store.interface.js.map +1 -0
- package/dist/spi/app/view-context-core.interface.d.ts +50 -0
- package/dist/spi/app/view-context-core.interface.js +8 -0
- package/dist/spi/app/view-context-core.interface.js.map +1 -0
- package/dist/spi/app/view-context-ext.interface.d.ts +79 -0
- package/dist/spi/app/view-context-ext.interface.js +19 -0
- package/dist/spi/app/view-context-ext.interface.js.map +1 -0
- package/dist/spi/app/view-factory.interface.d.ts +46 -0
- package/dist/spi/app/view-factory.interface.js +2 -0
- package/dist/spi/app/view-factory.interface.js.map +1 -0
- package/dist/spi/app/view-link.types.d.ts +136 -0
- package/dist/spi/app/view-link.types.js +19 -0
- package/dist/spi/app/view-link.types.js.map +1 -0
- package/dist/spi/app/view-tree.interface.d.ts +254 -0
- package/dist/spi/app/view-tree.interface.js +13 -0
- package/dist/spi/app/view-tree.interface.js.map +1 -0
- package/dist/spi/app/view.interface.d.ts +122 -0
- package/dist/spi/app/view.interface.js +15 -0
- package/dist/spi/app/view.interface.js.map +1 -0
- package/dist/spi/bridge/bridge.interface.d.ts +118 -0
- package/dist/spi/bridge/bridge.interface.js +32 -0
- package/dist/spi/bridge/bridge.interface.js.map +1 -0
- package/dist/spi/bridge/index.d.ts +8 -0
- package/dist/spi/bridge/index.js +9 -0
- package/dist/spi/bridge/index.js.map +1 -0
- package/dist/spi/component-factory.interface.d.ts +123 -0
- package/dist/spi/component-factory.interface.js +15 -0
- package/dist/spi/component-factory.interface.js.map +1 -0
- package/dist/spi/config/define-config.d.ts +31 -0
- package/dist/spi/config/define-config.js +72 -0
- package/dist/spi/config/define-config.js.map +1 -0
- package/dist/spi/config/domains/bridge.config.d.ts +21 -0
- package/dist/spi/config/domains/bridge.config.js +10 -0
- package/dist/spi/config/domains/bridge.config.js.map +1 -0
- package/dist/spi/config/domains/lock.config.d.ts +20 -0
- package/dist/spi/config/domains/lock.config.js +10 -0
- package/dist/spi/config/domains/lock.config.js.map +1 -0
- package/dist/spi/config/domains/logger.config.d.ts +28 -0
- package/dist/spi/config/domains/logger.config.js +11 -0
- package/dist/spi/config/domains/logger.config.js.map +1 -0
- package/dist/spi/config/domains/snapshot.config.d.ts +20 -0
- package/dist/spi/config/domains/snapshot.config.js +10 -0
- package/dist/spi/config/domains/snapshot.config.js.map +1 -0
- package/dist/spi/config/domains/transform.config.d.ts +28 -0
- package/dist/spi/config/domains/transform.config.js +11 -0
- package/dist/spi/config/domains/transform.config.js.map +1 -0
- package/dist/spi/config/domains/worker.config.d.ts +54 -0
- package/dist/spi/config/domains/worker.config.js +15 -0
- package/dist/spi/config/domains/worker.config.js.map +1 -0
- package/dist/spi/config/index.d.ts +16 -0
- package/dist/spi/config/index.js +18 -0
- package/dist/spi/config/index.js.map +1 -0
- package/dist/spi/config/types.d.ts +38 -0
- package/dist/spi/config/types.js +7 -0
- package/dist/spi/config/types.js.map +1 -0
- package/dist/spi/config/validate.d.ts +12 -0
- package/dist/spi/config/validate.js +90 -0
- package/dist/spi/config/validate.js.map +1 -0
- package/dist/spi/core/errors.d.ts +117 -0
- package/dist/spi/core/errors.js +233 -0
- package/dist/spi/core/errors.js.map +1 -0
- package/dist/spi/core/id-factory.d.ts +85 -0
- package/dist/spi/core/id-factory.js +119 -0
- package/dist/spi/core/id-factory.js.map +1 -0
- package/dist/spi/core/index.d.ts +21 -0
- package/dist/spi/core/index.js +25 -0
- package/dist/spi/core/index.js.map +1 -0
- package/dist/spi/core/llm-output.d.ts +74 -0
- package/dist/spi/core/llm-output.js +12 -0
- package/dist/spi/core/llm-output.js.map +1 -0
- package/dist/spi/core/operation-log.d.ts +133 -0
- package/dist/spi/core/operation-log.js +13 -0
- package/dist/spi/core/operation-log.js.map +1 -0
- package/dist/spi/core/operations.d.ts +198 -0
- package/dist/spi/core/operations.js +13 -0
- package/dist/spi/core/operations.js.map +1 -0
- package/dist/spi/core/signals.d.ts +16 -0
- package/dist/spi/core/signals.js +7 -0
- package/dist/spi/core/signals.js.map +1 -0
- package/dist/spi/core/snapshot.d.ts +77 -0
- package/dist/spi/core/snapshot.js +18 -0
- package/dist/spi/core/snapshot.js.map +1 -0
- package/dist/spi/core/tool-call.d.ts +60 -0
- package/dist/spi/core/tool-call.js +10 -0
- package/dist/spi/core/tool-call.js.map +1 -0
- package/dist/spi/core/types.d.ts +68 -0
- package/dist/spi/core/types.js +8 -0
- package/dist/spi/core/types.js.map +1 -0
- package/dist/spi/index.d.ts +31 -0
- package/dist/spi/index.js +57 -0
- package/dist/spi/index.js.map +1 -0
- package/dist/spi/runtime/app-host.interface.d.ts +142 -0
- package/dist/spi/runtime/app-host.interface.js +10 -0
- package/dist/spi/runtime/app-host.interface.js.map +1 -0
- package/dist/spi/runtime/app-installer.interface.d.ts +33 -0
- package/dist/spi/runtime/app-installer.interface.js +2 -0
- package/dist/spi/runtime/app-installer.interface.js.map +1 -0
- package/dist/spi/runtime/context.interface.d.ts +10 -0
- package/dist/spi/runtime/context.interface.js +2 -0
- package/dist/spi/runtime/context.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-context.interface.d.ts +45 -0
- package/dist/spi/runtime/desktop-context.interface.js +10 -0
- package/dist/spi/runtime/desktop-context.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-dom.interface.d.ts +48 -0
- package/dist/spi/runtime/desktop-dom.interface.js +13 -0
- package/dist/spi/runtime/desktop-dom.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-lifecycle.interface.d.ts +23 -0
- package/dist/spi/runtime/desktop-lifecycle.interface.js +2 -0
- package/dist/spi/runtime/desktop-lifecycle.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-lock.interface.d.ts +50 -0
- package/dist/spi/runtime/desktop-lock.interface.js +2 -0
- package/dist/spi/runtime/desktop-lock.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-manager.interface.d.ts +22 -0
- package/dist/spi/runtime/desktop-manager.interface.js +13 -0
- package/dist/spi/runtime/desktop-manager.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-repository.interface.d.ts +8 -0
- package/dist/spi/runtime/desktop-repository.interface.js +2 -0
- package/dist/spi/runtime/desktop-repository.interface.js.map +1 -0
- package/dist/spi/runtime/desktop-state-accessor.interface.d.ts +22 -0
- package/dist/spi/runtime/desktop-state-accessor.interface.js +2 -0
- package/dist/spi/runtime/desktop-state-accessor.interface.js.map +1 -0
- package/dist/spi/runtime/dispatcher.interface.d.ts +34 -0
- package/dist/spi/runtime/dispatcher.interface.js +10 -0
- package/dist/spi/runtime/dispatcher.interface.js.map +1 -0
- package/dist/spi/runtime/index.d.ts +28 -0
- package/dist/spi/runtime/index.js +11 -0
- package/dist/spi/runtime/index.js.map +1 -0
- package/dist/spi/runtime/kernel.interface.d.ts +221 -0
- package/dist/spi/runtime/kernel.interface.js +7 -0
- package/dist/spi/runtime/kernel.interface.js.map +1 -0
- package/dist/spi/runtime/llm-output-channel.interface.d.ts +81 -0
- package/dist/spi/runtime/llm-output-channel.interface.js +12 -0
- package/dist/spi/runtime/llm-output-channel.interface.js.map +1 -0
- package/dist/spi/runtime/signal.interface.d.ts +80 -0
- package/dist/spi/runtime/signal.interface.js +9 -0
- package/dist/spi/runtime/signal.interface.js.map +1 -0
- package/dist/spi/runtime/snapshot.interface.d.ts +126 -0
- package/dist/spi/runtime/snapshot.interface.js +14 -0
- package/dist/spi/runtime/snapshot.interface.js.map +1 -0
- package/dist/spi/runtime/transformer.interface.d.ts +47 -0
- package/dist/spi/runtime/transformer.interface.js +10 -0
- package/dist/spi/runtime/transformer.interface.js.map +1 -0
- package/dist/spi/runtime/worker-message.interface.d.ts +80 -0
- package/dist/spi/runtime/worker-message.interface.js +49 -0
- package/dist/spi/runtime/worker-message.interface.js.map +1 -0
- package/dist/spi/runtime/worker-runtime.interface.d.ts +177 -0
- package/dist/spi/runtime/worker-runtime.interface.js +14 -0
- package/dist/spi/runtime/worker-runtime.interface.js.map +1 -0
- package/dist/spi/worker-protocol/index.d.ts +26 -0
- package/dist/spi/worker-protocol/index.js +29 -0
- package/dist/spi/worker-protocol/index.js.map +1 -0
- package/dist/spi/worker-protocol/messages.d.ts +257 -0
- package/dist/spi/worker-protocol/messages.js +42 -0
- package/dist/spi/worker-protocol/messages.js.map +1 -0
- package/dist/spi/worker-protocol/types.d.ts +12 -0
- package/dist/spi/worker-protocol/types.js +16 -0
- package/dist/spi/worker-protocol/types.js.map +1 -0
- package/dist/worker-runtime/app-kernel/AppKernel.d.ts +178 -0
- package/dist/worker-runtime/app-kernel/AppKernel.js +622 -0
- package/dist/worker-runtime/app-kernel/AppKernel.js.map +1 -0
- package/dist/worker-runtime/app-kernel/index.d.ts +23 -0
- package/dist/worker-runtime/app-kernel/index.js +23 -0
- package/dist/worker-runtime/app-kernel/index.js.map +1 -0
- package/dist/worker-runtime/app-kernel/view-registry.d.ts +85 -0
- package/dist/worker-runtime/app-kernel/view-registry.js +119 -0
- package/dist/worker-runtime/app-kernel/view-registry.js.map +1 -0
- package/dist/worker-runtime/app-kernel/view-tree.d.ts +222 -0
- package/dist/worker-runtime/app-kernel/view-tree.js +682 -0
- package/dist/worker-runtime/app-kernel/view-tree.js.map +1 -0
- package/dist/worker-runtime/index.d.ts +16 -0
- package/dist/worker-runtime/index.js +731 -0
- package/dist/worker-runtime/index.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operation Log Formatter
|
|
3
|
+
*
|
|
4
|
+
* Generates semantic, human-readable log messages from operation entries.
|
|
5
|
+
* Follows the WHO/WHEN/WHERE/WHAT pattern for clarity.
|
|
6
|
+
*
|
|
7
|
+
* [RFC-008] Operation Execution Optimization
|
|
8
|
+
*
|
|
9
|
+
* @module @aotui/runtime/engine/core
|
|
10
|
+
*/
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Log ID Generator
|
|
13
|
+
// ============================================================================
|
|
14
|
+
let globalLogIdCounter = 0;
|
|
15
|
+
/**
|
|
16
|
+
* Generate a unique log entry ID
|
|
17
|
+
*/
|
|
18
|
+
export function generateLogId() {
|
|
19
|
+
return `oplog_${Date.now()}_${++globalLogIdCounter}`;
|
|
20
|
+
}
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Semantic Description Generator
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Format an operation log entry into a semantic, human-readable string
|
|
26
|
+
*
|
|
27
|
+
* Format: `HH:MM:SS ✅/❌ [Actor] [Location] [Action] (Duration)`
|
|
28
|
+
*
|
|
29
|
+
* @param entry - The log entry to format
|
|
30
|
+
* @returns Formatted log string
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const formatted = formatOperationLog(entry);
|
|
35
|
+
* // "15:32:45 ✅ Gemini in System-Chat/ChatView sent message "Hello..." (12ms)"
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function formatOperationLog(entry) {
|
|
39
|
+
const time = new Date(entry.timestamp).toISOString().slice(11, 19); // HH:MM:SS
|
|
40
|
+
const status = entry.success ? '✅' : '❌';
|
|
41
|
+
const duration = `${entry.durationMs}ms`;
|
|
42
|
+
// Build location string
|
|
43
|
+
let location = '';
|
|
44
|
+
if (entry.appName && entry.viewName) {
|
|
45
|
+
location = `in ${entry.appName}/${entry.viewName}`;
|
|
46
|
+
}
|
|
47
|
+
else if (entry.appName) {
|
|
48
|
+
location = `on ${entry.appName}`;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
location = 'at Desktop level';
|
|
52
|
+
}
|
|
53
|
+
// Generate semantic description based on operation type
|
|
54
|
+
const opName = entry.operationName;
|
|
55
|
+
switch (opName) {
|
|
56
|
+
case 'dismount_view': {
|
|
57
|
+
const targetView = entry.keyArgs.viewId || entry.keyArgs.view_id || 'view';
|
|
58
|
+
const location = entry.appName ? `in ${entry.appName}` : 'at Desktop level';
|
|
59
|
+
return `${time} ${status} ${entry.actor} ${location} dismounted ${targetView} (${duration})`;
|
|
60
|
+
}
|
|
61
|
+
case 'open_app': {
|
|
62
|
+
const appId = entry.keyArgs.appId || 'app';
|
|
63
|
+
if (entry.success) {
|
|
64
|
+
return `${time} ${status} ${entry.actor} opened app ${appId} (${duration})`;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return `${time} ${status} ${entry.actor} failed to open app ${appId}: ${entry.errorMessage} (${duration})`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
case 'close_app': {
|
|
71
|
+
const appId = entry.keyArgs.appId || 'app';
|
|
72
|
+
return `${time} ${status} ${entry.actor} closed app ${appId} (${duration})`;
|
|
73
|
+
}
|
|
74
|
+
case 'send_message': {
|
|
75
|
+
const content = entry.keyArgs.content || entry.keyArgs.message || '';
|
|
76
|
+
const preview = content
|
|
77
|
+
? (content.length > 20 ? `${content.slice(0, 20)}...` : content)
|
|
78
|
+
: '';
|
|
79
|
+
if (entry.success) {
|
|
80
|
+
return `${time} ${status} ${entry.actor} ${location} sent message "${preview}" (${duration})`;
|
|
81
|
+
}
|
|
82
|
+
return `${time} ${status} ${entry.actor} ${location} failed to send message "${preview}": ${entry.errorMessage} (${duration})`;
|
|
83
|
+
}
|
|
84
|
+
default: {
|
|
85
|
+
// Generic format for unknown operations
|
|
86
|
+
const args = Object.entries(entry.keyArgs)
|
|
87
|
+
.slice(0, 3) // Limit to 3 args
|
|
88
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
89
|
+
.join(', ');
|
|
90
|
+
const argsStr = args ? `(${args})` : '';
|
|
91
|
+
if (entry.success) {
|
|
92
|
+
return `${time} ${status} ${entry.actor} ${location} executed ${opName}${argsStr} (${duration})`;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return `${time} ${status} ${entry.actor} ${location} failed ${opName}${argsStr}: ${entry.errorMessage} (${duration})`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Log Entry Builder
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Sanitize operation arguments for logging
|
|
105
|
+
*
|
|
106
|
+
* Removes sensitive data and converts values to strings.
|
|
107
|
+
* Only keeps first 50 chars of string values.
|
|
108
|
+
*/
|
|
109
|
+
function sanitizeArgs(args) {
|
|
110
|
+
const sanitized = {};
|
|
111
|
+
for (const [key, value] of Object.entries(args)) {
|
|
112
|
+
// Skip sensitive-looking keys
|
|
113
|
+
if (key.toLowerCase().includes('password') ||
|
|
114
|
+
key.toLowerCase().includes('token') ||
|
|
115
|
+
key.toLowerCase().includes('secret')) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (typeof value === 'string') {
|
|
119
|
+
sanitized[key] = value.length > 50 ? value.slice(0, 50) + '...' : value;
|
|
120
|
+
}
|
|
121
|
+
else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
122
|
+
sanitized[key] = String(value);
|
|
123
|
+
}
|
|
124
|
+
else if (value === null || value === undefined) {
|
|
125
|
+
// Skip null/undefined
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// For objects/arrays, just note the type
|
|
129
|
+
sanitized[key] = `[${typeof value}]`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return sanitized;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Build a complete OperationLogEntry from execution parameters
|
|
136
|
+
*
|
|
137
|
+
* @param params - Operation execution parameters
|
|
138
|
+
* @returns Complete log entry with semantic description
|
|
139
|
+
*/
|
|
140
|
+
export function buildOperationLogEntry(params) {
|
|
141
|
+
const keyArgs = sanitizeArgs(params.args);
|
|
142
|
+
const entry = {
|
|
143
|
+
id: generateLogId(),
|
|
144
|
+
actor: params.actor,
|
|
145
|
+
timestamp: Date.now(),
|
|
146
|
+
durationMs: params.durationMs,
|
|
147
|
+
desktopId: params.desktopId,
|
|
148
|
+
appId: params.appId,
|
|
149
|
+
appName: params.appName,
|
|
150
|
+
viewId: params.viewId,
|
|
151
|
+
viewName: params.viewName,
|
|
152
|
+
scope: params.scope,
|
|
153
|
+
operationName: params.operationName,
|
|
154
|
+
keyArgs,
|
|
155
|
+
success: params.success,
|
|
156
|
+
errorMessage: params.errorMessage,
|
|
157
|
+
semanticDescription: '' // Will be set below
|
|
158
|
+
};
|
|
159
|
+
// Generate semantic description
|
|
160
|
+
entry.semanticDescription = formatOperationLog(entry);
|
|
161
|
+
return entry;
|
|
162
|
+
}
|
|
163
|
+
// ============================================================================
|
|
164
|
+
// Markdown Formatter for Snapshot
|
|
165
|
+
// ============================================================================
|
|
166
|
+
/**
|
|
167
|
+
* Format operation logs as Markdown list for snapshot inclusion
|
|
168
|
+
*
|
|
169
|
+
* @param logs - Array of log entries
|
|
170
|
+
* @returns Markdown formatted string
|
|
171
|
+
*/
|
|
172
|
+
export function formatLogsAsMarkdown(logs) {
|
|
173
|
+
if (logs.length === 0) {
|
|
174
|
+
return '';
|
|
175
|
+
}
|
|
176
|
+
return logs
|
|
177
|
+
.map(log => `- ${log.semanticDescription}`)
|
|
178
|
+
.join('\n');
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=operation-log-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-log-formatter.js","sourceRoot":"","sources":["../../../src/engine/core/operation-log-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IDesktopLockService, LockInfo, DesktopID } from '../../../spi/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* 内存锁服务实现
|
|
4
|
+
*
|
|
5
|
+
* 职责: 管理 Desktop 互斥锁。
|
|
6
|
+
*
|
|
7
|
+
* 特性:
|
|
8
|
+
* - 纯内存存储 (Map)
|
|
9
|
+
* - 支持重入
|
|
10
|
+
* - 自动过期检查
|
|
11
|
+
* - 允许过期接管
|
|
12
|
+
*
|
|
13
|
+
* 可替换为分布式锁实现 (如 RedisLockService)
|
|
14
|
+
*/
|
|
15
|
+
export declare class InMemoryLockService implements IDesktopLockService {
|
|
16
|
+
private desktopExists;
|
|
17
|
+
private locks;
|
|
18
|
+
private readonly ttlMs;
|
|
19
|
+
constructor(desktopExists: (id: DesktopID) => boolean, options?: {
|
|
20
|
+
ttlMs?: number;
|
|
21
|
+
});
|
|
22
|
+
acquireLock(desktopId: DesktopID, ownerId: string): void;
|
|
23
|
+
releaseLock(desktopId: DesktopID, ownerId: string): void;
|
|
24
|
+
verifyLock(desktopId: DesktopID, ownerId: string): boolean;
|
|
25
|
+
refreshLock(desktopId: DesktopID, ownerId: string): void;
|
|
26
|
+
getLockInfo(desktopId: DesktopID): LockInfo | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* [Internal] 清理指定 Desktop 的锁
|
|
29
|
+
* 当 Desktop 被销毁时调用
|
|
30
|
+
*/
|
|
31
|
+
clearLock(desktopId: DesktopID): void;
|
|
32
|
+
private isLockValid;
|
|
33
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { AOTUIError } from '../../../spi/core/errors.js';
|
|
2
|
+
import { LOCK_DEFAULTS } from '../../../spi/config/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* 内存锁服务实现
|
|
5
|
+
*
|
|
6
|
+
* 职责: 管理 Desktop 互斥锁。
|
|
7
|
+
*
|
|
8
|
+
* 特性:
|
|
9
|
+
* - 纯内存存储 (Map)
|
|
10
|
+
* - 支持重入
|
|
11
|
+
* - 自动过期检查
|
|
12
|
+
* - 允许过期接管
|
|
13
|
+
*
|
|
14
|
+
* 可替换为分布式锁实现 (如 RedisLockService)
|
|
15
|
+
*/
|
|
16
|
+
export class InMemoryLockService {
|
|
17
|
+
desktopExists;
|
|
18
|
+
locks = new Map();
|
|
19
|
+
ttlMs;
|
|
20
|
+
constructor(
|
|
21
|
+
// 依赖注入: 检查 Desktop 是否存在
|
|
22
|
+
desktopExists, options) {
|
|
23
|
+
this.desktopExists = desktopExists;
|
|
24
|
+
this.ttlMs = options?.ttlMs ?? LOCK_DEFAULTS.ttlMs;
|
|
25
|
+
}
|
|
26
|
+
acquireLock(desktopId, ownerId) {
|
|
27
|
+
if (!this.desktopExists(desktopId)) {
|
|
28
|
+
throw new AOTUIError('DESKTOP_NOT_FOUND', { desktopId });
|
|
29
|
+
}
|
|
30
|
+
const lock = this.locks.get(desktopId);
|
|
31
|
+
if (lock) {
|
|
32
|
+
// 1. 检查是否过期
|
|
33
|
+
if (!this.isLockValid(lock)) {
|
|
34
|
+
// Lock expired, allowing takeover
|
|
35
|
+
// [Strategy] Silent takeover (Last Writer Wins)
|
|
36
|
+
this.locks.set(desktopId, { ownerId, timestamp: Date.now() });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// 2. 检查所有者
|
|
40
|
+
if (lock.ownerId !== ownerId) {
|
|
41
|
+
// 有效锁被他人持有 -> 拒绝
|
|
42
|
+
throw new AOTUIError('DESKTOP_LOCKED', {
|
|
43
|
+
desktopId,
|
|
44
|
+
ownerId: lock.ownerId,
|
|
45
|
+
claimant: ownerId,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// 3. 重入: 刷新时间戳
|
|
49
|
+
lock.timestamp = Date.now();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// 4. 新锁
|
|
53
|
+
this.locks.set(desktopId, { ownerId, timestamp: Date.now() });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
releaseLock(desktopId, ownerId) {
|
|
57
|
+
const lock = this.locks.get(desktopId);
|
|
58
|
+
// 仅 Owner 可释放
|
|
59
|
+
if (lock && lock.ownerId === ownerId) {
|
|
60
|
+
this.locks.delete(desktopId);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
verifyLock(desktopId, ownerId) {
|
|
64
|
+
const lock = this.locks.get(desktopId);
|
|
65
|
+
if (!lock)
|
|
66
|
+
return false;
|
|
67
|
+
if (!this.isLockValid(lock))
|
|
68
|
+
return false;
|
|
69
|
+
return lock.ownerId === ownerId;
|
|
70
|
+
}
|
|
71
|
+
refreshLock(desktopId, ownerId) {
|
|
72
|
+
const lock = this.locks.get(desktopId);
|
|
73
|
+
// 仅 Owner 可刷新
|
|
74
|
+
if (lock && lock.ownerId === ownerId) {
|
|
75
|
+
lock.timestamp = Date.now();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
getLockInfo(desktopId) {
|
|
79
|
+
const lock = this.locks.get(desktopId);
|
|
80
|
+
if (!lock)
|
|
81
|
+
return undefined;
|
|
82
|
+
return {
|
|
83
|
+
ownerId: lock.ownerId,
|
|
84
|
+
acquiredAt: lock.timestamp,
|
|
85
|
+
valid: this.isLockValid(lock)
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* [Internal] 清理指定 Desktop 的锁
|
|
90
|
+
* 当 Desktop 被销毁时调用
|
|
91
|
+
*/
|
|
92
|
+
clearLock(desktopId) {
|
|
93
|
+
this.locks.delete(desktopId);
|
|
94
|
+
}
|
|
95
|
+
isLockValid(lock) {
|
|
96
|
+
return Date.now() - lock.timestamp < this.ttlMs;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=lock.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.service.js","sourceRoot":"","sources":["../../../../src/engine/core/services/lock.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SignalBus - Desktop 信号发布订阅
|
|
3
|
+
*
|
|
4
|
+
* [H1 拆分] 从 Desktop 提取的信号管理模块。
|
|
5
|
+
*
|
|
6
|
+
* 职责:
|
|
7
|
+
* - 管理 UpdateSignal 订阅者
|
|
8
|
+
* - 发布信号到订阅者
|
|
9
|
+
* - 管理 MutationObserver 并触发 dom_mutation 信号
|
|
10
|
+
*/
|
|
11
|
+
import type { DesktopID, UpdateSignal } from '../../spi/index.js';
|
|
12
|
+
export type SignalListener = (signal: UpdateSignal) => void;
|
|
13
|
+
/**
|
|
14
|
+
* SignalBus 配置
|
|
15
|
+
*/
|
|
16
|
+
export interface SignalBusOptions {
|
|
17
|
+
/** 是否在 emit 时 catch 异常,默认 true */
|
|
18
|
+
catchErrors?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* SignalBus - 统一管理所有 Desktop 的信号发布订阅
|
|
22
|
+
*/
|
|
23
|
+
export declare class SignalBus {
|
|
24
|
+
private states;
|
|
25
|
+
private options;
|
|
26
|
+
constructor(options?: SignalBusOptions);
|
|
27
|
+
/**
|
|
28
|
+
* 订阅指定 Desktop 的信号
|
|
29
|
+
*
|
|
30
|
+
* @param desktopId Desktop ID
|
|
31
|
+
* @param listener 信号处理函数
|
|
32
|
+
* @returns 取消订阅的函数
|
|
33
|
+
*/
|
|
34
|
+
subscribe(desktopId: DesktopID, listener: SignalListener): () => void;
|
|
35
|
+
/**
|
|
36
|
+
* 取消订阅
|
|
37
|
+
*/
|
|
38
|
+
unsubscribe(desktopId: DesktopID, listener: SignalListener): void;
|
|
39
|
+
/**
|
|
40
|
+
* 发布信号到指定 Desktop 的所有订阅者
|
|
41
|
+
*/
|
|
42
|
+
emit(desktopId: DesktopID, signal: UpdateSignal): void;
|
|
43
|
+
/**
|
|
44
|
+
* 便捷方法:发布带原因的信号
|
|
45
|
+
*/
|
|
46
|
+
emitSignal(desktopId: DesktopID, reason: UpdateSignal['reason']): void;
|
|
47
|
+
/**
|
|
48
|
+
* 绑定 MutationObserver 到 Document
|
|
49
|
+
*
|
|
50
|
+
* 当 DOM 变化时自动发布 'dom_mutation' 信号
|
|
51
|
+
*
|
|
52
|
+
* @param desktopId Desktop ID
|
|
53
|
+
* @param window linkedom window 对象
|
|
54
|
+
*/
|
|
55
|
+
observeDOM(desktopId: DesktopID, window: any): void;
|
|
56
|
+
/**
|
|
57
|
+
* 停止观察 DOM
|
|
58
|
+
*/
|
|
59
|
+
stopObserving(desktopId: DesktopID): void;
|
|
60
|
+
/**
|
|
61
|
+
* 清理指定 Desktop 的所有状态
|
|
62
|
+
*/
|
|
63
|
+
cleanup(desktopId: DesktopID): void;
|
|
64
|
+
/**
|
|
65
|
+
* 获取订阅者数量(用于调试)
|
|
66
|
+
*/
|
|
67
|
+
getListenerCount(desktopId: DesktopID): number;
|
|
68
|
+
private getOrCreateState;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* SignalOutputStream 兼容接口
|
|
72
|
+
*
|
|
73
|
+
* 用于保持 Desktop.output 的 API 兼容
|
|
74
|
+
*/
|
|
75
|
+
export interface SignalOutputStream {
|
|
76
|
+
subscribe(listener: SignalListener): void;
|
|
77
|
+
unsubscribe(listener: SignalListener): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 创建 SignalOutputStream 适配器
|
|
81
|
+
*
|
|
82
|
+
* 将 SignalBus 的 per-desktop subscribe 适配为原有 API
|
|
83
|
+
*/
|
|
84
|
+
export declare function createSignalOutputStream(bus: SignalBus, desktopId: DesktopID): SignalOutputStream;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SignalBus - Desktop 信号发布订阅
|
|
3
|
+
*
|
|
4
|
+
* [H1 拆分] 从 Desktop 提取的信号管理模块。
|
|
5
|
+
*
|
|
6
|
+
* 职责:
|
|
7
|
+
* - 管理 UpdateSignal 订阅者
|
|
8
|
+
* - 发布信号到订阅者
|
|
9
|
+
* - 管理 MutationObserver 并触发 dom_mutation 信号
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* SignalBus - 统一管理所有 Desktop 的信号发布订阅
|
|
13
|
+
*/
|
|
14
|
+
export class SignalBus {
|
|
15
|
+
states = new Map();
|
|
16
|
+
options;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = {
|
|
19
|
+
catchErrors: options?.catchErrors ?? true
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 订阅指定 Desktop 的信号
|
|
24
|
+
*
|
|
25
|
+
* @param desktopId Desktop ID
|
|
26
|
+
* @param listener 信号处理函数
|
|
27
|
+
* @returns 取消订阅的函数
|
|
28
|
+
*/
|
|
29
|
+
subscribe(desktopId, listener) {
|
|
30
|
+
const state = this.getOrCreateState(desktopId);
|
|
31
|
+
state.listeners.add(listener);
|
|
32
|
+
return () => {
|
|
33
|
+
state.listeners.delete(listener);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 取消订阅
|
|
38
|
+
*/
|
|
39
|
+
unsubscribe(desktopId, listener) {
|
|
40
|
+
const state = this.states.get(desktopId);
|
|
41
|
+
if (state) {
|
|
42
|
+
state.listeners.delete(listener);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 发布信号到指定 Desktop 的所有订阅者
|
|
47
|
+
*/
|
|
48
|
+
emit(desktopId, signal) {
|
|
49
|
+
const state = this.states.get(desktopId);
|
|
50
|
+
if (!state)
|
|
51
|
+
return;
|
|
52
|
+
state.listeners.forEach(listener => {
|
|
53
|
+
if (this.options.catchErrors) {
|
|
54
|
+
try {
|
|
55
|
+
listener(signal);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
console.error('[SignalBus] Error in signal listener:', e);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
listener(signal);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 便捷方法:发布带原因的信号
|
|
68
|
+
*/
|
|
69
|
+
emitSignal(desktopId, reason) {
|
|
70
|
+
this.emit(desktopId, {
|
|
71
|
+
desktopId,
|
|
72
|
+
timestamp: Date.now(),
|
|
73
|
+
reason
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 绑定 MutationObserver 到 Document
|
|
78
|
+
*
|
|
79
|
+
* 当 DOM 变化时自动发布 'dom_mutation' 信号
|
|
80
|
+
*
|
|
81
|
+
* @param desktopId Desktop ID
|
|
82
|
+
* @param window linkedom window 对象
|
|
83
|
+
*/
|
|
84
|
+
observeDOM(desktopId, window) {
|
|
85
|
+
const state = this.getOrCreateState(desktopId);
|
|
86
|
+
// 如果已有 observer,先停止
|
|
87
|
+
if (state.observer) {
|
|
88
|
+
state.observer.disconnect();
|
|
89
|
+
}
|
|
90
|
+
// [Worker-Only Fix] LinkedOM 可能没有 MutationObserver,跳过
|
|
91
|
+
const MutationObserver = window?.MutationObserver;
|
|
92
|
+
if (!MutationObserver) {
|
|
93
|
+
console.log(`[SignalBus] MutationObserver not available for desktop ${desktopId}, skipping DOM observation`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// 创建新的 MutationObserver
|
|
97
|
+
const observer = new MutationObserver(() => {
|
|
98
|
+
this.emit(desktopId, {
|
|
99
|
+
desktopId,
|
|
100
|
+
timestamp: Date.now(),
|
|
101
|
+
reason: 'dom_mutation'
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
state.observer = observer;
|
|
105
|
+
// 开始观察
|
|
106
|
+
observer.observe(window.document.body, {
|
|
107
|
+
childList: true,
|
|
108
|
+
subtree: true,
|
|
109
|
+
attributes: true,
|
|
110
|
+
characterData: true
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 停止观察 DOM
|
|
115
|
+
*/
|
|
116
|
+
stopObserving(desktopId) {
|
|
117
|
+
const state = this.states.get(desktopId);
|
|
118
|
+
if (state?.observer) {
|
|
119
|
+
state.observer.disconnect();
|
|
120
|
+
state.observer = null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 清理指定 Desktop 的所有状态
|
|
125
|
+
*/
|
|
126
|
+
cleanup(desktopId) {
|
|
127
|
+
this.stopObserving(desktopId);
|
|
128
|
+
this.states.delete(desktopId);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 获取订阅者数量(用于调试)
|
|
132
|
+
*/
|
|
133
|
+
getListenerCount(desktopId) {
|
|
134
|
+
return this.states.get(desktopId)?.listeners.size ?? 0;
|
|
135
|
+
}
|
|
136
|
+
// ---- 私有方法 ----
|
|
137
|
+
getOrCreateState(desktopId) {
|
|
138
|
+
let state = this.states.get(desktopId);
|
|
139
|
+
if (!state) {
|
|
140
|
+
state = {
|
|
141
|
+
listeners: new Set(),
|
|
142
|
+
observer: null
|
|
143
|
+
};
|
|
144
|
+
this.states.set(desktopId, state);
|
|
145
|
+
}
|
|
146
|
+
return state;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 创建 SignalOutputStream 适配器
|
|
151
|
+
*
|
|
152
|
+
* 将 SignalBus 的 per-desktop subscribe 适配为原有 API
|
|
153
|
+
*/
|
|
154
|
+
export function createSignalOutputStream(bus, desktopId) {
|
|
155
|
+
return {
|
|
156
|
+
subscribe: (listener) => { bus.subscribe(desktopId, listener); },
|
|
157
|
+
unsubscribe: (listener) => { bus.unsubscribe(desktopId, listener); }
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=signal-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-bus.js","sourceRoot":"","sources":["../../../src/engine/core/signal-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine Layer - Signal Bus Adapter
|
|
3
|
+
*
|
|
4
|
+
* [Option B] ISignalService 的实现。
|
|
5
|
+
*
|
|
6
|
+
* 将现有 SignalBus 适配为 ISignalService 接口,
|
|
7
|
+
* 实现 Desktop 解耦。
|
|
8
|
+
*
|
|
9
|
+
* @module @aotui/runtime/engine/core
|
|
10
|
+
*/
|
|
11
|
+
import type { ISignalService, SignalListener, DesktopID } from '../../spi/index.js';
|
|
12
|
+
import { SignalBus } from './signal-bus.js';
|
|
13
|
+
/**
|
|
14
|
+
* Signal Service 实现
|
|
15
|
+
*
|
|
16
|
+
* 基于现有 SignalBus 实现 ISignalService 接口。
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const signalService = new SignalServiceImpl();
|
|
21
|
+
*
|
|
22
|
+
* const unsubscribe = signalService.subscribe(desktopId, (signal) => {
|
|
23
|
+
* console.log('Signal:', signal.reason);
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* signalService.emit(desktopId, 'dom_mutation');
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare class SignalServiceImpl implements ISignalService {
|
|
30
|
+
/** 内部 SignalBus 实例 */
|
|
31
|
+
private bus;
|
|
32
|
+
constructor(bus?: SignalBus);
|
|
33
|
+
subscribe(desktopId: DesktopID, listener: SignalListener): () => void;
|
|
34
|
+
emit(desktopId: DesktopID, reason: string): void;
|
|
35
|
+
cleanup(desktopId: DesktopID): void;
|
|
36
|
+
/**
|
|
37
|
+
* 获取底层 SignalBus
|
|
38
|
+
*
|
|
39
|
+
* 用于需要直接访问 SignalBus 的场景 (如 Desktop.output)
|
|
40
|
+
*/
|
|
41
|
+
getBus(): SignalBus;
|
|
42
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine Layer - Signal Bus Adapter
|
|
3
|
+
*
|
|
4
|
+
* [Option B] ISignalService 的实现。
|
|
5
|
+
*
|
|
6
|
+
* 将现有 SignalBus 适配为 ISignalService 接口,
|
|
7
|
+
* 实现 Desktop 解耦。
|
|
8
|
+
*
|
|
9
|
+
* @module @aotui/runtime/engine/core
|
|
10
|
+
*/
|
|
11
|
+
import { SignalBus } from './signal-bus.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Signal Service Implementation
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Signal Service 实现
|
|
17
|
+
*
|
|
18
|
+
* 基于现有 SignalBus 实现 ISignalService 接口。
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const signalService = new SignalServiceImpl();
|
|
23
|
+
*
|
|
24
|
+
* const unsubscribe = signalService.subscribe(desktopId, (signal) => {
|
|
25
|
+
* console.log('Signal:', signal.reason);
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* signalService.emit(desktopId, 'dom_mutation');
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class SignalServiceImpl {
|
|
32
|
+
/** 内部 SignalBus 实例 */
|
|
33
|
+
bus;
|
|
34
|
+
constructor(bus) {
|
|
35
|
+
this.bus = bus ?? new SignalBus();
|
|
36
|
+
}
|
|
37
|
+
subscribe(desktopId, listener) {
|
|
38
|
+
return this.bus.subscribe(desktopId, listener);
|
|
39
|
+
}
|
|
40
|
+
emit(desktopId, reason) {
|
|
41
|
+
this.bus.emitSignal(desktopId, reason);
|
|
42
|
+
}
|
|
43
|
+
cleanup(desktopId) {
|
|
44
|
+
this.bus.cleanup(desktopId);
|
|
45
|
+
}
|
|
46
|
+
// ─────────────────────────────────────────────────────────────
|
|
47
|
+
// Additional Methods (for compatibility)
|
|
48
|
+
// ─────────────────────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* 获取底层 SignalBus
|
|
51
|
+
*
|
|
52
|
+
* 用于需要直接访问 SignalBus 的场景 (如 Desktop.output)
|
|
53
|
+
*/
|
|
54
|
+
getBus() {
|
|
55
|
+
return this.bus;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=signal-service.js.map
|