@dxos/plugin-client 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/dist/lib/browser/app-graph-builder-3FGBMLTF.mjs +118 -0
  2. package/dist/lib/browser/app-graph-builder-3FGBMLTF.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-4BZGRIFS.mjs +293 -0
  4. package/dist/lib/browser/chunk-4BZGRIFS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-F7H2Y3Z2.mjs +18 -0
  6. package/dist/lib/browser/chunk-F7H2Y3Z2.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-G7C3S2BE.mjs +15 -0
  8. package/dist/lib/browser/chunk-G7C3S2BE.mjs.map +7 -0
  9. package/dist/lib/browser/cli/index.mjs +1048 -0
  10. package/dist/lib/browser/cli/index.mjs.map +7 -0
  11. package/dist/lib/browser/client-IX5LMWV4.mjs +86 -0
  12. package/dist/lib/browser/client-IX5LMWV4.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +73 -83
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/migrations-3EBTAW3N.mjs +24 -0
  17. package/dist/lib/browser/migrations-3EBTAW3N.mjs.map +7 -0
  18. package/dist/lib/browser/operation-resolver-2NT3ISVP.mjs +298 -0
  19. package/dist/lib/browser/operation-resolver-2NT3ISVP.mjs.map +7 -0
  20. package/dist/lib/browser/react-context-4UABG3GP.mjs +24 -0
  21. package/dist/lib/browser/react-context-4UABG3GP.mjs.map +7 -0
  22. package/dist/lib/browser/react-surface-RSQ74XCT.mjs +675 -0
  23. package/dist/lib/browser/react-surface-RSQ74XCT.mjs.map +7 -0
  24. package/dist/lib/browser/schema-defs-O7VLP745.mjs +26 -0
  25. package/dist/lib/browser/schema-defs-O7VLP745.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +9 -4
  27. package/dist/lib/node-esm/app-graph-builder-2PIYVUNC.mjs +119 -0
  28. package/dist/lib/node-esm/app-graph-builder-2PIYVUNC.mjs.map +7 -0
  29. package/dist/lib/node-esm/chunk-BCELGXRI.mjs +20 -0
  30. package/dist/lib/node-esm/chunk-BCELGXRI.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-JAF64TFQ.mjs +295 -0
  32. package/dist/lib/node-esm/chunk-JAF64TFQ.mjs.map +7 -0
  33. package/dist/lib/node-esm/chunk-PRAFFO54.mjs +16 -0
  34. package/dist/lib/node-esm/chunk-PRAFFO54.mjs.map +7 -0
  35. package/dist/lib/node-esm/cli/index.mjs +1049 -0
  36. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  37. package/dist/lib/node-esm/client-FFPK5UFP.mjs +87 -0
  38. package/dist/lib/node-esm/client-FFPK5UFP.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +73 -83
  40. package/dist/lib/node-esm/index.mjs.map +4 -4
  41. package/dist/lib/node-esm/meta.json +1 -1
  42. package/dist/lib/node-esm/migrations-WSZSFGDK.mjs +25 -0
  43. package/dist/lib/node-esm/migrations-WSZSFGDK.mjs.map +7 -0
  44. package/dist/lib/node-esm/operation-resolver-VW5R2BE4.mjs +299 -0
  45. package/dist/lib/node-esm/operation-resolver-VW5R2BE4.mjs.map +7 -0
  46. package/dist/lib/node-esm/react-context-UVXMGPW4.mjs +25 -0
  47. package/dist/lib/node-esm/react-context-UVXMGPW4.mjs.map +7 -0
  48. package/dist/lib/node-esm/react-surface-KBHANGGC.mjs +676 -0
  49. package/dist/lib/node-esm/react-surface-KBHANGGC.mjs.map +7 -0
  50. package/dist/lib/node-esm/schema-defs-QLRGBIKY.mjs +27 -0
  51. package/dist/lib/node-esm/schema-defs-QLRGBIKY.mjs.map +7 -0
  52. package/dist/lib/node-esm/types/index.mjs +9 -4
  53. package/dist/types/src/ClientPlugin.d.ts +2 -1
  54. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  56. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  58. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/client/client.d.ts +8 -0
  60. package/dist/types/src/capabilities/client/client.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/client/index.d.ts +17 -0
  62. package/dist/types/src/capabilities/client/index.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/index.d.ts +7 -19
  64. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/migrations/index.d.ts +3 -0
  66. package/dist/types/src/capabilities/migrations/index.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/migrations/migrations.d.ts +5 -0
  68. package/dist/types/src/capabilities/migrations/migrations.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/operation-resolver/index.d.ts +5 -0
  70. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +8 -0
  72. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/react-context/index.d.ts +7 -0
  74. package/dist/types/src/capabilities/react-context/index.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/react-context/react-context.d.ts +10 -0
  76. package/dist/types/src/capabilities/react-context/react-context.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/react-surface/index.d.ts +5 -0
  78. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +9 -0
  80. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/schema-defs/index.d.ts +3 -0
  82. package/dist/types/src/capabilities/schema-defs/index.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/schema-defs/schema-defs.d.ts +5 -0
  84. package/dist/types/src/capabilities/schema-defs/schema-defs.d.ts.map +1 -0
  85. package/dist/types/src/cli/commands/config/index.d.ts +5 -0
  86. package/dist/types/src/cli/commands/config/index.d.ts.map +1 -0
  87. package/dist/types/src/cli/commands/config/view.d.ts +5 -0
  88. package/dist/types/src/cli/commands/config/view.d.ts.map +1 -0
  89. package/dist/types/src/cli/commands/device/index.d.ts +7 -0
  90. package/dist/types/src/cli/commands/device/index.d.ts.map +1 -0
  91. package/dist/types/src/cli/commands/device/info/index.d.ts +2 -0
  92. package/dist/types/src/cli/commands/device/info/index.d.ts.map +1 -0
  93. package/dist/types/src/cli/commands/device/info/info.d.ts +7 -0
  94. package/dist/types/src/cli/commands/device/info/info.d.ts.map +1 -0
  95. package/dist/types/src/cli/commands/device/info/info.test.d.ts +2 -0
  96. package/dist/types/src/cli/commands/device/info/info.test.d.ts.map +1 -0
  97. package/dist/types/src/cli/commands/device/list/index.d.ts +2 -0
  98. package/dist/types/src/cli/commands/device/list/index.d.ts.map +1 -0
  99. package/dist/types/src/cli/commands/device/list/list.d.ts +7 -0
  100. package/dist/types/src/cli/commands/device/list/list.d.ts.map +1 -0
  101. package/dist/types/src/cli/commands/device/list/list.test.d.ts +2 -0
  102. package/dist/types/src/cli/commands/device/list/list.test.d.ts.map +1 -0
  103. package/dist/types/src/cli/commands/device/update/index.d.ts +2 -0
  104. package/dist/types/src/cli/commands/device/update/index.d.ts.map +1 -0
  105. package/dist/types/src/cli/commands/device/update/update.d.ts +11 -0
  106. package/dist/types/src/cli/commands/device/update/update.d.ts.map +1 -0
  107. package/dist/types/src/cli/commands/device/util.d.ts +16 -0
  108. package/dist/types/src/cli/commands/device/util.d.ts.map +1 -0
  109. package/dist/types/src/cli/commands/edge/index.d.ts +5 -0
  110. package/dist/types/src/cli/commands/edge/index.d.ts.map +1 -0
  111. package/dist/types/src/cli/commands/edge/status.d.ts +7 -0
  112. package/dist/types/src/cli/commands/edge/status.d.ts.map +1 -0
  113. package/dist/types/src/cli/commands/halo/create/create.d.ts +15 -0
  114. package/dist/types/src/cli/commands/halo/create/create.d.ts.map +1 -0
  115. package/dist/types/src/cli/commands/halo/create/create.test.d.ts +2 -0
  116. package/dist/types/src/cli/commands/halo/create/create.test.d.ts.map +1 -0
  117. package/dist/types/src/cli/commands/halo/create/index.d.ts +2 -0
  118. package/dist/types/src/cli/commands/halo/create/index.d.ts.map +1 -0
  119. package/dist/types/src/cli/commands/halo/credential/add/add.d.ts +13 -0
  120. package/dist/types/src/cli/commands/halo/credential/add/add.d.ts.map +1 -0
  121. package/dist/types/src/cli/commands/halo/credential/add/index.d.ts +2 -0
  122. package/dist/types/src/cli/commands/halo/credential/add/index.d.ts.map +1 -0
  123. package/dist/types/src/cli/commands/halo/credential/index.d.ts +12 -0
  124. package/dist/types/src/cli/commands/halo/credential/index.d.ts.map +1 -0
  125. package/dist/types/src/cli/commands/halo/credential/list/index.d.ts +2 -0
  126. package/dist/types/src/cli/commands/halo/credential/list/index.d.ts.map +1 -0
  127. package/dist/types/src/cli/commands/halo/credential/list/list.d.ts +19 -0
  128. package/dist/types/src/cli/commands/halo/credential/list/list.d.ts.map +1 -0
  129. package/dist/types/src/cli/commands/halo/credential/list/list.test.d.ts +2 -0
  130. package/dist/types/src/cli/commands/halo/credential/list/list.test.d.ts.map +1 -0
  131. package/dist/types/src/cli/commands/halo/identity/identity.d.ts +7 -0
  132. package/dist/types/src/cli/commands/halo/identity/identity.d.ts.map +1 -0
  133. package/dist/types/src/cli/commands/halo/identity/identity.test.d.ts +2 -0
  134. package/dist/types/src/cli/commands/halo/identity/identity.test.d.ts.map +1 -0
  135. package/dist/types/src/cli/commands/halo/identity/index.d.ts +2 -0
  136. package/dist/types/src/cli/commands/halo/identity/index.d.ts.map +1 -0
  137. package/dist/types/src/cli/commands/halo/index.d.ts +3 -0
  138. package/dist/types/src/cli/commands/halo/index.d.ts.map +1 -0
  139. package/dist/types/src/cli/commands/halo/join/index.d.ts +2 -0
  140. package/dist/types/src/cli/commands/halo/join/index.d.ts.map +1 -0
  141. package/dist/types/src/cli/commands/halo/join/join.d.ts +8 -0
  142. package/dist/types/src/cli/commands/halo/join/join.d.ts.map +1 -0
  143. package/dist/types/src/cli/commands/halo/join/join.test.d.ts +2 -0
  144. package/dist/types/src/cli/commands/halo/join/join.test.d.ts.map +1 -0
  145. package/dist/types/src/cli/commands/halo/keys/index.d.ts +2 -0
  146. package/dist/types/src/cli/commands/halo/keys/index.d.ts.map +1 -0
  147. package/dist/types/src/cli/commands/halo/keys/keys.d.ts +7 -0
  148. package/dist/types/src/cli/commands/halo/keys/keys.d.ts.map +1 -0
  149. package/dist/types/src/cli/commands/halo/keys/keys.test.d.ts +2 -0
  150. package/dist/types/src/cli/commands/halo/keys/keys.test.d.ts.map +1 -0
  151. package/dist/types/src/cli/commands/halo/recover/index.d.ts +2 -0
  152. package/dist/types/src/cli/commands/halo/recover/index.d.ts.map +1 -0
  153. package/dist/types/src/cli/commands/halo/recover/recover.d.ts +7 -0
  154. package/dist/types/src/cli/commands/halo/recover/recover.d.ts.map +1 -0
  155. package/dist/types/src/cli/commands/halo/recover/recover.test.d.ts +2 -0
  156. package/dist/types/src/cli/commands/halo/recover/recover.test.d.ts.map +1 -0
  157. package/dist/types/src/cli/commands/halo/seed/index.d.ts +2 -0
  158. package/dist/types/src/cli/commands/halo/seed/index.d.ts.map +1 -0
  159. package/dist/types/src/cli/commands/halo/seed/seed.d.ts +7 -0
  160. package/dist/types/src/cli/commands/halo/seed/seed.d.ts.map +1 -0
  161. package/dist/types/src/cli/commands/halo/share/index.d.ts +2 -0
  162. package/dist/types/src/cli/commands/halo/share/index.d.ts.map +1 -0
  163. package/dist/types/src/cli/commands/halo/share/share.d.ts +15 -0
  164. package/dist/types/src/cli/commands/halo/share/share.d.ts.map +1 -0
  165. package/dist/types/src/cli/commands/halo/update/index.d.ts +2 -0
  166. package/dist/types/src/cli/commands/halo/update/index.d.ts.map +1 -0
  167. package/dist/types/src/cli/commands/halo/update/update.d.ts +11 -0
  168. package/dist/types/src/cli/commands/halo/update/update.d.ts.map +1 -0
  169. package/dist/types/src/cli/commands/halo/update/update.test.d.ts +2 -0
  170. package/dist/types/src/cli/commands/halo/update/update.test.d.ts.map +1 -0
  171. package/dist/types/src/cli/commands/halo/util.d.ts +13 -0
  172. package/dist/types/src/cli/commands/halo/util.d.ts.map +1 -0
  173. package/dist/types/src/cli/commands/index.d.ts +6 -0
  174. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  175. package/dist/types/src/cli/commands/profile/create.d.ts +9 -0
  176. package/dist/types/src/cli/commands/profile/create.d.ts.map +1 -0
  177. package/dist/types/src/cli/commands/profile/delete.d.ts +8 -0
  178. package/dist/types/src/cli/commands/profile/delete.d.ts.map +1 -0
  179. package/dist/types/src/cli/commands/profile/import.d.ts +17 -0
  180. package/dist/types/src/cli/commands/profile/import.d.ts.map +1 -0
  181. package/dist/types/src/cli/commands/profile/index.d.ts +19 -0
  182. package/dist/types/src/cli/commands/profile/index.d.ts.map +1 -0
  183. package/dist/types/src/cli/commands/profile/inspect.d.ts +13 -0
  184. package/dist/types/src/cli/commands/profile/inspect.d.ts.map +1 -0
  185. package/dist/types/src/cli/commands/profile/list.d.ts +6 -0
  186. package/dist/types/src/cli/commands/profile/list.d.ts.map +1 -0
  187. package/dist/types/src/cli/commands/profile/reset.d.ts +8 -0
  188. package/dist/types/src/cli/commands/profile/reset.d.ts.map +1 -0
  189. package/dist/types/src/cli/commands/profile/util.d.ts +24 -0
  190. package/dist/types/src/cli/commands/profile/util.d.ts.map +1 -0
  191. package/dist/types/src/cli/index.d.ts +2 -0
  192. package/dist/types/src/cli/index.d.ts.map +1 -0
  193. package/dist/types/src/cli/plugin.d.ts +4 -0
  194. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  195. package/dist/types/src/cli/testing/test-console.d.ts +37 -0
  196. package/dist/types/src/cli/testing/test-console.d.ts.map +1 -0
  197. package/dist/types/src/components/DevicesContainer.d.ts.map +1 -1
  198. package/dist/types/src/components/DevicesContainer.stories.d.ts +2 -48
  199. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +1 -1
  200. package/dist/types/src/components/JoinDialog.d.ts +0 -1
  201. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  202. package/dist/types/src/components/ProfileContainer.d.ts.map +1 -1
  203. package/dist/types/src/components/ProfileContainer.stories.d.ts +1 -47
  204. package/dist/types/src/components/ProfileContainer.stories.d.ts.map +1 -1
  205. package/dist/types/src/components/RecoveryCodeDialog.d.ts +0 -1
  206. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  207. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts +1 -47
  208. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +1 -1
  209. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  210. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +1 -47
  211. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
  212. package/dist/types/src/components/ResetDialog.d.ts +5 -3
  213. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  214. package/dist/types/src/components/ResetDialog.stories.d.ts +3 -49
  215. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  216. package/dist/types/src/constants.d.ts +4 -0
  217. package/dist/types/src/constants.d.ts.map +1 -0
  218. package/dist/types/src/index.d.ts +1 -2
  219. package/dist/types/src/index.d.ts.map +1 -1
  220. package/dist/types/src/meta.d.ts +2 -2
  221. package/dist/types/src/meta.d.ts.map +1 -1
  222. package/dist/types/src/translations.d.ts +2 -48
  223. package/dist/types/src/translations.d.ts.map +1 -1
  224. package/dist/types/src/types/capabilities.d.ts +10 -0
  225. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  226. package/dist/types/src/types/events.d.ts +9 -0
  227. package/dist/types/src/types/events.d.ts.map +1 -0
  228. package/dist/types/src/types/index.d.ts +2 -0
  229. package/dist/types/src/types/index.d.ts.map +1 -1
  230. package/dist/types/src/types/schema.d.ts +163 -9
  231. package/dist/types/src/types/schema.d.ts.map +1 -1
  232. package/dist/types/tsconfig.tsbuildinfo +1 -1
  233. package/package.json +52 -37
  234. package/src/ClientPlugin.ts +35 -53
  235. package/src/capabilities/app-graph-builder/app-graph-builder.ts +95 -0
  236. package/src/capabilities/app-graph-builder/index.ts +7 -0
  237. package/src/capabilities/client/client.ts +75 -0
  238. package/src/capabilities/client/index.ts +7 -0
  239. package/src/capabilities/index.ts +7 -11
  240. package/src/capabilities/migrations/index.ts +7 -0
  241. package/src/capabilities/migrations/migrations.ts +30 -0
  242. package/src/capabilities/operation-resolver/index.ts +7 -0
  243. package/src/capabilities/operation-resolver/operation-resolver.ts +248 -0
  244. package/src/capabilities/react-context/index.ts +7 -0
  245. package/src/capabilities/react-context/react-context.tsx +25 -0
  246. package/src/capabilities/react-surface/index.ts +7 -0
  247. package/src/capabilities/react-surface/react-surface.tsx +74 -0
  248. package/src/capabilities/schema-defs/index.ts +7 -0
  249. package/src/capabilities/schema-defs/schema-defs.ts +35 -0
  250. package/src/cli/commands/config/index.ts +12 -0
  251. package/src/cli/commands/config/view.ts +26 -0
  252. package/src/cli/commands/device/index.ts +14 -0
  253. package/src/cli/commands/device/info/index.ts +5 -0
  254. package/src/cli/commands/device/info/info.test.ts +29 -0
  255. package/src/cli/commands/device/info/info.ts +50 -0
  256. package/src/cli/commands/device/list/index.ts +5 -0
  257. package/src/cli/commands/device/list/list.test.ts +31 -0
  258. package/src/cli/commands/device/list/list.ts +30 -0
  259. package/src/cli/commands/device/update/index.ts +5 -0
  260. package/src/cli/commands/device/update/update.ts +70 -0
  261. package/src/cli/commands/device/util.ts +55 -0
  262. package/src/cli/commands/edge/index.ts +12 -0
  263. package/src/cli/commands/edge/status.ts +45 -0
  264. package/src/cli/commands/halo/create/create.test.ts +52 -0
  265. package/src/cli/commands/halo/create/create.ts +75 -0
  266. package/src/cli/commands/halo/create/index.ts +5 -0
  267. package/src/cli/commands/halo/credential/add/add.ts +97 -0
  268. package/src/cli/commands/halo/credential/add/index.ts +5 -0
  269. package/src/cli/commands/halo/credential/index.ts +13 -0
  270. package/src/cli/commands/halo/credential/list/index.ts +5 -0
  271. package/src/cli/commands/halo/credential/list/list.test.ts +28 -0
  272. package/src/cli/commands/halo/credential/list/list.ts +118 -0
  273. package/src/cli/commands/halo/identity/identity.test.ts +40 -0
  274. package/src/cli/commands/halo/identity/identity.ts +46 -0
  275. package/src/cli/commands/halo/identity/index.ts +5 -0
  276. package/src/cli/commands/halo/index.ts +21 -0
  277. package/src/cli/commands/halo/join/index.ts +5 -0
  278. package/src/cli/commands/halo/join/join.test.ts +10 -0
  279. package/src/cli/commands/halo/join/join.ts +87 -0
  280. package/src/cli/commands/halo/keys/index.ts +5 -0
  281. package/src/cli/commands/halo/keys/keys.test.ts +29 -0
  282. package/src/cli/commands/halo/keys/keys.ts +42 -0
  283. package/src/cli/commands/halo/recover/index.ts +5 -0
  284. package/src/cli/commands/halo/recover/recover.test.ts +10 -0
  285. package/src/cli/commands/halo/recover/recover.ts +44 -0
  286. package/src/cli/commands/halo/seed/index.ts +5 -0
  287. package/src/cli/commands/halo/seed/seed.ts +38 -0
  288. package/src/cli/commands/halo/share/index.ts +5 -0
  289. package/src/cli/commands/halo/share/share.ts +97 -0
  290. package/src/cli/commands/halo/update/index.ts +5 -0
  291. package/src/cli/commands/halo/update/update.test.ts +29 -0
  292. package/src/cli/commands/halo/update/update.ts +69 -0
  293. package/src/cli/commands/halo/util.ts +18 -0
  294. package/src/cli/commands/index.ts +9 -0
  295. package/src/cli/commands/profile/create.ts +87 -0
  296. package/src/cli/commands/profile/delete.ts +33 -0
  297. package/src/cli/commands/profile/import.ts +101 -0
  298. package/src/cli/commands/profile/index.ts +17 -0
  299. package/src/cli/commands/profile/inspect.ts +64 -0
  300. package/src/cli/commands/profile/list.ts +54 -0
  301. package/src/cli/commands/profile/reset.ts +45 -0
  302. package/src/cli/commands/profile/util.ts +48 -0
  303. package/src/cli/index.ts +5 -0
  304. package/src/cli/plugin.ts +33 -0
  305. package/src/cli/testing/test-console.ts +88 -0
  306. package/src/components/DevicesContainer.stories.tsx +7 -5
  307. package/src/components/DevicesContainer.tsx +13 -11
  308. package/src/components/JoinDialog.tsx +13 -15
  309. package/src/components/ProfileContainer.tsx +48 -34
  310. package/src/components/RecoveryCodeDialog.tsx +3 -5
  311. package/src/components/RecoveryCredentialsContainer.stories.tsx +7 -5
  312. package/src/components/RecoveryCredentialsContainer.tsx +6 -8
  313. package/src/components/ResetDialog.stories.tsx +17 -9
  314. package/src/components/ResetDialog.tsx +17 -16
  315. package/src/constants.ts +9 -0
  316. package/src/index.ts +1 -2
  317. package/src/meta.ts +2 -2
  318. package/src/translations.ts +5 -2
  319. package/src/types/capabilities.ts +16 -0
  320. package/src/types/events.ts +15 -0
  321. package/src/types/index.ts +2 -0
  322. package/src/types/schema.ts +120 -7
  323. package/dist/lib/browser/app-graph-builder-KCCH45OW.mjs +0 -124
  324. package/dist/lib/browser/app-graph-builder-KCCH45OW.mjs.map +0 -7
  325. package/dist/lib/browser/chunk-4LRO3Y2O.mjs +0 -19
  326. package/dist/lib/browser/chunk-4LRO3Y2O.mjs.map +0 -7
  327. package/dist/lib/browser/chunk-N5UR2HOE.mjs +0 -18
  328. package/dist/lib/browser/chunk-N5UR2HOE.mjs.map +0 -7
  329. package/dist/lib/browser/chunk-RDIG75CA.mjs +0 -110
  330. package/dist/lib/browser/chunk-RDIG75CA.mjs.map +0 -7
  331. package/dist/lib/browser/chunk-SCNW6KMG.mjs +0 -686
  332. package/dist/lib/browser/chunk-SCNW6KMG.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-ZRVMXLDR.mjs +0 -15
  334. package/dist/lib/browser/chunk-ZRVMXLDR.mjs.map +0 -7
  335. package/dist/lib/browser/client-O7U3MQ6J.mjs +0 -43
  336. package/dist/lib/browser/client-O7U3MQ6J.mjs.map +0 -7
  337. package/dist/lib/browser/intent-resolver-SPZU2X4O.mjs +0 -305
  338. package/dist/lib/browser/intent-resolver-SPZU2X4O.mjs.map +0 -7
  339. package/dist/lib/browser/migrations-FQYDKKYO.mjs +0 -23
  340. package/dist/lib/browser/migrations-FQYDKKYO.mjs.map +0 -7
  341. package/dist/lib/browser/react-context-QCKETSRF.mjs +0 -24
  342. package/dist/lib/browser/react-context-QCKETSRF.mjs.map +0 -7
  343. package/dist/lib/browser/react-surface-SLGNIGL6.mjs +0 -66
  344. package/dist/lib/browser/react-surface-SLGNIGL6.mjs.map +0 -7
  345. package/dist/lib/browser/schema-defs-SPPWTZRH.mjs +0 -25
  346. package/dist/lib/browser/schema-defs-SPPWTZRH.mjs.map +0 -7
  347. package/dist/lib/node-esm/app-graph-builder-B5IOYV4W.mjs +0 -125
  348. package/dist/lib/node-esm/app-graph-builder-B5IOYV4W.mjs.map +0 -7
  349. package/dist/lib/node-esm/chunk-6ANOJ7ZM.mjs +0 -19
  350. package/dist/lib/node-esm/chunk-6ANOJ7ZM.mjs.map +0 -7
  351. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs +0 -20
  352. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs.map +0 -7
  353. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs +0 -17
  354. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs.map +0 -7
  355. package/dist/lib/node-esm/chunk-RHMYXMKB.mjs +0 -687
  356. package/dist/lib/node-esm/chunk-RHMYXMKB.mjs.map +0 -7
  357. package/dist/lib/node-esm/chunk-VENKFPBC.mjs +0 -111
  358. package/dist/lib/node-esm/chunk-VENKFPBC.mjs.map +0 -7
  359. package/dist/lib/node-esm/client-6MTNT7M6.mjs +0 -44
  360. package/dist/lib/node-esm/client-6MTNT7M6.mjs.map +0 -7
  361. package/dist/lib/node-esm/intent-resolver-4HEQTR5X.mjs +0 -306
  362. package/dist/lib/node-esm/intent-resolver-4HEQTR5X.mjs.map +0 -7
  363. package/dist/lib/node-esm/migrations-2D5ENOAB.mjs +0 -24
  364. package/dist/lib/node-esm/migrations-2D5ENOAB.mjs.map +0 -7
  365. package/dist/lib/node-esm/react-context-ZVUDFBCH.mjs +0 -25
  366. package/dist/lib/node-esm/react-context-ZVUDFBCH.mjs.map +0 -7
  367. package/dist/lib/node-esm/react-surface-FFOAE7HL.mjs +0 -67
  368. package/dist/lib/node-esm/react-surface-FFOAE7HL.mjs.map +0 -7
  369. package/dist/lib/node-esm/schema-defs-FIV7SETB.mjs +0 -26
  370. package/dist/lib/node-esm/schema-defs-FIV7SETB.mjs.map +0 -7
  371. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  372. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  373. package/dist/types/src/capabilities/capabilities.d.ts +0 -9
  374. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  375. package/dist/types/src/capabilities/client.d.ts +0 -9
  376. package/dist/types/src/capabilities/client.d.ts.map +0 -1
  377. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -8
  378. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  379. package/dist/types/src/capabilities/migrations.d.ts +0 -4
  380. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  381. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  382. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  383. package/dist/types/src/capabilities/react-surface.d.ts +0 -8
  384. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  385. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  386. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  387. package/dist/types/src/events.d.ts +0 -8
  388. package/dist/types/src/events.d.ts.map +0 -1
  389. package/src/capabilities/app-graph-builder.ts +0 -115
  390. package/src/capabilities/capabilities.ts +0 -18
  391. package/src/capabilities/client.ts +0 -43
  392. package/src/capabilities/intent-resolver.ts +0 -251
  393. package/src/capabilities/migrations.ts +0 -25
  394. package/src/capabilities/react-context.tsx +0 -21
  395. package/src/capabilities/react-surface.tsx +0 -67
  396. package/src/capabilities/schema-defs.ts +0 -29
  397. package/src/events.ts +0 -15
@@ -15,17 +15,29 @@ import {
15
15
  ControlPage,
16
16
  ControlSection,
17
17
  Form,
18
- type InputComponent,
18
+ type FormFieldMap,
19
+ type FormUpdateMeta,
19
20
  } from '@dxos/react-ui-form';
20
21
  import { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';
21
22
  import { hexToEmoji, hexToHue } from '@dxos/util';
22
23
 
23
24
  import { meta } from '../meta';
24
25
 
26
+ // TOOD(burdon): Factor out?
27
+ // TODO(wittjosiah): Integrate annotations with translations.
28
+ const UserProfile = Schema.Struct({
29
+ did: Schema.String.annotations({ title: 'DID' }),
30
+ displayName: Schema.String.annotations({ title: 'Display name' }),
31
+ emoji: Schema.String.annotations({ title: 'Avatar' }),
32
+ hue: Schema.String.annotations({ title: 'Color' }),
33
+ });
34
+
35
+ type UserProfile = Schema.Schema.Type<typeof UserProfile>;
36
+
25
37
  // TODO(thure): Factor out?
26
38
  const getDefaultHueValue = (identity: Identity | null) => hexToHue(identity?.identityKey.toHex() ?? '0');
27
- const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
28
39
  const getHueValue = (identity: Identity | null) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
40
+ const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
29
41
  const getEmojiValue = (identity: Identity | null) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);
30
42
 
31
43
  export const ProfileContainer = () => {
@@ -39,7 +51,7 @@ export const ProfileContainer = () => {
39
51
  const updateProfile = useMemo(
40
52
  () =>
41
53
  debounce(
42
- (profile: Partial<Profile>) =>
54
+ (profile: Partial<UserProfile>) =>
43
55
  client.halo.updateProfile({
44
56
  displayName: profile.displayName,
45
57
  data: {
@@ -52,11 +64,26 @@ export const ProfileContainer = () => {
52
64
  [],
53
65
  );
54
66
 
55
- const handleSave = useCallback(
56
- (profile: Profile) => {
57
- setDisplayNameDirectly(profile.displayName);
58
- setEmojiDirectly(profile.emoji);
59
- setHueDirectly(profile.hue);
67
+ const handleChange = useCallback(
68
+ (profile: Partial<UserProfile>, meta: FormUpdateMeta<UserProfile>) => {
69
+ for (const [path, changed] of Object.entries(meta.changed)) {
70
+ if (changed) {
71
+ switch (path) {
72
+ case 'displayName':
73
+ setDisplayNameDirectly(profile.displayName ?? '');
74
+ break;
75
+ case 'emoji':
76
+ setEmojiDirectly(profile.emoji ?? getDefaultEmojiValue(identity));
77
+ break;
78
+ case 'hue':
79
+ setHueDirectly(profile.hue ?? getDefaultHueValue(identity));
80
+ break;
81
+ default:
82
+ break;
83
+ }
84
+ }
85
+ }
86
+
60
87
  void updateProfile(profile);
61
88
  },
62
89
  [identity],
@@ -64,22 +91,23 @@ export const ProfileContainer = () => {
64
91
 
65
92
  const values = useMemo(
66
93
  () => ({
94
+ did: identity?.did,
67
95
  displayName,
68
96
  emoji,
69
97
  hue,
70
- did: identity?.did,
71
98
  }),
72
99
  [identity, displayName, emoji, hue],
73
100
  );
74
101
 
75
102
  // TODO(wittjosiah): Integrate descriptions with the form schema.
76
- const customElements: Partial<Record<string, InputComponent>> = useMemo(
103
+ const fieldMap = useMemo<FormFieldMap>(
77
104
  () => ({
78
105
  displayName: ({ type, label, getValue, onValueChange }) => {
79
106
  const handleChange = useCallback(
80
107
  ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),
81
108
  [onValueChange, type],
82
109
  );
110
+
83
111
  return (
84
112
  <ControlItemInput title={label} description={t('display name description')}>
85
113
  <Input.TextInput
@@ -97,6 +125,7 @@ export const ProfileContainer = () => {
97
125
  () => onValueChange(type, getDefaultEmojiValue(identity)),
98
126
  [onValueChange, type],
99
127
  );
128
+
100
129
  return (
101
130
  <ControlItem title={label} description={t('icon description')}>
102
131
  <EmojiPickerBlock
@@ -115,14 +144,12 @@ export const ProfileContainer = () => {
115
144
  () => onValueChange(type, getDefaultHueValue(identity)),
116
145
  [onValueChange, type],
117
146
  );
147
+
118
148
  return (
119
149
  <ControlItem title={label} description={t('hue description')}>
120
- <HuePicker
121
- value={getValue()}
122
- onChange={handleChange}
123
- onReset={handleHueReset}
124
- classNames='[--hue-preview-size:1.5rem] justify-self-end'
125
- />
150
+ <div role='none' className='flex justify-self-end'>
151
+ <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />
152
+ </div>
126
153
  </ControlItem>
127
154
  );
128
155
  },
@@ -145,26 +172,13 @@ export const ProfileContainer = () => {
145
172
  <ControlPage>
146
173
  <Clipboard.Provider>
147
174
  <ControlSection title={t('profile label')} description={t('profile description')}>
148
- <Form
149
- schema={ProfileSchema}
150
- values={values}
151
- autoSave
152
- onSave={handleSave}
153
- Custom={customElements}
154
- classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'
155
- outerSpacing={false}
156
- />
175
+ <Form.Root schema={UserProfile} values={values} fieldMap={fieldMap} onValuesChanged={handleChange}>
176
+ <Form.Content>
177
+ <Form.FieldSet classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]' />
178
+ </Form.Content>
179
+ </Form.Root>
157
180
  </ControlSection>
158
181
  </Clipboard.Provider>
159
182
  </ControlPage>
160
183
  );
161
184
  };
162
-
163
- // TODO(wittjosiah): Integrate annotations with translations.
164
- const ProfileSchema = Schema.Struct({
165
- displayName: Schema.String.annotations({ title: 'Display name' }),
166
- emoji: Schema.String.annotations({ title: 'Avatar' }),
167
- hue: Schema.String.annotations({ title: 'Color' }),
168
- did: Schema.String.annotations({ title: 'DID' }),
169
- });
170
- type Profile = Schema.Schema.Type<typeof ProfileSchema>;
@@ -8,8 +8,6 @@ import { AlertDialog, Button, Clipboard, Input, useTranslation } from '@dxos/rea
8
8
 
9
9
  import { meta } from '../meta';
10
10
 
11
- export const RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
12
-
13
11
  export type RecoveryCodeDialogProps = {
14
12
  code: string;
15
13
  };
@@ -23,11 +21,11 @@ export const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {
23
21
  return (
24
22
  <AlertDialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
25
23
  <AlertDialog.Title>{t('recovery code dialog title')}</AlertDialog.Title>
26
- <p className='py-4'>{t('recovery code dialog description')}</p>
24
+ <p className='plb-4'>{t('recovery code dialog description')}</p>
27
25
  <Clipboard.Provider>
28
26
  <Code code={code} />
29
27
  </Clipboard.Provider>
30
- <div className='flex flex-col py-4 gap-2'>
28
+ <div className='flex flex-col plb-4 gap-2'>
31
29
  <p>{t('recovery code dialog warning 1')}</p>
32
30
  <p>{t('recovery code dialog warning 2')}</p>
33
31
  </div>
@@ -60,7 +58,7 @@ const Code = ({ code }: { code: string }) => {
60
58
  <div className='grid grid-cols-4'>
61
59
  {words.map((word, i) => (
62
60
  <div key={i} className='flex items-center p-2 gap-2'>
63
- <div className='w-4 text-xs text-center text-subdued'>{i + 1}</div>
61
+ <div className='is-4 text-xs text-center text-subdued'>{i + 1}</div>
64
62
  <div className='text-sm'>{word}</div>
65
63
  </div>
66
64
  ))}
@@ -3,8 +3,9 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
 
7
- import { IntentPlugin } from '@dxos/app-framework';
8
+ import { OperationPlugin } from '@dxos/app-framework';
8
9
  import { withPluginManager } from '@dxos/app-framework/testing';
9
10
  import { withTheme } from '@dxos/react-ui/testing';
10
11
 
@@ -21,11 +22,12 @@ const meta = {
21
22
  withPluginManager({
22
23
  plugins: [
23
24
  ClientPlugin({
24
- onClientInitialized: async ({ client }) => {
25
- await client.halo.createIdentity();
26
- },
25
+ onClientInitialized: ({ client }) =>
26
+ Effect.gen(function* () {
27
+ yield* Effect.promise(() => client.halo.createIdentity());
28
+ }),
27
29
  }),
28
- IntentPlugin(),
30
+ OperationPlugin(),
29
31
  ],
30
32
  }),
31
33
  ],
@@ -4,19 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { useOperationInvoker } from '@dxos/app-framework/react';
8
8
  import { useCredentials } from '@dxos/react-client/halo';
9
9
  import { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';
10
10
  import { ControlGroup, ControlItem, ControlPage, ControlSection } from '@dxos/react-ui-form';
11
11
 
12
12
  import { meta } from '../meta';
13
- import { ClientAction } from '../types';
13
+ import { ClientOperation } from '../types';
14
14
 
15
15
  export const MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
16
16
 
17
17
  export const RecoveryCredentialsContainer = () => {
18
18
  const { t } = useTranslation(meta.id);
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
19
+ const { invokePromise } = useOperationInvoker();
20
20
  const credentials = useCredentials();
21
21
  const recoveryCredentials = credentials.filter(
22
22
  (credential) => credential.subject.assertion['@type'] === 'dxos.halo.credentials.IdentityRecovery',
@@ -31,8 +31,7 @@ export const RecoveryCredentialsContainer = () => {
31
31
  label={t('create passkey label')}
32
32
  icon='ph--key--duotone'
33
33
  variant='primary'
34
- size={5}
35
- onClick={() => dispatch(createIntent(ClientAction.CreatePasskey))}
34
+ onClick={() => invokePromise(ClientOperation.CreatePasskey)}
36
35
  />
37
36
  </ControlItem>
38
37
  <ControlItem title={t('create recovery code label')} description={t('create recovery code description')}>
@@ -40,8 +39,7 @@ export const RecoveryCredentialsContainer = () => {
40
39
  label={t('create recovery code label')}
41
40
  icon='ph--receipt--duotone'
42
41
  variant='default'
43
- size={5}
44
- onClick={() => dispatch(createIntent(ClientAction.CreateRecoveryCode))}
42
+ onClick={() => invokePromise(ClientOperation.CreateRecoveryCode)}
45
43
  />
46
44
  </ControlItem>
47
45
  </ControlGroup>
@@ -57,7 +55,7 @@ export const RecoveryCredentialsContainer = () => {
57
55
  {recoveryCredentials.map((credential) => (
58
56
  <ListItem.Root key={credential.id?.toHex()}>
59
57
  <ListItem.Endcap>
60
- <Icon icon='ph--key--regular' size={5} />
58
+ <Icon icon='ph--key--regular' />
61
59
  </ListItem.Endcap>
62
60
  <ListItem.Heading>{credential.issuanceDate.toLocaleString()}</ListItem.Heading>
63
61
  </ListItem.Root>
@@ -3,9 +3,11 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
  import React from 'react';
7
8
 
8
- import { IntentPlugin } from '@dxos/app-framework';
9
+ import { OperationPlugin } from '@dxos/app-framework';
10
+ import { usePluginManager } from '@dxos/app-framework/react';
9
11
  import { withPluginManager } from '@dxos/app-framework/testing';
10
12
  import { Dialog } from '@dxos/react-ui';
11
13
  import { withTheme } from '@dxos/react-ui/testing';
@@ -15,11 +17,17 @@ import { translations } from '../translations';
15
17
 
16
18
  import { ResetDialog, type ResetDialogProps } from './ResetDialog';
17
19
 
18
- const Render = (props: ResetDialogProps) => {
20
+ const Render = (props: Omit<ResetDialogProps, 'capabilityManager'>) => {
21
+ const manager = usePluginManager();
22
+
19
23
  return (
20
24
  <Dialog.Root open>
21
25
  <Dialog.Overlay>
22
- <ResetDialog onReset={() => console.log('reset')} {...props} />
26
+ <ResetDialog
27
+ onReset={() => Effect.sync(() => console.log('reset'))}
28
+ capabilityManager={manager.capabilities}
29
+ {...props}
30
+ />
23
31
  </Dialog.Overlay>
24
32
  </Dialog.Root>
25
33
  );
@@ -28,11 +36,11 @@ const Render = (props: ResetDialogProps) => {
28
36
  const meta = {
29
37
  title: 'plugins/plugin-client/ResetDialog',
30
38
  component: ResetDialog,
31
- render: Render,
39
+ render: Render as any,
32
40
  decorators: [
33
- withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
41
+ withTheme,
34
42
  withPluginManager({
35
- plugins: [IntentPlugin(), ClientPlugin({})],
43
+ plugins: [OperationPlugin(), ClientPlugin({})],
36
44
  }),
37
45
  ],
38
46
  parameters: {
@@ -45,8 +53,8 @@ export default meta;
45
53
 
46
54
  type Story = StoryObj<typeof meta>;
47
55
 
48
- export const Default: Story = { args: { mode: 'reset storage' } };
56
+ export const Default: Story = { args: { mode: 'reset storage' as const } as any };
49
57
 
50
- export const JoinNewIdentity: Story = { args: { mode: 'join new identity' } };
58
+ export const JoinNewIdentity: Story = { args: { mode: 'join new identity' as const } as any };
51
59
 
52
- export const Recover: Story = { args: { mode: 'recover' } };
60
+ export const Recover: Story = { args: { mode: 'recover' as const } as any };
@@ -2,9 +2,12 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import * as Effect from 'effect/Effect';
5
6
  import React, { useCallback } from 'react';
6
7
 
7
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { Capability, type CapabilityManager, Common } from '@dxos/app-framework';
9
+ import { useOperationInvoker } from '@dxos/app-framework/react';
10
+ import { runAndForwardErrors } from '@dxos/effect';
8
11
  import { useClient } from '@dxos/react-client';
9
12
  import { Dialog, useTranslation } from '@dxos/react-ui';
10
13
  import { ConfirmReset, type ConfirmResetProps } from '@dxos/shell/react';
@@ -12,35 +15,33 @@ import { ConfirmReset, type ConfirmResetProps } from '@dxos/shell/react';
12
15
  import { meta } from '../meta';
13
16
  import { type ClientPluginOptions } from '../types';
14
17
 
15
- export const RESET_DIALOG = `${meta.id}/ResetDialog`;
18
+ export type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> &
19
+ Pick<ClientPluginOptions, 'onReset'> & {
20
+ capabilityManager: CapabilityManager.CapabilityManager;
21
+ };
16
22
 
17
- export type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> & Pick<ClientPluginOptions, 'onReset'>;
18
-
19
- export const ResetDialog = ({ mode, onReset }: ResetDialogProps) => {
23
+ export const ResetDialog = ({ mode, onReset, capabilityManager }: ResetDialogProps) => {
20
24
  const { t } = useTranslation(meta.id);
21
- const { dispatchPromise: dispatch } = useIntentDispatcher();
25
+ const { invokePromise } = useOperationInvoker();
22
26
  const client = useClient();
23
27
 
24
28
  const handleReset = useCallback(async () => {
25
29
  await client.reset();
26
30
  const target =
27
31
  mode === 'join new identity' ? 'deviceInvitation' : mode === 'recover' ? 'recoverIdentity' : undefined;
28
- await onReset?.({ target });
29
- }, [dispatch, client, mode, onReset]);
32
+ if (onReset) {
33
+ await runAndForwardErrors(onReset({ target }).pipe(Effect.provideService(Capability.Service, capabilityManager)));
34
+ }
35
+ }, [client, mode, onReset, capabilityManager]);
30
36
 
31
37
  const handleCancel = useCallback(() => {
32
- void dispatch(
33
- createIntent(LayoutAction.UpdateDialog, {
34
- part: 'dialog',
35
- options: { state: false },
36
- }),
37
- );
38
- }, [dispatch]);
38
+ void invokePromise(Common.LayoutOperation.UpdateDialog, { state: false });
39
+ }, [invokePromise]);
39
40
 
40
41
  // TODO(wittjosiah): Add the sr-only translations.
41
42
  // TODO(wittjosiah): Add missing descriptions to other dialogs.
42
43
  return (
43
- <Dialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
44
+ <Dialog.Content>
44
45
  <Dialog.Title classNames='sr-only'>{t('reset dialog title')}</Dialog.Title>
45
46
  <Dialog.Description classNames='sr-only'>{t('reset dialog description')}</Dialog.Description>
46
47
  <ConfirmReset active mode={mode} onConfirm={handleReset} onCancel={handleCancel} />
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { meta } from './meta';
6
+
7
+ export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
8
+ export const RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
9
+ export const RESET_DIALOG = `${meta.id}/ResetDialog`;
package/src/index.ts CHANGED
@@ -2,8 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { ClientCapabilities } from './capabilities';
6
- export { ClientEvents } from './events';
5
+ export { ClientCapabilities, ClientEvents } from './types';
7
6
  export * from './meta';
8
7
  export * from './types';
9
8
 
package/src/meta.ts CHANGED
@@ -2,10 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
6
  import { trim } from '@dxos/util';
7
7
 
8
- export const meta: PluginMeta = {
8
+ export const meta: Plugin.Meta = {
9
9
  id: 'dxos.org/plugin/client',
10
10
  name: 'Client',
11
11
  description: trim`
@@ -3,14 +3,15 @@
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
+ import { translations as shellTranslations } from '@dxos/shell/react';
6
7
 
7
8
  import { meta } from './meta';
8
9
 
9
- export const translations = [
10
+ const pluginTranslations = [
10
11
  {
11
12
  'en-US': {
12
13
  [meta.id]: {
13
- 'account label': 'User Account',
14
+ 'account label': 'User profile',
14
15
  'profile label': 'Profile',
15
16
  'profile description': 'You can adjust how your user settings here.',
16
17
  'devices label': 'Devices',
@@ -68,3 +69,5 @@ export const translations = [
68
69
  },
69
70
  },
70
71
  ] as const satisfies Resource[];
72
+
73
+ export const translations: Resource[] = [...pluginTranslations, ...shellTranslations];
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+ import { type Client } from '@dxos/client';
7
+ import { type ObjectMigration } from '@dxos/client/echo';
8
+ import { type Type } from '@dxos/echo';
9
+
10
+ import { meta } from '../meta';
11
+
12
+ export namespace ClientCapabilities {
13
+ export const Client = Capability.make<Client>(`${meta.id}/capability/client`);
14
+ export const Schema = Capability.make<Type.Entity.Any[]>(`${meta.id}/capability/schema`);
15
+ export const Migration = Capability.make<ObjectMigration[]>(`${meta.id}/capability/migration`);
16
+ }
@@ -0,0 +1,15 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ActivationEvent } from '@dxos/app-framework';
6
+
7
+ import { meta } from '../meta';
8
+
9
+ export namespace ClientEvents {
10
+ export const ClientReady = ActivationEvent.make(`${meta.id}/event/client-ready`);
11
+ export const SetupSchema = ActivationEvent.make(`${meta.id}/event/setup-schema`);
12
+ export const SetupMigration = ActivationEvent.make(`${meta.id}/event/setup-migration`);
13
+ export const IdentityCreated = ActivationEvent.make(`${meta.id}/event/identity-created`);
14
+ export const SpacesReady = ActivationEvent.make(`${meta.id}/event/spaces-ready`);
15
+ }
@@ -2,4 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ export * from './capabilities';
6
+ export * from './events';
5
7
  export * from './schema';
@@ -2,11 +2,12 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import type * as Effect from 'effect/Effect';
5
6
  import * as Schema from 'effect/Schema';
6
7
 
7
- import { type PluginContext } from '@dxos/app-framework';
8
- import { type Client, type ClientOptions, PublicKey } from '@dxos/react-client';
9
- import { type MaybePromise } from '@dxos/util';
8
+ import { Capability } from '@dxos/app-framework';
9
+ import { type Client, type ClientOptions, PublicKey } from '@dxos/client';
10
+ import { Operation } from '@dxos/operation';
10
11
 
11
12
  import { meta } from '../meta';
12
13
 
@@ -90,6 +91,115 @@ export namespace ClientAction {
90
91
  }) {}
91
92
  }
92
93
 
94
+ const CLIENT_OPERATION = `${meta.id}/operation`;
95
+
96
+ /**
97
+ * Operations for the Client plugin.
98
+ */
99
+ export namespace ClientOperation {
100
+ const ProfileSchema = Schema.Struct({
101
+ displayName: Schema.optional(Schema.String),
102
+ avatarCid: Schema.optional(Schema.String),
103
+ data: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),
104
+ });
105
+
106
+ export const CreateIdentity = Operation.make({
107
+ meta: { key: `${CLIENT_OPERATION}/create-identity`, name: 'Create Identity' },
108
+ services: [Capability.Service],
109
+ schema: {
110
+ input: ProfileSchema,
111
+ output: IdentitySchema,
112
+ },
113
+ });
114
+
115
+ export const JoinIdentity = Operation.make({
116
+ meta: { key: `${CLIENT_OPERATION}/join-identity`, name: 'Join Identity' },
117
+ services: [Capability.Service],
118
+ schema: {
119
+ input: Schema.Struct({
120
+ invitationCode: Schema.optional(Schema.String),
121
+ }),
122
+ output: Schema.Void,
123
+ },
124
+ });
125
+
126
+ export const ShareIdentity = Operation.make({
127
+ meta: { key: `${CLIENT_OPERATION}/share-identity`, name: 'Share Identity' },
128
+ services: [Capability.Service],
129
+ schema: {
130
+ input: Schema.Void,
131
+ output: Schema.Void,
132
+ },
133
+ });
134
+
135
+ export const RecoverIdentity = Operation.make({
136
+ meta: { key: `${CLIENT_OPERATION}/recover-identity`, name: 'Recover Identity' },
137
+ services: [Capability.Service],
138
+ schema: {
139
+ input: Schema.Void,
140
+ output: Schema.Void,
141
+ },
142
+ });
143
+
144
+ export const ResetStorage = Operation.make({
145
+ meta: { key: `${CLIENT_OPERATION}/reset-storage`, name: 'Reset Storage' },
146
+ services: [Capability.Service],
147
+ schema: {
148
+ input: Schema.Struct({
149
+ mode: Schema.optional(Schema.String),
150
+ }),
151
+ output: Schema.Void,
152
+ },
153
+ });
154
+
155
+ export const CreateAgent = Operation.make({
156
+ meta: { key: `${CLIENT_OPERATION}/create-agent`, name: 'Create Agent' },
157
+ services: [Capability.Service],
158
+ schema: {
159
+ input: Schema.Void,
160
+ output: Schema.Void,
161
+ },
162
+ });
163
+
164
+ export const CreateRecoveryCode = Operation.make({
165
+ meta: { key: `${CLIENT_OPERATION}/create-recovery-code`, name: 'Create Recovery Code' },
166
+ services: [Capability.Service],
167
+ schema: {
168
+ input: Schema.Void,
169
+ output: Schema.Void,
170
+ },
171
+ });
172
+
173
+ export const CreatePasskey = Operation.make({
174
+ meta: { key: `${CLIENT_OPERATION}/create-passkey`, name: 'Create Passkey' },
175
+ services: [Capability.Service],
176
+ schema: {
177
+ input: Schema.Void,
178
+ output: Schema.Void,
179
+ },
180
+ });
181
+
182
+ export const RedeemPasskey = Operation.make({
183
+ meta: { key: `${CLIENT_OPERATION}/redeem-passkey`, name: 'Redeem Passkey' },
184
+ services: [Capability.Service],
185
+ schema: {
186
+ input: Schema.Void,
187
+ output: Schema.Void,
188
+ },
189
+ });
190
+
191
+ export const RedeemToken = Operation.make({
192
+ meta: { key: `${CLIENT_OPERATION}/redeem-token`, name: 'Redeem Token' },
193
+ services: [Capability.Service],
194
+ schema: {
195
+ input: Schema.Struct({
196
+ token: Schema.String,
197
+ }),
198
+ output: Schema.Void,
199
+ },
200
+ });
201
+ }
202
+
93
203
  export type ClientPluginOptions = ClientOptions & {
94
204
  /**
95
205
  * Base URL for the invitation link.
@@ -99,22 +209,25 @@ export type ClientPluginOptions = ClientOptions & {
99
209
  /**
100
210
  * Query parameter for the invitation code.
101
211
  */
102
- invitationParam?: string;
212
+ invitationProp?: string;
103
213
 
104
214
  /**
105
215
  * Run after the client has been initialized.
216
+ * Plugin context is provided so capabilities are accessible.
106
217
  */
107
- onClientInitialized?: (params: { context: PluginContext; client: Client }) => MaybePromise<void>;
218
+ onClientInitialized?: (params: { client: Client }) => Effect.Effect<void, Error | never, Capability.Service | never>;
108
219
 
109
220
  /**
110
221
  * Called when spaces are ready.
222
+ * Plugin context is provided so capabilities are accessible.
111
223
  */
112
- onSpacesReady?: (params: { context: PluginContext; client: Client }) => MaybePromise<void>;
224
+ onSpacesReady?: (params: { client: Client }) => Effect.Effect<void, Error | never, Capability.Service | never>;
113
225
 
114
226
  /**
115
227
  * Called when the client is reset.
228
+ * Plugin context is provided so capabilities are accessible.
116
229
  */
117
- onReset?: (params: { target?: string }) => MaybePromise<void>;
230
+ onReset?: (params: { target?: string }) => Effect.Effect<void, Error | never, Capability.Service | never>;
118
231
  };
119
232
 
120
233
  export namespace Account {