@dxos/plugin-thread 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (383) hide show
  1. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs +189 -0
  2. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs.map +7 -0
  3. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs +18 -0
  4. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs.map +7 -0
  5. package/dist/lib/browser/blueprints/index.mjs +8 -0
  6. package/dist/lib/browser/call-manager-GDGIKJKN.mjs +26 -0
  7. package/dist/lib/browser/call-manager-GDGIKJKN.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-2FIHSX35.mjs +293 -0
  9. package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-4EUEMHNI.mjs +1817 -0
  11. package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-ZCEU5K23.mjs → chunk-ERK254BS.mjs} +207 -287
  13. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-XYUJXHYV.mjs → chunk-ISCHODBV.mjs} +1 -1
  15. package/dist/lib/browser/{chunk-XYUJXHYV.mjs.map → chunk-ISCHODBV.mjs.map} +2 -2
  16. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  17. package/dist/lib/browser/{chunk-HDEQRBOC.mjs → chunk-JBB73URQ.mjs} +79 -76
  18. package/dist/lib/browser/chunk-JBB73URQ.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-RH7XTXSR.mjs +106 -0
  20. package/dist/lib/browser/chunk-RH7XTXSR.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +147 -137
  22. package/dist/lib/browser/index.mjs.map +4 -4
  23. package/dist/lib/browser/markdown-YJCSOWXX.mjs +210 -0
  24. package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs +441 -0
  27. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +7 -0
  28. package/dist/lib/browser/react-root-FHK2SVPU.mjs +25 -0
  29. package/dist/lib/browser/react-root-FHK2SVPU.mjs.map +7 -0
  30. package/dist/lib/browser/react-surface-7MQA6VSH.mjs +111 -0
  31. package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +7 -0
  32. package/dist/lib/browser/repair-6OZ75AUU.mjs +38 -0
  33. package/dist/lib/browser/repair-6OZ75AUU.mjs.map +7 -0
  34. package/dist/lib/browser/settings-TWKOTGSU.mjs +33 -0
  35. package/dist/lib/browser/settings-TWKOTGSU.mjs.map +7 -0
  36. package/dist/lib/browser/state-SJR2GL5G.mjs +24 -0
  37. package/dist/lib/browser/state-SJR2GL5G.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +10 -12
  39. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs +190 -0
  40. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs.map +7 -0
  41. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs +19 -0
  42. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs.map +7 -0
  43. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  44. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs +27 -0
  45. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-2MMJF7DW.mjs → chunk-G7PZNN3Z.mjs} +79 -76
  47. package/dist/lib/node-esm/chunk-G7PZNN3Z.mjs.map +7 -0
  48. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  49. package/dist/lib/node-esm/chunk-OKVE6CLS.mjs +107 -0
  50. package/dist/lib/node-esm/chunk-OKVE6CLS.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-TIPIOH2J.mjs → chunk-QP3KQOPQ.mjs} +207 -287
  52. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs +1818 -0
  54. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs → chunk-VBI32FGI.mjs} +1 -1
  56. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs.map → chunk-VBI32FGI.mjs.map} +2 -2
  57. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs +294 -0
  58. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
  59. package/dist/lib/node-esm/index.mjs +147 -137
  60. package/dist/lib/node-esm/index.mjs.map +4 -4
  61. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs +211 -0
  62. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs.map +7 -0
  63. package/dist/lib/node-esm/meta.json +1 -1
  64. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs +442 -0
  65. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +7 -0
  66. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs +26 -0
  67. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs.map +7 -0
  68. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs +112 -0
  69. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +7 -0
  70. package/dist/lib/node-esm/repair-6777EPOM.mjs +39 -0
  71. package/dist/lib/node-esm/repair-6777EPOM.mjs.map +7 -0
  72. package/dist/lib/node-esm/settings-5O254B3Z.mjs +34 -0
  73. package/dist/lib/node-esm/settings-5O254B3Z.mjs.map +7 -0
  74. package/dist/lib/node-esm/state-5R3TZJQE.mjs +25 -0
  75. package/dist/lib/node-esm/state-5R3TZJQE.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +10 -12
  77. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  78. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  79. package/dist/types/src/blueprints/index.d.ts +2 -0
  80. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  81. package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
  82. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  83. package/dist/types/src/calls/call-manager.d.ts +40 -30
  84. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  85. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  86. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  87. package/dist/types/src/calls/media-manager.d.ts +1 -1
  88. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  89. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  90. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  91. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  92. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  94. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  96. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
  98. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  100. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  102. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  104. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/index.d.ts +10 -16
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  108. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  110. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  112. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  114. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  116. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  118. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  120. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  122. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  124. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  126. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  130. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  132. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  134. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  135. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  136. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  137. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  138. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  139. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  140. package/dist/types/src/components/ChannelContainer.d.ts +5 -6
  141. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  142. package/dist/types/src/components/ChannelContainer.stories.d.ts +77 -7
  143. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/Chat.stories.d.ts +76 -5
  145. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  146. package/dist/types/src/components/ChatContainer.d.ts +7 -6
  147. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  148. package/dist/types/src/components/Comments.stories.d.ts +5 -1
  149. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  151. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  152. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  153. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  154. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  155. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  156. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  157. package/dist/types/src/components/MessageContainer.d.ts +4 -3
  158. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  159. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  160. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -1
  161. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  162. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -1
  163. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  165. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  166. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  167. package/dist/types/src/components/ThreadSettings.d.ts +4 -2
  168. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  169. package/dist/types/src/components/index.d.ts +3 -3
  170. package/dist/types/src/components/index.d.ts.map +1 -1
  171. package/dist/types/src/components/testing.d.ts +3 -3
  172. package/dist/types/src/components/testing.d.ts.map +1 -1
  173. package/dist/types/src/extensions/threads.d.ts +7 -2
  174. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  175. package/dist/types/src/functions/create-proposals.d.ts +13 -0
  176. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  177. package/dist/types/src/functions/index.d.ts +2 -0
  178. package/dist/types/src/functions/index.d.ts.map +1 -0
  179. package/dist/types/src/hooks/analytics.d.ts +2 -3
  180. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  181. package/dist/types/src/hooks/index.d.ts +2 -2
  182. package/dist/types/src/hooks/index.d.ts.map +1 -1
  183. package/dist/types/src/index.d.ts +1 -1
  184. package/dist/types/src/index.d.ts.map +1 -1
  185. package/dist/types/src/meta.d.ts +2 -2
  186. package/dist/types/src/meta.d.ts.map +1 -1
  187. package/dist/types/src/testing/stories.d.ts +2 -1
  188. package/dist/types/src/testing/stories.d.ts.map +1 -1
  189. package/dist/types/src/translations.d.ts +76 -6
  190. package/dist/types/src/translations.d.ts.map +1 -1
  191. package/dist/types/src/types/Channel.d.ts +695 -0
  192. package/dist/types/src/types/Channel.d.ts.map +1 -0
  193. package/dist/types/src/types/capabilities.d.ts +23 -0
  194. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  195. package/dist/types/src/types/index.d.ts +2 -1
  196. package/dist/types/src/types/index.d.ts.map +1 -1
  197. package/dist/types/src/types/types.d.ts +3217 -446
  198. package/dist/types/src/types/types.d.ts.map +1 -1
  199. package/dist/types/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +88 -65
  201. package/src/ThreadPlugin.tsx +75 -102
  202. package/src/blueprints/index.ts +5 -0
  203. package/src/blueprints/thread-blueprint.ts +32 -0
  204. package/src/calls/call-manager.ts +76 -52
  205. package/src/calls/call-swarm-synchronizer.ts +2 -2
  206. package/src/calls/media-manager.ts +10 -7
  207. package/src/calls/util/calls-service.ts +1 -1
  208. package/src/calls/util/stub-media-streams.ts +2 -2
  209. package/src/calls/util/task-scheduling.ts +4 -4
  210. package/src/calls-service.stories.tsx +1 -1
  211. package/src/capabilities/app-graph-builder/app-graph-builder.ts +202 -0
  212. package/src/capabilities/app-graph-builder/index.ts +7 -0
  213. package/src/capabilities/blueprint-definition/blueprint-definition.ts +24 -0
  214. package/src/capabilities/blueprint-definition/index.ts +7 -0
  215. package/src/capabilities/call-manager/call-manager.ts +26 -0
  216. package/src/capabilities/call-manager/index.ts +7 -0
  217. package/src/capabilities/index.ts +10 -13
  218. package/src/capabilities/markdown/index.ts +7 -0
  219. package/src/capabilities/markdown/markdown.ts +83 -0
  220. package/src/capabilities/operation-resolver/index.ts +7 -0
  221. package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
  222. package/src/capabilities/react-root/index.ts +7 -0
  223. package/src/capabilities/react-root/react-root.tsx +20 -0
  224. package/src/capabilities/react-surface/index.ts +7 -0
  225. package/src/capabilities/react-surface/react-surface.tsx +98 -0
  226. package/src/capabilities/repair/index.ts +7 -0
  227. package/src/capabilities/repair/repair.ts +51 -0
  228. package/src/capabilities/settings/index.ts +7 -0
  229. package/src/capabilities/settings/settings.ts +34 -0
  230. package/src/capabilities/state/index.ts +7 -0
  231. package/src/capabilities/state/state.ts +22 -0
  232. package/src/components/Call/Call.tsx +8 -4
  233. package/src/components/Call/Toolbar.tsx +34 -25
  234. package/src/components/CallDebugPanel.tsx +12 -14
  235. package/src/components/CallSidebar.tsx +5 -3
  236. package/src/components/ChannelContainer.stories.tsx +13 -12
  237. package/src/components/ChannelContainer.tsx +38 -31
  238. package/src/components/Chat.stories.tsx +14 -19
  239. package/src/components/ChatContainer.tsx +46 -39
  240. package/src/components/Comments.stories.tsx +26 -24
  241. package/src/components/CommentsContainer.tsx +5 -7
  242. package/src/components/CommentsThreadContainer.tsx +39 -35
  243. package/src/components/Lobby/Lobby.tsx +9 -7
  244. package/src/components/Media/AudioStream.tsx +2 -2
  245. package/src/components/Media/VideoObject.stories.tsx +1 -1
  246. package/src/components/Media/VideoObject.tsx +2 -2
  247. package/src/components/MessageContainer.tsx +59 -28
  248. package/src/components/Participant/Participant.tsx +32 -19
  249. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +1 -1
  250. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +3 -3
  251. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +2 -2
  252. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
  253. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +6 -3
  254. package/src/components/ThreadCompanion.tsx +194 -0
  255. package/src/components/ThreadSettings.tsx +9 -3
  256. package/src/components/command-extension.ts +2 -2
  257. package/src/components/index.ts +4 -7
  258. package/src/components/testing.ts +7 -9
  259. package/src/extensions/threads.ts +86 -42
  260. package/src/functions/create-proposals.ts +57 -0
  261. package/src/functions/index.ts +5 -0
  262. package/src/hooks/analytics.ts +21 -21
  263. package/src/hooks/index.ts +3 -2
  264. package/src/index.ts +1 -1
  265. package/src/meta.ts +8 -3
  266. package/src/testing/stories.ts +17 -15
  267. package/src/translations.ts +6 -3
  268. package/src/types/Channel.ts +30 -0
  269. package/src/types/capabilities.ts +34 -0
  270. package/src/types/index.ts +2 -1
  271. package/src/types/types.ts +167 -88
  272. package/dist/lib/browser/ChannelContainer-BGDGZHV4.mjs +0 -16
  273. package/dist/lib/browser/ChatContainer-75KJZ4XR.mjs +0 -15
  274. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs +0 -171
  275. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs.map +0 -7
  276. package/dist/lib/browser/call-manager-BCKLI4QD.mjs +0 -24
  277. package/dist/lib/browser/call-manager-BCKLI4QD.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-2MUYQOQE.mjs +0 -23
  279. package/dist/lib/browser/chunk-2MUYQOQE.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-B7YQ7QR2.mjs +0 -376
  281. package/dist/lib/browser/chunk-B7YQ7QR2.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-CMCVHULC.mjs +0 -986
  283. package/dist/lib/browser/chunk-CMCVHULC.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-HDEQRBOC.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-L326LSNS.mjs +0 -18
  286. package/dist/lib/browser/chunk-L326LSNS.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-T4KJ5JR4.mjs +0 -15
  288. package/dist/lib/browser/chunk-T4KJ5JR4.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-VJMKS4CZ.mjs +0 -619
  290. package/dist/lib/browser/chunk-VJMKS4CZ.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-VTYX3SIM.mjs +0 -147
  292. package/dist/lib/browser/chunk-VTYX3SIM.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +0 -7
  294. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs +0 -427
  295. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs.map +0 -7
  296. package/dist/lib/browser/markdown-R6MGRIA6.mjs +0 -169
  297. package/dist/lib/browser/markdown-R6MGRIA6.mjs.map +0 -7
  298. package/dist/lib/browser/react-root-UMSBTN6H.mjs +0 -28
  299. package/dist/lib/browser/react-root-UMSBTN6H.mjs.map +0 -7
  300. package/dist/lib/browser/react-surface-SXMQEWKE.mjs +0 -109
  301. package/dist/lib/browser/react-surface-SXMQEWKE.mjs.map +0 -7
  302. package/dist/lib/browser/settings-TCNF54PN.mjs +0 -22
  303. package/dist/lib/browser/settings-TCNF54PN.mjs.map +0 -7
  304. package/dist/lib/browser/state-ZQ4IPOJT.mjs +0 -34
  305. package/dist/lib/browser/state-ZQ4IPOJT.mjs.map +0 -7
  306. package/dist/lib/browser/toolkit-JF4B4QIO.mjs +0 -84
  307. package/dist/lib/browser/toolkit-JF4B4QIO.mjs.map +0 -7
  308. package/dist/lib/node-esm/ChannelContainer-OXC6BTU7.mjs +0 -17
  309. package/dist/lib/node-esm/ChatContainer-SH6LTFQL.mjs +0 -16
  310. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs +0 -172
  311. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs.map +0 -7
  312. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs +0 -25
  313. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs.map +0 -7
  314. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs +0 -987
  315. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs.map +0 -7
  316. package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-BAMZXJS4.mjs +0 -148
  318. package/dist/lib/node-esm/chunk-BAMZXJS4.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs +0 -377
  320. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs +0 -25
  322. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs +0 -19
  324. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs +0 -620
  326. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-OBVAURUU.mjs +0 -17
  328. package/dist/lib/node-esm/chunk-OBVAURUU.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs +0 -428
  331. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs.map +0 -7
  332. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs +0 -170
  333. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs.map +0 -7
  334. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs +0 -29
  335. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs.map +0 -7
  336. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs +0 -110
  337. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs.map +0 -7
  338. package/dist/lib/node-esm/settings-ZQHGVFBY.mjs +0 -23
  339. package/dist/lib/node-esm/settings-ZQHGVFBY.mjs.map +0 -7
  340. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs +0 -35
  341. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs.map +0 -7
  342. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs +0 -85
  343. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs.map +0 -7
  344. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  345. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  346. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  347. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  348. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  349. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  350. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  351. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  352. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  353. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  354. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  355. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  356. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  357. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  358. package/dist/types/src/capabilities/settings.d.ts +0 -4
  359. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  360. package/dist/types/src/capabilities/state.d.ts +0 -7
  361. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  362. package/dist/types/src/capabilities/toolkit.d.ts +0 -6
  363. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  364. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  365. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  366. package/dist/types/src/types/schema.d.ts +0 -179
  367. package/dist/types/src/types/schema.d.ts.map +0 -1
  368. package/src/capabilities/app-graph-builder.ts +0 -184
  369. package/src/capabilities/call-manager.ts +0 -20
  370. package/src/capabilities/capabilities.ts +0 -33
  371. package/src/capabilities/intent-resolver.ts +0 -348
  372. package/src/capabilities/markdown.ts +0 -69
  373. package/src/capabilities/react-root.tsx +0 -17
  374. package/src/capabilities/react-surface.tsx +0 -89
  375. package/src/capabilities/settings.ts +0 -19
  376. package/src/capabilities/state.ts +0 -26
  377. package/src/capabilities/toolkit.ts +0 -82
  378. package/src/components/ThreadComplementary.tsx +0 -181
  379. package/src/types/schema.ts +0 -33
  380. /package/dist/lib/browser/{ChannelContainer-BGDGZHV4.mjs.map → blueprints/index.mjs.map} +0 -0
  381. /package/dist/lib/browser/{ChatContainer-75KJZ4XR.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  382. /package/dist/lib/node-esm/{ChannelContainer-OXC6BTU7.mjs.map → blueprints/index.mjs.map} +0 -0
  383. /package/dist/lib/node-esm/{ChatContainer-SH6LTFQL.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
@@ -6,17 +6,15 @@ import { Obj, Ref } from '@dxos/echo';
6
6
  import { IdentityDid } from '@dxos/keys';
7
7
  import { faker } from '@dxos/random';
8
8
  import { type Identity } from '@dxos/react-client/halo';
9
- import { DataType } from '@dxos/schema';
9
+ import { Message, Thread } from '@dxos/types';
10
10
 
11
- import { ThreadType } from '../types';
12
-
13
- export const createCommentThread = (identity: Identity): ThreadType => {
14
- return Obj.make(ThreadType, {
11
+ export const createCommentThread = (identity: Identity): Thread.Thread => {
12
+ return Thread.make({
15
13
  name: 'Comment',
16
14
  messages: faker.helpers.multiple(
17
15
  () =>
18
16
  Ref.make(
19
- Obj.make(DataType.Message, {
17
+ Obj.make(Message.Message, {
20
18
  created: new Date().toISOString(),
21
19
  sender: {
22
20
  identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
@@ -30,13 +28,13 @@ export const createCommentThread = (identity: Identity): ThreadType => {
30
28
  });
31
29
  };
32
30
 
33
- export const createProposalThread = (identity: Identity): ThreadType => {
34
- return Obj.make(ThreadType, {
31
+ export const createProposalThread = (identity: Identity): Thread.Thread => {
32
+ return Thread.make({
35
33
  name: 'Proposal',
36
34
  messages: faker.helpers.multiple(
37
35
  () =>
38
36
  Ref.make(
39
- Obj.make(DataType.Message, {
37
+ Obj.make(Message.Message, {
40
38
  created: new Date().toISOString(),
41
39
  sender: {
42
40
  identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
@@ -4,16 +4,16 @@
4
4
 
5
5
  import { type Extension } from '@codemirror/state';
6
6
  import { EditorView } from '@codemirror/view';
7
- import { computed, effect } from '@preact/signals-core';
7
+ import { type Atom, type Registry } from '@effect-atom/atom-react';
8
8
 
9
- import { type PromiseIntentDispatcher, createIntent } from '@dxos/app-framework';
10
9
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
10
+ import { createDocAccessor, getTextInRange } from '@dxos/echo-db';
11
+ import { type OperationInvoker } from '@dxos/operation';
11
12
  import { type Markdown } from '@dxos/plugin-markdown/types';
12
- import { createDocAccessor, fullyQualifiedId, getSource, getSpace, getTextInRange } from '@dxos/react-client/echo';
13
- import { comments, createExternalCommentSync } from '@dxos/react-ui-editor';
14
- import { AnchoredTo } from '@dxos/schema';
13
+ import { AnchoredTo, Thread } from '@dxos/types';
14
+ import { comments, createExternalCommentSync } from '@dxos/ui-editor';
15
15
 
16
- import { ThreadAction, type ThreadState, ThreadType } from '../types';
16
+ import { ThreadOperation, type ThreadState } from '../types';
17
17
 
18
18
  // TODO(burdon): Factor out.
19
19
  const getName = (doc: Markdown.Document, anchor: string): string | undefined => {
@@ -23,46 +23,58 @@ const getName = (doc: Markdown.Document, anchor: string): string | undefined =>
23
23
  }
24
24
  };
25
25
 
26
+ export type ThreadStore = {
27
+ registry: Registry.Registry;
28
+ stateAtom: Atom.Writable<ThreadState>;
29
+ };
30
+
26
31
  /**
27
32
  * Construct plugins.
28
33
  */
29
- export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?: PromiseIntentDispatcher): Extension => {
30
- const space = doc && getSpace(doc);
31
- if (!doc || !space || !dispatch) {
34
+ export const threads = (
35
+ store: ThreadStore,
36
+ doc?: Markdown.Document,
37
+ invokePromise?: OperationInvoker.OperationInvoker['invokePromise'],
38
+ ): Extension => {
39
+ const db = doc && Obj.getDatabase(doc);
40
+ if (!doc || !db || !invokePromise) {
32
41
  // Include no-op comments extension here to ensure that the facets are always present when they are expected.
33
42
  // TODO(wittjosiah): The Editor should only look for these facets when comments are available.
34
43
  return [comments()];
35
44
  }
36
45
 
37
- const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo));
38
- const unsubscribe = query.subscribe();
46
+ const { registry, stateAtom } = store;
47
+ const objectId = Obj.getDXN(doc).toString();
48
+ const query = db.query(Query.select(Filter.id(doc.id)).targetOf(AnchoredTo.AnchoredTo));
39
49
 
40
- const anchors = computed(() =>
41
- query.objects
50
+ // Get current anchors by combining query results with store drafts.
51
+ const getAnchors = () =>
52
+ query.results
42
53
  .filter((anchor) => {
43
54
  const thread = Relation.getSource(anchor);
44
- return Obj.instanceOf(ThreadType, thread) && thread.status !== 'resolved';
55
+ return Obj.instanceOf(Thread.Thread, thread) && thread.status !== 'resolved';
45
56
  })
46
- .concat(state.drafts[fullyQualifiedId(doc)] ?? []),
47
- );
57
+ .concat(registry.get(stateAtom).drafts[objectId] ?? []);
48
58
 
49
59
  return [
50
60
  EditorView.domEventHandlers({
51
61
  destroy: () => {
52
- unsubscribe();
62
+ // Note: cleanup functions for subscriptions are handled by createExternalCommentSync.
53
63
  },
54
64
  }),
55
65
 
56
66
  EditorView.updateListener.of((update) => {
57
67
  if (update.docChanged) {
58
- anchors.value.forEach((anchor) => {
68
+ getAnchors().forEach((anchor) => {
59
69
  if (anchor.anchor) {
60
70
  // Only update if the name has changed, otherwise this will cause an infinite loop.
61
71
  // Skip if the name is empty; this means comment text was deleted, but thread name should remain.
62
72
  const name = getName(doc, anchor.anchor);
63
- const thread = Relation.getSource(anchor) as ThreadType;
73
+ const thread = Relation.getSource(anchor) as Thread.Thread;
64
74
  if (name && name !== thread.name) {
65
- thread.name = name;
75
+ Obj.change(thread, (t) => {
76
+ t.name = name;
77
+ });
66
78
  }
67
79
  }
68
80
  });
@@ -70,55 +82,87 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
70
82
  }),
71
83
 
72
84
  createExternalCommentSync(
73
- fullyQualifiedId(doc),
74
- (sink) => effect(() => sink()),
85
+ objectId,
86
+ (sink) => {
87
+ // Subscribe to both query changes and store state changes.
88
+ const unsubQuery = query.subscribe(sink);
89
+ const unsubStore = registry.subscribe(stateAtom, sink);
90
+ return () => {
91
+ unsubQuery();
92
+ unsubStore();
93
+ };
94
+ },
75
95
  () =>
76
- anchors.value
96
+ getAnchors()
77
97
  .filter((anchor) => anchor.anchor)
78
- .map((anchor) => ({ id: fullyQualifiedId(Relation.getSource(anchor)), cursor: anchor.anchor })),
98
+ .map((anchor) => ({
99
+ id: Obj.getDXN(Relation.getSource(anchor)).toString(),
100
+ cursor: anchor.anchor,
101
+ })),
79
102
  ),
80
103
 
81
104
  comments({
82
- id: fullyQualifiedId(doc),
105
+ id: objectId,
83
106
  onCreate: ({ cursor }) => {
84
107
  const name = getName(doc, cursor);
85
- void dispatch(createIntent(ThreadAction.Create, { anchor: cursor, name, subject: doc }));
108
+ void invokePromise(ThreadOperation.Create, {
109
+ anchor: cursor,
110
+ name,
111
+ subject: doc,
112
+ });
86
113
  },
87
114
  onDelete: ({ id }) => {
88
- const draft = state.drafts[fullyQualifiedId(doc)];
89
- if (draft) {
90
- const index = draft.findIndex((thread) => fullyQualifiedId(thread) === id);
115
+ const drafts = registry.get(stateAtom).drafts[objectId];
116
+ if (drafts) {
117
+ const index = drafts.findIndex((draft) => Relation.getDXN(draft).toString() === id);
91
118
  if (index !== -1) {
92
- draft.splice(index, 1);
119
+ const current = registry.get(stateAtom);
120
+ registry.set(stateAtom, {
121
+ ...current,
122
+ drafts: {
123
+ ...current.drafts,
124
+ [objectId]: current.drafts[objectId]?.filter((_, i) => i !== index),
125
+ },
126
+ });
93
127
  }
94
128
  }
95
129
 
96
- const thread = query.objects.find((object) => getSource(object).id === id);
130
+ const thread = query.results.find((object) => Relation.getSource(object).id === id);
97
131
  if (thread) {
98
- thread.anchor = undefined;
132
+ Relation.change(thread, (t) => {
133
+ t.anchor = undefined;
134
+ });
99
135
  }
100
136
  },
101
137
  onUpdate: ({ id, cursor }) => {
102
- const draft = state.drafts[fullyQualifiedId(doc)]?.find((thread) => fullyQualifiedId(thread) === id);
138
+ const draft = registry.get(stateAtom).drafts[objectId]?.find((d) => Relation.getDXN(d).toString() === id);
103
139
  if (draft) {
104
- const thread = Relation.getSource(draft) as ThreadType;
105
- thread.name = getName(doc, cursor);
106
- draft.anchor = cursor;
140
+ const thread = Relation.getSource(draft) as Thread.Thread;
141
+ Obj.change(thread, (t) => {
142
+ t.name = getName(doc, cursor);
143
+ });
144
+ Relation.change(draft, (d) => {
145
+ d.anchor = cursor;
146
+ });
107
147
  }
108
148
 
109
- const relation = query.objects.find((object) => getSource(object).id === id);
149
+ const relation = query.results.find((object) => Relation.getSource(object).id === id);
110
150
  if (relation) {
111
- const thread = getSource(relation);
112
- if (Obj.instanceOf(ThreadType, thread)) {
113
- thread.name = getName(doc, cursor);
114
- relation.anchor = cursor;
151
+ const thread = Relation.getSource(relation);
152
+ if (Obj.instanceOf(Thread.Thread, thread)) {
153
+ Obj.change(thread, (t) => {
154
+ t.name = getName(doc, cursor);
155
+ });
156
+ Relation.change(relation, (r) => {
157
+ r.anchor = cursor;
158
+ });
115
159
  }
116
160
  }
117
161
  },
118
162
  onSelect: ({ selection }) => {
119
163
  const current = selection.current ?? selection.closest;
120
164
  if (current) {
121
- void dispatch(createIntent(ThreadAction.Select, { current }));
165
+ void invokePromise(ThreadOperation.Select, { current });
122
166
  }
123
167
  },
124
168
  }),
@@ -0,0 +1,57 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Array from 'effect/Array';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Function from 'effect/Function';
8
+ import * as Schema from 'effect/Schema';
9
+
10
+ import { computeDiffsWithCursors } from '@dxos/assistant';
11
+ import { Database, Obj, Ref, Relation, Type } from '@dxos/echo';
12
+ import { createDocAccessor } from '@dxos/echo-db';
13
+ import { defineFunction } from '@dxos/functions';
14
+ import { Markdown } from '@dxos/plugin-markdown/types';
15
+ import { AnchoredTo, Message, Thread } from '@dxos/types';
16
+
17
+ export default defineFunction({
18
+ key: 'dxos.org/function/thread/create-proposals',
19
+ name: 'Create Proposals',
20
+ description: 'Proposes a set of changes to a document.',
21
+ inputSchema: Schema.Struct({
22
+ doc: Type.Ref(Markdown.Document).annotations({
23
+ description: 'The ID of the document.',
24
+ }),
25
+ diffs: Schema.Array(Schema.String).annotations({
26
+ description: 'The diffs to propose for the document.',
27
+ }),
28
+ }),
29
+ outputSchema: Schema.Void,
30
+ handler: Effect.fn(function* ({ data: { doc, diffs: _diffs } }) {
31
+ const object = yield* Database.load(doc);
32
+ const content = yield* Effect.promise(() => object.content.load());
33
+ const accessor = createDocAccessor(content, ['content']);
34
+
35
+ yield* Function.pipe(
36
+ computeDiffsWithCursors(accessor, _diffs),
37
+ Array.map(
38
+ Effect.fnUntraced(function* ({ cursor, text }) {
39
+ const proposal = Obj.make(Message.Message, {
40
+ created: new Date().toISOString(),
41
+ sender: { role: 'assistant' },
42
+ blocks: [{ _tag: 'proposal', text }],
43
+ });
44
+ const thread = Thread.make({ name: 'Proposal', messages: [Ref.make(proposal)], status: 'active' });
45
+ const relation = Relation.make(AnchoredTo.AnchoredTo, {
46
+ [Relation.Source]: thread,
47
+ [Relation.Target]: object,
48
+ anchor: cursor,
49
+ });
50
+ yield* Database.add(thread);
51
+ yield* Database.add(relation);
52
+ }),
53
+ ),
54
+ Effect.allWith({ concurrency: 'unbounded' }),
55
+ );
56
+ }),
57
+ });
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { default as createProposals } from './create-proposals';
@@ -4,37 +4,37 @@
4
4
 
5
5
  import { useCallback } from 'react';
6
6
 
7
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type Live } from '@dxos/live-object';
9
- import { ObservabilityAction } from '@dxos/plugin-observability/types';
10
- import { getSpace } from '@dxos/react-client/echo';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { Obj } from '@dxos/echo';
9
+ import { ObservabilityOperation } from '@dxos/plugin-observability/types';
11
10
  import { useOnTransition } from '@dxos/react-ui';
12
- import { type DataType } from '@dxos/schema';
11
+ import { type ContentBlock } from '@dxos/types';
13
12
 
14
13
  export const useOnEditAnalytics = (
15
- message: Live<any>,
16
- textBlock: DataType.MessageBlock.Text | undefined,
14
+ message: any | undefined,
15
+ textBlock: ContentBlock.Text | undefined,
17
16
  editing: boolean,
18
17
  ) => {
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
18
+ const { invokePromise } = useOperationInvoker();
20
19
 
21
20
  const onEdit = useCallback(() => {
22
- const space = getSpace(message);
23
- if (!space || !textBlock) {
21
+ if (!message || !textBlock) {
22
+ return;
23
+ }
24
+ const db = Obj.getDatabase(message);
25
+ if (!db) {
24
26
  return;
25
27
  }
26
28
 
27
- void dispatch(
28
- createIntent(ObservabilityAction.SendEvent, {
29
- name: 'threads.message.update',
30
- properties: {
31
- spaceId: space.id,
32
- messageId: message.id,
33
- messageLength: textBlock?.text.length,
34
- },
35
- }),
36
- );
37
- }, [dispatch, message, textBlock]);
29
+ void invokePromise(ObservabilityOperation.SendEvent, {
30
+ name: 'threads.message.update',
31
+ properties: {
32
+ spaceId: db.spaceId,
33
+ messageId: message.id,
34
+ messageLength: textBlock?.text.length,
35
+ },
36
+ });
37
+ }, [invokePromise, message, textBlock]);
38
38
 
39
39
  useOnTransition(editing, true, false, onEdit);
40
40
  };
@@ -3,8 +3,9 @@
3
3
  //
4
4
 
5
5
  export * from './analytics';
6
+
7
+ export * from './useBlackCanvasStreamTrack';
6
8
  export * from './useDebugMode';
9
+ export * from './useInaudibleAudioStreamTrack';
7
10
  export * from './useStatus';
8
11
  export * from './useVideoStreamTrack';
9
- export * from './useInaudibleAudioStreamTrack';
10
- export * from './useBlackCanvasStreamTrack';
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { ThreadCapabilities } from './capabilities';
5
+ export { ThreadCapabilities } from './types';
6
6
  export * from './calls';
7
7
  export * from './hooks';
8
8
  export * from './meta';
package/src/meta.ts CHANGED
@@ -2,14 +2,19 @@
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
+ import { trim } from '@dxos/util';
6
7
 
7
8
  // TODO(wittjosiah): Needs screenshots.
8
- export const meta: PluginMeta = {
9
+ export const meta: Plugin.Meta = {
9
10
  id: 'dxos.org/plugin/thread',
10
11
  name: 'Chat',
11
- description: 'Chat via text, voice, and video in channels or create comment threads on objects.',
12
+ description: trim`
13
+ Multi-modal communication platform supporting text chat, voice, and video conferencing.
14
+ Create threaded conversations and add contextual comments directly on any workspace object.
15
+ `,
12
16
  icon: 'ph--video-conference--regular',
17
+ iconHue: 'rose',
13
18
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',
14
19
  };
15
20
 
@@ -2,30 +2,32 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
6
- import { Obj } from '@dxos/echo';
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { OperationPlugin, type Plugin } from '@dxos/app-framework';
7
8
  import { ClientPlugin } from '@dxos/plugin-client';
8
9
  import { GraphPlugin } from '@dxos/plugin-graph';
10
+ import { SettingsPlugin } from '@dxos/plugin-settings';
9
11
  import { SpacePlugin } from '@dxos/plugin-space';
10
12
  import { ThemePlugin } from '@dxos/plugin-theme';
11
13
  import { Config } from '@dxos/react-client';
12
- import { Ref } from '@dxos/react-client/echo';
13
- import { defaultTx } from '@dxos/react-ui-theme';
14
+ import { defaultTx } from '@dxos/ui-theme';
14
15
 
15
16
  import { ThreadPlugin } from '../ThreadPlugin';
16
- import { ChannelType, ThreadType } from '../types';
17
+ import { Channel } from '../types';
17
18
 
18
- export const createThreadPlugins = async () => [
19
+ export const createThreadPlugins = async (): Promise<Array<Plugin.Plugin>> => [
19
20
  ThemePlugin({ tx: defaultTx }),
20
21
  ClientPlugin({
21
- onClientInitialized: async ({ client }) => {
22
- await client.halo.createIdentity({ displayName: 'Test User' });
23
- },
24
- onSpacesReady: async ({ client }) => {
25
- await client.spaces.default.waitUntilReady();
26
- const thread = Obj.make(ThreadType, { messages: [] });
27
- client.spaces.default.db.add(Obj.make(ChannelType, { defaultThread: Ref.make(thread), threads: [] }));
28
- },
22
+ onClientInitialized: ({ client }) =>
23
+ Effect.gen(function* () {
24
+ yield* Effect.promise(() => client.halo.createIdentity({ displayName: 'Test User' }));
25
+ }),
26
+ onSpacesReady: ({ client }) =>
27
+ Effect.gen(function* () {
28
+ yield* Effect.promise(() => client.spaces.default.waitUntilReady());
29
+ client.spaces.default.db.add(Channel.make());
30
+ }),
29
31
  config: new Config({
30
32
  runtime: {
31
33
  client: {
@@ -47,7 +49,7 @@ export const createThreadPlugins = async () => [
47
49
  }),
48
50
  }),
49
51
  SpacePlugin({}),
50
- IntentPlugin(),
52
+ OperationPlugin(),
51
53
  SettingsPlugin(),
52
54
  GraphPlugin(),
53
55
  ThreadPlugin(),
@@ -2,15 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Type } from '@dxos/echo';
5
6
  import { type Resource } from '@dxos/react-ui';
6
7
 
7
8
  import { meta } from './meta';
8
- import { ChannelType } from './types';
9
+ import { Channel } from './types';
9
10
 
10
11
  export const translations = [
11
12
  {
12
13
  'en-US': {
13
- [ChannelType.typename]: {
14
+ [Type.getTypename(Channel.Channel)]: {
14
15
  'typename label': 'Channel',
15
16
  'typename label_zero': 'Channels',
16
17
  'typename label_one': 'Channel',
@@ -18,6 +19,7 @@ export const translations = [
18
19
  'object name placeholder': 'New channel',
19
20
  'rename object label': 'Rename channel',
20
21
  'delete object label': 'Delete channel',
22
+ 'object deleted label': 'Channel deleted',
21
23
  },
22
24
  [meta.id]: {
23
25
  'plugin name': 'Chat',
@@ -49,6 +51,7 @@ export const translations = [
49
51
  'comments label': 'Comments',
50
52
  'show all label': 'All comments',
51
53
  'show unresolved label': 'Unresolved comments',
54
+ 'add comment label': 'Add comment',
52
55
 
53
56
  'channel companion label': 'Channel',
54
57
  'call panel label': 'Active Call',
@@ -59,7 +62,7 @@ export const translations = [
59
62
  'set display name label': 'Continue',
60
63
 
61
64
  'call tab label': 'Call',
62
- 'meeting status title': 'Meeting',
65
+ 'meeting status title': 'Calls',
63
66
  'share meeting link label': 'Share meeting',
64
67
  'show webrtc stats title': 'WebRTC Stats',
65
68
  'show calls history title': 'Service History',
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { Obj, Ref, Type } from '@dxos/echo';
8
+ import { FormInputAnnotation } from '@dxos/echo/internal';
9
+ import { Thread } from '@dxos/types';
10
+
11
+ export const Channel = Schema.Struct({
12
+ name: Schema.optional(Schema.String),
13
+ defaultThread: Type.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),
14
+ // TODO(wittjosiah): Should be an "ordered collection".
15
+ threads: Type.Ref(Thread.Thread).pipe(Schema.Array, FormInputAnnotation.set(false)),
16
+ }).pipe(
17
+ Type.object({
18
+ typename: 'dxos.org/type/Channel',
19
+ version: '0.1.0',
20
+ }),
21
+ );
22
+
23
+ export interface Channel extends Schema.Schema.Type<typeof Channel> {}
24
+
25
+ export const make = (props: Pick<Obj.MakeProps<typeof Channel>, 'name'> = {}) =>
26
+ Obj.make(Channel, {
27
+ ...props,
28
+ defaultThread: Ref.make(Obj.make(Thread.Thread, { messages: [], status: 'active' })),
29
+ threads: [],
30
+ });
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Atom } from '@effect-atom/atom-react';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+
9
+ import { type CallManager, type CallState, type MediaState } from '../calls';
10
+ import { meta } from '../meta';
11
+ import { type Channel, type ThreadSettingsProps, type ThreadState, type ViewStore } from '../types';
12
+
13
+ export namespace ThreadCapabilities {
14
+ export const Settings = Capability.make<Atom.Writable<ThreadSettingsProps>>(`${meta.id}/capability/settings`);
15
+ export const CallManager = Capability.make<CallManager>(`${meta.id}/capability/call-manager`);
16
+
17
+ // TODO(burdon): Better way to define specific extensions for meeting companions.
18
+ // TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?
19
+ // TODO(wittjosiah): These callbacks could be intents once we support broadcast.
20
+ export type CallProperties = {
21
+ onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;
22
+ onLeave: (roomId?: string) => Promise<void>;
23
+ onCallStateUpdated: (callState: CallState) => Promise<void>;
24
+ onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;
25
+ };
26
+
27
+ export const CallExtension = Capability.make<CallProperties>(`${meta.id}/capability/call-extension`);
28
+
29
+ /** Thread state (drafts, toolbar state, current selection). */
30
+ export const State = Capability.make<Atom.Writable<ThreadState>>(`${meta.id}/capability/state`);
31
+
32
+ /** Per-subject view state (e.g., showResolvedThreads). */
33
+ export const ViewState = Capability.make<Atom.Writable<ViewStore>>(`${meta.id}/capability/view-state`);
34
+ }
@@ -2,5 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './schema';
5
+ export * from './capabilities';
6
+ export * as Channel from './Channel';
6
7
  export * from './types';