@dxos/app-framework 0.8.4-main.d05539e30a → 0.8.4-main.d9fc60f731

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.
Files changed (177) hide show
  1. package/dist/lib/browser/{capability-K5XIVCQU.mjs → capability-JCUNWZ66.mjs} +7 -7
  2. package/dist/lib/browser/{chunk-5AHASNDW.mjs → chunk-2ZIYRDAF.mjs} +1 -1
  3. package/dist/lib/browser/{chunk-5AHASNDW.mjs.map → chunk-2ZIYRDAF.mjs.map} +1 -1
  4. package/dist/lib/browser/{chunk-QLML5QFJ.mjs → chunk-7MBI66M7.mjs} +12 -6
  5. package/dist/lib/browser/chunk-7MBI66M7.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-VJ5PFAWC.mjs → chunk-BMLCIFZW.mjs} +37 -16
  7. package/dist/lib/browser/chunk-BMLCIFZW.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-SLX73WRZ.mjs → chunk-DC3WRPBV.mjs} +14 -5
  9. package/dist/lib/browser/chunk-DC3WRPBV.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-BRK6GYNB.mjs → chunk-E5DTDNDY.mjs} +20 -19
  11. package/dist/lib/browser/chunk-E5DTDNDY.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-KLHQNYJ2.mjs → chunk-KZUDO43J.mjs} +2 -2
  13. package/dist/lib/browser/chunk-Q2GLJTVV.mjs +12 -0
  14. package/dist/lib/browser/chunk-Q2GLJTVV.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-UVTGHZQF.mjs → chunk-VBG5F5UF.mjs} +51 -88
  16. package/dist/lib/browser/chunk-VBG5F5UF.mjs.map +7 -0
  17. package/dist/lib/browser/cli/index.mjs +5 -5
  18. package/dist/lib/browser/common/activation-events.mjs +3 -3
  19. package/dist/lib/browser/common/capabilities.mjs +4 -4
  20. package/dist/lib/browser/core/plugin-manager.mjs +2 -2
  21. package/dist/lib/browser/core/plugin.mjs +3 -1
  22. package/dist/lib/browser/core/url-loader.mjs +2 -2
  23. package/dist/lib/browser/index.mjs +13 -14
  24. package/dist/lib/browser/index.mjs.map +3 -3
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/{process-manager-capability-JIWLN7SU.mjs → process-manager-capability-4FUA4TRP.mjs} +6 -6
  27. package/dist/lib/browser/testing/index.mjs +11 -10
  28. package/dist/lib/browser/testing/index.mjs.map +3 -3
  29. package/dist/lib/browser/testing/react.mjs +6 -6
  30. package/dist/lib/browser/ui/index.mjs +7 -9
  31. package/dist/lib/node-esm/{capability-RLKFFLTB.mjs → capability-7TCQK7ZP.mjs} +7 -7
  32. package/dist/lib/node-esm/{chunk-SFYCO3PT.mjs → chunk-4BX2AE47.mjs} +37 -16
  33. package/dist/lib/node-esm/chunk-4BX2AE47.mjs.map +7 -0
  34. package/dist/lib/node-esm/chunk-FPW45EZH.mjs +14 -0
  35. package/dist/lib/node-esm/chunk-FPW45EZH.mjs.map +7 -0
  36. package/dist/lib/node-esm/{chunk-LJNUFNDO.mjs → chunk-GEWHMHM7.mjs} +12 -6
  37. package/dist/lib/node-esm/chunk-GEWHMHM7.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-BYHYYJZH.mjs → chunk-KSH4OVMY.mjs} +20 -19
  39. package/dist/lib/node-esm/chunk-KSH4OVMY.mjs.map +7 -0
  40. package/dist/lib/node-esm/{chunk-PW2VYGOS.mjs → chunk-QBUGLR4H.mjs} +1 -1
  41. package/dist/lib/node-esm/{chunk-PW2VYGOS.mjs.map → chunk-QBUGLR4H.mjs.map} +1 -1
  42. package/dist/lib/node-esm/{chunk-42UNAKYO.mjs → chunk-XGBUKRCK.mjs} +2 -2
  43. package/dist/lib/node-esm/{chunk-6S45OMUP.mjs → chunk-XIGPWXCQ.mjs} +14 -5
  44. package/dist/lib/node-esm/chunk-XIGPWXCQ.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-JNT72ZCN.mjs → chunk-Y7JKXNDU.mjs} +51 -88
  46. package/dist/lib/node-esm/chunk-Y7JKXNDU.mjs.map +7 -0
  47. package/dist/lib/node-esm/cli/index.mjs +5 -5
  48. package/dist/lib/node-esm/common/activation-events.mjs +3 -3
  49. package/dist/lib/node-esm/common/capabilities.mjs +4 -4
  50. package/dist/lib/node-esm/core/plugin-manager.mjs +2 -2
  51. package/dist/lib/node-esm/core/plugin.mjs +3 -1
  52. package/dist/lib/node-esm/core/url-loader.mjs +2 -2
  53. package/dist/lib/node-esm/index.mjs +13 -14
  54. package/dist/lib/node-esm/index.mjs.map +3 -3
  55. package/dist/lib/node-esm/meta.json +1 -1
  56. package/dist/lib/node-esm/{process-manager-capability-PHKLO2BL.mjs → process-manager-capability-F23D62RN.mjs} +6 -6
  57. package/dist/lib/node-esm/testing/index.mjs +11 -10
  58. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  59. package/dist/lib/node-esm/testing/react.mjs +6 -6
  60. package/dist/lib/node-esm/ui/index.mjs +7 -9
  61. package/dist/plugin/node-esm/index.mjs +155 -77
  62. package/dist/plugin/node-esm/index.mjs.map +4 -4
  63. package/dist/plugin/node-esm/meta.json +1 -1
  64. package/dist/types/src/common/capabilities.d.ts +1 -1
  65. package/dist/types/src/common/index.d.ts +0 -1
  66. package/dist/types/src/common/index.d.ts.map +1 -1
  67. package/dist/types/src/common/translations.d.ts +1 -1
  68. package/dist/types/src/core/capability-manager.d.ts +4 -0
  69. package/dist/types/src/core/capability-manager.d.ts.map +1 -1
  70. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  71. package/dist/types/src/core/plugin.d.ts +33 -6
  72. package/dist/types/src/core/plugin.d.ts.map +1 -1
  73. package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts +15 -1
  74. package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts.map +1 -1
  75. package/dist/types/src/plugin-process-manager/history/undo-mapping.d.ts +1 -1
  76. package/dist/types/src/plugin-process-manager/history/undo-mapping.d.ts.map +1 -1
  77. package/dist/types/src/plugin-process-manager/meta.d.ts +1 -1
  78. package/dist/types/src/plugin-process-manager/meta.d.ts.map +1 -1
  79. package/dist/types/src/plugin-process-manager/testing.d.ts.map +1 -1
  80. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  81. package/dist/types/src/ui/components/App/App.d.ts +34 -2
  82. package/dist/types/src/ui/components/App/App.d.ts.map +1 -1
  83. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -1
  84. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -1
  85. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -1
  86. package/dist/types/src/ui/components/index.d.ts +0 -1
  87. package/dist/types/src/ui/components/index.d.ts.map +1 -1
  88. package/dist/types/src/ui/hooks/useApp.d.ts +1 -7
  89. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -1
  90. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -1
  91. package/dist/types/src/ui/hooks/useProcessManagerRuntime.d.ts +6 -0
  92. package/dist/types/src/ui/hooks/useProcessManagerRuntime.d.ts.map +1 -1
  93. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +26 -23
  94. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts.map +1 -1
  95. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -1
  96. package/dist/types/tsconfig.tsbuildinfo +1 -1
  97. package/package.json +40 -35
  98. package/src/common/capabilities.ts +1 -1
  99. package/src/common/index.ts +0 -1
  100. package/src/common/translations.ts +1 -1
  101. package/src/core/capability-manager.test.ts +3 -0
  102. package/src/core/capability-manager.ts +22 -1
  103. package/src/core/plugin-manager.test.ts +51 -21
  104. package/src/core/plugin-manager.ts +10 -5
  105. package/src/core/plugin.ts +44 -8
  106. package/src/core/url-loader.test.ts +2 -1
  107. package/src/plugin-process-manager/history/history-tracker.test.ts +39 -60
  108. package/src/plugin-process-manager/history/history-tracker.ts +32 -16
  109. package/src/plugin-process-manager/history/undo-mapping.ts +1 -1
  110. package/src/plugin-process-manager/history/undo-registry.test.ts +3 -1
  111. package/src/plugin-process-manager/meta.ts +6 -4
  112. package/src/plugin-process-manager/testing.ts +6 -5
  113. package/src/testing/react.test.tsx +3 -1
  114. package/src/testing/withPluginManager.tsx +4 -3
  115. package/src/ui/components/App/App.stories.tsx +9 -11
  116. package/src/ui/components/App/App.tsx +80 -17
  117. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +9 -14
  118. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +1 -1
  119. package/src/ui/components/Surface/SurfaceComponent.tsx +1 -1
  120. package/src/ui/components/Surface/types.test.ts +2 -2
  121. package/src/ui/components/Surface/types.ts +21 -0
  122. package/src/ui/components/index.ts +0 -1
  123. package/src/ui/hooks/useApp.test.tsx +3 -1
  124. package/src/ui/hooks/useApp.tsx +4 -18
  125. package/src/ui/hooks/useCapabilities.ts +1 -0
  126. package/src/ui/hooks/useProcessManagerRuntime.ts +12 -2
  127. package/src/vite-plugin/boot-loader/BootLoader.solid-stories.tsx +198 -0
  128. package/src/vite-plugin/boot-loader/loader-app/Loader.tsx +166 -0
  129. package/src/vite-plugin/boot-loader/loader-app/boot-loader.css +311 -0
  130. package/src/vite-plugin/boot-loader/loader-app/bridge.ts +25 -0
  131. package/src/vite-plugin/boot-loader/loader-app/entry.tsx +21 -0
  132. package/src/vite-plugin/boot-loader/loader-app/mount.tsx +70 -0
  133. package/src/vite-plugin/boot-loader/loader-app/store.test.ts +137 -0
  134. package/src/vite-plugin/boot-loader/loader-app/store.ts +149 -0
  135. package/src/vite-plugin/boot-loader/loader-app/tsconfig.json +11 -0
  136. package/src/vite-plugin/boot-loader/loader-app/types.ts +78 -0
  137. package/src/vite-plugin/boot-loader/loader.ts +133 -63
  138. package/src/vite-plugin/manifest.test.ts +19 -10
  139. package/src/vite-plugin/manifest.ts +9 -3
  140. package/tsconfig.json +6 -7
  141. package/dist/lib/browser/chunk-BRK6GYNB.mjs.map +0 -7
  142. package/dist/lib/browser/chunk-KFDF7KR3.mjs +0 -42
  143. package/dist/lib/browser/chunk-KFDF7KR3.mjs.map +0 -7
  144. package/dist/lib/browser/chunk-QLML5QFJ.mjs.map +0 -7
  145. package/dist/lib/browser/chunk-SLX73WRZ.mjs.map +0 -7
  146. package/dist/lib/browser/chunk-UVTGHZQF.mjs.map +0 -7
  147. package/dist/lib/browser/chunk-VJ5PFAWC.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-6S45OMUP.mjs.map +0 -7
  149. package/dist/lib/node-esm/chunk-BYHYYJZH.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-JNT72ZCN.mjs.map +0 -7
  151. package/dist/lib/node-esm/chunk-LJNUFNDO.mjs.map +0 -7
  152. package/dist/lib/node-esm/chunk-OUEMWPIW.mjs +0 -43
  153. package/dist/lib/node-esm/chunk-OUEMWPIW.mjs.map +0 -7
  154. package/dist/lib/node-esm/chunk-SFYCO3PT.mjs.map +0 -7
  155. package/dist/types/src/common/operations.d.ts +0 -19
  156. package/dist/types/src/common/operations.d.ts.map +0 -1
  157. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts +0 -64
  158. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts.map +0 -1
  159. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts +0 -19
  160. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts.map +0 -1
  161. package/dist/types/src/ui/components/Placeholder/index.d.ts +0 -2
  162. package/dist/types/src/ui/components/Placeholder/index.d.ts.map +0 -1
  163. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +0 -34
  164. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +0 -1
  165. package/src/common/operations.ts +0 -35
  166. package/src/ui/components/Placeholder/Placeholder.stories.tsx +0 -77
  167. package/src/ui/components/Placeholder/Placeholder.tsx +0 -155
  168. package/src/ui/components/Placeholder/index.ts +0 -5
  169. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +0 -270
  170. package/src/vite-plugin/boot-loader/boot-loader.css +0 -320
  171. package/src/vite-plugin/boot-loader/boot-loader.js +0 -325
  172. /package/dist/lib/browser/{capability-K5XIVCQU.mjs.map → capability-JCUNWZ66.mjs.map} +0 -0
  173. /package/dist/lib/browser/{chunk-KLHQNYJ2.mjs.map → chunk-KZUDO43J.mjs.map} +0 -0
  174. /package/dist/lib/browser/{process-manager-capability-JIWLN7SU.mjs.map → process-manager-capability-4FUA4TRP.mjs.map} +0 -0
  175. /package/dist/lib/node-esm/{capability-RLKFFLTB.mjs.map → capability-7TCQK7ZP.mjs.map} +0 -0
  176. /package/dist/lib/node-esm/{chunk-42UNAKYO.mjs.map → chunk-XGBUKRCK.mjs.map} +0 -0
  177. /package/dist/lib/node-esm/{process-manager-capability-PHKLO2BL.mjs.map → process-manager-capability-F23D62RN.mjs.map} +0 -0
@@ -2,22 +2,22 @@ import {
2
2
  PluginManagerProvider,
3
3
  topologicalSort,
4
4
  usePluginManager
5
- } from "./chunk-QLML5QFJ.mjs";
5
+ } from "./chunk-7MBI66M7.mjs";
6
6
  import {
7
7
  PluginManagerContext
8
8
  } from "./chunk-FJ4765WW.mjs";
9
9
  import {
10
10
  capabilities_exports
11
- } from "./chunk-5AHASNDW.mjs";
11
+ } from "./chunk-2ZIYRDAF.mjs";
12
12
  import {
13
13
  activation_events_exports
14
14
  } from "./chunk-5GY3YOEL.mjs";
15
15
  import {
16
16
  plugin_manager_exports
17
- } from "./chunk-VJ5PFAWC.mjs";
17
+ } from "./chunk-BMLCIFZW.mjs";
18
18
 
19
19
  // src/ui/components/App/App.tsx
20
- import React2, { useEffect as useEffect3 } from "react";
20
+ import React2, { useEffect as useEffect3, useLayoutEffect } from "react";
21
21
 
22
22
  // src/ui/hooks/useApp.tsx
23
23
  import { RegistryContext } from "@effect-atom/atom-react";
@@ -34,13 +34,13 @@ import { useAsyncEffect, useDefaultValue } from "@dxos/react-hooks";
34
34
  import { ContextProtocolProvider } from "@dxos/web-context-react";
35
35
  var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/ui/hooks/useApp.tsx";
36
36
  var ENABLED_KEY = "org.dxos.app-framework.enabled";
37
- var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, pluginRegistryProvider, plugins: pluginsProp, defaults: defaultsProp, setupEvents: setupEventsProp, placeholder, fallback = ErrorFallback, cacheEnabled = false, safeMode = false, debounce = 0, timeout = 3e4 }) => {
37
+ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, pluginRegistryProvider, plugins: pluginsProp, defaults: defaultsProp, setupEvents: setupEventsProp, fallback = ErrorFallback, cacheEnabled = false, safeMode = false, debounce = 0, timeout = 3e4 }) => {
38
38
  const plugins = useDefaultValue(pluginsProp, () => []);
39
39
  const defaults = useDefaultValue(defaultsProp, () => []);
40
40
  const setupEvents = useDefaultValue(setupEventsProp, () => []);
41
41
  const pluginLoader = useMemo(() => pluginLoaderProp ?? ((id) => Effect.sync(() => {
42
42
  const plugin = plugins.find((plugin2) => plugin2.meta.id === id);
43
- invariant(plugin, `Plugin not found: ${id}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 49, S: void 0, A: ["plugin", "`Plugin not found: ${id}`"] });
43
+ invariant(plugin, `Plugin not found: ${id}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 48, S: void 0, A: ["plugin", "`Plugin not found: ${id}`"] });
44
44
  return {
45
45
  plugin
46
46
  };
@@ -75,7 +75,7 @@ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, p
75
75
  });
76
76
  log("useApp: useMemo created/reused manager", {
77
77
  provided: !!pluginManager
78
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 83, S: void 0 });
78
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 82, S: void 0 });
79
79
  return mgr;
80
80
  }, [
81
81
  pluginManager,
@@ -102,7 +102,7 @@ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, p
102
102
  manager
103
103
  ]);
104
104
  useAsyncEffect(async () => {
105
- log("useApp: effect mount", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 112, S: void 0 });
105
+ log("useApp: effect mount", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 111, S: void 0 });
106
106
  manager.capabilities.contribute({
107
107
  interface: capabilities_exports.PluginManager,
108
108
  implementation: manager,
@@ -175,13 +175,13 @@ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, p
175
175
  eventsFired: manager.getEventsFired(),
176
176
  activeModules: manager.getActive(),
177
177
  pendingReset: manager.getPendingReset()
178
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 219, S: void 0 });
178
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 218, S: void 0 });
179
179
  void runAndForwardErrors(Fiber.interrupt(fiber));
180
180
  setError(new Error(`Startup timed out after ${timeout}ms`));
181
181
  }
182
182
  }, timeout);
183
183
  return () => {
184
- log("useApp: effect cleanup", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 229, S: void 0 });
184
+ log("useApp: effect cleanup", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 228, S: void 0 });
185
185
  clearTimeout(timeoutId);
186
186
  void runAndForwardErrors(Fiber.interrupt(fiber));
187
187
  if (!isExternalManager) {
@@ -204,7 +204,6 @@ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, p
204
204
  }, /* @__PURE__ */ React.createElement(RegistryContext.Provider, {
205
205
  value: manager.registry
206
206
  }, /* @__PURE__ */ React.createElement(App, {
207
- placeholder,
208
207
  ready,
209
208
  error,
210
209
  debounce,
@@ -212,7 +211,6 @@ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, onPluginRemove, p
212
211
  }))))), [
213
212
  fallback,
214
213
  manager,
215
- placeholder,
216
214
  ready,
217
215
  error
218
216
  ]);
@@ -253,7 +251,7 @@ var useCapabilities = (interfaceDef) => {
253
251
  };
254
252
  var useCapability = (interfaceDef) => {
255
253
  const capabilities = useCapabilities(interfaceDef);
256
- invariant2(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 22, S: void 0, A: ["capabilities.length > 0", "`No capability found for ${interfaceDef.identifier}`"] });
254
+ invariant2(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 23, S: void 0, A: ["capabilities.length > 0", "`No capability found for ${interfaceDef.identifier}`"] });
257
255
  return capabilities[0];
258
256
  };
259
257
  var useAtomCapability = (atomCapability) => {
@@ -331,8 +329,9 @@ var useLoading = (ready, debounce = 0) => {
331
329
 
332
330
  // src/ui/hooks/useProcessManagerRuntime.ts
333
331
  import * as Effect2 from "effect/Effect";
332
+ import * as Layer from "effect/Layer";
334
333
  import { use, useCallback as useCallback3, useMemo as useMemo2 } from "react";
335
- import { ServiceResolver } from "@dxos/compute";
334
+ import { Operation, ServiceResolver } from "@dxos/compute";
336
335
  import { unwrapExit } from "@dxos/effect";
337
336
  var useProcessManagerRuntime = () => useCapability(capabilities_exports.ProcessManagerRuntime);
338
337
  var useSpaceCallback = (spaceId, tags, fn, deps) => {
@@ -341,9 +340,11 @@ var useSpaceCallback = (spaceId, tags, fn, deps) => {
341
340
  if (spaceId === void 0) {
342
341
  throw new TypeError("Space not provided to useSpaceCallback");
343
342
  }
344
- const layer = ServiceResolver.provide({
343
+ const layer = Layer.merge(ServiceResolver.provide({
345
344
  space: spaceId
346
- }, ...tags);
345
+ }, ...tags), Operation.withInvocationOptions({
346
+ spaceId
347
+ }));
347
348
  return runtime.runPromise(fn().pipe(Effect2.provide(layer)));
348
349
  }, [
349
350
  runtime,
@@ -393,56 +394,13 @@ var useSettingsState = (atom) => {
393
394
 
394
395
  // src/ui/components/App/App.tsx
395
396
  var FIRST_INTERACTIVE_MARK = "app-framework:first-interactive";
396
- var App = ({ placeholder: Placeholder2, ready, error, debounce, progress }) => {
397
+ var App = ({ ready, error, debounce, progress }) => {
397
398
  const reactContexts = useCapabilities(capabilities_exports.ReactContext);
398
399
  const reactRoots = useCapabilities(capabilities_exports.ReactRoot);
399
400
  const stage = useLoading(ready, debounce);
400
401
  const placeholderDismissed = stage >= LoadingState.Done;
401
402
  useEffect3(() => {
402
- if (!placeholderDismissed) {
403
- return;
404
- }
405
- if (performance.getEntriesByName(FIRST_INTERACTIVE_MARK).length === 0) {
406
- performance.mark(FIRST_INTERACTIVE_MARK);
407
- }
408
- window.__bootLoader?.dismiss?.();
409
- }, [
410
- placeholderDismissed
411
- ]);
412
- if (error) {
413
- throw error;
414
- }
415
- if (!placeholderDismissed) {
416
- if (!Placeholder2) {
417
- return null;
418
- }
419
- return /* @__PURE__ */ React2.createElement(Placeholder2, {
420
- stage,
421
- progress
422
- });
423
- }
424
- const ComposedContext = composeContexts(reactContexts);
425
- return /* @__PURE__ */ React2.createElement(ComposedContext, null, reactRoots.map(({ id, root: Component }) => /* @__PURE__ */ React2.createElement(Component, {
426
- key: id
427
- })));
428
- };
429
- var composeContexts = (contexts) => {
430
- if (contexts.length === 0) {
431
- return ({ children }) => /* @__PURE__ */ React2.createElement(React2.Fragment, null, children);
432
- }
433
- return topologicalSort(contexts).map(({ context }) => context).reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React2.createElement(Acc, null, /* @__PURE__ */ React2.createElement(Next, null, children)));
434
- };
435
-
436
- // src/ui/components/Placeholder/Placeholder.tsx
437
- import React3, { useEffect as useEffect4, useLayoutEffect, useRef as useRef3 } from "react";
438
- import { ThemeProvider } from "@dxos/react-ui";
439
- import { defaultTx, mx } from "@dxos/ui-theme";
440
- var Placeholder = ({ stage = 1, progress, logo }) => {
441
- if (location.search === "?throw") {
442
- throw new Error("Test error");
443
- }
444
- useEffect4(() => {
445
- if (stage >= 2) {
403
+ if (stage >= LoadingState.FadeOut) {
446
404
  return;
447
405
  }
448
406
  const fraction = progress?.progress ?? 0;
@@ -462,36 +420,42 @@ var Placeholder = ({ stage = 1, progress, logo }) => {
462
420
  progress?.humanizedName
463
421
  ]);
464
422
  useLayoutEffect(() => {
465
- if (stage >= 2) {
466
- window.__bootLoader?.dismiss();
423
+ if (stage >= LoadingState.FadeOut) {
424
+ window.__bootLoader?.ready();
467
425
  }
468
426
  }, [
469
427
  stage
470
428
  ]);
471
- const stageRef = useRef3(stage);
472
- stageRef.current = stage;
473
- useEffect4(() => {
474
- return () => {
475
- if (stageRef.current >= 3) {
476
- window.__bootLoader?.dismiss();
477
- }
478
- };
479
- }, []);
480
- if (stage < 2) {
429
+ useEffect3(() => {
430
+ if (!placeholderDismissed) {
431
+ return;
432
+ }
433
+ if (performance.getEntriesByName(FIRST_INTERACTIVE_MARK).length === 0) {
434
+ performance.mark(FIRST_INTERACTIVE_MARK);
435
+ }
436
+ window.__bootLoader?.dismiss();
437
+ }, [
438
+ placeholderDismissed
439
+ ]);
440
+ if (location.search === "?throw") {
441
+ throw new Error("Test error");
442
+ }
443
+ if (error) {
444
+ throw error;
445
+ }
446
+ if (!placeholderDismissed) {
481
447
  return null;
482
448
  }
483
- const logoClassName = mx("h-[300px] w-[300px] scale-600 transition-all duration-500 ease-in-out filter grayscale opacity-0", stage >= 1 && "scale-100 grayscale-0 opacity-70", stage >= 2 && "scale-50 opacity-0");
484
- return /* @__PURE__ */ React3.createElement(ThemeProvider, {
485
- tx: defaultTx
486
- }, /* @__PURE__ */ React3.createElement("div", {
487
- className: "relative dx-container h-dvh flex flex-col"
488
- }, /* @__PURE__ */ React3.createElement("div", {
489
- className: "flex flex-col grow justify-center items-center"
490
- }, typeof logo === "function" ? logo({
491
- className: logoClassName
492
- }) : logo ? /* @__PURE__ */ React3.createElement("div", {
493
- className: logoClassName
494
- }, logo) : null)));
449
+ const ComposedContext = composeContexts(reactContexts);
450
+ return /* @__PURE__ */ React2.createElement(ComposedContext, null, reactRoots.map(({ id, root: Component }) => /* @__PURE__ */ React2.createElement(Component, {
451
+ key: id
452
+ })));
453
+ };
454
+ var composeContexts = (contexts) => {
455
+ if (contexts.length === 0) {
456
+ return ({ children }) => /* @__PURE__ */ React2.createElement(React2.Fragment, null, children);
457
+ }
458
+ return topologicalSort(contexts).map(({ context }) => context).reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React2.createElement(Acc, null, /* @__PURE__ */ React2.createElement(Next, null, children)));
495
459
  };
496
460
 
497
461
  export {
@@ -507,7 +471,6 @@ export {
507
471
  useSpaceCallback,
508
472
  useSpaceService,
509
473
  useSettingsState,
510
- App,
511
- Placeholder
474
+ App
512
475
  };
513
- //# sourceMappingURL=chunk-UVTGHZQF.mjs.map
476
+ //# sourceMappingURL=chunk-VBG5F5UF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ui/components/App/App.tsx", "../../../src/ui/hooks/useApp.tsx", "../../../src/ui/hooks/useCapabilities.ts", "../../../src/ui/hooks/useLoading.tsx", "../../../src/ui/hooks/useProcessManagerRuntime.ts", "../../../src/ui/hooks/useSettingsState.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useEffect, useLayoutEffect } from 'react';\n\nimport { Capabilities } from '../../../common';\nimport { topologicalSort } from '../../../helpers';\nimport { LoadingState, type StartupProgress, type UseAppOptions, useCapabilities, useLoading } from '../../hooks';\n\ndeclare global {\n interface Window {\n /**\n * Driver injected by `@dxos/app-framework/vite-plugin`'s `bootLoaderPlugin`\n * (a Solid app inlined into `index.html`). Declared here — on a module that\n * is part of the `@dxos/app-framework/ui` export surface — so the React side\n * and host apps (e.g. composer-app) can drive the loader without each\n * re-declaring the type. The canonical definition lives in the plugin's\n * `loader-app/types.ts`; this mirror exists because that source compiles in a\n * separate (Solid) program that doesn't ship its globals to consumers.\n */\n __bootLoader?: {\n status: (payload: {\n event?: string;\n module?: string;\n humanized: string;\n /**\n * Optional `(index/total)` tick. When present, the loader replaces the\n * current line in place (\"Loading plugins (12/80)\") instead of appending\n * a new entry — keeps the visible log compact during long counted phases.\n */\n range?: { index: number; total: number };\n }) => void;\n progress: (fraction?: number) => void;\n ready: () => void;\n dismiss: () => void;\n };\n }\n}\n\nexport type AppProps = Pick<UseAppOptions, 'debounce'> & {\n ready: boolean;\n error: unknown;\n progress?: StartupProgress;\n};\n\nconst FIRST_INTERACTIVE_MARK = 'app-framework:first-interactive';\n\nexport const App = ({ ready, error, debounce, progress }: AppProps) => {\n const reactContexts = useCapabilities(Capabilities.ReactContext);\n const reactRoots = useCapabilities(Capabilities.ReactRoot);\n const stage = useLoading(ready, debounce);\n const placeholderDismissed = stage >= LoadingState.Done;\n\n // Relay the startup lifecycle into the boot loader injected by\n // `@dxos/app-framework/vite-plugin` (a Solid app inlined into `index.html`,\n // the only visible loading UI). Plugin activation fills the `[0.5, 1]` half\n // of the ring; the raw `event` / `module` ids ride along so the loader owns\n // how each transition is rendered and traced. No-op once the outro has\n // started (`FadeOut`), so the dismissal runs uncontended.\n useEffect(() => {\n if (stage >= LoadingState.FadeOut) {\n return;\n }\n const fraction = progress?.progress ?? 0;\n window.__bootLoader?.progress(0.5 + fraction * 0.5);\n if (progress?.humanizedName) {\n window.__bootLoader?.status({\n event: progress.event,\n module: progress.module,\n humanized: `Activating ${progress.humanizedName}`,\n });\n }\n }, [stage, progress?.progress, progress?.event, progress?.module, progress?.humanizedName]);\n\n // Hand off at fade-out: play the loader's graceful shrink-and-fade outro.\n // `useLayoutEffect` runs before the next paint so the outro begins in the\n // same frame the real shell starts rendering beneath it.\n useLayoutEffect(() => {\n if (stage >= LoadingState.FadeOut) {\n window.__bootLoader?.ready();\n }\n }, [stage]);\n\n // Emit a once-per-app `app-framework:first-interactive` mark the first time\n // the loader is dismissed and the real app shell renders. Closes the gap\n // between `Startup` activated and the first interactive paint.\n //\n // Also the framework-owned handoff-complete signal: `dismiss()` removes the\n // loader immediately on the fast-load path (where `useLoading` skips\n // `FadeOut`), and is a no-op once an outro is already in flight, so it never\n // cuts the animation short.\n useEffect(() => {\n if (!placeholderDismissed) {\n return;\n }\n if (performance.getEntriesByName(FIRST_INTERACTIVE_MARK).length === 0) {\n performance.mark(FIRST_INTERACTIVE_MARK);\n }\n window.__bootLoader?.dismiss();\n }, [placeholderDismissed]);\n\n // Used in tests to exercise the error boundary & reset dialog (see\n // composer-app's `basic.spec.ts`). Thrown into the surrounding `ErrorBoundary`.\n if (location.search === '?throw') {\n throw new Error('Test error');\n }\n\n if (error) {\n // This triggers the error boundary to provide UI feedback for the startup error.\n throw error;\n }\n\n // The boot loader owns the screen until handoff completes; render nothing\n // until then (any DOM here would sit invisibly behind the `z-index: 10`\n // loader anyway).\n // TODO(wittjosiah): Consider using Suspense instead.\n if (!placeholderDismissed) {\n return null;\n }\n\n const ComposedContext = composeContexts(reactContexts);\n return (\n <ComposedContext>\n {reactRoots.map(({ id, root: Component }) => (\n <Component key={id} />\n ))}\n </ComposedContext>\n );\n};\n\nconst composeContexts = (contexts: Capabilities.ReactContext[]) => {\n if (contexts.length === 0) {\n return ({ children }: PropsWithChildren) => <>{children}</>;\n }\n\n return topologicalSort(contexts)\n .map(({ context }) => context)\n .reduce((Acc, Next) => ({ children }) => (\n <Acc>\n <Next>{children}</Next>\n </Acc>\n ));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Fiber from 'effect/Fiber';\nimport * as PubSub from 'effect/PubSub';\nimport * as Queue from 'effect/Queue';\nimport React, { type FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { ErrorBoundary, ErrorFallback, type FallbackProps } from '@dxos/react-error-boundary';\nimport { useAsyncEffect, useDefaultValue } from '@dxos/react-hooks';\nimport { ContextProtocolProvider } from '@dxos/web-context-react';\n\nimport { ActivationEvents, Capabilities } from '../../common';\nimport { PluginManagerContext } from '../../context';\nimport { type ActivationEvent, type Plugin, PluginManager } from '../../core';\nimport { App, PluginManagerProvider } from '../components';\n\nconst ENABLED_KEY = 'org.dxos.app-framework.enabled';\n\nexport type StartupProgress = {\n /** Number of modules that have been activated. */\n activated: number;\n /** Total number of modules registered. */\n total: number;\n /** Fractional progress (0-1). */\n progress: number;\n /**\n * Raw activation event key (e.g. `org.dxos.app-framework.event.startup`).\n * Set on event-level transitions, *and* on module-level transitions where\n * it carries the parent activation event that first triggered the\n * module's load (plumbed through `_loadCapabilitiesForModules` →\n * `_loadModule`). Consumers can use this either as the primary id (when\n * {@link module} is absent) or as an extra \"context\" field alongside\n * {@link module}.\n */\n event?: string;\n /**\n * Raw module id (e.g. `org.dxos.plugin.observability.module.ReactSurface`)\n * when the in-flight activation is module-level. When present,\n * {@link event} may also be set, identifying the parent activation that\n * triggered this module's load.\n */\n module?: string;\n /**\n * Pre-humanized label for the currently surfaced transition (module\n * label if {@link module} is set, otherwise the event label), supplied\n * for consumers that want a sensible default. Hosts that prefer to\n * render their own label can read the raw {@link event}/{@link module}\n * fields and ignore this — the framework leaves the policy choice\n * (which transitions to surface, how to format them, whether to drop\n * sub-modules entirely) to the host's `Placeholder`.\n */\n humanizedName?: string;\n};\n\nexport type UseAppOptions = {\n pluginManager?: PluginManager.PluginManager;\n pluginLoader?: PluginManager.ManagerOptions['pluginLoader'];\n onPluginRemove?: PluginManager.ManagerOptions['onRemove'];\n pluginRegistryProvider?: PluginManager.ManagerOptions['pluginRegistryProvider'];\n plugins?: Plugin.Plugin[];\n defaults?: string[];\n /**\n * Additional activation events to fire before startup.\n * These are fired alongside SetupReactSurface before the Startup event.\n */\n setupEvents?: ActivationEvent.ActivationEvent[];\n cacheEnabled?: boolean;\n safeMode?: boolean;\n debounce?: number;\n timeout?: number;\n fallback?: FC<FallbackProps>;\n};\n\n/**\n * Expected usage is for this to be the entrypoint of the application.\n * Initializes plugins and renders the root components.\n *\n * @example\n * const plugins = [LayoutPlugin(), MyPlugin()];\n * const defaults = [MyPluginId];\n * const fallback = () => <div>Initializing Plugins...</div>;\n * const App = useApp({ plugins, defaults, fallback });\n * createRoot(document.getElementById('root')!).render(\n * <StrictMode>\n * <App />\n * </StrictMode>,\n * );\n *\n * @param params.pluginLoader A function which loads new plugins.\n * @param params.plugins All plugins available to the application. Plugins whose `meta.tags` includes `'system'` are treated as core (force-enabled, not user-toggleable).\n * @param params.defaults Default plugins are enabled by default but can be disabled by the user.\n * @param params.cacheEnabled Whether to cache enabled plugins in localStorage.\n * @param params.safeMode Whether to enable safe mode, which disables optional plugins.\n * @param params.fallback Fallback component to render if an error occurs during startup.\n */\nexport const useApp = ({\n pluginManager,\n pluginLoader: pluginLoaderProp,\n onPluginRemove,\n pluginRegistryProvider,\n plugins: pluginsProp,\n defaults: defaultsProp,\n setupEvents: setupEventsProp,\n fallback = ErrorFallback,\n cacheEnabled = false,\n safeMode = false,\n debounce = 0,\n timeout = 30_000,\n}: UseAppOptions) => {\n const plugins = useDefaultValue(pluginsProp, () => []);\n const defaults = useDefaultValue(defaultsProp, () => []);\n const setupEvents = useDefaultValue(setupEventsProp, () => []);\n\n const pluginLoader = useMemo(\n () =>\n pluginLoaderProp ??\n ((id: string) =>\n Effect.sync(() => {\n const plugin = plugins.find((plugin) => plugin.meta.id === id);\n invariant(plugin, `Plugin not found: ${id}`);\n return { plugin };\n })),\n [pluginLoaderProp, plugins],\n );\n\n const readyRef = useRef(false);\n const [ready, setReady] = useState(false);\n const errorRef = useRef<unknown>(null);\n const [error, setError] = useState<unknown>(null);\n const [startupProgress, setStartupProgress] = useState<StartupProgress>({\n activated: 0,\n total: 0,\n progress: 0,\n });\n // TODO(wittjosiah): Migrate to Atom.kvs for isomorphic storage.\n const cached: string[] = useMemo(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? '[]'), []);\n const enabled = useMemo(\n () => (safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults),\n [safeMode, cacheEnabled, cached, defaults],\n );\n const isExternalManager = !!pluginManager;\n const manager = useMemo(() => {\n const mgr =\n pluginManager ??\n PluginManager.make({\n pluginLoader,\n plugins,\n enabled,\n onRemove: onPluginRemove,\n pluginRegistryProvider,\n });\n log('useApp: useMemo created/reused manager', { provided: !!pluginManager });\n return mgr;\n }, [pluginManager, pluginLoader, plugins, enabled, onPluginRemove, pluginRegistryProvider]);\n\n useEffect(() => {\n if (!cacheEnabled) {\n return;\n }\n return manager.registry.subscribe(manager.enabled, (value) => {\n localStorage.setItem(ENABLED_KEY, JSON.stringify(value));\n });\n }, [cacheEnabled, manager]);\n\n useEffect(() => {\n setupDevtools(manager);\n }, [manager]);\n\n useAsyncEffect(async () => {\n log('useApp: effect mount');\n\n manager.capabilities.contribute({\n interface: Capabilities.PluginManager,\n implementation: manager,\n module: 'org.dxos.app-framework.plugin-manager',\n });\n\n manager.capabilities.contribute({\n interface: Capabilities.AtomRegistry,\n implementation: manager.registry,\n module: 'org.dxos.app-framework.atom-registry',\n });\n\n const fiber = Effect.gen(function* () {\n const queue = yield* PubSub.subscribe(manager.activation);\n const listener = yield* Effect.forkDaemon(\n Queue.take(queue).pipe(\n Effect.tap(({ event, state, module, error: error$ }) =>\n Effect.sync(() => {\n // Event-level Startup activated (no `module` field) fires once,\n // after every module triggered by Startup has finished. Module\n // activations now also carry their parent event id (so the trace\n // can attribute a module to its triggering event), which means\n // each module activated under Startup publishes\n // `{ event: 'startup', state: 'activated', module: <id> }`. Without\n // the `!module` guard the listener would mark the app ready on\n // the *first* such module rather than waiting for the event-level\n // completion — leaving downstream capabilities (operation-invoker,\n // app-graph, …) un-registered when the boot loader dismisses.\n if (event === ActivationEvents.Startup.id && state === 'activated' && !module) {\n clearTimeout(timeoutId);\n setReady(true);\n readyRef.current = true;\n // Trigger startup profiler dump if available.\n (globalThis as any).composer?.profiler?.dump();\n // Notify any host observability layer that startup completed.\n // A `CustomEvent` keeps this generic — app-framework doesn't\n // import a provider, and consumers can capture the startup\n // summary without us picking one.\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('app-framework:startup-activated'));\n }\n return;\n }\n // `activating` is the start-of-load signal. Surface the raw\n // `module` (or `event`) plus a pre-humanized label so the\n // boot loader can decide how to render each transition — show\n // everything, suppress noisy sub-modules, group by plugin,\n // or apply its own formatting. We intentionally do NOT touch\n // these fields on `activated`: pairing the two would cause\n // back-to-back identical updates to the host's effect, which\n // the boot loader treats as a re-trigger because\n // `progress.progress` moved. Leaving the label alone on\n // completion keeps it accurate (\"now activating X\") until\n // the next module starts.\n if (module && state === 'activating' && !readyRef.current) {\n setStartupProgress((current) => ({\n ...current,\n // `event` here is the activation event that first\n // triggered this module load (plumbed through\n // `_loadCapabilitiesForModules` → `_loadModule`).\n // Falsy/empty falls back to undefined so consumers can\n // tell \"no parent context\" from \"parent context: <X>\".\n event: event || undefined,\n module,\n humanizedName: humanizeModuleId(module),\n }));\n }\n // Update the activation count when a module commits. The\n // ring's fraction comes from this; `event`/`module`/\n // `humanizedName` were set by the matching `activating`\n // message above and are left alone so the count can advance\n // without re-firing the host's status callback.\n if (module && state === 'activated' && !readyRef.current) {\n const active = manager.getActive();\n const total = manager.getModules().length;\n setStartupProgress((current) => ({\n ...current,\n activated: active.length,\n total,\n progress: total > 0 ? active.length / total : 0,\n }));\n }\n // Event-level `activating` (no `module`) — fired at the start\n // of `_activateModulesForEvent` and recursively for each\n // before/after event. Surfaces a label during the gap before\n // the first module-level message lands; subsequent module\n // updates immediately overwrite this with a more specific\n // label.\n if (event && !module && state === 'activating' && !readyRef.current) {\n setStartupProgress((current) => ({\n ...current,\n event,\n module: undefined,\n humanizedName: humanizeEventKey(event),\n }));\n }\n if (error$ && !readyRef.current) {\n setError(error$);\n errorRef.current = error$;\n }\n }),\n ),\n Effect.forever,\n ),\n );\n\n yield* Effect.all([\n ...setupEvents.map((event) => manager.activate(event)),\n manager.activate(ActivationEvents.SetupReactSurface),\n manager.activate(ActivationEvents.Startup),\n ]);\n\n return yield* Fiber.join(listener);\n }).pipe(Effect.scoped, Effect.runFork);\n\n // Set up a timeout for startup.\n const timeoutId = setTimeout(() => {\n if (!readyRef.current && !errorRef.current) {\n log.warn('startup timeout diagnostic', {\n eventsFired: manager.getEventsFired(),\n activeModules: manager.getActive(),\n pendingReset: manager.getPendingReset(),\n });\n void runAndForwardErrors(Fiber.interrupt(fiber));\n setError(new Error(`Startup timed out after ${timeout}ms`));\n }\n }, timeout);\n\n return () => {\n log('useApp: effect cleanup');\n clearTimeout(timeoutId);\n void runAndForwardErrors(Fiber.interrupt(fiber));\n if (!isExternalManager) {\n void runAndForwardErrors(manager.shutdown());\n }\n };\n }, [manager]);\n\n const progressRef = useRef(startupProgress);\n progressRef.current = startupProgress;\n\n return useCallback(\n () => (\n <ErrorBoundary name='app' FallbackComponent={fallback}>\n <PluginManagerProvider value={manager}>\n <ContextProtocolProvider value={manager} context={PluginManagerContext}>\n <RegistryContext.Provider value={manager.registry}>\n <App ready={ready} error={error} debounce={debounce} progress={progressRef.current} />\n </RegistryContext.Provider>\n </ContextProtocolProvider>\n </PluginManagerProvider>\n </ErrorBoundary>\n ),\n [fallback, manager, ready, error],\n );\n};\n\nconst setupDevtools = (manager: PluginManager.PluginManager) => {\n (globalThis as any).composer ??= {};\n (globalThis as any).composer.manager = manager;\n};\n\n/**\n * Extracts a human-readable label from a module ID.\n *\n * Module IDs follow `org.dxos.plugin.<plugin-slug>.module.<module-name>`,\n * where `<plugin-slug>` is kebab-case and `<module-name>` is either an\n * explicit string (often kebab-case, e.g. `'observability'`, `'namespace'`)\n * or a capability tag in PascalCase from `Capability.getModuleTag(...)`\n * (e.g. `'ReactSurface'`, `'AppGraphBuilder'`). The output is\n * `\"Title Case Plugin: kebab-module\"` so the visible status names both the\n * plugin and the aspect being activated, helping disambiguate the multiple\n * modules a plugin contributes.\n *\n * Examples:\n * - \"org.dxos.plugin.markdown.module.ReactSurface\" → \"Markdown: react-surface\"\n * - \"org.dxos.plugin.observability.module.AppGraphBuilder\" → \"Observability: app-graph-builder\"\n * - \"org.dxos.plugin.observability.module.observability\" → \"Observability\"\n * (the module name matches the plugin slug — collapsed to avoid\n * \"Observability: observability\" noise.)\n */\nconst humanizeModuleId = (moduleId: string): string => {\n const match = moduleId.match(/\\.plugin\\.([^.]+)\\.module\\.(.+)$/);\n if (!match) {\n // Fallback: use the last segment.\n const parts = moduleId.split('.');\n return parts[parts.length - 1];\n }\n const [, pluginSlug, moduleName] = match;\n const pluginLabel = pluginSlug\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n // Normalise the module name to kebab-case so PascalCase capability tags\n // (\"ReactSurface\") read consistently with explicit kebab IDs\n // (\"operation-handler\"). The two-step substitution handles consecutive\n // uppercase runs (`URLLoader` → `url-loader`) without splitting them\n // mid-acronym.\n const moduleLabel = moduleName\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n .toLowerCase();\n // Capability modules whose name matches the plugin slug (e.g. the\n // observability plugin's `observability` capability module) would render\n // as \"Observability: observability\" — drop the redundant suffix.\n if (moduleLabel === pluginSlug) {\n return pluginLabel;\n }\n return `${pluginLabel}: ${moduleLabel}`;\n};\n\n/**\n * Extracts a human-readable label from an activation event key.\n * E.g., \"org.dxos.app-framework.event.setup-react-surface\" → \"Setup React Surface\".\n */\nconst humanizeEventKey = (eventKey: string): string => {\n // Strip a leading specifier (composite key form: \"<id>:<specifier>\").\n const id = eventKey.split(':')[0];\n // Match the trailing segment after `.event.`.\n const match = id.match(/\\.event\\.(.+)$/);\n const slug = match ? match[1] : (id.split('.').pop() ?? id);\n return slug\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback } from 'react';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { Capabilities } from '../../common';\nimport { type Capability } from '../../core';\nimport { usePluginManager } from '../components';\n\n/**\n * Hook to request capabilities from the plugin context.\n * @returns An array of capabilities.\n */\nexport const useCapabilities = <T>(interfaceDef: Capability.InterfaceDef<T>) => {\n const manager = usePluginManager();\n return useAtomValue(manager.capabilities.atom(interfaceDef));\n};\n\n/**\n * Hook to request a capability from the plugin context.\n * @returns The capability.\n * @throws If no capability is found.\n */\n// TODO(burdon): Option not to throw?\nexport const useCapability = <T>(interfaceDef: Capability.InterfaceDef<T>) => {\n const capabilities = useCapabilities(interfaceDef);\n invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`);\n return capabilities[0];\n};\n\n/**\n * Hook to get the current value of an atom capability.\n * Automatically subscribes to changes.\n * @example const settings = useAtomCapability(ThreadCapabilities.Settings);\n */\nexport const useAtomCapability = <T>(atomCapability: Capability.InterfaceDef<Atom.Atom<T>>): T => {\n const atom = useCapability(atomCapability);\n return useAtomValue(atom);\n};\n\n/**\n * Hook to get value and updater for an atom capability.\n * Returns [currentValue, updateFn] similar to useState.\n * @example const [settings, updateSettings] = useAtomCapabilityState(ThreadCapabilities.Settings);\n */\nexport const useAtomCapabilityState = <T>(\n atomCapability: Capability.InterfaceDef<Atom.Writable<T>>,\n): [T, (fn: (current: T) => T) => void] => {\n const registry = useCapability(Capabilities.AtomRegistry);\n const atom = useCapability(atomCapability);\n const value = useAtomValue(atom);\n const update = useCallback(\n (fn: (current: T) => T) => {\n registry.set(atom, fn(registry.get(atom)));\n },\n [registry, atom],\n );\n return [value, update];\n};\n\n/**\n * Hook to get the operation invoker capability.\n */\nexport const useOperationInvoker = (): Capabilities.OperationInvoker => useCapability(Capabilities.OperationInvoker);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useRef, useState } from 'react';\n\nexport enum LoadingState {\n Loading = 0,\n FadeIn = 1,\n FadeOut = 2,\n Done = 3,\n}\n\n/**\n * To avoid \"flashing\" the placeholder, we wait a period of time before starting the loading animation.\n * If loading completes during this time the placehoder is not shown, otherwise is it displayed for a minimum period of time.\n *\n * States:\n * 0: Loading - Wait for a period of time before starting the loading animation.\n * 1: Fade-in - Display a loading animation.\n * 2: Fade-out - Fade out the loading animation.\n * 3: Done - Remove the placeholder.\n */\nexport const useLoading = (ready: boolean, debounce = 0) => {\n const [stage, setStage] = useState<LoadingState>(LoadingState.Loading);\n // Mirror `ready` into a ref so the interval's `setStage` callback can read\n // the latest value without depending on the effect re-running. The pure\n // closure-capture pattern (with `ready` in deps) sticks the FSM at\n // `FadeIn` whenever HMR doesn't propagate the dep change end-to-end —\n // a ref sidesteps that entirely and fires the read on every tick.\n const readyRef = useRef(ready);\n readyRef.current = ready;\n\n useEffect(() => {\n if (!debounce) {\n return;\n }\n\n const i = setInterval(() => {\n setStage((stage) => {\n const isReady = readyRef.current;\n switch (stage) {\n case LoadingState.Loading: {\n if (!isReady) {\n return LoadingState.FadeIn;\n }\n clearInterval(i);\n return LoadingState.Done;\n }\n\n case LoadingState.FadeIn: {\n if (isReady) {\n return LoadingState.FadeOut;\n }\n break;\n }\n\n case LoadingState.FadeOut: {\n clearInterval(i);\n return LoadingState.Done;\n }\n }\n\n return stage;\n });\n }, debounce);\n\n return () => clearInterval(i);\n }, [debounce]);\n\n if (!debounce) {\n return ready ? LoadingState.Done : LoadingState.Loading;\n }\n\n return stage;\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport { type DependencyList, use, useCallback, useMemo } from 'react';\n\nimport { Operation, ServiceResolver } from '@dxos/compute';\nimport { unwrapExit } from '@dxos/effect';\nimport type { SpaceId } from '@dxos/keys';\n\nimport { Capabilities } from '../../common';\nimport { useCapability } from './useCapabilities';\n\n/**\n * Resolve the shared {@link Capabilities.ProcessManagerRuntime} from the plugin context.\n */\nexport const useProcessManagerRuntime = (): Capabilities.ProcessManagerRuntime =>\n useCapability(Capabilities.ProcessManagerRuntime);\n\n/**\n * Build a callback that runs an effect on the {@link Capabilities.ProcessManagerRuntime}\n * with space-scoped services resolved via {@link ServiceResolver.provide}.\n *\n * The `tags` tuple must list every service the effect requires (beyond the\n * fixed {@link Capabilities.ProcessManagerRuntimeServices}); these services are\n * resolved for the given `spaceId` through the runtime's service resolver.\n *\n * Nested `Operation.invoke` / `Operation.schedule` calls within the effect\n * inherit `spaceId` as a default {@link Operation.InvokeOptions} so that\n * spawned operation processes have a space context (and therefore can resolve\n * space-scoped services like `Database.Service`) without each call site having\n * to thread the id through manually.\n */\nexport const useSpaceCallback = <const Tags extends readonly Context.Tag<any, any>[], T>(\n spaceId: SpaceId | undefined,\n tags: Tags,\n fn: () => Effect.Effect<T, any, Context.Tag.Identifier<Tags[number]> | Capabilities.ProcessManagerRuntimeServices>,\n deps?: DependencyList,\n): (() => Promise<T>) => {\n const runtime = useProcessManagerRuntime();\n return useCallback(() => {\n if (spaceId === undefined) {\n throw new TypeError('Space not provided to useSpaceCallback');\n }\n const layer = Layer.merge(\n ServiceResolver.provide({ space: spaceId }, ...tags),\n Operation.withInvocationOptions({ spaceId }),\n );\n return runtime.runPromise(fn().pipe(Effect.provide(layer)) as Effect.Effect<T, any, any>);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [runtime, spaceId, ...(deps ?? [])]);\n};\n\n/**\n * Suspensefully resolve a single space-scoped service via the\n * {@link Capabilities.ProcessManagerRuntime}'s service resolver.\n */\nexport const useSpaceService = <T extends Context.Tag<any, any>>(\n tag: T,\n spaceId: SpaceId | undefined,\n): Context.Tag.Service<T> | undefined => {\n const runtime = useProcessManagerRuntime();\n const promise = useMemo(() => {\n if (spaceId === undefined) {\n return undefined;\n }\n const layer = ServiceResolver.provide({ space: spaceId }, tag);\n const effect = Effect.flatMap(tag, (service) => Effect.succeed(service)).pipe(Effect.provide(layer));\n return runtime.runPromiseExit(effect as Effect.Effect<Context.Tag.Service<T>, any, any>);\n }, [runtime, spaceId, tag]);\n if (!promise) {\n return undefined;\n }\n return unwrapExit(use(promise));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback, useContext } from 'react';\n\n/**\n * Hook to read and update a settings atom.\n * Returns the current value and an update function.\n */\nexport const useSettingsState = <T>(\n atom: Atom.Writable<T>,\n): { settings: T; updateSettings: (fn: (current: T) => T) => void } => {\n const registry = useContext(RegistryContext);\n const settings = useAtomValue(atom);\n\n const updateSettings = useCallback(\n (fn: (current: T) => T) => {\n registry.set(atom, fn(registry.get(atom)));\n },\n [registry, atom],\n );\n\n return { settings, updateSettings };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useEffect", "useLayoutEffect", "RegistryContext", "Effect", "Fiber", "PubSub", "Queue", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "runAndForwardErrors", "invariant", "log", "ErrorBoundary", "ErrorFallback", "useAsyncEffect", "useDefaultValue", "ContextProtocolProvider", "ENABLED_KEY", "defaults", "useDefaultValue", "defaultsProp", "setupEvents", "setupEventsProp", "pluginLoader", "pluginLoaderProp", "plugin", "find", "meta", "invariant", "id", "plugins", "errorRef", "useRef", "error", "setError", "useState", "startupProgress", "setStartupProgress", "activated", "total", "progress", "safeMode", "cacheEnabled", "cached", "pluginManager", "enabled", "onRemove", "pluginRegistryProvider", "mgr", "onPluginRemove", "useEffect", "manager", "useAsyncEffect", "capabilities", "contribute", "interface", "Capabilities", "PluginManager", "implementation", "module", "registry", "fiber", "forkDaemon", "setReady", "readyRef", "current", "globalThis", "humanizedName", "humanizeModuleId", "length", "active", "event", "error$", "Effect", "forever", "activate", "ActivationEvents", "Startup", "join", "listener", "pipe", "timeoutId", "eventsFired", "getEventsFired", "activeModules", "pendingReset", "getPendingReset", "runAndForwardErrors", "Fiber", "Error", "timeout", "clearTimeout", "interrupt", "isExternalManager", "shutdown", "progressRef", "name", "FallbackComponent", "fallback", "value", "ContextProtocolProvider", "PluginManagerContext", "App", "ready", "debounce", "composer", "match", "parts", "pluginSlug", "moduleName", "pluginLabel", "split", "map", "word", "useAtomValue", "useCallback", "invariant", "__dxlog_file", "useAtomValue", "capabilities", "interfaceDef", "invariant", "length", "atom", "useCapability", "atomCapability", "value", "update", "fn", "registry", "set", "useCallback", "useEffect", "useRef", "useState", "LoadingState", "useLoading", "ready", "debounce", "stage", "setStage", "readyRef", "current", "i", "setInterval", "isReady", "clearInterval", "Effect", "Layer", "use", "useCallback", "useMemo", "Operation", "ServiceResolver", "unwrapExit", "useProcessManagerRuntime", "useCapability", "Capabilities", "ProcessManagerRuntime", "useSpaceCallback", "spaceId", "tags", "fn", "deps", "runtime", "useCallback", "undefined", "TypeError", "layer", "merge", "ServiceResolver", "provide", "space", "Operation", "withInvocationOptions", "runPromise", "pipe", "useSpaceService", "tag", "promise", "useMemo", "effect", "flatMap", "service", "succeed", "runPromiseExit", "unwrapExit", "use", "RegistryContext", "useAtomValue", "useCallback", "useContext", "useSettingsState", "atom", "registry", "settings", "updateSettings", "fn", "set", "get", "FIRST_INTERACTIVE_MARK", "App", "ready", "error", "debounce", "progress", "reactContexts", "useCapabilities", "Capabilities", "ReactContext", "reactRoots", "ReactRoot", "stage", "useLoading", "placeholderDismissed", "LoadingState", "Done", "useEffect", "FadeOut", "fraction", "window", "__bootLoader", "humanizedName", "status", "event", "module", "humanized", "useLayoutEffect", "performance", "getEntriesByName", "length", "mark", "dismiss", "location", "search", "Error", "ComposedContext", "composeContexts", "React", "map", "id", "root", "Component", "key", "contexts", "children", "topologicalSort", "context", "reduce", "Acc", "Next"]
7
+ }
@@ -1,19 +1,19 @@
1
- import "../chunk-KFDF7KR3.mjs";
1
+ import "../chunk-Q2GLJTVV.mjs";
2
2
  import {
3
3
  capabilities_exports
4
- } from "../chunk-5AHASNDW.mjs";
4
+ } from "../chunk-2ZIYRDAF.mjs";
5
5
  import {
6
6
  activation_events_exports
7
7
  } from "../chunk-5GY3YOEL.mjs";
8
8
  import "../chunk-FO3IYSLV.mjs";
9
- import "../chunk-KLHQNYJ2.mjs";
9
+ import "../chunk-KZUDO43J.mjs";
10
10
  import {
11
11
  plugin_manager_exports
12
- } from "../chunk-VJ5PFAWC.mjs";
12
+ } from "../chunk-BMLCIFZW.mjs";
13
13
  import "../chunk-66IXTIVK.mjs";
14
14
  import {
15
15
  plugin_exports
16
- } from "../chunk-SLX73WRZ.mjs";
16
+ } from "../chunk-DC3WRPBV.mjs";
17
17
  import {
18
18
  capability_exports
19
19
  } from "../chunk-IW44C7UL.mjs";
@@ -5,10 +5,10 @@ import {
5
5
  Startup
6
6
  } from "../chunk-5GY3YOEL.mjs";
7
7
  import "../chunk-FO3IYSLV.mjs";
8
- import "../chunk-KLHQNYJ2.mjs";
9
- import "../chunk-VJ5PFAWC.mjs";
8
+ import "../chunk-KZUDO43J.mjs";
9
+ import "../chunk-BMLCIFZW.mjs";
10
10
  import "../chunk-66IXTIVK.mjs";
11
- import "../chunk-SLX73WRZ.mjs";
11
+ import "../chunk-DC3WRPBV.mjs";
12
12
  import "../chunk-IW44C7UL.mjs";
13
13
  import "../chunk-J5LGTIGS.mjs";
14
14
  export {
@@ -21,12 +21,12 @@ import {
21
21
  getAtomValue,
22
22
  subscribeAtom,
23
23
  updateAtomValue
24
- } from "../chunk-5AHASNDW.mjs";
24
+ } from "../chunk-2ZIYRDAF.mjs";
25
25
  import "../chunk-FO3IYSLV.mjs";
26
- import "../chunk-KLHQNYJ2.mjs";
27
- import "../chunk-VJ5PFAWC.mjs";
26
+ import "../chunk-KZUDO43J.mjs";
27
+ import "../chunk-BMLCIFZW.mjs";
28
28
  import "../chunk-66IXTIVK.mjs";
29
- import "../chunk-SLX73WRZ.mjs";
29
+ import "../chunk-DC3WRPBV.mjs";
30
30
  import "../chunk-IW44C7UL.mjs";
31
31
  import "../chunk-J5LGTIGS.mjs";
32
32
  export {
@@ -4,9 +4,9 @@ import {
4
4
  PluginTimeoutError,
5
5
  isManager,
6
6
  make
7
- } from "../chunk-VJ5PFAWC.mjs";
7
+ } from "../chunk-BMLCIFZW.mjs";
8
8
  import "../chunk-66IXTIVK.mjs";
9
- import "../chunk-SLX73WRZ.mjs";
9
+ import "../chunk-DC3WRPBV.mjs";
10
10
  import "../chunk-IW44C7UL.mjs";
11
11
  import "../chunk-J5LGTIGS.mjs";
12
12
  export {
@@ -12,10 +12,11 @@ import {
12
12
  isPluginModule,
13
13
  lazy,
14
14
  make,
15
+ makeMeta,
15
16
  reset,
16
17
  resolveLazy,
17
18
  shutdown
18
- } from "../chunk-SLX73WRZ.mjs";
19
+ } from "../chunk-DC3WRPBV.mjs";
19
20
  import "../chunk-IW44C7UL.mjs";
20
21
  import "../chunk-J5LGTIGS.mjs";
21
22
  export {
@@ -32,6 +33,7 @@ export {
32
33
  isPluginModule,
33
34
  lazy,
34
35
  make,
36
+ makeMeta,
35
37
  reset,
36
38
  resolveLazy,
37
39
  shutdown
@@ -7,8 +7,8 @@ import {
7
7
  preload,
8
8
  setInstalledVersion,
9
9
  uninstall
10
- } from "../chunk-KLHQNYJ2.mjs";
11
- import "../chunk-SLX73WRZ.mjs";
10
+ } from "../chunk-KZUDO43J.mjs";
11
+ import "../chunk-DC3WRPBV.mjs";
12
12
  import "../chunk-IW44C7UL.mjs";
13
13
  import "../chunk-J5LGTIGS.mjs";
14
14
  export {
@@ -6,14 +6,13 @@ import {
6
6
  history_tracker_exports,
7
7
  undo_mapping_exports,
8
8
  undo_registry_exports
9
- } from "./chunk-BRK6GYNB.mjs";
9
+ } from "./chunk-E5DTDNDY.mjs";
10
10
  import {
11
- Label,
12
- UndoOperation
13
- } from "./chunk-KFDF7KR3.mjs";
11
+ Label
12
+ } from "./chunk-Q2GLJTVV.mjs";
14
13
  import {
15
14
  capabilities_exports
16
- } from "./chunk-5AHASNDW.mjs";
15
+ } from "./chunk-2ZIYRDAF.mjs";
17
16
  import {
18
17
  activation_events_exports
19
18
  } from "./chunk-5GY3YOEL.mjs";
@@ -25,37 +24,38 @@ import {
25
24
  plugin_asset_cache_exports,
26
25
  plugin_manifest_exports,
27
26
  url_loader_exports
28
- } from "./chunk-KLHQNYJ2.mjs";
27
+ } from "./chunk-KZUDO43J.mjs";
29
28
  import {
30
29
  capability_manager_exports,
31
30
  plugin_manager_exports,
32
31
  registry_exports
33
- } from "./chunk-VJ5PFAWC.mjs";
32
+ } from "./chunk-BMLCIFZW.mjs";
34
33
  import {
35
34
  activation_event_exports
36
35
  } from "./chunk-66IXTIVK.mjs";
37
36
  import {
38
37
  plugin_exports
39
- } from "./chunk-SLX73WRZ.mjs";
38
+ } from "./chunk-DC3WRPBV.mjs";
40
39
  import {
41
40
  capability_exports
42
41
  } from "./chunk-IW44C7UL.mjs";
43
42
  import "./chunk-J5LGTIGS.mjs";
44
43
 
45
44
  // src/plugin-process-manager/meta.ts
46
- var meta = {
47
- id: "org.dxos.plugin.process-manager",
45
+ import { DXN } from "@dxos/keys";
46
+ var meta = plugin_exports.makeMeta({
47
+ key: DXN.make("org.dxos.plugin.processManager"),
48
48
  name: "Process Manager Plugin",
49
49
  author: "DXOS",
50
50
  description: "Hosts the process-manager runtime that composes contributed layer specs into a service resolver, exposes the operation invoker built on top of it, and registers undo/history tracking.",
51
51
  tags: [
52
52
  "system"
53
53
  ]
54
- };
54
+ });
55
55
 
56
56
  // src/plugin-process-manager/ProcessManagerPlugin.ts
57
- var ProcessManagerCapability = capability_exports.lazy("ProcessManager", () => import("./process-manager-capability-JIWLN7SU.mjs"));
58
- var HistoryCapabilities = capability_exports.lazy("HistoryCapabilities", () => import("./capability-K5XIVCQU.mjs"));
57
+ var ProcessManagerCapability = capability_exports.lazy("ProcessManager", () => import("./process-manager-capability-4FUA4TRP.mjs"));
58
+ var HistoryCapabilities = capability_exports.lazy("HistoryCapabilities", () => import("./capability-JCUNWZ66.mjs"));
59
59
  var ProcessManagerPlugin = plugin_exports.define(meta).pipe(plugin_exports.addModule({
60
60
  activatesOn: activation_events_exports.Startup,
61
61
  firesBeforeActivation: [
@@ -88,7 +88,6 @@ export {
88
88
  ProcessManagerPlugin,
89
89
  registry_exports as Registry,
90
90
  undo_mapping_exports as UndoMapping,
91
- UndoOperation,
92
91
  undo_registry_exports as UndoRegistry,
93
92
  url_loader_exports as UrlLoader
94
93
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/plugin-process-manager/meta.ts", "../../../src/plugin-process-manager/ProcessManagerPlugin.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Plugin } from '../core';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.process-manager',\n name: 'Process Manager Plugin',\n author: 'DXOS',\n description:\n 'Hosts the process-manager runtime that composes contributed layer specs into a service resolver, exposes the operation invoker built on top of it, and registers undo/history tracking.',\n tags: ['system'],\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvents } from '../common';\nimport { Capability, Plugin } from '../core';\nimport { meta } from './meta';\n\nconst ProcessManagerCapability = Capability.lazy('ProcessManager', () => import('./process-manager-capability'));\nconst HistoryCapabilities = Capability.lazy('HistoryCapabilities', () => import('./history/capability'));\n\nexport const ProcessManagerPlugin = Plugin.define(meta).pipe(\n Plugin.addModule({\n activatesOn: ActivationEvents.Startup,\n firesBeforeActivation: [ActivationEvents.SetupProcessManager],\n firesAfterActivation: [ActivationEvents.ProcessManagerReady],\n activate: ProcessManagerCapability,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvents.ProcessManagerReady,\n activate: HistoryCapabilities,\n }),\n Plugin.make,\n);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,QAAQ;EACRC,aACE;EACFC,MAAM;IAAC;;AACT;;;ACLA,IAAMC,2BAA2BC,mBAAWC,KAAK,kBAAkB,MAAM,OAAO,2CAAA,CAAA;AAChF,IAAMC,sBAAsBF,mBAAWC,KAAK,uBAAuB,MAAM,OAAO,2BAAA,CAAA;AAEzE,IAAME,uBAAuBC,eAAOC,OAAOC,IAAAA,EAAMC,KACtDH,eAAOI,UAAU;EACfC,aAAaC,0BAAiBC;EAC9BC,uBAAuB;IAACF,0BAAiBG;;EACzCC,sBAAsB;IAACJ,0BAAiBK;;EACxCC,UAAUjB;AACZ,CAAA,GACAK,eAAOI,UAAU;EACfC,aAAaC,0BAAiBK;EAC9BC,UAAUd;AACZ,CAAA,GACAE,eAAOa,IAAI;",
6
- "names": ["meta", "id", "name", "author", "description", "tags", "ProcessManagerCapability", "Capability", "lazy", "HistoryCapabilities", "ProcessManagerPlugin", "Plugin", "define", "meta", "pipe", "addModule", "activatesOn", "ActivationEvents", "Startup", "firesBeforeActivation", "SetupProcessManager", "firesAfterActivation", "ProcessManagerReady", "activate", "make"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\nimport { Plugin } from '../core';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.processManager'),\n name: 'Process Manager Plugin',\n author: 'DXOS',\n description:\n 'Hosts the process-manager runtime that composes contributed layer specs into a service resolver, exposes the operation invoker built on top of it, and registers undo/history tracking.',\n tags: ['system'],\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvents } from '../common';\nimport { Capability, Plugin } from '../core';\nimport { meta } from './meta';\n\nconst ProcessManagerCapability = Capability.lazy('ProcessManager', () => import('./process-manager-capability'));\nconst HistoryCapabilities = Capability.lazy('HistoryCapabilities', () => import('./history/capability'));\n\nexport const ProcessManagerPlugin = Plugin.define(meta).pipe(\n Plugin.addModule({\n activatesOn: ActivationEvents.Startup,\n firesBeforeActivation: [ActivationEvents.SetupProcessManager],\n firesAfterActivation: [ActivationEvents.ProcessManagerReady],\n activate: ProcessManagerCapability,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvents.ProcessManagerReady,\n activate: HistoryCapabilities,\n }),\n Plugin.make,\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,WAAW;AAIb,IAAMC,OAAOC,eAAOC,SAAS;EAClCC,KAAKC,IAAIC,KAAK,gCAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,aACE;EACFC,MAAM;IAAC;;AACT,CAAA;;;ACPA,IAAMC,2BAA2BC,mBAAWC,KAAK,kBAAkB,MAAM,OAAO,2CAAA,CAAA;AAChF,IAAMC,sBAAsBF,mBAAWC,KAAK,uBAAuB,MAAM,OAAO,2BAAA,CAAA;AAEzE,IAAME,uBAAuBC,eAAOC,OAAOC,IAAAA,EAAMC,KACtDH,eAAOI,UAAU;EACfC,aAAaC,0BAAiBC;EAC9BC,uBAAuB;IAACF,0BAAiBG;;EACzCC,sBAAsB;IAACJ,0BAAiBK;;EACxCC,UAAUjB;AACZ,CAAA,GACAK,eAAOI,UAAU;EACfC,aAAaC,0BAAiBK;EAC9BC,UAAUd;AACZ,CAAA,GACAE,eAAOa,IAAI;",
6
+ "names": ["DXN", "meta", "Plugin", "makeMeta", "key", "DXN", "make", "name", "author", "description", "tags", "ProcessManagerCapability", "Capability", "lazy", "HistoryCapabilities", "ProcessManagerPlugin", "Plugin", "define", "meta", "pipe", "addModule", "activatesOn", "ActivationEvents", "Startup", "firesBeforeActivation", "SetupProcessManager", "firesAfterActivation", "ProcessManagerReady", "activate", "make"]
7
7
  }