@dxos/app-framework 0.8.4-main.b97322e → 0.8.4-main.bc674ce
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/.storybook/main.mts +11 -0
- package/.storybook/preview.mts +8 -0
- package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
- package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +149 -0
- package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +7 -0
- package/dist/lib/browser/capability-7PCNSWBT.mjs +33 -0
- package/dist/lib/browser/capability-7PCNSWBT.mjs.map +7 -0
- package/dist/lib/browser/capability-KP3PFEXD.mjs +31 -0
- package/dist/lib/browser/capability-KP3PFEXD.mjs.map +7 -0
- package/dist/lib/browser/chunk-6Y7PZV72.mjs +77 -0
- package/dist/lib/browser/chunk-6Y7PZV72.mjs.map +7 -0
- package/dist/lib/browser/chunk-7IQHKD4U.mjs +170 -0
- package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +7 -0
- package/dist/lib/browser/chunk-BLQJSGL3.mjs +732 -0
- package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +7 -0
- package/dist/lib/browser/chunk-FHQTHCX7.mjs +8 -0
- package/dist/lib/browser/chunk-FHQTHCX7.mjs.map +7 -0
- package/dist/lib/browser/chunk-FMZN33N4.mjs +807 -0
- package/dist/lib/browser/chunk-FMZN33N4.mjs.map +7 -0
- package/dist/lib/browser/chunk-H4WPA7U7.mjs +77 -0
- package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-PKQT6C53.mjs +47 -0
- package/dist/lib/browser/chunk-PKQT6C53.mjs.map +7 -0
- package/dist/lib/browser/chunk-TCLLRCS3.mjs +145 -0
- package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +7 -0
- package/dist/lib/browser/chunk-XYNO72GQ.mjs +746 -0
- package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +7 -0
- package/dist/lib/browser/common/index.mjs +38 -0
- package/dist/lib/browser/core/activation-event.mjs +20 -0
- package/dist/lib/browser/core/capability.mjs +28 -0
- package/dist/lib/browser/core/plugin-manager.mjs +15 -0
- package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/browser/core/plugin.mjs +27 -0
- package/dist/lib/browser/core/plugin.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +165 -139
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs +32 -0
- package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +64 -0
- package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +7 -0
- package/dist/lib/browser/react/index.mjs +46 -0
- package/dist/lib/browser/react/index.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +79 -37
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +150 -0
- package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +7 -0
- package/dist/lib/node-esm/capability-CFLQ2QQU.mjs +34 -0
- package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +7 -0
- package/dist/lib/node-esm/capability-RCUNM2M7.mjs +32 -0
- package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-663A54LQ.mjs +171 -0
- package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6WXBT3EC.mjs +747 -0
- package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7OWSHPYK.mjs +48 -0
- package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +733 -0
- package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GT6OKM5I.mjs +146 -0
- package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-STMXUEPO.mjs +78 -0
- package/dist/lib/node-esm/chunk-STMXUEPO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-UEWJDI2L.mjs +10 -0
- package/dist/lib/node-esm/chunk-UEWJDI2L.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +78 -0
- package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XYQTBFPA.mjs +808 -0
- package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +7 -0
- package/dist/lib/node-esm/common/index.mjs +39 -0
- package/dist/lib/node-esm/common/index.mjs.map +7 -0
- package/dist/lib/node-esm/core/activation-event.mjs +21 -0
- package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
- package/dist/lib/node-esm/core/capability.mjs +29 -0
- package/dist/lib/node-esm/core/capability.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs +16 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin.mjs +28 -0
- package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +165 -139
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs +33 -0
- package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +65 -0
- package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +7 -0
- package/dist/lib/node-esm/react/index.mjs +47 -0
- package/dist/lib/node-esm/react/index.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +79 -37
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/cli.d.ts +39 -0
- package/dist/types/src/cli.d.ts.map +1 -0
- package/dist/types/src/common/activation-event.d.ts +66 -0
- package/dist/types/src/common/activation-event.d.ts.map +1 -0
- package/dist/types/src/common/capability.d.ts +265 -0
- package/dist/types/src/common/capability.d.ts.map +1 -0
- package/dist/types/src/common/collaboration.d.ts +24 -17
- package/dist/types/src/common/collaboration.d.ts.map +1 -1
- package/dist/types/src/common/file.d.ts +1 -1
- package/dist/types/src/common/file.d.ts.map +1 -1
- package/dist/types/src/common/graph.d.ts +2 -2
- package/dist/types/src/common/graph.d.ts.map +1 -1
- package/dist/types/src/common/index.d.ts +5 -4
- package/dist/types/src/common/index.d.ts.map +1 -1
- package/dist/types/src/common/operations.d.ts +380 -0
- package/dist/types/src/common/operations.d.ts.map +1 -0
- package/dist/types/src/common/plugin.d.ts +201 -0
- package/dist/types/src/common/plugin.d.ts.map +1 -0
- package/dist/types/src/common/surface.d.ts +50 -21
- package/dist/types/src/common/surface.d.ts.map +1 -1
- package/dist/types/src/common/translations.d.ts +10 -1
- package/dist/types/src/common/translations.d.ts.map +1 -1
- package/dist/types/src/context.d.ts +5 -0
- package/dist/types/src/context.d.ts.map +1 -0
- package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +6 -6
- package/dist/types/src/core/activation-event.d.ts.map +1 -0
- package/dist/types/src/core/capability-manager.d.ts +43 -0
- package/dist/types/src/core/capability-manager.d.ts.map +1 -0
- package/dist/types/src/core/capability-manager.test.d.ts +2 -0
- package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
- package/dist/types/src/core/capability.d.ts +150 -0
- package/dist/types/src/core/capability.d.ts.map +1 -0
- package/dist/types/src/core/index.d.ts +5 -4
- package/dist/types/src/core/index.d.ts.map +1 -1
- package/dist/types/src/core/plugin-manager.d.ts +66 -0
- package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
- package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
- package/dist/types/src/core/plugin.d.ts +97 -32
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +5 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/playground/debug/Debug.d.ts +4 -2
- package/dist/types/src/playground/debug/Debug.d.ts.map +1 -1
- package/dist/types/src/playground/debug/plugin.d.ts +2 -1
- package/dist/types/src/playground/debug/plugin.d.ts.map +1 -1
- package/dist/types/src/playground/generator/Main.d.ts +4 -2
- package/dist/types/src/playground/generator/Main.d.ts.map +1 -1
- package/dist/types/src/playground/generator/Toolbar.d.ts +4 -2
- package/dist/types/src/playground/generator/Toolbar.d.ts.map +1 -1
- package/dist/types/src/playground/generator/generator.d.ts +17 -5
- package/dist/types/src/playground/generator/generator.d.ts.map +1 -1
- package/dist/types/src/playground/generator/plugin.d.ts +2 -1
- package/dist/types/src/playground/generator/plugin.d.ts.map +1 -1
- package/dist/types/src/playground/layout/Layout.d.ts +4 -2
- package/dist/types/src/playground/layout/Layout.d.ts.map +1 -1
- package/dist/types/src/playground/layout/plugin.d.ts +2 -1
- package/dist/types/src/playground/layout/plugin.d.ts.map +1 -1
- package/dist/types/src/playground/logger/Toolbar.d.ts +4 -2
- package/dist/types/src/playground/logger/Toolbar.d.ts.map +1 -1
- package/dist/types/src/playground/logger/plugin.d.ts +2 -1
- package/dist/types/src/playground/logger/plugin.d.ts.map +1 -1
- package/dist/types/src/playground/logger/schema.d.ts +15 -1
- package/dist/types/src/playground/logger/schema.d.ts.map +1 -1
- package/dist/types/src/playground/playground.stories.d.ts +5 -4
- package/dist/types/src/playground/playground.stories.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
- package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/errors.d.ts +5 -0
- package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
- package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
- package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +93 -0
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/index.d.ts +3 -0
- package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
- package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/meta.d.ts +3 -0
- package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/testing.d.ts +109 -0
- package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
- package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/index.d.ts +2 -0
- package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
- package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +2 -1
- package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +1 -1
- package/dist/types/src/plugin-settings/actions.d.ts +41 -7
- package/dist/types/src/plugin-settings/actions.d.ts.map +1 -1
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts +4 -2
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/plugin-settings/meta.d.ts +3 -0
- package/dist/types/src/plugin-settings/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-settings/operation-resolver.d.ts +6 -0
- package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/plugin-settings/translations.d.ts +2 -1
- package/dist/types/src/plugin-settings/translations.d.ts.map +1 -1
- package/dist/types/src/react/App.d.ts +8 -0
- package/dist/types/src/react/App.d.ts.map +1 -0
- package/dist/types/src/react/App.stories.d.ts +14 -0
- package/dist/types/src/react/App.stories.d.ts.map +1 -0
- package/dist/types/src/react/DefaultFallback.d.ts +8 -0
- package/dist/types/src/react/DefaultFallback.d.ts.map +1 -0
- package/dist/types/src/react/ErrorBoundary.d.ts +13 -14
- package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -1
- package/dist/types/src/react/PluginManagerContext.stories.d.ts +13 -0
- package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +1 -0
- package/dist/types/src/react/PluginManagerProvider.d.ts +2 -2
- package/dist/types/src/react/PluginManagerProvider.d.ts.map +1 -1
- package/dist/types/src/react/Surface.d.ts +9 -7
- package/dist/types/src/react/Surface.d.ts.map +1 -1
- package/dist/types/src/react/Surface.stories.d.ts +8 -10
- package/dist/types/src/react/Surface.stories.d.ts.map +1 -1
- package/dist/types/src/react/SurfaceInfo.d.ts +11 -0
- package/dist/types/src/react/SurfaceInfo.d.ts.map +1 -0
- package/dist/types/src/react/common.d.ts +13 -12
- package/dist/types/src/react/common.d.ts.map +1 -1
- package/dist/types/src/react/index.d.ts +3 -1
- package/dist/types/src/react/index.d.ts.map +1 -1
- package/dist/types/src/react/types.d.ts +12 -0
- package/dist/types/src/react/types.d.ts.map +1 -0
- package/dist/types/src/{App.d.ts → react/useApp.d.ts} +11 -9
- package/dist/types/src/react/useApp.d.ts.map +1 -0
- package/dist/types/src/react/useCapabilities.d.ts +16 -3
- package/dist/types/src/react/useCapabilities.d.ts.map +1 -1
- package/dist/types/src/react/useLoading.d.ts +18 -0
- package/dist/types/src/react/useLoading.d.ts.map +1 -0
- package/dist/types/src/react/useOperationResolver.d.ts +19 -0
- package/dist/types/src/react/useOperationResolver.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/service.d.ts +8 -0
- package/dist/types/src/testing/service.d.ts.map +1 -0
- package/dist/types/src/testing/withPluginManager.d.ts +11 -10
- package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.stories.d.ts +9 -3
- package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/moon.yml +10 -2
- package/package.json +103 -42
- package/src/cli.ts +107 -0
- package/src/common/activation-event.ts +99 -0
- package/src/common/capability.ts +343 -0
- package/src/common/collaboration.ts +24 -14
- package/src/common/file.ts +1 -1
- package/src/common/graph.ts +2 -2
- package/src/common/index.ts +5 -4
- package/src/common/operations.ts +412 -0
- package/src/common/plugin.ts +364 -0
- package/src/common/surface.ts +60 -26
- package/src/common/translations.ts +21 -1
- package/src/context.ts +9 -0
- package/src/core/{events.ts → activation-event.ts} +5 -5
- package/src/core/capability-manager.test.ts +151 -0
- package/src/core/capability-manager.ts +171 -0
- package/src/core/capability.ts +236 -0
- package/src/core/index.ts +5 -4
- package/src/core/plugin-manager.test.ts +845 -0
- package/src/core/plugin-manager.ts +696 -0
- package/src/core/plugin.ts +229 -36
- package/src/helpers.test.ts +1 -1
- package/src/index.ts +5 -4
- package/src/playground/debug/Debug.tsx +27 -17
- package/src/playground/debug/plugin.ts +10 -11
- package/src/playground/generator/Main.tsx +20 -11
- package/src/playground/generator/Toolbar.tsx +27 -16
- package/src/playground/generator/generator.ts +28 -28
- package/src/playground/generator/plugin.ts +15 -17
- package/src/playground/layout/Layout.tsx +11 -7
- package/src/playground/layout/plugin.ts +12 -11
- package/src/playground/logger/Toolbar.tsx +20 -16
- package/src/playground/logger/plugin.ts +33 -27
- package/src/playground/logger/schema.ts +11 -1
- package/src/playground/playground.stories.tsx +29 -17
- package/src/plugin-operation/OperationPlugin.ts +25 -0
- package/src/plugin-operation/history/capability.ts +37 -0
- package/src/plugin-operation/history/errors.ts +11 -0
- package/src/plugin-operation/history/history-tracker.test.ts +380 -0
- package/src/plugin-operation/history/history-tracker.ts +129 -0
- package/src/plugin-operation/history/index.ts +9 -0
- package/src/plugin-operation/history/types.ts +17 -0
- package/src/plugin-operation/history/undo-mapping.ts +132 -0
- package/src/plugin-operation/history/undo-registry.test.ts +73 -0
- package/src/plugin-operation/history/undo-registry.ts +54 -0
- package/src/plugin-operation/index.ts +6 -0
- package/src/plugin-operation/invoker-capability.ts +40 -0
- package/src/plugin-operation/meta.ts +11 -0
- package/src/plugin-operation/testing.ts +174 -0
- package/src/plugin-runtime/RuntimePlugin.ts +20 -0
- package/src/plugin-runtime/capability.ts +53 -0
- package/src/plugin-runtime/index.ts +5 -0
- package/src/plugin-runtime/meta.ts +11 -0
- package/src/plugin-settings/SettingsPlugin.ts +13 -29
- package/src/plugin-settings/actions.ts +45 -10
- package/src/plugin-settings/app-graph-builder.ts +124 -141
- package/src/plugin-settings/meta.ts +10 -0
- package/src/plugin-settings/operation-resolver.ts +55 -0
- package/src/plugin-settings/translations.ts +4 -4
- package/src/react/App.stories.tsx +63 -0
- package/src/react/App.tsx +60 -0
- package/src/react/DefaultFallback.tsx +26 -0
- package/src/react/ErrorBoundary.tsx +26 -15
- package/src/react/PluginManagerContext.stories.tsx +184 -0
- package/src/react/PluginManagerProvider.ts +2 -2
- package/src/react/Surface.stories.tsx +103 -58
- package/src/react/Surface.tsx +236 -46
- package/src/react/SurfaceInfo.tsx +107 -0
- package/src/react/common.ts +30 -5
- package/src/react/index.ts +5 -1
- package/src/react/types.ts +27 -0
- package/src/react/useApp.tsx +209 -0
- package/src/react/useCapabilities.ts +38 -5
- package/src/react/useLoading.tsx +68 -0
- package/src/react/useOperationResolver.ts +40 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/service.ts +52 -0
- package/src/testing/withPluginManager.stories.tsx +14 -10
- package/src/testing/withPluginManager.tsx +43 -44
- package/tsconfig.json +27 -16
- package/vitest.config.ts +8 -6
- package/.swc/plugins/v7_linux_x86_64_13.0.0/f45bdff002284d9e8f9ef3f0be909de12da36c049cbcf261ac78fc00abb09a2d +0 -0
- package/.swc/plugins/v7_linux_x86_64_13.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429 +0 -0
- package/dist/lib/browser/app-graph-builder-LYF7EKNN.mjs +0 -137
- package/dist/lib/browser/app-graph-builder-LYF7EKNN.mjs.map +0 -7
- package/dist/lib/browser/chunk-FMN65HSW.mjs +0 -1519
- package/dist/lib/browser/chunk-FMN65HSW.mjs.map +0 -7
- package/dist/lib/browser/chunk-FO2PH7M3.mjs +0 -415
- package/dist/lib/browser/chunk-FO2PH7M3.mjs.map +0 -7
- package/dist/lib/browser/chunk-ORWHM7CO.mjs +0 -32
- package/dist/lib/browser/chunk-ORWHM7CO.mjs.map +0 -7
- package/dist/lib/browser/intent-dispatcher-LSYQZSEB.mjs +0 -11
- package/dist/lib/browser/intent-resolver-ZTNOSO3A.mjs +0 -39
- package/dist/lib/browser/intent-resolver-ZTNOSO3A.mjs.map +0 -7
- package/dist/lib/browser/store-KML2R4IE.mjs +0 -30
- package/dist/lib/browser/store-KML2R4IE.mjs.map +0 -7
- package/dist/lib/browser/worker.mjs +0 -79
- package/dist/lib/node-esm/app-graph-builder-SAOWGJDK.mjs +0 -138
- package/dist/lib/node-esm/app-graph-builder-SAOWGJDK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-73HGSHKE.mjs +0 -416
- package/dist/lib/node-esm/chunk-73HGSHKE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UMZQERLE.mjs +0 -34
- package/dist/lib/node-esm/chunk-UMZQERLE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZEZ4FVEU.mjs +0 -1521
- package/dist/lib/node-esm/chunk-ZEZ4FVEU.mjs.map +0 -7
- package/dist/lib/node-esm/intent-dispatcher-6CYNGPSW.mjs +0 -12
- package/dist/lib/node-esm/intent-resolver-W7Z7WFFM.mjs +0 -40
- package/dist/lib/node-esm/intent-resolver-W7Z7WFFM.mjs.map +0 -7
- package/dist/lib/node-esm/store-QEXGXLWZ.mjs +0 -31
- package/dist/lib/node-esm/store-QEXGXLWZ.mjs.map +0 -7
- package/dist/lib/node-esm/worker.mjs +0 -80
- package/dist/types/src/App.d.ts.map +0 -1
- package/dist/types/src/common/capabilities.d.ts +0 -124
- package/dist/types/src/common/capabilities.d.ts.map +0 -1
- package/dist/types/src/common/events.d.ts +0 -52
- package/dist/types/src/common/events.d.ts.map +0 -1
- package/dist/types/src/common/layout.d.ts +0 -281
- package/dist/types/src/common/layout.d.ts.map +0 -1
- package/dist/types/src/core/capabilities.d.ts +0 -114
- package/dist/types/src/core/capabilities.d.ts.map +0 -1
- package/dist/types/src/core/capabilities.test.d.ts +0 -2
- package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
- package/dist/types/src/core/events.d.ts.map +0 -1
- package/dist/types/src/core/manager.d.ts +0 -122
- package/dist/types/src/core/manager.d.ts.map +0 -1
- package/dist/types/src/core/manager.test.d.ts +0 -2
- package/dist/types/src/core/manager.test.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
- package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/actions.d.ts +0 -38
- package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/errors.d.ts +0 -16
- package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/index.d.ts +0 -5
- package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
- package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/intent.d.ts +0 -63
- package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
- package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/store.d.ts +0 -5
- package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
- package/dist/types/src/react/IntentContext.d.ts +0 -8
- package/dist/types/src/react/IntentContext.d.ts.map +0 -1
- package/dist/types/src/react/useIntentResolver.d.ts +0 -3
- package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
- package/dist/types/src/worker.d.ts +0 -4
- package/dist/types/src/worker.d.ts.map +0 -1
- package/src/App.tsx +0 -276
- package/src/common/capabilities.ts +0 -118
- package/src/common/events.ts +0 -77
- package/src/common/layout.ts +0 -278
- package/src/core/capabilities.test.ts +0 -136
- package/src/core/capabilities.ts +0 -254
- package/src/core/manager.test.ts +0 -515
- package/src/core/manager.ts +0 -519
- package/src/plugin-intent/IntentPlugin.ts +0 -20
- package/src/plugin-intent/actions.ts +0 -33
- package/src/plugin-intent/errors.ts +0 -39
- package/src/plugin-intent/index.ts +0 -8
- package/src/plugin-intent/intent-dispatcher.test.ts +0 -279
- package/src/plugin-intent/intent-dispatcher.ts +0 -333
- package/src/plugin-intent/intent.ts +0 -154
- package/src/plugin-settings/intent-resolver.ts +0 -34
- package/src/plugin-settings/store.ts +0 -33
- package/src/react/IntentContext.tsx +0 -34
- package/src/react/useIntentResolver.ts +0 -22
- package/src/worker.ts +0 -11
- /package/dist/lib/browser/{intent-dispatcher-LSYQZSEB.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/browser/{worker.mjs.map → common/index.mjs.map} +0 -0
- /package/dist/lib/{node-esm/intent-dispatcher-6CYNGPSW.mjs.map → browser/core/activation-event.mjs.map} +0 -0
- /package/dist/lib/{node-esm/worker.mjs.map → browser/core/capability.mjs.map} +0 -0
package/src/core/manager.ts
DELETED
|
@@ -1,519 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { Registry } from '@effect-rx/rx-react';
|
|
6
|
-
import { untracked } from '@preact/signals-core';
|
|
7
|
-
import { Array as A, Effect, Either, Match, pipe } from 'effect';
|
|
8
|
-
|
|
9
|
-
import { Event } from '@dxos/async';
|
|
10
|
-
import { live, type Live } from '@dxos/live-object';
|
|
11
|
-
import { log } from '@dxos/log';
|
|
12
|
-
import { type MaybePromise } from '@dxos/util';
|
|
13
|
-
|
|
14
|
-
import { type AnyCapability, PluginContext } from './capabilities';
|
|
15
|
-
import { type ActivationEvent, eventKey, getEvents, isAllOf } from './events';
|
|
16
|
-
import { type PluginModule, type Plugin } from './plugin';
|
|
17
|
-
|
|
18
|
-
// TODO(wittjosiah): Factor out?
|
|
19
|
-
const isPromise = (value: unknown): value is Promise<unknown> => {
|
|
20
|
-
return value !== null && typeof value === 'object' && 'then' in value;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export type PluginManagerOptions = {
|
|
24
|
-
pluginLoader: (id: string) => MaybePromise<Plugin>;
|
|
25
|
-
plugins?: Plugin[];
|
|
26
|
-
core?: string[];
|
|
27
|
-
enabled?: string[];
|
|
28
|
-
registry?: Registry.Registry;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
type PluginManagerState = {
|
|
32
|
-
// Plugins
|
|
33
|
-
plugins: Plugin[];
|
|
34
|
-
core: string[];
|
|
35
|
-
enabled: string[];
|
|
36
|
-
|
|
37
|
-
// Modules
|
|
38
|
-
modules: PluginModule[];
|
|
39
|
-
active: string[];
|
|
40
|
-
|
|
41
|
-
// Events
|
|
42
|
-
eventsFired: string[];
|
|
43
|
-
pendingReset: string[];
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export class PluginManager {
|
|
47
|
-
readonly activation = new Event<{ event: string; state: 'activating' | 'activated' | 'error'; error?: any }>();
|
|
48
|
-
readonly context: PluginContext;
|
|
49
|
-
readonly registry: Registry.Registry;
|
|
50
|
-
|
|
51
|
-
// TODO(wittjosiah): Replace with Rx.
|
|
52
|
-
private readonly _state: Live<PluginManagerState>;
|
|
53
|
-
private readonly _pluginLoader: PluginManagerOptions['pluginLoader'];
|
|
54
|
-
private readonly _capabilities = new Map<string, AnyCapability[]>();
|
|
55
|
-
|
|
56
|
-
constructor({
|
|
57
|
-
pluginLoader,
|
|
58
|
-
plugins = [],
|
|
59
|
-
core = plugins.map(({ meta }) => meta.id),
|
|
60
|
-
enabled = [],
|
|
61
|
-
registry,
|
|
62
|
-
}: PluginManagerOptions) {
|
|
63
|
-
this.registry = registry ?? Registry.make();
|
|
64
|
-
this.context = new PluginContext({
|
|
65
|
-
registry: this.registry,
|
|
66
|
-
activate: (event) => this._activate(event),
|
|
67
|
-
reset: (id) => this._reset(id),
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
this._pluginLoader = pluginLoader;
|
|
71
|
-
this._state = live({
|
|
72
|
-
plugins,
|
|
73
|
-
core,
|
|
74
|
-
enabled,
|
|
75
|
-
modules: [],
|
|
76
|
-
active: [],
|
|
77
|
-
pendingReset: [],
|
|
78
|
-
eventsFired: [],
|
|
79
|
-
});
|
|
80
|
-
plugins.forEach((plugin) => this._addPlugin(plugin));
|
|
81
|
-
core.forEach((id) => this.enable(id));
|
|
82
|
-
enabled.forEach((id) => this.enable(id));
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Plugins that are currently registered.
|
|
87
|
-
*
|
|
88
|
-
* @reactive
|
|
89
|
-
*/
|
|
90
|
-
get plugins(): Live<readonly Plugin[]> {
|
|
91
|
-
return this._state.plugins;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Ids of plugins that are core and cannot be removed.
|
|
96
|
-
*
|
|
97
|
-
* @reactive
|
|
98
|
-
*/
|
|
99
|
-
get core(): Live<readonly string[]> {
|
|
100
|
-
return this._state.core;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Ids of plugins that are currently enabled.
|
|
105
|
-
*
|
|
106
|
-
* @reactive
|
|
107
|
-
*/
|
|
108
|
-
get enabled(): Live<readonly string[]> {
|
|
109
|
-
return this._state.enabled;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Modules of plugins which are currently enabled.
|
|
114
|
-
*
|
|
115
|
-
* @reactive
|
|
116
|
-
*/
|
|
117
|
-
get modules(): Live<readonly PluginModule[]> {
|
|
118
|
-
return this._state.modules;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Ids of modules which are currently active.
|
|
123
|
-
*
|
|
124
|
-
* @reactive
|
|
125
|
-
*/
|
|
126
|
-
get active(): Live<readonly string[]> {
|
|
127
|
-
return this._state.active;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Ids of events which have been fired.
|
|
132
|
-
*
|
|
133
|
-
* @reactive
|
|
134
|
-
*/
|
|
135
|
-
get eventsFired(): Live<readonly string[]> {
|
|
136
|
-
return this._state.eventsFired;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Ids of modules which are pending reset.
|
|
141
|
-
*
|
|
142
|
-
* @reactive
|
|
143
|
-
*/
|
|
144
|
-
get pendingReset(): Live<readonly string[]> {
|
|
145
|
-
return this._state.pendingReset;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Adds a plugin to the manager via the plugin loader.
|
|
150
|
-
* @param id The id of the plugin.
|
|
151
|
-
*/
|
|
152
|
-
async add(id: string): Promise<boolean> {
|
|
153
|
-
return untracked(async () => {
|
|
154
|
-
log('add plugin', { id });
|
|
155
|
-
const plugin = await this._pluginLoader(id);
|
|
156
|
-
this._addPlugin(plugin);
|
|
157
|
-
return this.enable(id);
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Enables a plugin.
|
|
163
|
-
* @param id The id of the plugin.
|
|
164
|
-
*/
|
|
165
|
-
enable(id: string): Promise<boolean> {
|
|
166
|
-
return untracked(async () => {
|
|
167
|
-
log('enable plugin', { id });
|
|
168
|
-
const plugin = this._getPlugin(id);
|
|
169
|
-
if (!plugin) {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (!this._state.enabled.includes(id)) {
|
|
174
|
-
this._state.enabled.push(id);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
plugin.modules.forEach((module) => {
|
|
178
|
-
this._addModule(module);
|
|
179
|
-
this._setPendingResetByModule(module);
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
log('pending reset', { events: [...this.pendingReset] });
|
|
183
|
-
await Effect.runPromise(
|
|
184
|
-
Effect.all(
|
|
185
|
-
this.pendingReset.map((event) => this._activate(event)),
|
|
186
|
-
{ concurrency: 'unbounded' },
|
|
187
|
-
),
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
return true;
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Removes a plugin from the manager.
|
|
196
|
-
* @param id The id of the plugin.
|
|
197
|
-
*/
|
|
198
|
-
remove(id: string): boolean {
|
|
199
|
-
return untracked(() => {
|
|
200
|
-
log('remove plugin', { id });
|
|
201
|
-
const result = this.disable(id);
|
|
202
|
-
if (!result) {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
this._removePlugin(id);
|
|
207
|
-
return true;
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Disables a plugin.
|
|
213
|
-
* @param id The id of the plugin.
|
|
214
|
-
*/
|
|
215
|
-
disable(id: string): Promise<boolean> {
|
|
216
|
-
return untracked(async () => {
|
|
217
|
-
log('disable plugin', { id });
|
|
218
|
-
if (this._state.core.includes(id)) {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
const plugin = this._getPlugin(id);
|
|
223
|
-
if (!plugin) {
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
const enabledIndex = this._state.enabled.findIndex((enabled) => enabled === id);
|
|
228
|
-
if (enabledIndex !== -1) {
|
|
229
|
-
this._state.enabled.splice(enabledIndex, 1);
|
|
230
|
-
await Effect.runPromise(this._deactivate(id));
|
|
231
|
-
|
|
232
|
-
plugin.modules.forEach((module) => {
|
|
233
|
-
this._removeModule(module.id);
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
return true;
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Activates plugins based on the activation event.
|
|
243
|
-
* @param event The activation event.
|
|
244
|
-
* @returns Whether the activation was successful.
|
|
245
|
-
*/
|
|
246
|
-
activate(event: ActivationEvent | string): Promise<boolean> {
|
|
247
|
-
return untracked(() => Effect.runPromise(this._activate(event)));
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Deactivates all of the modules for a plugin.
|
|
252
|
-
* @param id The id of the plugin.
|
|
253
|
-
* @returns Whether the deactivation was successful.
|
|
254
|
-
*/
|
|
255
|
-
deactivate(id: string): Promise<boolean> {
|
|
256
|
-
return untracked(() => Effect.runPromise(this._deactivate(id)));
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Re-activates the modules that were activated by the event.
|
|
261
|
-
* @param event The activation event.
|
|
262
|
-
* @returns Whether the reset was successful.
|
|
263
|
-
*/
|
|
264
|
-
reset(event: ActivationEvent | string): Promise<boolean> {
|
|
265
|
-
return untracked(() => Effect.runPromise(this._reset(event)));
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
private _addPlugin(plugin: Plugin): void {
|
|
269
|
-
untracked(() => {
|
|
270
|
-
log('add plugin', { id: plugin.meta.id });
|
|
271
|
-
if (!this._state.plugins.includes(plugin)) {
|
|
272
|
-
this._state.plugins.push(plugin);
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
private _removePlugin(id: string): void {
|
|
278
|
-
untracked(() => {
|
|
279
|
-
log('remove plugin', { id });
|
|
280
|
-
const pluginIndex = this._state.plugins.findIndex((plugin) => plugin.meta.id === id);
|
|
281
|
-
if (pluginIndex !== -1) {
|
|
282
|
-
this._state.plugins.splice(pluginIndex, 1);
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
private _addModule(module: PluginModule): void {
|
|
288
|
-
untracked(() => {
|
|
289
|
-
log('add module', { id: module.id });
|
|
290
|
-
if (!this._state.modules.includes(module)) {
|
|
291
|
-
this._state.modules.push(module);
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
private _removeModule(id: string): void {
|
|
297
|
-
untracked(() => {
|
|
298
|
-
log('remove module', { id });
|
|
299
|
-
const moduleIndex = this._state.modules.findIndex((module) => module.id === id);
|
|
300
|
-
if (moduleIndex !== -1) {
|
|
301
|
-
this._state.modules.splice(moduleIndex, 1);
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
private _getPlugin(id: string): Plugin | undefined {
|
|
307
|
-
return this._state.plugins.find((plugin) => plugin.meta.id === id);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
private _getActiveModules(): PluginModule[] {
|
|
311
|
-
return this._state.modules.filter((module) => this._state.active.includes(module.id));
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
private _getInactiveModules(): PluginModule[] {
|
|
315
|
-
return this._state.modules.filter((module) => !this._state.active.includes(module.id));
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
private _getActiveModulesByEvent(key: string): PluginModule[] {
|
|
319
|
-
return this._getActiveModules().filter((module) => getEvents(module.activatesOn).map(eventKey).includes(key));
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
private _getInactiveModulesByEvent(key: string): PluginModule[] {
|
|
323
|
-
return this._getInactiveModules().filter((module) => getEvents(module.activatesOn).map(eventKey).includes(key));
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
private _setPendingResetByModule(module: PluginModule): void {
|
|
327
|
-
return untracked(() => {
|
|
328
|
-
const activationEvents = getEvents(module.activatesOn)
|
|
329
|
-
.map(eventKey)
|
|
330
|
-
.filter((key) => this._state.eventsFired.includes(key));
|
|
331
|
-
|
|
332
|
-
const pendingReset = Array.from(new Set(activationEvents)).filter(
|
|
333
|
-
(event) => !this._state.pendingReset.includes(event),
|
|
334
|
-
);
|
|
335
|
-
if (pendingReset.length > 0) {
|
|
336
|
-
log('pending reset', { events: pendingReset });
|
|
337
|
-
this._state.pendingReset.push(...pendingReset);
|
|
338
|
-
}
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* @internal
|
|
344
|
-
*/
|
|
345
|
-
// TODO(wittjosiah): Improve error typing.
|
|
346
|
-
_activate(event: ActivationEvent | string): Effect.Effect<boolean, Error> {
|
|
347
|
-
return Effect.gen(this, function* () {
|
|
348
|
-
const key = typeof event === 'string' ? event : eventKey(event);
|
|
349
|
-
log('activating', { key });
|
|
350
|
-
const pendingIndex = this._state.pendingReset.findIndex((event) => event === key);
|
|
351
|
-
if (pendingIndex !== -1) {
|
|
352
|
-
this._state.pendingReset.splice(pendingIndex, 1);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
const modules = this._getInactiveModulesByEvent(key).filter((module) => {
|
|
356
|
-
const allOf = isAllOf(module.activatesOn);
|
|
357
|
-
if (!allOf) {
|
|
358
|
-
return true;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
const events = module.activatesOn.events.filter((event) => eventKey(event) !== key);
|
|
362
|
-
return events.every((event) => this._state.eventsFired.includes(eventKey(event)));
|
|
363
|
-
});
|
|
364
|
-
if (modules.length === 0) {
|
|
365
|
-
log('no modules to activate', { key });
|
|
366
|
-
if (!this._state.eventsFired.includes(key)) {
|
|
367
|
-
this._state.eventsFired.push(key);
|
|
368
|
-
}
|
|
369
|
-
return false;
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
log('activating modules', { key, modules: modules.map((module) => module.id) });
|
|
373
|
-
this.activation.emit({ event: key, state: 'activating' });
|
|
374
|
-
|
|
375
|
-
// Concurrently triggers loading of lazy capabilities.
|
|
376
|
-
const getCapabilities = yield* Effect.all(
|
|
377
|
-
modules.map(({ activate }) =>
|
|
378
|
-
Effect.tryPromise({
|
|
379
|
-
try: async () => activate(this.context),
|
|
380
|
-
catch: (error) => error as Error,
|
|
381
|
-
}),
|
|
382
|
-
),
|
|
383
|
-
{ concurrency: 'unbounded' },
|
|
384
|
-
);
|
|
385
|
-
|
|
386
|
-
const result = yield* pipe(
|
|
387
|
-
modules,
|
|
388
|
-
A.zip(getCapabilities),
|
|
389
|
-
A.map(([module, getCapabilities]) => this._activateModule(module, getCapabilities)),
|
|
390
|
-
// TODO(wittjosiah): This currently can't be run in parallel.
|
|
391
|
-
// Running this with concurrency causes races with `allOf` activation events.
|
|
392
|
-
Effect.all,
|
|
393
|
-
Effect.either,
|
|
394
|
-
);
|
|
395
|
-
|
|
396
|
-
if (Either.isLeft(result)) {
|
|
397
|
-
this.activation.emit({ event: key, state: 'error', error: result.left });
|
|
398
|
-
yield* Effect.fail(result.left);
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
if (!this._state.eventsFired.includes(key)) {
|
|
402
|
-
this._state.eventsFired.push(key);
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
this.activation.emit({ event: key, state: 'activated' });
|
|
406
|
-
log('activated', { key });
|
|
407
|
-
|
|
408
|
-
return true;
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
private _activateModule(
|
|
413
|
-
module: PluginModule,
|
|
414
|
-
getCapabilities: AnyCapability | AnyCapability[] | (() => Promise<AnyCapability | AnyCapability[]>),
|
|
415
|
-
): Effect.Effect<void, Error> {
|
|
416
|
-
return Effect.gen(this, function* () {
|
|
417
|
-
yield* Effect.all(module.activatesBefore?.map((event) => this._activate(event)) ?? [], {
|
|
418
|
-
concurrency: 'unbounded',
|
|
419
|
-
});
|
|
420
|
-
|
|
421
|
-
log('activating module...', { module: module.id });
|
|
422
|
-
// TODO(wittjosiah): This is not handling errors thrown if this is synchronous.
|
|
423
|
-
const maybeCapabilities = typeof getCapabilities === 'function' ? getCapabilities() : getCapabilities;
|
|
424
|
-
const resolvedCapabilities = yield* Match.value(maybeCapabilities).pipe(
|
|
425
|
-
// TODO(wittjosiah): Activate with an effect?
|
|
426
|
-
// Match.when(Effect.isEffect, (effect) => effect),
|
|
427
|
-
Match.when(isPromise, (promise) =>
|
|
428
|
-
Effect.tryPromise({
|
|
429
|
-
try: () => promise,
|
|
430
|
-
catch: (error) => error as Error,
|
|
431
|
-
}),
|
|
432
|
-
),
|
|
433
|
-
Match.orElse((program) => Effect.succeed(program)),
|
|
434
|
-
);
|
|
435
|
-
const capabilities = Match.value(resolvedCapabilities).pipe(
|
|
436
|
-
Match.when(Array.isArray, (array) => array),
|
|
437
|
-
Match.orElse((value) => [value]),
|
|
438
|
-
);
|
|
439
|
-
capabilities.forEach((capability) => {
|
|
440
|
-
this.context.contributeCapability({ module: module.id, ...capability });
|
|
441
|
-
});
|
|
442
|
-
this._state.active.push(module.id);
|
|
443
|
-
this._capabilities.set(module.id, capabilities);
|
|
444
|
-
log('activated module', { module: module.id });
|
|
445
|
-
|
|
446
|
-
yield* Effect.all(module.activatesAfter?.map((event) => this._activate(event)) ?? [], {
|
|
447
|
-
concurrency: 'unbounded',
|
|
448
|
-
});
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
private _deactivate(id: string): Effect.Effect<boolean, Error> {
|
|
453
|
-
return Effect.gen(this, function* () {
|
|
454
|
-
const plugin = this._getPlugin(id);
|
|
455
|
-
if (!plugin) {
|
|
456
|
-
return false;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
const modules = plugin.modules;
|
|
460
|
-
const results = yield* Effect.all(
|
|
461
|
-
modules.map((module) => this._deactivateModule(module)),
|
|
462
|
-
{ concurrency: 'unbounded' },
|
|
463
|
-
);
|
|
464
|
-
return results.every((result) => result);
|
|
465
|
-
});
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
private _deactivateModule(module: PluginModule): Effect.Effect<boolean, Error> {
|
|
469
|
-
return Effect.gen(this, function* () {
|
|
470
|
-
const id = module.id;
|
|
471
|
-
log('deactivating', { id });
|
|
472
|
-
|
|
473
|
-
const capabilities = this._capabilities.get(id);
|
|
474
|
-
if (capabilities) {
|
|
475
|
-
for (const capability of capabilities) {
|
|
476
|
-
this.context.removeCapability(capability.interface, capability.implementation);
|
|
477
|
-
const program = capability.deactivate?.();
|
|
478
|
-
yield* Match.value(program).pipe(
|
|
479
|
-
Match.when(Effect.isEffect, (effect) => effect),
|
|
480
|
-
Match.when(isPromise, (promise) =>
|
|
481
|
-
Effect.tryPromise({
|
|
482
|
-
try: () => promise,
|
|
483
|
-
catch: (error) => error as Error,
|
|
484
|
-
}),
|
|
485
|
-
),
|
|
486
|
-
Match.orElse((program) => Effect.succeed(program)),
|
|
487
|
-
);
|
|
488
|
-
}
|
|
489
|
-
this._capabilities.delete(id);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
const activeIndex = this._state.active.findIndex((event) => event === id);
|
|
493
|
-
if (activeIndex !== -1) {
|
|
494
|
-
this._state.active.splice(activeIndex, 1);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
log('deactivated', { id });
|
|
498
|
-
return true;
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
private _reset(event: ActivationEvent | string): Effect.Effect<boolean, Error> {
|
|
503
|
-
return Effect.gen(this, function* () {
|
|
504
|
-
const key = typeof event === 'string' ? event : eventKey(event);
|
|
505
|
-
log('reset', { key });
|
|
506
|
-
const modules = this._getActiveModulesByEvent(key);
|
|
507
|
-
const results = yield* Effect.all(
|
|
508
|
-
modules.map((module) => this._deactivateModule(module)),
|
|
509
|
-
{ concurrency: 'unbounded' },
|
|
510
|
-
);
|
|
511
|
-
|
|
512
|
-
if (results.every((result) => result)) {
|
|
513
|
-
return yield* this._activate(key);
|
|
514
|
-
} else {
|
|
515
|
-
return false;
|
|
516
|
-
}
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { INTENT_PLUGIN } from './actions';
|
|
6
|
-
import { Events } from '../common';
|
|
7
|
-
import { defineModule, definePlugin, lazy } from '../core';
|
|
8
|
-
|
|
9
|
-
export const IntentPlugin = () =>
|
|
10
|
-
definePlugin({ id: INTENT_PLUGIN, name: 'Intent' }, [
|
|
11
|
-
defineModule({
|
|
12
|
-
id: `${INTENT_PLUGIN}/module/dispatcher`,
|
|
13
|
-
// TODO(wittjosiah): This will mean that startup needs to be reset when intents are added or removed.
|
|
14
|
-
// This is fine for now because it's how it worked prior to capabilities api anyways.
|
|
15
|
-
// In the future, the intent dispatcher should be able to be reset without resetting the entire app.
|
|
16
|
-
activatesOn: Events.Startup,
|
|
17
|
-
activatesAfter: [Events.DispatcherReady],
|
|
18
|
-
activate: lazy(() => import('./intent-dispatcher')),
|
|
19
|
-
}),
|
|
20
|
-
]);
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { Schema } from 'effect';
|
|
6
|
-
|
|
7
|
-
import { Label } from './intent';
|
|
8
|
-
|
|
9
|
-
export const INTENT_PLUGIN = 'dxos.org/plugin/intent';
|
|
10
|
-
export const INTENT_ACTION = `${INTENT_PLUGIN}/action`;
|
|
11
|
-
|
|
12
|
-
export namespace IntentAction {
|
|
13
|
-
/**
|
|
14
|
-
* Log an intent.
|
|
15
|
-
*/
|
|
16
|
-
export class Track extends Schema.TaggedClass<Track>()(`${INTENT_ACTION}/track`, {
|
|
17
|
-
input: Schema.Struct({
|
|
18
|
-
intents: Schema.Array(Schema.String),
|
|
19
|
-
error: Schema.optional(Schema.String),
|
|
20
|
-
}),
|
|
21
|
-
output: Schema.Void,
|
|
22
|
-
}) {}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Fired after an intent is dispatched if the intent is undoable.
|
|
26
|
-
*/
|
|
27
|
-
export class ShowUndo extends Schema.TaggedClass<ShowUndo>()(`${INTENT_ACTION}/show-undo`, {
|
|
28
|
-
input: Schema.Struct({
|
|
29
|
-
message: Label,
|
|
30
|
-
}),
|
|
31
|
-
output: Schema.Void,
|
|
32
|
-
}) {}
|
|
33
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
// TODO(wittjosiah): Reconcile with @dxos/protocols. Factor out errors.
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* NOTE: Messages should be sentences (Start with a capital letter and end with a period).
|
|
9
|
-
* Errors can optionally include a JSON context object.
|
|
10
|
-
*/
|
|
11
|
-
export class BaseError extends Error {
|
|
12
|
-
constructor(
|
|
13
|
-
readonly code: string,
|
|
14
|
-
message?: string,
|
|
15
|
-
readonly context?: Record<string, any>,
|
|
16
|
-
) {
|
|
17
|
-
// TODO(dmaretskyi): Error.cause.
|
|
18
|
-
super(message ?? code, { cause: context });
|
|
19
|
-
this.name = code;
|
|
20
|
-
// NOTE: Restores prototype chain (https://stackoverflow.com/a/48342359).
|
|
21
|
-
Object.setPrototypeOf(this, new.target.prototype);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export class NoResolversError extends BaseError {
|
|
26
|
-
constructor(action: string) {
|
|
27
|
-
super('NO_RESOLVERS', 'No resolvers were found for the action', { action });
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class CycleDetectedError extends BaseError {
|
|
32
|
-
constructor(context?: Record<string, any>) {
|
|
33
|
-
super(
|
|
34
|
-
'CYCLE_DETECTED',
|
|
35
|
-
'Intent execution limit exceeded. This is likely due to an infinite loop within intent resolvers.',
|
|
36
|
-
context,
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
}
|