@dxos/app-framework 0.8.4-staging.60fe92afc8 → 0.9.1-main.c7dcc2e112

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 (208) hide show
  1. package/dist/lib/browser/{capability-BOPAKKWG.mjs → capability-Z4MRP3CP.mjs} +9 -9
  2. package/dist/lib/browser/{chunk-CO3XLNUX.mjs → chunk-37PG7XJC.mjs} +18 -18
  3. package/dist/lib/browser/chunk-37PG7XJC.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-66IXTIVK.mjs → chunk-3NQLTQCP.mjs} +6 -7
  5. package/dist/lib/browser/chunk-3NQLTQCP.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-KZUDO43J.mjs → chunk-3UTDRCKX.mjs} +31 -23
  7. package/dist/lib/browser/chunk-3UTDRCKX.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-53HJHMS5.mjs +7 -0
  9. package/dist/lib/browser/chunk-53HJHMS5.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-IW44C7UL.mjs → chunk-CMINFVA5.mjs} +1 -1
  11. package/dist/lib/browser/chunk-CMINFVA5.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-Y66ELD4U.mjs → chunk-DFVSOBV2.mjs} +17 -7
  13. package/dist/lib/browser/chunk-DFVSOBV2.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-DC3WRPBV.mjs → chunk-S2ZBYQPI.mjs} +45 -12
  15. package/dist/lib/browser/chunk-S2ZBYQPI.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-HFLKXMT7.mjs → chunk-SWECIICH.mjs} +57 -41
  17. package/dist/lib/browser/chunk-SWECIICH.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-5GY3YOEL.mjs → chunk-VF37YTXJ.mjs} +5 -5
  19. package/dist/lib/browser/chunk-VF37YTXJ.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-XHS5KDNX.mjs → chunk-W4BHZING.mjs} +25 -25
  21. package/dist/lib/browser/chunk-W4BHZING.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-FO3IYSLV.mjs → chunk-YUVQIOTB.mjs} +29 -37
  23. package/dist/lib/browser/chunk-YUVQIOTB.mjs.map +7 -0
  24. package/dist/lib/browser/cli/index.mjs +9 -9
  25. package/dist/lib/browser/cli/index.mjs.map +2 -2
  26. package/dist/lib/browser/common/activation-events.mjs +7 -7
  27. package/dist/lib/browser/common/capabilities.mjs +7 -7
  28. package/dist/lib/browser/config/index.mjs +8 -0
  29. package/dist/lib/browser/config/index.mjs.map +7 -0
  30. package/dist/lib/browser/core/activation-event.mjs +1 -1
  31. package/dist/lib/browser/core/capability.mjs +1 -1
  32. package/dist/lib/browser/core/plugin-manager.mjs +4 -4
  33. package/dist/lib/browser/core/plugin.mjs +12 -2
  34. package/dist/lib/browser/core/url-loader.mjs +3 -3
  35. package/dist/lib/browser/index.mjs +14 -10
  36. package/dist/lib/browser/index.mjs.map +1 -1
  37. package/dist/lib/browser/meta.json +1 -1
  38. package/dist/lib/browser/{process-manager-capability-GXNUO7AR.mjs → process-manager-capability-RDROCCQD.mjs} +9 -9
  39. package/dist/lib/browser/testing/index.mjs +15 -15
  40. package/dist/lib/browser/testing/index.mjs.map +3 -3
  41. package/dist/lib/browser/testing/react.mjs +11 -11
  42. package/dist/lib/browser/testing/react.mjs.map +3 -3
  43. package/dist/lib/browser/ui/index.mjs +16 -10
  44. package/dist/lib/node-esm/{capability-KZWRTX7R.mjs → capability-34Z6NPVR.mjs} +9 -9
  45. package/dist/lib/node-esm/chunk-2UPUZXGU.mjs +9 -0
  46. package/dist/lib/node-esm/chunk-2UPUZXGU.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-FSVGKTF6.mjs → chunk-A4O42ZO3.mjs} +17 -7
  48. package/dist/lib/node-esm/chunk-A4O42ZO3.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-CTKEZHKF.mjs → chunk-AIDZMJ3U.mjs} +1 -1
  50. package/dist/lib/node-esm/chunk-AIDZMJ3U.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-XOCUANHO.mjs → chunk-BMW6P6QA.mjs} +6 -7
  52. package/dist/lib/node-esm/chunk-BMW6P6QA.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-A5CHGAZE.mjs → chunk-H7T7XXLS.mjs} +57 -41
  54. package/dist/lib/node-esm/chunk-H7T7XXLS.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-NULBHQYS.mjs → chunk-LUK3FCTH.mjs} +18 -18
  56. package/dist/lib/node-esm/chunk-LUK3FCTH.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-XGBUKRCK.mjs → chunk-TEQSMP2O.mjs} +31 -23
  58. package/dist/lib/node-esm/chunk-TEQSMP2O.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-KFZEB6BV.mjs → chunk-TLKYZKPW.mjs} +5 -5
  60. package/dist/lib/node-esm/chunk-TLKYZKPW.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-WK7OIQKI.mjs → chunk-VCPGX7WN.mjs} +29 -37
  62. package/dist/lib/node-esm/chunk-VCPGX7WN.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-XIGPWXCQ.mjs → chunk-WERVO5EK.mjs} +45 -12
  64. package/dist/lib/node-esm/chunk-WERVO5EK.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-SX5NVETP.mjs → chunk-ZRTG4TSS.mjs} +25 -25
  66. package/dist/lib/node-esm/chunk-ZRTG4TSS.mjs.map +7 -0
  67. package/dist/lib/node-esm/cli/index.mjs +9 -9
  68. package/dist/lib/node-esm/cli/index.mjs.map +2 -2
  69. package/dist/lib/node-esm/common/activation-events.mjs +7 -7
  70. package/dist/lib/node-esm/common/capabilities.mjs +7 -7
  71. package/dist/lib/node-esm/config/index.mjs +9 -0
  72. package/dist/lib/node-esm/config/index.mjs.map +7 -0
  73. package/dist/lib/node-esm/core/activation-event.mjs +1 -1
  74. package/dist/lib/node-esm/core/capability.mjs +1 -1
  75. package/dist/lib/node-esm/core/plugin-manager.mjs +4 -4
  76. package/dist/lib/node-esm/core/plugin.mjs +12 -2
  77. package/dist/lib/node-esm/core/url-loader.mjs +3 -3
  78. package/dist/lib/node-esm/index.mjs +14 -10
  79. package/dist/lib/node-esm/index.mjs.map +1 -1
  80. package/dist/lib/node-esm/meta.json +1 -1
  81. package/dist/lib/node-esm/{process-manager-capability-TX5TA6YN.mjs → process-manager-capability-6OCXSKUW.mjs} +9 -9
  82. package/dist/lib/node-esm/testing/index.mjs +15 -15
  83. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  84. package/dist/lib/node-esm/testing/react.mjs +11 -11
  85. package/dist/lib/node-esm/testing/react.mjs.map +3 -3
  86. package/dist/lib/node-esm/ui/index.mjs +16 -10
  87. package/dist/plugin/node-esm/index.mjs +406 -71
  88. package/dist/plugin/node-esm/index.mjs.map +4 -4
  89. package/dist/plugin/node-esm/meta.json +1 -1
  90. package/dist/types/src/cli/cli.d.ts +1 -1
  91. package/dist/types/src/common/activation-events.d.ts.map +1 -1
  92. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  93. package/dist/types/src/config/index.d.ts +2 -0
  94. package/dist/types/src/config/index.d.ts.map +1 -0
  95. package/dist/types/src/core/activation-event.d.ts +9 -6
  96. package/dist/types/src/core/activation-event.d.ts.map +1 -1
  97. package/dist/types/src/core/capability.d.ts +6 -2
  98. package/dist/types/src/core/capability.d.ts.map +1 -1
  99. package/dist/types/src/core/edge-registry-plugin-provider.d.ts +6 -11
  100. package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -1
  101. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  102. package/dist/types/src/core/plugin-manifest.d.ts +25 -7
  103. package/dist/types/src/core/plugin-manifest.d.ts.map +1 -1
  104. package/dist/types/src/core/plugin.d.ts +81 -91
  105. package/dist/types/src/core/plugin.d.ts.map +1 -1
  106. package/dist/types/src/core/registry.d.ts +17 -57
  107. package/dist/types/src/core/registry.d.ts.map +1 -1
  108. package/dist/types/src/core/url-loader.d.ts +2 -2
  109. package/dist/types/src/core/url-loader.d.ts.map +1 -1
  110. package/dist/types/src/index.d.ts +1 -0
  111. package/dist/types/src/index.d.ts.map +1 -1
  112. package/dist/types/src/plugin-process-manager/meta.d.ts +28 -2
  113. package/dist/types/src/plugin-process-manager/meta.d.ts.map +1 -1
  114. package/dist/types/src/testing/harness.d.ts +1 -1
  115. package/dist/types/src/testing/harness.d.ts.map +1 -1
  116. package/dist/types/src/testing/react.d.ts +6 -5
  117. package/dist/types/src/testing/react.d.ts.map +1 -1
  118. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  119. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  120. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts +6 -0
  121. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -1
  122. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +6 -10
  123. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -1
  124. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -1
  125. package/dist/types/src/ui/components/Surface/context.d.ts +6 -2
  126. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -1
  127. package/dist/types/src/ui/components/Surface/index.d.ts +10 -3
  128. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -1
  129. package/dist/types/src/ui/components/Surface/types.d.ts +50 -70
  130. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -1
  131. package/dist/types/src/ui/hooks/useApp.d.ts +1 -1
  132. package/dist/types/src/ui/hooks/useCapabilities.d.ts +11 -1
  133. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -1
  134. package/dist/types/src/vite-plugin/composer/index.d.ts +11 -4
  135. package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -1
  136. package/dist/types/src/vite-plugin/index.d.ts +1 -0
  137. package/dist/types/src/vite-plugin/index.d.ts.map +1 -1
  138. package/dist/types/src/vite-plugin/load.d.ts +16 -0
  139. package/dist/types/src/vite-plugin/load.d.ts.map +1 -0
  140. package/dist/types/src/vite-plugin/manifest.d.ts +16 -4
  141. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -1
  142. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -1
  143. package/dist/types/tsconfig.tsbuildinfo +1 -1
  144. package/docs/registry-spec.md +331 -0
  145. package/moon.yml +1 -0
  146. package/package.json +32 -27
  147. package/src/cli/cli.ts +2 -2
  148. package/src/common/activation-events.ts +3 -3
  149. package/src/common/capabilities.ts +16 -16
  150. package/src/config/index.ts +5 -0
  151. package/src/core/activation-event.ts +15 -8
  152. package/src/core/capability.ts +15 -4
  153. package/src/core/edge-registry-plugin-provider.ts +41 -42
  154. package/src/core/plugin-manager.test.ts +133 -137
  155. package/src/core/plugin-manager.ts +25 -19
  156. package/src/core/plugin-manifest.test.ts +5 -5
  157. package/src/core/plugin-manifest.ts +13 -10
  158. package/src/core/plugin.ts +58 -114
  159. package/src/core/registry.ts +20 -60
  160. package/src/core/url-loader.test.ts +2 -2
  161. package/src/core/url-loader.ts +23 -19
  162. package/src/index.ts +1 -0
  163. package/src/testing/harness.ts +5 -3
  164. package/src/testing/react.test.tsx +4 -2
  165. package/src/testing/react.tsx +9 -8
  166. package/src/testing/service.ts +2 -2
  167. package/src/testing/withPluginManager.stories.tsx +4 -2
  168. package/src/testing/withPluginManager.tsx +3 -1
  169. package/src/ui/components/PluginManager/PluginManagerProvider.ts +7 -0
  170. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +11 -14
  171. package/src/ui/components/Surface/SurfaceComponent.tsx +84 -74
  172. package/src/ui/components/Surface/context.ts +6 -3
  173. package/src/ui/components/Surface/index.ts +12 -1
  174. package/src/ui/components/Surface/types.test.ts +39 -49
  175. package/src/ui/components/Surface/types.ts +95 -60
  176. package/src/ui/hooks/useApp.test.tsx +1 -1
  177. package/src/ui/hooks/useApp.tsx +2 -2
  178. package/src/ui/hooks/useCapabilities.ts +24 -2
  179. package/src/vite-plugin/composer/index.ts +134 -61
  180. package/src/vite-plugin/index.ts +1 -0
  181. package/src/vite-plugin/load.ts +57 -0
  182. package/src/vite-plugin/manifest.test.ts +3 -3
  183. package/src/vite-plugin/manifest.ts +21 -10
  184. package/src/vite-plugin/packages.ts +0 -1
  185. package/dist/lib/browser/chunk-5GY3YOEL.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-66IXTIVK.mjs.map +0 -7
  187. package/dist/lib/browser/chunk-CO3XLNUX.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-DC3WRPBV.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-HFLKXMT7.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-IW44C7UL.mjs.map +0 -7
  192. package/dist/lib/browser/chunk-KZUDO43J.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-XHS5KDNX.mjs.map +0 -7
  194. package/dist/lib/browser/chunk-Y66ELD4U.mjs.map +0 -7
  195. package/dist/lib/node-esm/chunk-A5CHGAZE.mjs.map +0 -7
  196. package/dist/lib/node-esm/chunk-CTKEZHKF.mjs.map +0 -7
  197. package/dist/lib/node-esm/chunk-FSVGKTF6.mjs.map +0 -7
  198. package/dist/lib/node-esm/chunk-KFZEB6BV.mjs.map +0 -7
  199. package/dist/lib/node-esm/chunk-NULBHQYS.mjs.map +0 -7
  200. package/dist/lib/node-esm/chunk-SX5NVETP.mjs.map +0 -7
  201. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +0 -7
  202. package/dist/lib/node-esm/chunk-XGBUKRCK.mjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-XIGPWXCQ.mjs.map +0 -7
  204. package/dist/lib/node-esm/chunk-XOCUANHO.mjs.map +0 -7
  205. /package/dist/lib/browser/{capability-BOPAKKWG.mjs.map → capability-Z4MRP3CP.mjs.map} +0 -0
  206. /package/dist/lib/browser/{process-manager-capability-GXNUO7AR.mjs.map → process-manager-capability-RDROCCQD.mjs.map} +0 -0
  207. /package/dist/lib/node-esm/{capability-KZWRTX7R.mjs.map → capability-34Z6NPVR.mjs.map} +0 -0
  208. /package/dist/lib/node-esm/{process-manager-capability-TX5TA6YN.mjs.map → process-manager-capability-6OCXSKUW.mjs.map} +0 -0
@@ -60,7 +60,7 @@ const atomCounter = (registry: Registry.Registry, atom: Atom.Atom<any>) => {
60
60
  describe('PluginManager', () => {
61
61
  let plugins: Plugin.Plugin[] = [];
62
62
  const pluginLoader = Effect.fn(function* (id: string) {
63
- const plugin = plugins.find((plugin) => plugin.meta.id === id);
63
+ const plugin = plugins.find((plugin) => plugin.meta.profile.key === id);
64
64
  invariant(plugin, `Plugin not found: ${id}`);
65
65
  return { plugin };
66
66
  });
@@ -76,17 +76,17 @@ describe('PluginManager', () => {
76
76
  plugins = [testPlugin];
77
77
 
78
78
  const manager = PluginManager.make({ pluginLoader });
79
- const added = yield* manager.add(testMeta.id);
79
+ const added = yield* manager.add(testMeta.profile.key);
80
80
  assert.strictEqual(added, testPlugin);
81
81
  assert.deepStrictEqual(manager.getPlugins(), [testPlugin]);
82
82
  assert.deepStrictEqual(manager.getEnabled(), []);
83
- const removed = yield* manager.remove(testMeta.id);
83
+ const removed = yield* manager.remove(testMeta.profile.key);
84
84
  assert.isTrue(removed);
85
85
  assert.deepStrictEqual(manager.getPlugins(), []);
86
86
  }),
87
87
  );
88
88
 
89
- it.effect('should add plugin when locator differs from meta.id', () =>
89
+ it.effect('should add plugin when locator differs from meta.profile.key', () =>
90
90
  Effect.gen(function* () {
91
91
  const Test = Plugin.make(Plugin.define(testMeta));
92
92
  const testPlugin = Test();
@@ -104,8 +104,8 @@ describe('PluginManager', () => {
104
104
  assert.strictEqual(added, testPlugin);
105
105
  assert.deepStrictEqual(manager.getPlugins(), [testPlugin]);
106
106
  assert.deepStrictEqual(manager.getEnabled(), []);
107
- yield* manager.enable(added.meta.id);
108
- assert.deepStrictEqual(manager.getEnabled(), [testMeta.id]);
107
+ yield* manager.enable(added.meta.profile.key);
108
+ assert.deepStrictEqual(manager.getEnabled(), [testMeta.profile.key]);
109
109
  }),
110
110
  );
111
111
 
@@ -142,7 +142,7 @@ describe('PluginManager', () => {
142
142
 
143
143
  const manager = PluginManager.make({ pluginLoader: loader });
144
144
  yield* manager.add('prod');
145
- yield* manager.enable(testMeta.id);
145
+ yield* manager.enable(testMeta.profile.key);
146
146
  yield* manager.activate(ActivationEvents.Startup);
147
147
  assert.deepStrictEqual(
148
148
  manager.capabilities.getAll(String).map((value) => value.string),
@@ -151,9 +151,9 @@ describe('PluginManager', () => {
151
151
 
152
152
  // Loading the dev plugin with the same id swaps it into the id slot.
153
153
  yield* manager.add('dev');
154
- yield* manager.enable(testMeta.id);
154
+ yield* manager.enable(testMeta.profile.key);
155
155
  assert.strictEqual(
156
- manager.getPlugins().find((plugin) => plugin.meta.id === testMeta.id),
156
+ manager.getPlugins().find((plugin) => plugin.meta.profile.key === testMeta.profile.key),
157
157
  devPlugin,
158
158
  );
159
159
  yield* manager.reset(ActivationEvents.Startup);
@@ -164,12 +164,12 @@ describe('PluginManager', () => {
164
164
 
165
165
  // Removing the dev plugin restores the original and re-enables it
166
166
  // because it was enabled at shadow time.
167
- yield* manager.remove(testMeta.id);
167
+ yield* manager.remove(testMeta.profile.key);
168
168
  assert.strictEqual(
169
- manager.getPlugins().find((plugin) => plugin.meta.id === testMeta.id),
169
+ manager.getPlugins().find((plugin) => plugin.meta.profile.key === testMeta.profile.key),
170
170
  productionPlugin,
171
171
  );
172
- assert.isTrue(manager.getEnabled().includes(testMeta.id));
172
+ assert.isTrue(manager.getEnabled().includes(testMeta.profile.key));
173
173
  yield* manager.reset(ActivationEvents.Startup);
174
174
  assert.deepStrictEqual(
175
175
  manager.capabilities.getAll(String).map((value) => value.string),
@@ -198,11 +198,11 @@ describe('PluginManager', () => {
198
198
  assert.deepStrictEqual(manager.getEnabled(), []);
199
199
 
200
200
  yield* manager.add('dev');
201
- yield* manager.remove(testMeta.id);
201
+ yield* manager.remove(testMeta.profile.key);
202
202
 
203
203
  // Original is restored but stays disabled, matching its pre-shadow state.
204
204
  assert.strictEqual(
205
- manager.getPlugins().find((plugin) => plugin.meta.id === testMeta.id),
205
+ manager.getPlugins().find((plugin) => plugin.meta.profile.key === testMeta.profile.key),
206
206
  productionPlugin,
207
207
  );
208
208
  assert.deepStrictEqual(manager.getEnabled(), []);
@@ -230,7 +230,7 @@ describe('PluginManager', () => {
230
230
  plugins = [plugin];
231
231
 
232
232
  const manager = PluginManager.make({ plugins: [plugin], pluginLoader });
233
- yield* manager.enable(testMeta.id);
233
+ yield* manager.enable(testMeta.profile.key);
234
234
  yield* manager.activate(ActivationEvents.Startup);
235
235
  const strings = manager.capabilities.getAll(String);
236
236
  assert.strictEqual(strings.length, 2);
@@ -252,10 +252,10 @@ describe('PluginManager', () => {
252
252
 
253
253
  const testPlugin = Test();
254
254
  const manager = PluginManager.make({ plugins: [testPlugin], pluginLoader });
255
- yield* manager.enable(testMeta.id);
256
- assert.deepStrictEqual(manager.getEnabled(), [Test.meta.id]);
255
+ yield* manager.enable(testMeta.profile.key);
256
+ assert.deepStrictEqual(manager.getEnabled(), [Test.meta.profile.key]);
257
257
  assert.deepStrictEqual(manager.getModules(), [testPlugin.modules[0]]);
258
- yield* manager.disable(testMeta.id);
258
+ yield* manager.disable(testMeta.profile.key);
259
259
  assert.deepStrictEqual(manager.getEnabled(), []);
260
260
  assert.deepStrictEqual(manager.getModules(), []);
261
261
  }),
@@ -274,9 +274,9 @@ describe('PluginManager', () => {
274
274
 
275
275
  const testPlugin = Test();
276
276
  const manager = PluginManager.make({ plugins: [testPlugin], pluginLoader });
277
- yield* manager.enable(Test.meta.id);
277
+ yield* manager.enable(Test.meta.profile.key);
278
278
  assert.deepStrictEqual(manager.getPlugins(), [testPlugin]);
279
- assert.deepStrictEqual(manager.getEnabled(), [Test.meta.id]);
279
+ assert.deepStrictEqual(manager.getEnabled(), [Test.meta.profile.key]);
280
280
  assert.deepStrictEqual(manager.getModules(), [testPlugin.modules[0]]);
281
281
  assert.deepStrictEqual(manager.getActive(), []);
282
282
  assert.deepStrictEqual(manager.getEventsFired(), []);
@@ -299,7 +299,7 @@ describe('PluginManager', () => {
299
299
 
300
300
  const testPlugin = Test();
301
301
  const manager = PluginManager.make({ plugins: [testPlugin], pluginLoader });
302
- yield* manager.enable(Test.meta.id);
302
+ yield* manager.enable(Test.meta.profile.key);
303
303
 
304
304
  const result = yield* manager.activate(ActivationEvents.Startup);
305
305
  assert.isTrue(result);
@@ -322,8 +322,8 @@ describe('PluginManager', () => {
322
322
  ];
323
323
 
324
324
  const manager = PluginManager.make({ pluginLoader });
325
- yield* manager.add(testMeta.id);
326
- yield* manager.enable(testMeta.id);
325
+ yield* manager.add(testMeta.profile.key);
326
+ yield* manager.enable(testMeta.profile.key);
327
327
  const error = yield* Effect.flip(manager.activate(FailEvent));
328
328
  assert.strictEqual(error.message, 'test');
329
329
  }),
@@ -355,8 +355,8 @@ describe('PluginManager', () => {
355
355
  ];
356
356
 
357
357
  const manager = PluginManager.make({ pluginLoader });
358
- yield* manager.add(testMeta.id);
359
- yield* manager.enable(testMeta.id);
358
+ yield* manager.add(testMeta.profile.key);
359
+ yield* manager.enable(testMeta.profile.key);
360
360
  const error = yield* Effect.flip(manager.activate(DefectEvent));
361
361
 
362
362
  // Verify the error was caught and propagated.
@@ -377,7 +377,7 @@ describe('PluginManager', () => {
377
377
 
378
378
  it.effect('should catch and log defects when activate throws before returning Effect', () =>
379
379
  Effect.gen(function* () {
380
- const DefectEvent = ActivationEvent.make('org.dxos.test.defect-immediate');
380
+ const DefectEvent = ActivationEvent.make('org.dxos.test.defectImmediate');
381
381
  const capturedErrors: LogEntry[] = [];
382
382
  const removeProcessor = log.addProcessor((_config: LogConfig, entry: LogEntry) => {
383
383
  if (entry.level === LogLevel.ERROR) {
@@ -402,8 +402,8 @@ describe('PluginManager', () => {
402
402
  ];
403
403
 
404
404
  const manager = PluginManager.make({ pluginLoader });
405
- yield* manager.add(testMeta.id);
406
- yield* manager.enable(testMeta.id);
405
+ yield* manager.add(testMeta.profile.key);
406
+ yield* manager.enable(testMeta.profile.key);
407
407
  const error = yield* Effect.flip(manager.activate(DefectEvent));
408
408
 
409
409
  // Verify the error was caught and propagated.
@@ -467,8 +467,8 @@ describe('PluginManager', () => {
467
467
  Effect.runFork,
468
468
  );
469
469
 
470
- yield* manager.add(testMeta.id);
471
- yield* manager.enable(testMeta.id);
470
+ yield* manager.add(testMeta.profile.key);
471
+ yield* manager.enable(testMeta.profile.key);
472
472
  yield* manager.activate(ActivationEvents.Startup);
473
473
  yield* activating.await;
474
474
  yield* activated.await;
@@ -518,8 +518,8 @@ describe('PluginManager', () => {
518
518
  const manager = PluginManager.make({ pluginLoader });
519
519
 
520
520
  {
521
- yield* manager.add(testMeta.id);
522
- yield* manager.enable(testMeta.id);
521
+ yield* manager.add(testMeta.profile.key);
522
+ yield* manager.enable(testMeta.profile.key);
523
523
  const result = yield* manager.activate(ActivationEvents.Startup);
524
524
  assert.isTrue(result);
525
525
  assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
@@ -542,7 +542,7 @@ describe('PluginManager', () => {
542
542
  it.effect('should not fire an unknown event', () =>
543
543
  Effect.gen(function* () {
544
544
  const manager = PluginManager.make({ pluginLoader });
545
- const UnknownEvent = ActivationEvent.make('unknown');
545
+ const UnknownEvent = ActivationEvent.make('org.dxos.test.unknown');
546
546
  const result = yield* manager.activate(UnknownEvent);
547
547
  assert.isFalse(result);
548
548
  }),
@@ -583,20 +583,20 @@ describe('PluginManager', () => {
583
583
  assert.deepStrictEqual(manager.getActive(), []);
584
584
  assert.strictEqual(manager.capabilities.getAll(Number).length, 0);
585
585
 
586
- yield* manager.add(Plugin1.meta.id);
587
- yield* manager.enable(Plugin1.meta.id);
586
+ yield* manager.add(Plugin1.meta.profile.key);
587
+ yield* manager.enable(Plugin1.meta.profile.key);
588
588
  yield* manager.activate(CountEvent);
589
589
  assert.deepStrictEqual(manager.getActive(), [plugin1.modules[0].id]);
590
590
  assert.strictEqual(manager.capabilities.getAll(Number).length, 1);
591
591
 
592
- yield* manager.add(Plugin2.meta.id);
593
- yield* manager.enable(Plugin2.meta.id);
592
+ yield* manager.add(Plugin2.meta.profile.key);
593
+ yield* manager.enable(Plugin2.meta.profile.key);
594
594
  yield* manager.activate(CountEvent);
595
595
  assert.deepStrictEqual(manager.getActive(), [plugin1.modules[0].id, plugin2.modules[0].id]);
596
596
  assert.strictEqual(manager.capabilities.getAll(Number).length, 2);
597
597
 
598
- yield* manager.add(Plugin3.meta.id);
599
- yield* manager.enable(Plugin3.meta.id);
598
+ yield* manager.add(Plugin3.meta.profile.key);
599
+ yield* manager.enable(Plugin3.meta.profile.key);
600
600
  yield* manager.activate(CountEvent);
601
601
  assert.deepStrictEqual(manager.getActive(), [
602
602
  plugin1.modules[0].id,
@@ -626,8 +626,8 @@ describe('PluginManager', () => {
626
626
  assert.deepStrictEqual(manager.getActive(), []);
627
627
  assert.strictEqual(manager.capabilities.getAll(String).length, 0);
628
628
 
629
- yield* manager.add(testMeta.id);
630
- yield* manager.enable(testMeta.id);
629
+ yield* manager.add(testMeta.profile.key);
630
+ yield* manager.enable(testMeta.profile.key);
631
631
  yield* manager.activate(ActivationEvents.Startup);
632
632
  assert.deepStrictEqual(manager.getActive(), []);
633
633
  assert.strictEqual(manager.capabilities.getAll(String).length, 0);
@@ -660,8 +660,8 @@ describe('PluginManager', () => {
660
660
  assert.strictEqual(manager.capabilities.getAll(String).length, 0);
661
661
  assert.strictEqual(count, 0);
662
662
 
663
- yield* manager.add(testMeta.id);
664
- yield* manager.enable(testMeta.id);
663
+ yield* manager.add(testMeta.profile.key);
664
+ yield* manager.enable(testMeta.profile.key);
665
665
  yield* manager.activate(CountEvent);
666
666
  assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
667
667
  assert.strictEqual(manager.capabilities.getAll(String).length, 1);
@@ -720,10 +720,10 @@ describe('PluginManager', () => {
720
720
 
721
721
  const manager = PluginManager.make({ pluginLoader });
722
722
  {
723
- yield* manager.add(Test.meta.id);
724
- yield* manager.enable(Test.meta.id);
725
- yield* manager.add(Count.meta.id);
726
- yield* manager.enable(Count.meta.id);
723
+ yield* manager.add(Test.meta.profile.key);
724
+ yield* manager.enable(Test.meta.profile.key);
725
+ yield* manager.add(Count.meta.profile.key);
726
+ yield* manager.enable(Count.meta.profile.key);
727
727
  yield* manager.activate(ActivationEvents.Startup);
728
728
  assert.deepStrictEqual(manager.getActive(), [
729
729
  ...testPlugin.modules.map((m) => m.id),
@@ -737,7 +737,7 @@ describe('PluginManager', () => {
737
737
  }
738
738
 
739
739
  {
740
- yield* manager.disable(Test.meta.id);
740
+ yield* manager.disable(Test.meta.profile.key);
741
741
  assert.deepStrictEqual(manager.getActive(), [countPlugin.modules[0].id]);
742
742
  assert.deepStrictEqual(manager.getPendingReset(), []);
743
743
 
@@ -748,7 +748,7 @@ describe('PluginManager', () => {
748
748
  }
749
749
 
750
750
  {
751
- yield* manager.enable(Test.meta.id);
751
+ yield* manager.enable(Test.meta.profile.key);
752
752
  assert.deepStrictEqual(manager.getActive(), [
753
753
  countPlugin.modules[0].id,
754
754
  ...testPlugin.modules.map((m) => m.id),
@@ -805,8 +805,8 @@ describe('PluginManager', () => {
805
805
  assert.strictEqual(eventsFiredUpdates.count, 0);
806
806
  assert.strictEqual(pendingResetUpdates.count, 0);
807
807
 
808
- yield* manager.add(Plugin1.meta.id);
809
- yield* manager.enable(Plugin1.meta.id);
808
+ yield* manager.add(Plugin1.meta.profile.key);
809
+ yield* manager.enable(Plugin1.meta.profile.key);
810
810
  assert.strictEqual(pluginUpdates.count, 1);
811
811
  assert.strictEqual(enabledUpdates.count, 1);
812
812
  assert.strictEqual(modulesUpdates.count, 1);
@@ -822,8 +822,8 @@ describe('PluginManager', () => {
822
822
  assert.strictEqual(eventsFiredUpdates.count, 1);
823
823
  assert.strictEqual(pendingResetUpdates.count, 0);
824
824
 
825
- yield* manager.add(Plugin2.meta.id);
826
- yield* manager.enable(Plugin2.meta.id);
825
+ yield* manager.add(Plugin2.meta.profile.key);
826
+ yield* manager.enable(Plugin2.meta.profile.key);
827
827
  assert.strictEqual(pluginUpdates.count, 2);
828
828
  assert.strictEqual(enabledUpdates.count, 2);
829
829
  assert.strictEqual(modulesUpdates.count, 2);
@@ -839,8 +839,8 @@ describe('PluginManager', () => {
839
839
  assert.strictEqual(eventsFiredUpdates.count, 1);
840
840
  assert.strictEqual(pendingResetUpdates.count, 2);
841
841
 
842
- yield* manager.add(Plugin3.meta.id);
843
- yield* manager.enable(Plugin3.meta.id);
842
+ yield* manager.add(Plugin3.meta.profile.key);
843
+ yield* manager.enable(Plugin3.meta.profile.key);
844
844
  assert.strictEqual(pluginUpdates.count, 3);
845
845
  assert.strictEqual(enabledUpdates.count, 3);
846
846
  assert.strictEqual(modulesUpdates.count, 3);
@@ -857,7 +857,7 @@ describe('PluginManager', () => {
857
857
  assert.strictEqual(eventsFiredUpdates.count, 1);
858
858
  assert.strictEqual(pendingResetUpdates.count, 4);
859
859
 
860
- yield* manager.disable(Plugin1.meta.id);
860
+ yield* manager.disable(Plugin1.meta.profile.key);
861
861
  assert.strictEqual(pluginUpdates.count, 3);
862
862
  assert.strictEqual(enabledUpdates.count, 4);
863
863
  assert.strictEqual(modulesUpdates.count, 4);
@@ -865,7 +865,7 @@ describe('PluginManager', () => {
865
865
  assert.strictEqual(eventsFiredUpdates.count, 1);
866
866
  assert.strictEqual(pendingResetUpdates.count, 4);
867
867
 
868
- yield* manager.remove(Plugin1.meta.id);
868
+ yield* manager.remove(Plugin1.meta.profile.key);
869
869
  assert.strictEqual(pluginUpdates.count, 4);
870
870
  assert.strictEqual(enabledUpdates.count, 4);
871
871
  assert.strictEqual(modulesUpdates.count, 4);
@@ -913,8 +913,8 @@ describe('PluginManager', () => {
913
913
  plugins = [slowPlugin];
914
914
 
915
915
  const manager = PluginManager.make({ pluginLoader });
916
- yield* manager.add(SlowPlugin.meta.id);
917
- yield* manager.enable(SlowPlugin.meta.id);
916
+ yield* manager.add(SlowPlugin.meta.profile.key);
917
+ yield* manager.enable(SlowPlugin.meta.profile.key);
918
918
 
919
919
  // Fork the activation so we can control time with TestClock.
920
920
  const activationFiber = yield* Effect.fork(manager.activate(SlowEvent));
@@ -939,8 +939,8 @@ describe('PluginManager', () => {
939
939
  it.effect('should prevent concurrent loads of the same module via semaphore', () =>
940
940
  Effect.gen(function* () {
941
941
  // Two different events that both can trigger the same module.
942
- const EventA = ActivationEvent.make('org.dxos.test.event-a');
943
- const EventB = ActivationEvent.make('org.dxos.test.event-b');
942
+ const EventA = ActivationEvent.make('org.dxos.test.eventA');
943
+ const EventB = ActivationEvent.make('org.dxos.test.eventB');
944
944
 
945
945
  let activateCallCount = 0;
946
946
  const ConcurrentPlugin = Plugin.define(
@@ -967,8 +967,8 @@ describe('PluginManager', () => {
967
967
  plugins = [concurrentPlugin];
968
968
 
969
969
  const manager = PluginManager.make({ pluginLoader });
970
- yield* manager.add(ConcurrentPlugin.meta.id);
971
- yield* manager.enable(ConcurrentPlugin.meta.id);
970
+ yield* manager.add(ConcurrentPlugin.meta.profile.key);
971
+ yield* manager.enable(ConcurrentPlugin.meta.profile.key);
972
972
 
973
973
  // Fork two concurrent activations with DIFFERENT events.
974
974
  // Both events trigger the same module, so both will try to call _loadModule.
@@ -1016,10 +1016,10 @@ describe('PluginManager', () => {
1016
1016
  plugins = [plugin1, plugin2];
1017
1017
 
1018
1018
  const manager = PluginManager.make({ pluginLoader });
1019
- yield* manager.add(Plugin1.meta.id);
1020
- yield* manager.enable(Plugin1.meta.id);
1021
- yield* manager.add(Plugin2.meta.id);
1022
- yield* manager.enable(Plugin2.meta.id);
1019
+ yield* manager.add(Plugin1.meta.profile.key);
1020
+ yield* manager.enable(Plugin1.meta.profile.key);
1021
+ yield* manager.add(Plugin2.meta.profile.key);
1022
+ yield* manager.enable(Plugin2.meta.profile.key);
1023
1023
  yield* manager.activate(ActivationEvents.Startup);
1024
1024
  assert.strictEqual(manager.getActive().length, 2);
1025
1025
  assert.strictEqual(manager.capabilities.getAll(String).length, 1);
@@ -1055,8 +1055,8 @@ describe('PluginManager', () => {
1055
1055
  plugins = [testPlugin];
1056
1056
 
1057
1057
  const manager = PluginManager.make({ pluginLoader });
1058
- yield* manager.add(testMeta.id);
1059
- yield* manager.enable(testMeta.id);
1058
+ yield* manager.add(testMeta.profile.key);
1059
+ yield* manager.enable(testMeta.profile.key);
1060
1060
  yield* manager.activate(ActivationEvents.Startup);
1061
1061
  assert.isFalse(deactivated);
1062
1062
 
@@ -1101,10 +1101,10 @@ describe('PluginManager', () => {
1101
1101
  plugins = [Plugin1(), Plugin2()];
1102
1102
 
1103
1103
  const manager = PluginManager.make({ pluginLoader });
1104
- yield* manager.add(Plugin1.meta.id);
1105
- yield* manager.enable(Plugin1.meta.id);
1106
- yield* manager.add(Plugin2.meta.id);
1107
- yield* manager.enable(Plugin2.meta.id);
1104
+ yield* manager.add(Plugin1.meta.profile.key);
1105
+ yield* manager.enable(Plugin1.meta.profile.key);
1106
+ yield* manager.add(Plugin2.meta.profile.key);
1107
+ yield* manager.enable(Plugin2.meta.profile.key);
1108
1108
  yield* manager.activate(ActivationEvents.Startup);
1109
1109
 
1110
1110
  yield* manager.shutdown();
@@ -1126,8 +1126,8 @@ describe('PluginManager', () => {
1126
1126
  plugins = [testPlugin];
1127
1127
 
1128
1128
  const manager = PluginManager.make({ pluginLoader });
1129
- yield* manager.add(testMeta.id);
1130
- yield* manager.enable(testMeta.id);
1129
+ yield* manager.add(testMeta.profile.key);
1130
+ yield* manager.enable(testMeta.profile.key);
1131
1131
  yield* manager.activate(ActivationEvents.Startup);
1132
1132
  assert.isTrue(manager.getEventsFired().length > 0);
1133
1133
 
@@ -1159,8 +1159,8 @@ describe('PluginManager', () => {
1159
1159
  plugins = [testPlugin];
1160
1160
 
1161
1161
  const manager = PluginManager.make({ pluginLoader });
1162
- yield* manager.add(testMeta.id);
1163
- yield* manager.enable(testMeta.id);
1162
+ yield* manager.add(testMeta.profile.key);
1163
+ yield* manager.enable(testMeta.profile.key);
1164
1164
 
1165
1165
  const activationFiber = yield* Effect.fork(manager.activate(ActivationEvents.Startup));
1166
1166
  yield* activationStarted.await;
@@ -1196,8 +1196,8 @@ describe('PluginManager', () => {
1196
1196
  plugins = [testPlugin];
1197
1197
 
1198
1198
  const manager = PluginManager.make({ pluginLoader });
1199
- yield* manager.add(testMeta.id);
1200
- yield* manager.enable(testMeta.id);
1199
+ yield* manager.add(testMeta.profile.key);
1200
+ yield* manager.enable(testMeta.profile.key);
1201
1201
  yield* manager.activate(ActivationEvents.Startup);
1202
1202
 
1203
1203
  const pluginsBefore = manager.getPlugins();
@@ -1232,8 +1232,8 @@ describe('PluginManager', () => {
1232
1232
  plugins = [testPlugin];
1233
1233
 
1234
1234
  const manager = PluginManager.make({ pluginLoader });
1235
- yield* manager.add(testMeta.id);
1236
- yield* manager.enable(testMeta.id);
1235
+ yield* manager.add(testMeta.profile.key);
1236
+ yield* manager.enable(testMeta.profile.key);
1237
1237
  yield* manager.activate(ActivationEvents.Startup);
1238
1238
  assert.strictEqual(activateCount, 1);
1239
1239
  assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
@@ -1259,12 +1259,12 @@ describe('PluginManager', () => {
1259
1259
  return Promise.resolve({ default: Real });
1260
1260
  });
1261
1261
 
1262
- assert.strictEqual(LazyTest.meta.id, lazyMeta.id);
1263
- assert.strictEqual(LazyTest.meta.name, 'Lazy');
1262
+ assert.strictEqual(LazyTest.meta.profile.key, lazyMeta.profile.key);
1263
+ assert.strictEqual(LazyTest.meta.profile.name, 'Lazy');
1264
1264
  assert.strictEqual(loaderCalls, 0);
1265
1265
 
1266
1266
  const stub = LazyTest();
1267
- assert.strictEqual(stub.meta.id, lazyMeta.id);
1267
+ assert.strictEqual(stub.meta.profile.key, lazyMeta.profile.key);
1268
1268
  assert.deepStrictEqual([...stub.modules], []);
1269
1269
  assert.isTrue(Plugin.isLazy(stub));
1270
1270
  assert.strictEqual(loaderCalls, 0);
@@ -1290,16 +1290,16 @@ describe('PluginManager', () => {
1290
1290
  plugins = [lazyStub];
1291
1291
 
1292
1292
  const manager = PluginManager.make({ pluginLoader });
1293
- yield* manager.add(lazyMeta.id);
1293
+ yield* manager.add(lazyMeta.profile.key);
1294
1294
  // Loader has not been invoked yet — only meta is exposed.
1295
1295
  assert.strictEqual(loaderCalls, 0);
1296
1296
  assert.deepStrictEqual(manager.getModules(), []);
1297
1297
 
1298
- yield* manager.enable(lazyMeta.id);
1298
+ yield* manager.enable(lazyMeta.profile.key);
1299
1299
  assert.strictEqual(loaderCalls, 1);
1300
1300
  // After enable the registered plugin should be the real one (not the stub),
1301
1301
  // and its modules should be registered with the manager.
1302
- const registered = manager.getPlugins().find((p) => p.meta.id === lazyMeta.id);
1302
+ const registered = manager.getPlugins().find((p) => p.meta.profile.key === lazyMeta.profile.key);
1303
1303
  assert.isDefined(registered);
1304
1304
  assert.isFalse(Plugin.isLazy(registered!));
1305
1305
  assert.strictEqual(registered!.modules.length, 1);
@@ -1321,7 +1321,7 @@ describe('PluginManager', () => {
1321
1321
  plugins = [lazyStub];
1322
1322
 
1323
1323
  const manager = PluginManager.make({ pluginLoader });
1324
- yield* manager.add(lazyMeta.id);
1324
+ yield* manager.add(lazyMeta.profile.key);
1325
1325
 
1326
1326
  // Activate an event that has no listeners — the lazy plugin must not load.
1327
1327
  yield* manager.activate(ActivationEvents.Startup);
@@ -1349,8 +1349,8 @@ describe('PluginManager', () => {
1349
1349
  plugins = [lazyStub];
1350
1350
 
1351
1351
  const manager = PluginManager.make({ pluginLoader });
1352
- yield* manager.add(lazyMeta.id);
1353
- yield* manager.enable(lazyMeta.id);
1352
+ yield* manager.add(lazyMeta.profile.key);
1353
+ yield* manager.enable(lazyMeta.profile.key);
1354
1354
  yield* manager.activate(ActivationEvents.Startup);
1355
1355
 
1356
1356
  const all = manager.capabilities.getAll(String);
@@ -1368,16 +1368,16 @@ describe('PluginManager', () => {
1368
1368
  plugins = [lazyStub];
1369
1369
 
1370
1370
  const manager = PluginManager.make({ pluginLoader });
1371
- yield* manager.add(lazyMeta.id);
1371
+ yield* manager.add(lazyMeta.profile.key);
1372
1372
 
1373
- const exit = yield* Effect.exit(manager.enable(lazyMeta.id));
1373
+ const exit = yield* Effect.exit(manager.enable(lazyMeta.profile.key));
1374
1374
  assert.isTrue(Exit.isFailure(exit));
1375
1375
  if (Exit.isFailure(exit)) {
1376
1376
  const failure = Cause.failureOption(exit.cause);
1377
1377
  assert.isTrue(failure._tag === 'Some');
1378
1378
  if (failure._tag === 'Some') {
1379
1379
  assert.isTrue(Plugin.LazyPluginError.is(failure.value));
1380
- assert.strictEqual((failure.value as Plugin.LazyPluginError).context.id, lazyMeta.id);
1380
+ assert.strictEqual((failure.value as Plugin.LazyPluginError).context.id, lazyMeta.profile.key);
1381
1381
  assert.strictEqual((failure.value as Plugin.LazyPluginError).context.reason, 'load-failed');
1382
1382
  }
1383
1383
  }
@@ -1395,11 +1395,13 @@ describe('PluginManager', () => {
1395
1395
  const manager = PluginManager.make({ pluginLoader });
1396
1396
  // Subscribe first so we don't miss the activating/error pair.
1397
1397
  const queue = yield* PubSub.subscribe(manager.activation);
1398
- yield* manager.add(lazyMeta.id);
1399
- yield* Effect.exit(manager.enable(lazyMeta.id));
1398
+ yield* manager.add(lazyMeta.profile.key);
1399
+ yield* Effect.exit(manager.enable(lazyMeta.profile.key));
1400
1400
  const messages = yield* Queue.takeAll(queue);
1401
1401
 
1402
- const errorMessage = [...messages].find((m) => m.module === `lazy:${lazyMeta.id}` && m.state === 'error');
1402
+ const errorMessage = [...messages].find(
1403
+ (m) => m.module === `lazy:${lazyMeta.profile.key}` && m.state === 'error',
1404
+ );
1403
1405
  assert.isDefined(errorMessage);
1404
1406
  assert.isDefined(errorMessage!.error);
1405
1407
  }).pipe(Effect.scoped),
@@ -1434,7 +1436,7 @@ describe('PluginManager', () => {
1434
1436
  // coalescing, the underlying factory should still run exactly once.
1435
1437
  plugins = [lazyStub];
1436
1438
  const manager = PluginManager.make({ pluginLoader, plugins });
1437
- yield* manager.enable(coreLazyMeta.id);
1439
+ yield* manager.enable(coreLazyMeta.profile.key);
1438
1440
  assert.strictEqual(factoryCalls, 1);
1439
1441
  }),
1440
1442
  );
@@ -1447,9 +1449,9 @@ describe('PluginManager', () => {
1447
1449
  plugins = [lazyStub];
1448
1450
 
1449
1451
  const manager = PluginManager.make({ pluginLoader });
1450
- yield* manager.add(lazyMeta.id);
1452
+ yield* manager.add(lazyMeta.profile.key);
1451
1453
 
1452
- const exit = yield* Effect.exit(manager.enable(lazyMeta.id));
1454
+ const exit = yield* Effect.exit(manager.enable(lazyMeta.profile.key));
1453
1455
  assert.isTrue(Exit.isFailure(exit));
1454
1456
  if (Exit.isFailure(exit)) {
1455
1457
  const failure = Cause.failureOption(exit.cause);
@@ -1492,7 +1494,7 @@ describe('PluginManager', () => {
1492
1494
 
1493
1495
  it.effect('records and auto-disables a plugin whose module exceeds the activation timeout', () =>
1494
1496
  Effect.gen(function* () {
1495
- const SlowEvent = ActivationEvent.make('org.dxos.test.activation-timeout');
1497
+ const SlowEvent = ActivationEvent.make('org.dxos.test.activationTimeout');
1496
1498
  const SlowPlugin = Plugin.define(
1497
1499
  Plugin.makeMeta({
1498
1500
  key: DXN.make('org.dxos.test.slowActivation'),
@@ -1517,8 +1519,8 @@ describe('PluginManager', () => {
1517
1519
  registry,
1518
1520
  activationTimeout: Duration.seconds(2),
1519
1521
  });
1520
- yield* manager.add(SlowPlugin.meta.id);
1521
- yield* manager.enable(SlowPlugin.meta.id);
1522
+ yield* manager.add(SlowPlugin.meta.profile.key);
1523
+ yield* manager.enable(SlowPlugin.meta.profile.key);
1522
1524
 
1523
1525
  const fiber = yield* Effect.fork(manager.activate(SlowEvent));
1524
1526
  // Push past the 2s activation timeout. The forked module fiber is on
@@ -1529,13 +1531,13 @@ describe('PluginManager', () => {
1529
1531
 
1530
1532
  const failed = manager.getFailed();
1531
1533
  assert.strictEqual(failed.length, 1);
1532
- assert.strictEqual(failed[0].id, SlowPlugin.meta.id);
1534
+ assert.strictEqual(failed[0].id, SlowPlugin.meta.profile.key);
1533
1535
  assert.strictEqual(failed[0].phase, 'activation');
1534
1536
  assert.strictEqual(failed[0].reason, 'timeout');
1535
1537
 
1536
1538
  // Auto-disable runs in a forked fiber on the default runtime; wait for
1537
1539
  // the `enabled` atom to settle to the disabled state.
1538
- yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(SlowPlugin.meta.id));
1540
+ yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(SlowPlugin.meta.profile.key));
1539
1541
  assert.deepStrictEqual(manager.getEnabled(), []);
1540
1542
  }),
1541
1543
  );
@@ -1554,9 +1556,9 @@ describe('PluginManager', () => {
1554
1556
  registry,
1555
1557
  loadTimeout: Duration.seconds(1),
1556
1558
  });
1557
- yield* manager.add(lazyMeta.id);
1559
+ yield* manager.add(lazyMeta.profile.key);
1558
1560
 
1559
- const enableFiber = yield* Effect.fork(manager.enable(lazyMeta.id));
1561
+ const enableFiber = yield* Effect.fork(manager.enable(lazyMeta.profile.key));
1560
1562
  yield* TestClock.adjust(Duration.seconds(2));
1561
1563
  const exit = yield* Fiber.await(enableFiber);
1562
1564
  assert.isTrue(Exit.isFailure(exit));
@@ -1573,19 +1575,19 @@ describe('PluginManager', () => {
1573
1575
 
1574
1576
  const failed = manager.getFailed();
1575
1577
  assert.strictEqual(failed.length, 1);
1576
- assert.strictEqual(failed[0].id, lazyMeta.id);
1578
+ assert.strictEqual(failed[0].id, lazyMeta.profile.key);
1577
1579
  assert.strictEqual(failed[0].phase, 'load');
1578
1580
  assert.strictEqual(failed[0].reason, 'timeout');
1579
1581
 
1580
1582
  // The plugin was added to `enabled` before the lazy resolution failed,
1581
1583
  // so the auto-disable fork should clear it.
1582
- yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(lazyMeta.id));
1584
+ yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(lazyMeta.profile.key));
1583
1585
  }),
1584
1586
  );
1585
1587
 
1586
1588
  it.effect('records non-timeout activation errors as reason: error', () =>
1587
1589
  Effect.gen(function* () {
1588
- const FailingEvent = ActivationEvent.make('org.dxos.test.activation-error');
1590
+ const FailingEvent = ActivationEvent.make('org.dxos.test.activationError');
1589
1591
  const FailingPlugin = Plugin.define(
1590
1592
  Plugin.makeMeta({ key: DXN.make('org.dxos.test.failing'), name: 'Failing' }),
1591
1593
  ).pipe(
@@ -1600,8 +1602,8 @@ describe('PluginManager', () => {
1600
1602
 
1601
1603
  const registry = Registry.make();
1602
1604
  const manager = PluginManager.make({ pluginLoader, registry });
1603
- yield* manager.add(FailingPlugin.meta.id);
1604
- yield* manager.enable(FailingPlugin.meta.id);
1605
+ yield* manager.add(FailingPlugin.meta.profile.key);
1606
+ yield* manager.enable(FailingPlugin.meta.profile.key);
1605
1607
 
1606
1608
  const exit = yield* Effect.exit(manager.activate(FailingEvent));
1607
1609
  assert.isTrue(Exit.isFailure(exit));
@@ -1611,13 +1613,13 @@ describe('PluginManager', () => {
1611
1613
  assert.strictEqual(failed[0].reason, 'error');
1612
1614
  assert.strictEqual(failed[0].error.message, 'boom');
1613
1615
 
1614
- yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(FailingPlugin.meta.id));
1616
+ yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(FailingPlugin.meta.profile.key));
1615
1617
  }),
1616
1618
  );
1617
1619
 
1618
1620
  it.effect('does not auto-disable a core plugin even though the failure is recorded', () =>
1619
1621
  Effect.gen(function* () {
1620
- const FailingEvent = ActivationEvent.make('org.dxos.test.core-fail');
1622
+ const FailingEvent = ActivationEvent.make('org.dxos.test.coreFail');
1621
1623
  const CorePlugin = Plugin.define(
1622
1624
  Plugin.makeMeta({ key: DXN.make('org.dxos.test.core'), name: 'Core', tags: ['system'] }),
1623
1625
  ).pipe(
@@ -1641,7 +1643,7 @@ describe('PluginManager', () => {
1641
1643
 
1642
1644
  assert.strictEqual(manager.getFailed().length, 1);
1643
1645
  // Core stays enabled; host opted into it being non-removable.
1644
- assert.deepStrictEqual(manager.getEnabled(), [corePlugin.meta.id]);
1646
+ assert.deepStrictEqual(manager.getEnabled(), [corePlugin.meta.profile.key]);
1645
1647
  }),
1646
1648
  );
1647
1649
 
@@ -1667,22 +1669,22 @@ describe('PluginManager', () => {
1667
1669
 
1668
1670
  const registry = Registry.make();
1669
1671
  const manager = PluginManager.make({ pluginLoader, registry });
1670
- yield* manager.add(flakyPlugin.meta.id);
1671
- yield* manager.enable(flakyPlugin.meta.id);
1672
+ yield* manager.add(flakyPlugin.meta.profile.key);
1673
+ yield* manager.enable(flakyPlugin.meta.profile.key);
1672
1674
 
1673
1675
  yield* Effect.exit(manager.activate(Event));
1674
1676
  assert.strictEqual(manager.getFailed().length, 1);
1675
- yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(flakyPlugin.meta.id));
1677
+ yield* waitFor(registry, manager.enabled, (ids) => !ids.includes(flakyPlugin.meta.profile.key));
1676
1678
 
1677
1679
  // Calling `enable` again clears the prior failure record before
1678
1680
  // attempting resolution; verify the explicit API does too.
1679
- assert.isTrue(manager.clearFailure(flakyPlugin.meta.id));
1681
+ assert.isTrue(manager.clearFailure(flakyPlugin.meta.profile.key));
1680
1682
  assert.strictEqual(manager.getFailed().length, 0);
1681
- assert.isFalse(manager.clearFailure(flakyPlugin.meta.id));
1683
+ assert.isFalse(manager.clearFailure(flakyPlugin.meta.profile.key));
1682
1684
 
1683
1685
  // Retry: enable + reset the activation event so the module re-runs.
1684
1686
  shouldFail = false;
1685
- yield* manager.enable(flakyPlugin.meta.id);
1687
+ yield* manager.enable(flakyPlugin.meta.profile.key);
1686
1688
  yield* manager.reset(Event);
1687
1689
  assert.strictEqual(manager.getFailed().length, 0);
1688
1690
  assert.strictEqual(manager.capabilities.getAll(String).length, 1);
@@ -1695,15 +1697,15 @@ describe('PluginManager', () => {
1695
1697
  // focused on the dependency semantics rather than module wiring.
1696
1698
  // These dependency-graph tests use short opaque ids (`'a'`, `'coreClient'`,
1697
1699
  // `'org.dxos.missing'`) as graph keys rather than real DXNs. `id`/`dependsOn` are
1698
- // bare strings; only `key` (an unused DXN here) is cast at this test-only boundary.
1699
1700
  const makePlugin = (id: string, dependsOn?: string[], tags?: string[]) =>
1700
1701
  Plugin.make(
1701
1702
  Plugin.define({
1702
- id,
1703
- key: id as unknown as DXN.DXN,
1704
- name: id,
1705
- dependsOn,
1706
- tags,
1703
+ profile: {
1704
+ key: id,
1705
+ name: id,
1706
+ dependsOn,
1707
+ tags,
1708
+ },
1707
1709
  }),
1708
1710
  )();
1709
1711
 
@@ -1871,11 +1873,8 @@ describe('PluginManager', () => {
1871
1873
  registry.set(manager.pluginRegistry.plugins, {
1872
1874
  entries: [
1873
1875
  {
1874
- id: 'remote',
1875
- name: 'Remote',
1876
- moduleUrl: 'about:blank',
1877
- repo: 'example/remote',
1878
- version: 'v0.0.0',
1876
+ profile: { key: 'remote', name: 'Remote' },
1877
+ release: { version: 'v0.0.0', moduleUrl: 'about:blank' },
1879
1878
  },
1880
1879
  ],
1881
1880
  loading: false,
@@ -1885,7 +1884,7 @@ describe('PluginManager', () => {
1885
1884
  const ok = yield* manager.enable('dependent');
1886
1885
  assert.isTrue(ok);
1887
1886
  assert.deepStrictEqual(manager.getEnabled(), ['remote', 'dependent']);
1888
- assert.isTrue(manager.getPlugins().some((plugin) => plugin.meta.id === 'remote'));
1887
+ assert.isTrue(manager.getPlugins().some((plugin) => plugin.meta.profile.key === 'remote'));
1889
1888
  }),
1890
1889
  );
1891
1890
 
@@ -1905,11 +1904,8 @@ describe('PluginManager', () => {
1905
1904
  registry.set(manager.pluginRegistry.plugins, {
1906
1905
  entries: [
1907
1906
  {
1908
- id: 'remote-broken',
1909
- name: 'Broken',
1910
- moduleUrl: 'about:blank',
1911
- repo: 'example/broken',
1912
- version: 'v0.0.0',
1907
+ profile: { key: 'remote-broken', name: 'Broken' },
1908
+ release: { version: 'v0.0.0', moduleUrl: 'about:blank' },
1913
1909
  },
1914
1910
  ],
1915
1911
  loading: false,