@dxos/app-framework 0.8.4-main.b97322e → 0.8.4-main.bc2380dfbc

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 (571) hide show
  1. package/.storybook/main.mts +9 -0
  2. package/.storybook/preview.mts +8 -0
  3. package/LICENSE +102 -5
  4. package/README.md +1 -1
  5. package/dist/lib/browser/capability-HRFPP52W.mjs +35 -0
  6. package/dist/lib/browser/capability-HRFPP52W.mjs.map +7 -0
  7. package/dist/lib/browser/capability-VQ236TY5.mjs +38 -0
  8. package/dist/lib/browser/capability-VQ236TY5.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-23D4SJUE.mjs +42 -0
  10. package/dist/lib/browser/chunk-23D4SJUE.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-3JWJXGLK.mjs +79 -0
  12. package/dist/lib/browser/chunk-3JWJXGLK.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-45CHLTBV.mjs +34 -0
  14. package/dist/lib/browser/chunk-45CHLTBV.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-66IXTIVK.mjs +48 -0
  16. package/dist/lib/browser/chunk-66IXTIVK.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-6GZYCP73.mjs +422 -0
  18. package/dist/lib/browser/chunk-6GZYCP73.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-7VZJR2OA.mjs +581 -0
  20. package/dist/lib/browser/chunk-7VZJR2OA.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-FJ4765WW.mjs +8 -0
  22. package/dist/lib/browser/chunk-FJ4765WW.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-FO3IYSLV.mjs +68 -0
  24. package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-G6Q2M2M5.mjs +218 -0
  26. package/dist/lib/browser/chunk-G6Q2M2M5.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-J43JDWAV.mjs +1445 -0
  28. package/dist/lib/browser/chunk-J43JDWAV.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  30. package/dist/lib/browser/chunk-WBHCSOBW.mjs +80 -0
  31. package/dist/lib/browser/chunk-WBHCSOBW.mjs.map +7 -0
  32. package/dist/lib/browser/chunk-XLYULXAO.mjs +469 -0
  33. package/dist/lib/browser/chunk-XLYULXAO.mjs.map +7 -0
  34. package/dist/lib/browser/chunk-ZGJAZSNE.mjs +142 -0
  35. package/dist/lib/browser/chunk-ZGJAZSNE.mjs.map +7 -0
  36. package/dist/lib/browser/cli/index.mjs +76 -0
  37. package/dist/lib/browser/cli/index.mjs.map +7 -0
  38. package/dist/lib/browser/common/activation-events.mjs +24 -0
  39. package/dist/lib/browser/common/capabilities.mjs +46 -0
  40. package/dist/lib/browser/core/activation-event.mjs +20 -0
  41. package/dist/lib/browser/core/capability.mjs +30 -0
  42. package/dist/lib/browser/core/capability.mjs.map +7 -0
  43. package/dist/lib/browser/core/plugin-manager.mjs +19 -0
  44. package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
  45. package/dist/lib/browser/core/plugin.mjs +39 -0
  46. package/dist/lib/browser/core/plugin.mjs.map +7 -0
  47. package/dist/lib/browser/core/url-loader.mjs +24 -0
  48. package/dist/lib/browser/core/url-loader.mjs.map +7 -0
  49. package/dist/lib/browser/index.mjs +108 -156
  50. package/dist/lib/browser/index.mjs.map +4 -4
  51. package/dist/lib/browser/invoker-capability-CEL2L6GX.mjs +44 -0
  52. package/dist/lib/browser/invoker-capability-CEL2L6GX.mjs.map +7 -0
  53. package/dist/lib/browser/meta.json +1 -1
  54. package/dist/lib/browser/testing/index.mjs +236 -51
  55. package/dist/lib/browser/testing/index.mjs.map +4 -4
  56. package/dist/lib/browser/testing/react.mjs +78 -0
  57. package/dist/lib/browser/testing/react.mjs.map +7 -0
  58. package/dist/lib/browser/ui/index.mjs +48 -0
  59. package/dist/lib/browser/ui/index.mjs.map +7 -0
  60. package/dist/lib/node-esm/capability-GS3XJH74.mjs +39 -0
  61. package/dist/lib/node-esm/capability-GS3XJH74.mjs.map +7 -0
  62. package/dist/lib/node-esm/capability-I5P7ACFL.mjs +36 -0
  63. package/dist/lib/node-esm/capability-I5P7ACFL.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-37Z53PXZ.mjs +10 -0
  65. package/dist/lib/node-esm/chunk-37Z53PXZ.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-4RJL37GN.mjs +423 -0
  67. package/dist/lib/node-esm/chunk-4RJL37GN.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-6XW6LET6.mjs +35 -0
  69. package/dist/lib/node-esm/chunk-6XW6LET6.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-D347W3KO.mjs +143 -0
  71. package/dist/lib/node-esm/chunk-D347W3KO.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-DW45NFLW.mjs +1446 -0
  73. package/dist/lib/node-esm/chunk-DW45NFLW.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-EI4LYXFY.mjs +470 -0
  75. package/dist/lib/node-esm/chunk-EI4LYXFY.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  77. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-KIFOQXD4.mjs +219 -0
  79. package/dist/lib/node-esm/chunk-KIFOQXD4.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-SBS2YMPT.mjs +43 -0
  81. package/dist/lib/node-esm/chunk-SBS2YMPT.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs +80 -0
  83. package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs.map +7 -0
  84. package/dist/lib/node-esm/chunk-V24UWT36.mjs +582 -0
  85. package/dist/lib/node-esm/chunk-V24UWT36.mjs.map +7 -0
  86. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs +81 -0
  87. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs.map +7 -0
  88. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
  89. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +7 -0
  90. package/dist/lib/node-esm/chunk-XOCUANHO.mjs +49 -0
  91. package/dist/lib/node-esm/chunk-XOCUANHO.mjs.map +7 -0
  92. package/dist/lib/node-esm/cli/index.mjs +77 -0
  93. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  94. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  95. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  96. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  97. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  98. package/dist/lib/node-esm/core/activation-event.mjs +21 -0
  99. package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
  100. package/dist/lib/node-esm/core/capability.mjs +31 -0
  101. package/dist/lib/node-esm/core/capability.mjs.map +7 -0
  102. package/dist/lib/node-esm/core/plugin-manager.mjs +20 -0
  103. package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
  104. package/dist/lib/node-esm/core/plugin.mjs +40 -0
  105. package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
  106. package/dist/lib/node-esm/core/url-loader.mjs +25 -0
  107. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  108. package/dist/lib/node-esm/index.mjs +108 -156
  109. package/dist/lib/node-esm/index.mjs.map +4 -4
  110. package/dist/lib/node-esm/invoker-capability-QKUKN2MF.mjs +45 -0
  111. package/dist/lib/node-esm/invoker-capability-QKUKN2MF.mjs.map +7 -0
  112. package/dist/lib/node-esm/meta.json +1 -1
  113. package/dist/lib/node-esm/testing/index.mjs +236 -51
  114. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  115. package/dist/lib/node-esm/testing/react.mjs +79 -0
  116. package/dist/lib/node-esm/testing/react.mjs.map +7 -0
  117. package/dist/lib/node-esm/ui/index.mjs +49 -0
  118. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  119. package/dist/plugin/node-esm/index.mjs +893 -0
  120. package/dist/plugin/node-esm/index.mjs.map +7 -0
  121. package/dist/plugin/node-esm/meta.json +1 -0
  122. package/dist/types/src/cli/cli.d.ts +39 -0
  123. package/dist/types/src/cli/cli.d.ts.map +1 -0
  124. package/dist/types/src/cli/index.d.ts +2 -0
  125. package/dist/types/src/cli/index.d.ts.map +1 -0
  126. package/dist/types/src/common/activation-events.d.ts +27 -0
  127. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  128. package/dist/types/src/common/annotations.d.ts +1 -0
  129. package/dist/types/src/common/annotations.d.ts.map +1 -0
  130. package/dist/types/src/common/capabilities.d.ts +110 -123
  131. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  132. package/dist/types/src/common/index.d.ts +4 -8
  133. package/dist/types/src/common/index.d.ts.map +1 -1
  134. package/dist/types/src/common/operations.d.ts +19 -0
  135. package/dist/types/src/common/operations.d.ts.map +1 -0
  136. package/dist/types/src/common/translations.d.ts +8 -8
  137. package/dist/types/src/common/translations.d.ts.map +1 -1
  138. package/dist/types/src/context.d.ts +5 -0
  139. package/dist/types/src/context.d.ts.map +1 -0
  140. package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +11 -11
  141. package/dist/types/src/core/activation-event.d.ts.map +1 -0
  142. package/dist/types/src/core/capability-manager.d.ts +48 -0
  143. package/dist/types/src/core/capability-manager.d.ts.map +1 -0
  144. package/dist/types/src/core/capability-manager.test.d.ts +2 -0
  145. package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
  146. package/dist/types/src/core/capability.d.ts +156 -0
  147. package/dist/types/src/core/capability.d.ts.map +1 -0
  148. package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
  149. package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
  150. package/dist/types/src/core/index.d.ts +11 -4
  151. package/dist/types/src/core/index.d.ts.map +1 -1
  152. package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
  153. package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
  154. package/dist/types/src/core/plugin-manager.d.ts +298 -0
  155. package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
  156. package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
  157. package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
  158. package/dist/types/src/core/plugin-manifest.d.ts +101 -0
  159. package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
  160. package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
  161. package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
  162. package/dist/types/src/core/plugin.d.ts +265 -37
  163. package/dist/types/src/core/plugin.d.ts.map +1 -1
  164. package/dist/types/src/core/registry.d.ts +107 -0
  165. package/dist/types/src/core/registry.d.ts.map +1 -0
  166. package/dist/types/src/core/url-loader.d.ts +127 -0
  167. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  168. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  169. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  170. package/dist/types/src/helpers.d.ts.map +1 -1
  171. package/dist/types/src/index.d.ts +3 -4
  172. package/dist/types/src/index.d.ts.map +1 -1
  173. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
  174. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
  175. package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
  176. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
  177. package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
  178. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
  179. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
  180. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
  181. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
  182. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
  183. package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
  184. package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
  185. package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
  186. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
  187. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
  188. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
  189. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
  190. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
  191. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
  192. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
  193. package/dist/types/src/plugin-operation/index.d.ts +3 -0
  194. package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
  195. package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
  196. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
  197. package/dist/types/src/plugin-operation/meta.d.ts +3 -0
  198. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
  199. package/dist/types/src/plugin-operation/testing.d.ts +59 -0
  200. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
  201. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
  202. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
  203. package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
  204. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
  205. package/dist/types/src/plugin-runtime/index.d.ts +2 -0
  206. package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
  207. package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
  208. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
  209. package/dist/types/src/testing/harness.d.ts +67 -0
  210. package/dist/types/src/testing/harness.d.ts.map +1 -0
  211. package/dist/types/src/testing/index.d.ts +2 -0
  212. package/dist/types/src/testing/index.d.ts.map +1 -1
  213. package/dist/types/src/testing/react.d.ts +27 -0
  214. package/dist/types/src/testing/react.d.ts.map +1 -0
  215. package/dist/types/src/testing/react.test.d.ts +2 -0
  216. package/dist/types/src/testing/react.test.d.ts.map +1 -0
  217. package/dist/types/src/testing/service.d.ts +8 -0
  218. package/dist/types/src/testing/service.d.ts.map +1 -0
  219. package/dist/types/src/testing/withPluginManager.d.ts +11 -10
  220. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  221. package/dist/types/src/testing/withPluginManager.stories.d.ts +9 -3
  222. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  223. package/dist/types/src/ui/components/App/App.d.ts +9 -0
  224. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  225. package/dist/types/src/ui/components/App/App.stories.d.ts +19 -0
  226. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  227. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  228. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  229. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts +64 -0
  230. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts.map +1 -0
  231. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts +19 -0
  232. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts.map +1 -0
  233. package/dist/types/src/ui/components/Placeholder/index.d.ts +2 -0
  234. package/dist/types/src/ui/components/Placeholder/index.d.ts.map +1 -0
  235. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts +13 -0
  236. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  237. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts +10 -0
  238. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  239. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  240. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  241. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +24 -0
  242. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  243. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts +14 -0
  244. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  245. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts +11 -0
  246. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  247. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  248. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  249. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  250. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  251. package/dist/types/src/ui/components/Surface/index.d.ts +36 -0
  252. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  253. package/dist/types/src/ui/components/Surface/types.d.ts +197 -0
  254. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  255. package/dist/types/src/ui/components/Surface/types.test.d.ts +2 -0
  256. package/dist/types/src/ui/components/Surface/types.test.d.ts.map +1 -0
  257. package/dist/types/src/ui/components/index.d.ts +5 -0
  258. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  259. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  260. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  261. package/dist/types/src/ui/hooks/useApp.d.ts +89 -0
  262. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  263. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  264. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  265. package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
  266. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  267. package/dist/types/src/ui/hooks/useLoading.d.ts +18 -0
  268. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  269. package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
  270. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  271. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  272. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  273. package/dist/types/src/ui/index.d.ts +3 -0
  274. package/dist/types/src/ui/index.d.ts.map +1 -0
  275. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +34 -0
  276. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +1 -0
  277. package/dist/types/src/vite-plugin/boot-loader/index.d.ts +2 -0
  278. package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
  279. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +51 -0
  280. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts.map +1 -0
  281. package/dist/types/src/vite-plugin/composer/index.d.ts +34 -0
  282. package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -0
  283. package/dist/types/src/vite-plugin/import-map/index.d.ts +28 -0
  284. package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -0
  285. package/dist/types/src/vite-plugin/index.d.ts +5 -0
  286. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  287. package/dist/types/src/vite-plugin/manifest.d.ts +41 -0
  288. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -0
  289. package/dist/types/src/vite-plugin/manifest.test.d.ts +2 -0
  290. package/dist/types/src/vite-plugin/manifest.test.d.ts.map +1 -0
  291. package/dist/types/src/vite-plugin/packages.d.ts +13 -0
  292. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  293. package/dist/types/tsconfig.tsbuildinfo +1 -1
  294. package/moon.yml +26 -3
  295. package/package.json +117 -53
  296. package/src/cli/cli.ts +107 -0
  297. package/src/{playground/layout → cli}/index.ts +1 -1
  298. package/src/common/activation-events.ts +44 -0
  299. package/src/{playground/debug/index.ts → common/annotations.ts} +0 -2
  300. package/src/common/capabilities.ts +169 -114
  301. package/src/common/index.ts +4 -8
  302. package/src/common/operations.ts +35 -0
  303. package/src/common/translations.ts +18 -10
  304. package/src/context.ts +9 -0
  305. package/src/core/{events.ts → activation-event.ts} +10 -7
  306. package/src/core/capability-manager.test.ts +151 -0
  307. package/src/core/capability-manager.ts +192 -0
  308. package/src/core/capability.ts +247 -0
  309. package/src/core/edge-registry-plugin-provider.ts +92 -0
  310. package/src/core/index.ts +11 -4
  311. package/src/core/plugin-asset-cache.ts +60 -0
  312. package/src/core/plugin-manager.test.ts +1899 -0
  313. package/src/core/plugin-manager.ts +1685 -0
  314. package/src/core/plugin-manifest.test.ts +75 -0
  315. package/src/core/plugin-manifest.ts +134 -0
  316. package/src/core/plugin.ts +404 -43
  317. package/src/core/registry.ts +163 -0
  318. package/src/core/url-loader.test.ts +221 -0
  319. package/src/core/url-loader.ts +388 -0
  320. package/src/helpers.test.ts +1 -1
  321. package/src/index.ts +3 -4
  322. package/src/plugin-operation/OperationPlugin.ts +24 -0
  323. package/src/plugin-operation/history/capability.ts +36 -0
  324. package/src/plugin-operation/history/errors.ts +7 -0
  325. package/src/plugin-operation/history/history-tracker.test.ts +374 -0
  326. package/src/plugin-operation/history/history-tracker.ts +128 -0
  327. package/src/plugin-operation/history/index.ts +9 -0
  328. package/src/plugin-operation/history/types.ts +17 -0
  329. package/src/plugin-operation/history/undo-mapping.ts +135 -0
  330. package/src/plugin-operation/history/undo-registry.test.ts +72 -0
  331. package/src/plugin-operation/history/undo-registry.ts +54 -0
  332. package/src/plugin-operation/index.ts +6 -0
  333. package/src/plugin-operation/invoker-capability.ts +55 -0
  334. package/src/plugin-operation/meta.ts +12 -0
  335. package/src/plugin-operation/testing.ts +155 -0
  336. package/src/plugin-runtime/RuntimePlugin.ts +19 -0
  337. package/src/plugin-runtime/capability.ts +53 -0
  338. package/src/plugin-runtime/index.ts +5 -0
  339. package/src/plugin-runtime/meta.ts +12 -0
  340. package/src/testing/harness.ts +229 -0
  341. package/src/testing/index.ts +2 -0
  342. package/src/testing/react.test.tsx +48 -0
  343. package/src/testing/react.tsx +113 -0
  344. package/src/testing/service.ts +52 -0
  345. package/src/testing/withPluginManager.stories.tsx +15 -12
  346. package/src/testing/withPluginManager.tsx +78 -54
  347. package/src/ui/components/App/App.stories.tsx +88 -0
  348. package/src/ui/components/App/App.tsx +81 -0
  349. package/src/{playground/logger → ui/components/App}/index.ts +1 -1
  350. package/src/ui/components/Placeholder/Placeholder.stories.tsx +77 -0
  351. package/src/ui/components/Placeholder/Placeholder.tsx +155 -0
  352. package/src/ui/components/Placeholder/index.ts +5 -0
  353. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +185 -0
  354. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
  355. package/src/ui/components/PluginManager/index.ts +5 -0
  356. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +144 -0
  357. package/src/ui/components/Surface/SurfaceComponent.tsx +303 -0
  358. package/src/ui/components/Surface/SurfaceInfo.tsx +106 -0
  359. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  360. package/src/ui/components/Surface/context.ts +12 -0
  361. package/src/ui/components/Surface/index.ts +54 -0
  362. package/src/ui/components/Surface/types.test.ts +126 -0
  363. package/src/ui/components/Surface/types.ts +269 -0
  364. package/src/ui/components/index.ts +8 -0
  365. package/src/ui/hooks/index.ts +9 -0
  366. package/src/ui/hooks/useApp.test.tsx +159 -0
  367. package/src/ui/hooks/useApp.tsx +424 -0
  368. package/src/ui/hooks/useCapabilities.ts +67 -0
  369. package/src/ui/hooks/useLoading.tsx +76 -0
  370. package/src/ui/hooks/useSettingsState.ts +26 -0
  371. package/src/ui/hooks/useSurface.ts +13 -0
  372. package/src/ui/index.ts +6 -0
  373. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +270 -0
  374. package/src/vite-plugin/boot-loader/boot-loader.css +320 -0
  375. package/src/vite-plugin/boot-loader/boot-loader.js +325 -0
  376. package/src/vite-plugin/boot-loader/index.ts +5 -0
  377. package/src/vite-plugin/boot-loader/loader.ts +123 -0
  378. package/src/vite-plugin/composer/index.ts +306 -0
  379. package/src/vite-plugin/import-map/index.ts +527 -0
  380. package/src/vite-plugin/index.ts +10 -0
  381. package/src/vite-plugin/manifest.test.ts +46 -0
  382. package/src/vite-plugin/manifest.ts +57 -0
  383. package/src/vite-plugin/packages.ts +187 -0
  384. package/tsconfig.json +25 -23
  385. package/tsconfig.node.json +2 -4
  386. package/typedoc.json +2 -4
  387. package/vitest.config.ts +8 -6
  388. package/.swc/plugins/v7_linux_x86_64_13.0.0/f45bdff002284d9e8f9ef3f0be909de12da36c049cbcf261ac78fc00abb09a2d +0 -0
  389. package/.swc/plugins/v7_linux_x86_64_13.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429 +0 -0
  390. package/dist/lib/browser/app-graph-builder-LYF7EKNN.mjs +0 -137
  391. package/dist/lib/browser/app-graph-builder-LYF7EKNN.mjs.map +0 -7
  392. package/dist/lib/browser/chunk-FMN65HSW.mjs +0 -1519
  393. package/dist/lib/browser/chunk-FMN65HSW.mjs.map +0 -7
  394. package/dist/lib/browser/chunk-FO2PH7M3.mjs +0 -415
  395. package/dist/lib/browser/chunk-FO2PH7M3.mjs.map +0 -7
  396. package/dist/lib/browser/chunk-ORWHM7CO.mjs +0 -32
  397. package/dist/lib/browser/chunk-ORWHM7CO.mjs.map +0 -7
  398. package/dist/lib/browser/intent-dispatcher-LSYQZSEB.mjs +0 -11
  399. package/dist/lib/browser/intent-resolver-ZTNOSO3A.mjs +0 -39
  400. package/dist/lib/browser/intent-resolver-ZTNOSO3A.mjs.map +0 -7
  401. package/dist/lib/browser/store-KML2R4IE.mjs +0 -30
  402. package/dist/lib/browser/store-KML2R4IE.mjs.map +0 -7
  403. package/dist/lib/browser/worker.mjs +0 -79
  404. package/dist/lib/node-esm/app-graph-builder-SAOWGJDK.mjs +0 -138
  405. package/dist/lib/node-esm/app-graph-builder-SAOWGJDK.mjs.map +0 -7
  406. package/dist/lib/node-esm/chunk-73HGSHKE.mjs +0 -416
  407. package/dist/lib/node-esm/chunk-73HGSHKE.mjs.map +0 -7
  408. package/dist/lib/node-esm/chunk-UMZQERLE.mjs +0 -34
  409. package/dist/lib/node-esm/chunk-UMZQERLE.mjs.map +0 -7
  410. package/dist/lib/node-esm/chunk-ZEZ4FVEU.mjs +0 -1521
  411. package/dist/lib/node-esm/chunk-ZEZ4FVEU.mjs.map +0 -7
  412. package/dist/lib/node-esm/intent-dispatcher-6CYNGPSW.mjs +0 -12
  413. package/dist/lib/node-esm/intent-resolver-W7Z7WFFM.mjs +0 -40
  414. package/dist/lib/node-esm/intent-resolver-W7Z7WFFM.mjs.map +0 -7
  415. package/dist/lib/node-esm/store-QEXGXLWZ.mjs +0 -31
  416. package/dist/lib/node-esm/store-QEXGXLWZ.mjs.map +0 -7
  417. package/dist/lib/node-esm/worker.mjs +0 -80
  418. package/dist/types/src/App.d.ts +0 -43
  419. package/dist/types/src/App.d.ts.map +0 -1
  420. package/dist/types/src/common/collaboration.d.ts +0 -19
  421. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  422. package/dist/types/src/common/events.d.ts +0 -52
  423. package/dist/types/src/common/events.d.ts.map +0 -1
  424. package/dist/types/src/common/file.d.ts +0 -14
  425. package/dist/types/src/common/file.d.ts.map +0 -1
  426. package/dist/types/src/common/graph.d.ts +0 -21
  427. package/dist/types/src/common/graph.d.ts.map +0 -1
  428. package/dist/types/src/common/layout.d.ts +0 -281
  429. package/dist/types/src/common/layout.d.ts.map +0 -1
  430. package/dist/types/src/common/surface.d.ts +0 -65
  431. package/dist/types/src/common/surface.d.ts.map +0 -1
  432. package/dist/types/src/core/capabilities.d.ts +0 -114
  433. package/dist/types/src/core/capabilities.d.ts.map +0 -1
  434. package/dist/types/src/core/capabilities.test.d.ts +0 -2
  435. package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
  436. package/dist/types/src/core/events.d.ts.map +0 -1
  437. package/dist/types/src/core/manager.d.ts +0 -122
  438. package/dist/types/src/core/manager.d.ts.map +0 -1
  439. package/dist/types/src/core/manager.test.d.ts +0 -2
  440. package/dist/types/src/core/manager.test.d.ts.map +0 -1
  441. package/dist/types/src/playground/debug/Debug.d.ts +0 -6
  442. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  443. package/dist/types/src/playground/debug/index.d.ts +0 -2
  444. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  445. package/dist/types/src/playground/debug/plugin.d.ts +0 -2
  446. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  447. package/dist/types/src/playground/generator/Main.d.ts +0 -6
  448. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  449. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
  450. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  451. package/dist/types/src/playground/generator/generator.d.ts +0 -7
  452. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  453. package/dist/types/src/playground/generator/index.d.ts +0 -3
  454. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  455. package/dist/types/src/playground/generator/plugin.d.ts +0 -2
  456. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  457. package/dist/types/src/playground/layout/Layout.d.ts +0 -8
  458. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  459. package/dist/types/src/playground/layout/index.d.ts +0 -2
  460. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  461. package/dist/types/src/playground/layout/plugin.d.ts +0 -2
  462. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  463. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
  464. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  465. package/dist/types/src/playground/logger/index.d.ts +0 -2
  466. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  467. package/dist/types/src/playground/logger/plugin.d.ts +0 -2
  468. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  469. package/dist/types/src/playground/logger/schema.d.ts +0 -13
  470. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  471. package/dist/types/src/playground/playground.stories.d.ts +0 -10
  472. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  473. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
  474. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
  475. package/dist/types/src/plugin-intent/actions.d.ts +0 -38
  476. package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
  477. package/dist/types/src/plugin-intent/errors.d.ts +0 -16
  478. package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
  479. package/dist/types/src/plugin-intent/index.d.ts +0 -5
  480. package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
  481. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
  482. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
  483. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
  484. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
  485. package/dist/types/src/plugin-intent/intent.d.ts +0 -63
  486. package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
  487. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
  488. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  489. package/dist/types/src/plugin-settings/actions.d.ts +0 -27
  490. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  491. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
  492. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  493. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  494. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  495. package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
  496. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
  497. package/dist/types/src/plugin-settings/store.d.ts +0 -5
  498. package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
  499. package/dist/types/src/plugin-settings/translations.d.ts +0 -10
  500. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  501. package/dist/types/src/react/ErrorBoundary.d.ts +0 -31
  502. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  503. package/dist/types/src/react/IntentContext.d.ts +0 -8
  504. package/dist/types/src/react/IntentContext.d.ts.map +0 -1
  505. package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
  506. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  507. package/dist/types/src/react/Surface.d.ts +0 -12
  508. package/dist/types/src/react/Surface.d.ts.map +0 -1
  509. package/dist/types/src/react/Surface.stories.d.ts +0 -16
  510. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  511. package/dist/types/src/react/common.d.ts +0 -13
  512. package/dist/types/src/react/common.d.ts.map +0 -1
  513. package/dist/types/src/react/index.d.ts +0 -7
  514. package/dist/types/src/react/index.d.ts.map +0 -1
  515. package/dist/types/src/react/useCapabilities.d.ts +0 -13
  516. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  517. package/dist/types/src/react/useIntentResolver.d.ts +0 -3
  518. package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
  519. package/dist/types/src/worker.d.ts +0 -4
  520. package/dist/types/src/worker.d.ts.map +0 -1
  521. package/src/App.tsx +0 -276
  522. package/src/common/collaboration.ts +0 -21
  523. package/src/common/events.ts +0 -77
  524. package/src/common/file.ts +0 -22
  525. package/src/common/graph.ts +0 -30
  526. package/src/common/layout.ts +0 -278
  527. package/src/common/surface.ts +0 -86
  528. package/src/core/capabilities.test.ts +0 -136
  529. package/src/core/capabilities.ts +0 -254
  530. package/src/core/manager.test.ts +0 -515
  531. package/src/core/manager.ts +0 -519
  532. package/src/playground/debug/Debug.tsx +0 -39
  533. package/src/playground/debug/plugin.ts +0 -17
  534. package/src/playground/generator/Main.tsx +0 -71
  535. package/src/playground/generator/Toolbar.tsx +0 -46
  536. package/src/playground/generator/generator.ts +0 -48
  537. package/src/playground/generator/index.ts +0 -6
  538. package/src/playground/generator/plugin.ts +0 -23
  539. package/src/playground/layout/Layout.tsx +0 -33
  540. package/src/playground/layout/plugin.ts +0 -17
  541. package/src/playground/logger/Toolbar.tsx +0 -29
  542. package/src/playground/logger/plugin.ts +0 -36
  543. package/src/playground/logger/schema.ts +0 -12
  544. package/src/playground/playground.stories.tsx +0 -42
  545. package/src/plugin-intent/IntentPlugin.ts +0 -20
  546. package/src/plugin-intent/actions.ts +0 -33
  547. package/src/plugin-intent/errors.ts +0 -39
  548. package/src/plugin-intent/index.ts +0 -8
  549. package/src/plugin-intent/intent-dispatcher.test.ts +0 -279
  550. package/src/plugin-intent/intent-dispatcher.ts +0 -333
  551. package/src/plugin-intent/intent.ts +0 -154
  552. package/src/plugin-settings/SettingsPlugin.ts +0 -35
  553. package/src/plugin-settings/actions.ts +0 -29
  554. package/src/plugin-settings/app-graph-builder.ts +0 -157
  555. package/src/plugin-settings/index.ts +0 -6
  556. package/src/plugin-settings/intent-resolver.ts +0 -34
  557. package/src/plugin-settings/store.ts +0 -33
  558. package/src/plugin-settings/translations.ts +0 -19
  559. package/src/react/ErrorBoundary.tsx +0 -45
  560. package/src/react/IntentContext.tsx +0 -34
  561. package/src/react/Surface.stories.tsx +0 -96
  562. package/src/react/Surface.tsx +0 -77
  563. package/src/react/common.ts +0 -12
  564. package/src/react/index.ts +0 -10
  565. package/src/react/useCapabilities.ts +0 -30
  566. package/src/react/useIntentResolver.ts +0 -22
  567. package/src/worker.ts +0 -11
  568. /package/dist/lib/browser/{intent-dispatcher-LSYQZSEB.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  569. /package/dist/lib/browser/{worker.mjs.map → common/activation-events.mjs.map} +0 -0
  570. /package/dist/lib/{node-esm/intent-dispatcher-6CYNGPSW.mjs.map → browser/common/capabilities.mjs.map} +0 -0
  571. /package/dist/lib/{node-esm/worker.mjs.map → browser/core/activation-event.mjs.map} +0 -0
@@ -2,117 +2,172 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Registry } from '@effect-rx/rx-react';
6
- import { type Schema } from 'effect';
7
- import { type FC, type PropsWithChildren } from 'react';
8
-
9
- import { type ExecutableTool } from '@dxos/ai';
10
- import { type GraphBuilder, type BuilderExtensions } from '@dxos/app-graph';
11
- import { type ArtifactDefinition } from '@dxos/blueprints';
12
- import { type Space } from '@dxos/client-protocol';
13
- import { type FunctionDefinition } from '@dxos/functions';
14
- import { type RootSettingsStore } from '@dxos/local-storage';
15
- import { type AnchoredTo } from '@dxos/schema';
16
-
17
- import { type FileInfo } from './file';
18
- import { type NodeSerializer } from './graph';
19
- import { type SurfaceDefinition } from './surface';
20
- import { type Resource } from './translations';
21
- import { type PluginManager, defineCapability } from '../core';
22
- import { type AnyIntentResolver, type IntentContext } from '../plugin-intent';
23
-
24
- export namespace Capabilities {
25
- export const Null = defineCapability<null>('dxos.org/app-framework/capability/null');
26
-
27
- export const PluginManager = defineCapability<PluginManager>('dxos.org/app-framework/capability/plugin-manager');
28
-
29
- export const RxRegistry = defineCapability<Registry.Registry>('dxos.org/app-framework/capability/rx-registry');
30
-
31
- export type ReactContext = Readonly<{ id: string; dependsOn?: string[]; context: FC<PropsWithChildren> }>;
32
- export const ReactContext = defineCapability<ReactContext>('dxos.org/app-framework/capability/react-context');
33
-
34
- export type ReactRoot = Readonly<{ id: string; root: FC<PropsWithChildren> }>;
35
- export const ReactRoot = defineCapability<ReactRoot>('dxos.org/app-framework/capability/react-root');
36
-
37
- export type ReactSurface = SurfaceDefinition | readonly SurfaceDefinition[];
38
- export const ReactSurface = defineCapability<ReactSurface>('dxos.org/app-framework/common/react-surface');
39
-
40
- export type IntentResolver = AnyIntentResolver | readonly AnyIntentResolver[];
41
- export const IntentResolver = defineCapability<IntentResolver>('dxos.org/app-framework/capability/intent-resolver');
42
-
43
- export const IntentDispatcher = defineCapability<IntentContext>(
44
- 'dxos.org/app-framework/capability/intent-dispatcher',
45
- );
46
-
47
- export type Layout = Readonly<{
48
- mode: string;
49
- dialogOpen: boolean;
50
- sidebarOpen: boolean;
51
- complementarySidebarOpen: boolean;
52
- /**
53
- * The id of the active workspace, where a workspace is a set of active items.
54
- */
55
- workspace: string;
56
- /**
57
- * Identifiers of items which are currently active in the application.
58
- */
59
- active: string[];
60
- /**
61
- * Identifiers of items which were previously active in the application.
62
- */
63
- inactive: string[];
64
- /**
65
- * Identifier of the item which should be scrolled into view.
66
- */
67
- scrollIntoView: string | undefined;
68
- }>;
69
- export const Layout = defineCapability<Layout>('dxos.org/app-framework/capability/layout');
70
-
71
- // TODO(burdon): Why array?
72
- export const Translations = defineCapability<Readonly<Resource[]>>('dxos.org/app-framework/capability/translations');
73
-
74
- export const AppGraph = defineCapability<Readonly<Pick<GraphBuilder, 'graph' | 'explore'>>>(
75
- 'dxos.org/app-framework/capability/app-graph',
76
- );
77
-
78
- export const AppGraphBuilder = defineCapability<BuilderExtensions>(
79
- 'dxos.org/app-framework/capability/app-graph-builder',
80
- );
81
-
82
- export const AppGraphSerializer = defineCapability<NodeSerializer[]>(
83
- 'dxos.org/app-framework/capability/app-graph-serializer',
84
- );
85
-
86
- export const SettingsStore = defineCapability<RootSettingsStore>('dxos.org/app-framework/capability/settings-store');
87
-
88
- // TODO(wittjosiah): The generics caused type inference issues for schemas when contributing settings.
89
- // export type Settings = Parameters<RootSettingsStore['createStore']>[0];
90
- // export type Settings<T extends SettingsValue = SettingsValue> = SettingsProps<T>;
91
- export type Settings = {
92
- prefix: string;
93
- schema: Schema.Schema.All;
94
- value?: Record<string, any>;
95
- };
96
- export const Settings = defineCapability<Settings>('dxos.org/app-framework/capability/settings');
97
-
98
- export type Metadata = Readonly<{ id: string; metadata: Record<string, any> }>;
99
- export const Metadata = defineCapability<Metadata>('dxos.org/app-framework/capability/metadata');
100
-
101
- export const Tools = defineCapability<ExecutableTool[]>('dxos.org/app-framework/capability/tools');
102
- export const ArtifactDefinition = defineCapability<ArtifactDefinition>(
103
- 'dxos.org/app-framework/capability/artifact-definition',
104
- );
105
-
106
- export const Functions = defineCapability<FunctionDefinition<any, any>[]>(
107
- 'dxos.org/app-framework/capability/functions',
108
- );
109
-
110
- export type FileUploader = (file: File, space: Space) => Promise<FileInfo | undefined>;
111
- export const FileUploader = defineCapability<FileUploader>('dxos.org/app-framework/capability/file-uploader');
112
-
113
- type AnchorSort = {
114
- key: string;
115
- sort: (anchorA: AnchoredTo, anchorB: AnchoredTo) => number;
116
- };
117
- export const AnchorSort = defineCapability<AnchorSort>('dxos.org/app-framework/capability/anchor-sort');
118
- }
5
+ import { type Atom, type Registry } from '@effect-atom/atom-react';
6
+ import type * as Command$ from '@effect/cli/Command';
7
+ import * as Effect from 'effect/Effect';
8
+ import type * as Layer$ from 'effect/Layer';
9
+ import type * as ManagedRuntime$ from 'effect/ManagedRuntime';
10
+ import type { FC, PropsWithChildren } from 'react';
11
+
12
+ import type { OperationHandlerSet } from '@dxos/compute';
13
+ import { OperationInvoker as OperationInvoker$ } from '@dxos/operation';
14
+
15
+ import { Capability as Capability$, type PluginManager as PluginManager$ } from '../core';
16
+ import type {
17
+ HistoryTracker as HistoryTracker$,
18
+ UndoMapping as UndoMapping$,
19
+ UndoRegistry as UndoRegistry$,
20
+ } from '../plugin-operation';
21
+ import type { Surface } from '../ui';
22
+
23
+ /**
24
+ * Null capability.
25
+ * @category Capability
26
+ */
27
+ export const Null = Capability$.make<null>('org.dxos.app-framework.capability.null');
28
+
29
+ /**
30
+ * @category Capability
31
+ */
32
+ export const PluginManager = Capability$.make<PluginManager$.PluginManager>(
33
+ 'org.dxos.app-framework.capability.plugin-manager',
34
+ );
35
+
36
+ /**
37
+ * @category Capability
38
+ */
39
+ export const AtomRegistry = Capability$.make<Registry.Registry>('org.dxos.app-framework.capability.atom-registry');
40
+
41
+ export type ReactContext = Readonly<{
42
+ id: string;
43
+ dependsOn?: string[];
44
+ context: FC<PropsWithChildren>;
45
+ }>;
46
+
47
+ /**
48
+ * @category Capability
49
+ */
50
+ export const ReactContext = Capability$.make<ReactContext>('org.dxos.app-framework.capability.react-context');
51
+
52
+ export type ReactRoot = Readonly<{ id: string; root: FC<PropsWithChildren> }>;
53
+
54
+ /**
55
+ * @category Capability
56
+ */
57
+ export const ReactRoot = Capability$.make<ReactRoot>('org.dxos.app-framework.capability.react-root');
58
+
59
+ /**
60
+ * Surface definitions that can be either React components or Web Components.
61
+ */
62
+ export type ReactSurface = Surface.Definition | readonly Surface.Definition[];
63
+
64
+ /**
65
+ * @category Capability
66
+ */
67
+ export const ReactSurface = Capability$.make<ReactSurface>('org.dxos.app-framework.common.react-surface');
68
+
69
+ export type AnyCommand = Command$.Command<any, any, any, any>;
70
+
71
+ /**
72
+ * @category Capability
73
+ */
74
+ export const Command = Capability$.make<AnyCommand>('org.dxos.app-framework.capability.command');
75
+
76
+ /**
77
+ * @category Capability
78
+ */
79
+ export const Layer = Capability$.make<Layer$.Layer<any, any, any>>('org.dxos.app-framework.capability.layer');
80
+
81
+ export type ManagedRuntime = ManagedRuntime$.ManagedRuntime<any, any>;
82
+
83
+ /**
84
+ * @category Capability
85
+ */
86
+ export const ManagedRuntime = Capability$.make<ManagedRuntime>('org.dxos.app-framework.capability.managed-runtime');
87
+
88
+ //
89
+ // Operation System Capabilities
90
+ //
91
+
92
+ export const OperationHandler = Capability$.make<OperationHandlerSet.OperationHandlerSet>(
93
+ 'org.dxos.app-framework.capability.operation-handler',
94
+ );
95
+
96
+ export type UndoMapping = UndoMapping$.UndoMapping;
97
+
98
+ /**
99
+ * Undo mapping registration - contributed by plugins.
100
+ * @category Capability
101
+ */
102
+ export const UndoMapping = Capability$.make<UndoMapping[]>('org.dxos.app-framework.capability.undo-mapping');
103
+
104
+ export type OperationInvoker = OperationInvoker$.OperationInvoker;
105
+
106
+ /**
107
+ * Operation invoker - provided by OperationPlugin.
108
+ * @category Capability
109
+ */
110
+ export const OperationInvoker = Capability$.make<OperationInvoker>(
111
+ 'org.dxos.app-framework.capability.operation-invoker',
112
+ );
113
+
114
+ export type UndoRegistry = UndoRegistry$.UndoRegistry;
115
+
116
+ /**
117
+ * Undo registry - provided by OperationPlugin.
118
+ * @category Capability
119
+ */
120
+ export const UndoRegistry = Capability$.make<UndoRegistry>('org.dxos.app-framework.capability.undo-registry');
121
+
122
+ export type HistoryTracker = HistoryTracker$.HistoryTracker;
123
+
124
+ /**
125
+ * History tracker - provided by OperationPlugin.
126
+ * @category Capability
127
+ */
128
+ export const HistoryTracker = Capability$.make<HistoryTracker>('org.dxos.app-framework.capability.history-tracker');
129
+
130
+ //
131
+ // Atom Capability Helpers
132
+ //
133
+
134
+ /**
135
+ * Get the current value of an atom capability.
136
+ * @example const settings = yield* Capabilities.getAtomValue(ThreadCapabilities.Settings);
137
+ */
138
+ export const getAtomValue = <T>(
139
+ atomCapability: Capability$.InterfaceDef<Atom.Atom<T>>,
140
+ ): Effect.Effect<T, Error, Capability$.Service> =>
141
+ Effect.gen(function* () {
142
+ const registry = yield* Capability$.get(AtomRegistry);
143
+ const atom = yield* Capability$.get(atomCapability);
144
+ return registry.get(atom);
145
+ });
146
+
147
+ /**
148
+ * Update an atom capability value (requires writable atom).
149
+ * @example yield* Capabilities.updateAtomValue(ThreadCapabilities.Settings, (s) => ({ ...s, foo: true }));
150
+ */
151
+ export const updateAtomValue = <T>(
152
+ atomCapability: Capability$.InterfaceDef<Atom.Writable<T>>,
153
+ fn: (current: T) => T,
154
+ ): Effect.Effect<void, Error, Capability$.Service> =>
155
+ Effect.gen(function* () {
156
+ const registry = yield* Capability$.get(AtomRegistry);
157
+ const atom = yield* Capability$.get(atomCapability);
158
+ registry.set(atom, fn(registry.get(atom)));
159
+ });
160
+
161
+ /**
162
+ * Subscribe to an atom capability.
163
+ * @example const unsubscribe = yield* Capabilities.subscribeAtom(ThreadCapabilities.Settings, (value) => ...);
164
+ */
165
+ export const subscribeAtom = <T>(
166
+ atomCapability: Capability$.InterfaceDef<Atom.Atom<T>>,
167
+ callback: (value: T) => void,
168
+ ): Effect.Effect<() => void, Error, Capability$.Service> =>
169
+ Effect.gen(function* () {
170
+ const registry = yield* Capability$.get(AtomRegistry);
171
+ const atom = yield* Capability$.get(atomCapability);
172
+ return registry.subscribe(atom, () => callback(registry.get(atom)));
173
+ });
@@ -2,11 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './capabilities';
6
- export * from './collaboration';
7
- export * from './events';
8
- export * from './file';
9
- export type * from './graph';
10
- export * from './layout';
11
- export * from './surface';
12
- export * from './translations';
5
+ export * as Capabilities from './capabilities';
6
+ export * as ActivationEvents from './activation-events';
7
+ export { UndoOperation } from './operations';
8
+ export { Label } from './translations';
@@ -0,0 +1,35 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { Operation } from '@dxos/compute';
8
+
9
+ import { Capability } from '../core';
10
+ import { Label } from './translations';
11
+
12
+ const UNDO_NAMESPACE = 'org.dxos.app-framework.undo';
13
+
14
+ /**
15
+ * Operations related to undo/history functionality.
16
+ */
17
+ export namespace UndoOperation {
18
+ /**
19
+ * Show an undo toast notification.
20
+ * Fired by HistoryTracker when an undoable operation is tracked.
21
+ */
22
+ export const ShowUndo = Operation.make({
23
+ meta: {
24
+ key: `${UNDO_NAMESPACE}.operation.show-undo`,
25
+ name: 'Show Undo',
26
+ description: 'Show an undo toast notification.',
27
+ },
28
+ executionMode: 'sync',
29
+ services: [Capability.Service],
30
+ input: Schema.Struct({
31
+ message: Schema.optional(Label.annotations({ description: 'The message to display in the undo toast.' })),
32
+ }),
33
+ output: Schema.Void,
34
+ });
35
+ }
@@ -2,16 +2,24 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
6
-
7
- export const ResourceKey = Schema.Union(Schema.String, Schema.Record({ key: Schema.String, value: Schema.Any }));
8
- export type ResourceKey = Schema.Schema.Type<typeof ResourceKey>;
9
-
10
- export const ResourceLanguage = Schema.Record({ key: Schema.String, value: ResourceKey });
11
- export type ResourceLanguage = Schema.Schema.Type<typeof ResourceLanguage>;
5
+ import * as Schema from 'effect/Schema';
12
6
 
13
7
  /**
14
- * A resource is a collection of translations for a language.
8
+ * A Label represents translatable text - either a simple string or a tuple of [key, options].
15
9
  */
16
- export const Resource = Schema.Record({ key: Schema.String, value: ResourceLanguage });
17
- export type Resource = Schema.Schema.Type<typeof Resource>;
10
+ export const Label = Schema.Union(
11
+ Schema.String,
12
+ Schema.mutable(
13
+ Schema.Tuple(
14
+ Schema.String,
15
+ Schema.mutable(
16
+ Schema.Struct({
17
+ ns: Schema.String,
18
+ count: Schema.optional(Schema.Number),
19
+ defaultValue: Schema.optional(Schema.String),
20
+ }),
21
+ ),
22
+ ),
23
+ ),
24
+ );
25
+ export type Label = Schema.Schema.Type<typeof Label>;
package/src/context.ts ADDED
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { createContext } from '@dxos/web-context';
6
+
7
+ import { type PluginManager } from './core';
8
+
9
+ export const PluginManagerContext = createContext<PluginManager.PluginManager>('org.dxos.app-framework.plugin-manager');
@@ -2,11 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { compositeKey } from '@dxos/util';
6
+
5
7
  /**
6
8
  * A unique string identifier representing an event.
7
9
  * This is expected to be a URI, where initial parts are often the id of the plugin whose package defines the event.
8
10
  *
9
- * @example dxos.org/plugin/example/event/ready
11
+ * @example org.dxos.plugin.example.event.ready
10
12
  */
11
13
  export type ActivationEvent = {
12
14
  id: string;
@@ -16,7 +18,7 @@ export type ActivationEvent = {
16
18
  /**
17
19
  * An activation event that can be a single event, or a combination of events.
18
20
  */
19
- export type ActivationEvents =
21
+ export type Events =
20
22
  | ActivationEvent
21
23
  | { type: 'one-of'; events: ActivationEvent[] }
22
24
  | { type: 'all-of'; events: ActivationEvent[] };
@@ -24,14 +26,15 @@ export type ActivationEvents =
24
26
  /**
25
27
  * Helper to define an activation event.
26
28
  */
27
- export const defineEvent = (id: string, specifier?: string) => {
29
+ export const make = (id: string, specifier?: string) => {
28
30
  return { id, specifier } as ActivationEvent;
29
31
  };
30
32
 
31
33
  /**
32
34
  * Helper to create an activation event key.
33
35
  */
34
- export const eventKey = (event: ActivationEvent) => (event.specifier ? `${event.id}:${event.specifier}` : event.id);
36
+ export const eventKey = (event: ActivationEvent) =>
37
+ event.specifier ? compositeKey(event.id, event.specifier) : event.id;
35
38
 
36
39
  /**
37
40
  * Helper to create an activation event that triggers when any of the given events are activated.
@@ -46,16 +49,16 @@ export const allOf = (...events: ActivationEvent[]) => ({ type: 'all-of' as cons
46
49
  /**
47
50
  * Helper to check if an activation event is a one-of event.
48
51
  */
49
- export const isOneOf = (events: ActivationEvents): events is { type: 'one-of'; events: ActivationEvent[] } =>
52
+ export const isOneOf = (events: Events): events is { type: 'one-of'; events: ActivationEvent[] } =>
50
53
  'type' in events && events.type === 'one-of';
51
54
 
52
55
  /**
53
56
  * Helper to check if an activation event is an all-of event.
54
57
  */
55
- export const isAllOf = (events: ActivationEvents): events is { type: 'all-of'; events: ActivationEvent[] } =>
58
+ export const isAllOf = (events: Events): events is { type: 'all-of'; events: ActivationEvent[] } =>
56
59
  'type' in events && events.type === 'all-of';
57
60
 
58
61
  /**
59
62
  * Helper to get the events from an activation event.
60
63
  */
61
- export const getEvents = (events: ActivationEvents) => ('type' in events ? events.events : [events]);
64
+ export const getEvents = (events: Events) => ('type' in events ? events.events : [events]);
@@ -0,0 +1,151 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Registry } from '@effect-atom/atom-react';
6
+ import { describe, expect, it, onTestFinished } from '@effect/vitest';
7
+ import * as Effect from 'effect/Effect';
8
+
9
+ import * as Capability from './capability';
10
+ import * as CapabilityManager from './capability-manager';
11
+
12
+ describe('CapabilityManager', () => {
13
+ it('should return empty array if no capabilities are contributed', () => {
14
+ const registry = Registry.make();
15
+ const capabilityManager = CapabilityManager.make({ registry });
16
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
17
+ expect(capabilityManager.getAll(interfaceDef)).toEqual([]);
18
+ });
19
+
20
+ it('should throw when getCapability is called and no capability exists', () => {
21
+ const registry = Registry.make();
22
+ const capabilityManager = CapabilityManager.make({ registry });
23
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
24
+ expect(() => capabilityManager.get(interfaceDef)).toThrow('No capability found');
25
+ });
26
+
27
+ it.effect('Capability.get should fail when no capability exists', () =>
28
+ Effect.gen(function* () {
29
+ const registry = Registry.make();
30
+ const capabilityManager = CapabilityManager.make({ registry });
31
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
32
+
33
+ const result = yield* Capability.get(interfaceDef).pipe(
34
+ Effect.provideService(Capability.Service, capabilityManager),
35
+ Effect.either,
36
+ );
37
+
38
+ expect(result._tag).toEqual('Left');
39
+ }),
40
+ );
41
+
42
+ it('should be able to contribute and request capabilities', () => {
43
+ const registry = Registry.make();
44
+ const capabilityManager = CapabilityManager.make({ registry });
45
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
46
+ const implementation = { example: 'identifier' };
47
+ capabilityManager.contribute({ interface: interfaceDef, implementation, module: 'test' });
48
+ expect(capabilityManager.getAll(interfaceDef)).toEqual([implementation]);
49
+ });
50
+
51
+ it('should be able to remove capabilities', () => {
52
+ const registry = Registry.make();
53
+ const capabilityManager = CapabilityManager.make({ registry });
54
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
55
+ const implementation = { example: 'identifier' };
56
+ capabilityManager.contribute({ interface: interfaceDef, implementation, module: 'test' });
57
+ expect(capabilityManager.getAll(interfaceDef)).toEqual([implementation]);
58
+ capabilityManager.remove(interfaceDef, implementation);
59
+ expect(capabilityManager.getAll(interfaceDef)).toEqual([]);
60
+ });
61
+
62
+ it('should be able to contribute and request multiple implementations', () => {
63
+ const registry = Registry.make();
64
+ const capabilityManager = CapabilityManager.make({ registry });
65
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
66
+ const implementation1 = { example: 'first' };
67
+ const implementation2 = { example: 'second' };
68
+ capabilityManager.contribute({ interface: interfaceDef, implementation: implementation1, module: 'test' });
69
+ capabilityManager.contribute({ interface: interfaceDef, implementation: implementation2, module: 'test' });
70
+ expect(capabilityManager.getAll(interfaceDef)).toEqual([implementation1, implementation2]);
71
+ });
72
+
73
+ it('should be able to request multiple capabilities', () => {
74
+ const registry = Registry.make();
75
+ const capabilityManager = CapabilityManager.make({ registry });
76
+ const interfaceDef1 = Capability.make<{ one: number }>('@dxos/app-framework/test/one');
77
+ const interfaceDef2 = Capability.make<{ two: number }>('@dxos/app-framework/test/two');
78
+ const implementation1 = { one: 1 };
79
+ const implementation2 = { two: 2 };
80
+ capabilityManager.contribute({ interface: interfaceDef1, implementation: implementation1, module: 'test' });
81
+ capabilityManager.contribute({ interface: interfaceDef2, implementation: implementation2, module: 'test' });
82
+ expect(capabilityManager.getAll(interfaceDef1)).toEqual([implementation1]);
83
+ expect(capabilityManager.getAll(interfaceDef2)).toEqual([implementation2]);
84
+ });
85
+
86
+ it('should be reactive', () => {
87
+ const registry = Registry.make();
88
+ const capabilityManager = CapabilityManager.make({ registry });
89
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
90
+
91
+ let count = 0;
92
+ const cancel = registry.subscribe(capabilityManager.atom(interfaceDef), () => {
93
+ count++;
94
+ });
95
+ onTestFinished(() => cancel());
96
+ expect(count).toEqual(0);
97
+
98
+ registry.get(capabilityManager.atom(interfaceDef));
99
+ expect(count).toEqual(1);
100
+
101
+ const implementation = { example: 'identifier' };
102
+ capabilityManager.contribute({ interface: interfaceDef, implementation, module: 'test' });
103
+ expect(count).toEqual(2);
104
+
105
+ capabilityManager.remove(interfaceDef, implementation);
106
+ expect(count).toEqual(3);
107
+ });
108
+
109
+ it('should not be reactive to changes within the implementation', () => {
110
+ const registry = Registry.make();
111
+ const capabilityManager = CapabilityManager.make({ registry });
112
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
113
+
114
+ let count = 0;
115
+ const cancel = registry.subscribe(capabilityManager.atom(interfaceDef), () => {
116
+ count++;
117
+ });
118
+ onTestFinished(() => cancel());
119
+ expect(count).toEqual(0);
120
+
121
+ registry.get(capabilityManager.atom(interfaceDef));
122
+ expect(count).toEqual(1);
123
+
124
+ const implementation = { example: 'identifier' };
125
+ capabilityManager.contribute({ interface: interfaceDef, implementation, module: 'test' });
126
+ expect(count).toEqual(2);
127
+
128
+ implementation.example = 'updated';
129
+ expect(count).toEqual(2);
130
+
131
+ const capabilities = capabilityManager.getAll(interfaceDef);
132
+ expect(capabilities).toEqual([implementation]);
133
+ expect(capabilities[0].example).toEqual('updated');
134
+ expect(count).toEqual(2);
135
+ });
136
+
137
+ it.effect('should be able to wait for a capability', () =>
138
+ Effect.gen(function* () {
139
+ const registry = Registry.make();
140
+ const capabilityManager = CapabilityManager.make({ registry });
141
+ const interfaceDef = Capability.make<{ example: string }>('@dxos/app-framework/test/example');
142
+
143
+ expect(capabilityManager.getAll(interfaceDef)).toHaveLength(0);
144
+ const capability = capabilityManager.waitFor(interfaceDef);
145
+
146
+ const implementation = { example: 'identifier' };
147
+ capabilityManager.contribute({ interface: interfaceDef, implementation, module: 'test' });
148
+ expect(yield* capability).toEqual(implementation);
149
+ }),
150
+ );
151
+ });