@dxos/plugin-thread 0.8.4-main.fcfe5033a5 → 0.8.4-staging.60fe92afc8

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 (522) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +75 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs +57 -0
  5. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs.map +7 -0
  6. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs +38 -0
  7. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs.map +7 -0
  8. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs +57 -0
  9. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs.map +7 -0
  10. package/dist/lib/neutral/ThreadPlugin.mjs +67 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  12. package/dist/lib/neutral/ThreadPlugin.node.mjs +29 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  14. package/dist/lib/neutral/ThreadPlugin.workerd.mjs +27 -0
  15. package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
  16. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs +50 -0
  17. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs.map +7 -0
  18. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs +34 -0
  19. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs +58 -0
  23. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-AWAQTEU6.mjs +10 -0
  25. package/dist/lib/neutral/chunk-AWAQTEU6.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-HJHK5O6F.mjs +109 -0
  27. package/dist/lib/neutral/chunk-HJHK5O6F.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs +36 -0
  29. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-P4RSGFS4.mjs +69 -0
  31. package/dist/lib/neutral/chunk-P4RSGFS4.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-SZXFLBZL.mjs +8 -0
  33. package/dist/lib/neutral/chunk-SZXFLBZL.mjs.map +7 -0
  34. package/dist/lib/neutral/components/index.mjs +93 -0
  35. package/dist/lib/neutral/components/index.mjs.map +7 -0
  36. package/dist/lib/neutral/containers/index.mjs +13 -0
  37. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  38. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs +41 -0
  39. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs.map +7 -0
  40. package/dist/lib/neutral/create-object-RLCOUVAW.mjs +46 -0
  41. package/dist/lib/neutral/create-object-RLCOUVAW.mjs.map +7 -0
  42. package/dist/lib/neutral/hooks/index.mjs +11 -0
  43. package/dist/lib/neutral/index.mjs +34 -0
  44. package/dist/lib/neutral/meta.json +1 -0
  45. package/dist/lib/neutral/meta.mjs +10 -0
  46. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs +14 -0
  47. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs.map +7 -0
  48. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  49. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  50. package/dist/lib/neutral/operations/index.mjs +8 -0
  51. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  52. package/dist/lib/neutral/plugin.mjs +16 -0
  53. package/dist/lib/neutral/plugin.mjs.map +7 -0
  54. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs +48 -0
  55. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +91 -0
  57. package/dist/lib/neutral/translations.mjs.map +7 -0
  58. package/dist/lib/neutral/types/index.mjs +16 -0
  59. package/dist/lib/neutral/types/index.mjs.map +7 -0
  60. package/dist/types/src/ThreadPlugin.d.ts +1 -0
  61. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  62. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  63. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  64. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  65. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  66. package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
  67. package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/channel-backend-feed.d.ts +13 -0
  71. package/dist/types/src/capabilities/channel-backend-feed.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  73. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  74. package/dist/types/src/capabilities/index.d.ts +8 -10
  75. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/navigation-resolver.d.ts +6 -0
  77. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  79. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/components/Chat/Chat.d.ts +43 -0
  82. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  83. package/dist/types/src/components/Chat/index.d.ts +2 -0
  84. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  85. package/dist/types/src/components/index.d.ts +1 -5
  86. package/dist/types/src/components/index.d.ts.map +1 -1
  87. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +19 -0
  88. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
  89. package/dist/types/src/{components/CommentsPanel/CommentsPanel.stories.d.ts → containers/ChannelArticle/ChannelArticle.stories.d.ts} +74 -72
  90. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
  91. package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
  92. package/dist/types/src/{components/ThreadSettings → containers/ChannelArticle}/index.d.ts.map +1 -1
  93. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts +11 -0
  94. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts.map +1 -0
  95. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts +2 -0
  96. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts.map +1 -0
  97. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts +20 -0
  98. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts.map +1 -0
  99. package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadArticle/ThreadArticle.stories.d.ts} +71 -71
  100. package/dist/types/src/containers/ThreadArticle/ThreadArticle.stories.d.ts.map +1 -0
  101. package/dist/types/src/containers/ThreadArticle/index.d.ts +2 -0
  102. package/dist/types/src/containers/ThreadArticle/index.d.ts.map +1 -0
  103. package/dist/types/src/containers/index.d.ts +3 -5
  104. package/dist/types/src/containers/index.d.ts.map +1 -1
  105. package/dist/types/src/hooks/index.d.ts +1 -5
  106. package/dist/types/src/hooks/index.d.ts.map +1 -1
  107. package/dist/types/src/hooks/useMessages.d.ts +4 -0
  108. package/dist/types/src/hooks/useMessages.d.ts.map +1 -0
  109. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  110. package/dist/types/src/index.d.ts +2 -3
  111. package/dist/types/src/index.d.ts.map +1 -1
  112. package/dist/types/src/meta.d.ts +1 -1
  113. package/dist/types/src/meta.d.ts.map +1 -1
  114. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  115. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  116. package/dist/types/src/operations/create-channel.d.ts +3 -3
  117. package/dist/types/src/operations/create-channel.d.ts.map +1 -1
  118. package/dist/types/src/operations/index.d.ts +1 -2
  119. package/dist/types/src/operations/index.d.ts.map +1 -1
  120. package/dist/types/src/paths.d.ts +3 -0
  121. package/dist/types/src/paths.d.ts.map +1 -0
  122. package/dist/types/src/plugin.d.ts +4 -0
  123. package/dist/types/src/plugin.d.ts.map +1 -0
  124. package/dist/types/src/translations.d.ts +70 -70
  125. package/dist/types/src/translations.d.ts.map +1 -1
  126. package/dist/types/src/types/ThreadCapabilities.d.ts +37 -0
  127. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  128. package/dist/types/src/types/ThreadOperation.d.ts +91 -0
  129. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  130. package/dist/types/src/types/channel-backend.d.ts +16 -0
  131. package/dist/types/src/types/channel-backend.d.ts.map +1 -0
  132. package/dist/types/src/types/channel-backend.test.d.ts +2 -0
  133. package/dist/types/src/types/channel-backend.test.d.ts.map +1 -0
  134. package/dist/types/src/types/index.d.ts +3 -3
  135. package/dist/types/src/types/index.d.ts.map +1 -1
  136. package/dist/types/src/util.d.ts +4 -20
  137. package/dist/types/src/util.d.ts.map +1 -1
  138. package/dist/types/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +96 -114
  140. package/src/ThreadPlugin.node.ts +26 -0
  141. package/src/ThreadPlugin.test.ts +27 -0
  142. package/src/ThreadPlugin.tsx +23 -105
  143. package/src/ThreadPlugin.workerd.ts +25 -0
  144. package/src/capabilities/app-graph-builder.ts +25 -167
  145. package/src/capabilities/channel-backend-feed.ts +60 -0
  146. package/src/capabilities/create-object.ts +46 -0
  147. package/src/capabilities/index.ts +4 -8
  148. package/src/capabilities/navigation-resolver.ts +18 -0
  149. package/src/capabilities/operation-handler.ts +1 -1
  150. package/src/capabilities/react-surface.tsx +8 -50
  151. package/src/components/Chat/Chat.tsx +119 -0
  152. package/src/components/Chat/index.ts +5 -0
  153. package/src/components/index.ts +1 -7
  154. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +108 -0
  155. package/src/containers/ChannelArticle/ChannelArticle.tsx +83 -0
  156. package/src/containers/ChannelArticle/index.ts +5 -0
  157. package/src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx +52 -0
  158. package/src/containers/ChannelCreatePanel/index.ts +5 -0
  159. package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadArticle/ThreadArticle.stories.tsx} +11 -12
  160. package/src/containers/ThreadArticle/ThreadArticle.tsx +75 -0
  161. package/src/containers/ThreadArticle/index.ts +5 -0
  162. package/src/containers/index.ts +3 -5
  163. package/src/hooks/index.ts +1 -6
  164. package/src/hooks/useMessages.ts +37 -0
  165. package/src/index.ts +4 -4
  166. package/src/meta.ts +22 -8
  167. package/src/operations/append-channel-message.ts +31 -0
  168. package/src/operations/create-channel.ts +18 -8
  169. package/src/operations/index.ts +2 -14
  170. package/src/paths.ts +10 -0
  171. package/src/plugin.ts +11 -0
  172. package/src/translations.ts +2 -1
  173. package/src/types/ThreadCapabilities.ts +47 -0
  174. package/src/types/ThreadOperation.ts +49 -0
  175. package/src/types/channel-backend.test.ts +48 -0
  176. package/src/types/channel-backend.ts +54 -0
  177. package/src/types/index.ts +3 -3
  178. package/src/util.ts +35 -18
  179. package/src/vite-env.d.ts +10 -0
  180. package/dist/lib/browser/add-message-VPPFFLFL.mjs +0 -97
  181. package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
  182. package/dist/lib/browser/blueprints/index.mjs +0 -37
  183. package/dist/lib/browser/blueprints/index.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
  185. package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-VPM44Z35.mjs +0 -259
  187. package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
  188. package/dist/lib/browser/create-OQKG4S47.mjs +0 -55
  189. package/dist/lib/browser/create-OQKG4S47.mjs.map +0 -7
  190. package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
  191. package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
  192. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
  193. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
  194. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs +0 -57
  195. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
  196. package/dist/lib/browser/delete-FSFVU6ZA.mjs +0 -59
  197. package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
  198. package/dist/lib/browser/delete-message-XL5M5J33.mjs +0 -64
  199. package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
  200. package/dist/lib/browser/index.mjs +0 -2334
  201. package/dist/lib/browser/index.mjs.map +0 -7
  202. package/dist/lib/browser/meta.json +0 -1
  203. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
  204. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
  205. package/dist/lib/browser/operations/index.mjs +0 -14
  206. package/dist/lib/browser/operations/index.mjs.map +0 -7
  207. package/dist/lib/browser/restore-2ZGMKUSD.mjs +0 -33
  208. package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
  209. package/dist/lib/browser/restore-message-OYEGWPII.mjs +0 -42
  210. package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
  211. package/dist/lib/browser/select-VG2XLULE.mjs +0 -26
  212. package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
  213. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs +0 -45
  214. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
  215. package/dist/lib/browser/types/index.mjs +0 -12
  216. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
  217. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
  218. package/dist/lib/node-esm/blueprints/index.mjs +0 -38
  219. package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  221. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
  222. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
  224. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
  225. package/dist/lib/node-esm/create-6ZOFMMYA.mjs +0 -56
  226. package/dist/lib/node-esm/create-6ZOFMMYA.mjs.map +0 -7
  227. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
  228. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
  229. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
  230. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
  231. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
  232. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
  233. package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
  234. package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
  235. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
  236. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
  237. package/dist/lib/node-esm/index.mjs +0 -2335
  238. package/dist/lib/node-esm/index.mjs.map +0 -7
  239. package/dist/lib/node-esm/meta.json +0 -1
  240. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
  241. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
  242. package/dist/lib/node-esm/operations/index.mjs +0 -15
  243. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  244. package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
  245. package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
  246. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
  247. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
  248. package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
  249. package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
  250. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
  251. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
  252. package/dist/lib/node-esm/types/index.mjs +0 -13
  253. package/dist/types/src/blueprints/index.d.ts +0 -2
  254. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  255. package/dist/types/src/blueprints/thread-blueprint.d.ts +0 -4
  256. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +0 -1
  257. package/dist/types/src/calls/call-manager.d.ts +0 -87
  258. package/dist/types/src/calls/call-manager.d.ts.map +0 -1
  259. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
  260. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
  261. package/dist/types/src/calls/index.d.ts +0 -7
  262. package/dist/types/src/calls/index.d.ts.map +0 -1
  263. package/dist/types/src/calls/media-manager.d.ts +0 -60
  264. package/dist/types/src/calls/media-manager.d.ts.map +0 -1
  265. package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
  266. package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
  267. package/dist/types/src/calls/types.d.ts +0 -45
  268. package/dist/types/src/calls/types.d.ts.map +0 -1
  269. package/dist/types/src/calls/util/audio.d.ts +0 -6
  270. package/dist/types/src/calls/util/audio.d.ts.map +0 -1
  271. package/dist/types/src/calls/util/calls-service.d.ts +0 -77
  272. package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
  273. package/dist/types/src/calls/util/history-cache.d.ts +0 -11
  274. package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
  275. package/dist/types/src/calls/util/index.d.ts +0 -5
  276. package/dist/types/src/calls/util/index.d.ts.map +0 -1
  277. package/dist/types/src/calls/util/media.d.ts +0 -6
  278. package/dist/types/src/calls/util/media.d.ts.map +0 -1
  279. package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
  280. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
  281. package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
  282. package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
  283. package/dist/types/src/calls-service.stories.d.ts +0 -23
  284. package/dist/types/src/calls-service.stories.d.ts.map +0 -1
  285. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  286. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  287. package/dist/types/src/capabilities/call-manager.d.ts +0 -6
  288. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/markdown.d.ts +0 -5
  290. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/react-root.d.ts +0 -9
  292. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/settings.d.ts +0 -7
  294. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/state.d.ts +0 -7
  296. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/undo-mappings.d.ts +0 -5
  298. package/dist/types/src/capabilities/undo-mappings.d.ts.map +0 -1
  299. package/dist/types/src/components/Call/Call.d.ts +0 -17
  300. package/dist/types/src/components/Call/Call.d.ts.map +0 -1
  301. package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
  302. package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
  303. package/dist/types/src/components/Call/index.d.ts +0 -3
  304. package/dist/types/src/components/Call/index.d.ts.map +0 -1
  305. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +0 -13
  306. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +0 -1
  307. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +0 -1
  308. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts +0 -14
  309. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +0 -1
  310. package/dist/types/src/components/CommentsPanel/index.d.ts +0 -3
  311. package/dist/types/src/components/CommentsPanel/index.d.ts.map +0 -1
  312. package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
  313. package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
  314. package/dist/types/src/components/Lobby/index.d.ts +0 -2
  315. package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
  316. package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
  317. package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
  318. package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
  319. package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
  320. package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
  321. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
  322. package/dist/types/src/components/Media/index.d.ts +0 -3
  323. package/dist/types/src/components/Media/index.d.ts.map +0 -1
  324. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +0 -15
  325. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +0 -1
  326. package/dist/types/src/components/MessagePanel/index.d.ts +0 -2
  327. package/dist/types/src/components/MessagePanel/index.d.ts.map +0 -1
  328. package/dist/types/src/components/Participant/Participant.d.ts +0 -6
  329. package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
  330. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
  331. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
  332. package/dist/types/src/components/Participant/index.d.ts +0 -3
  333. package/dist/types/src/components/Participant/index.d.ts.map +0 -1
  334. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
  335. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
  336. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
  337. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
  338. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
  339. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
  340. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
  341. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
  342. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
  343. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
  345. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
  346. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +0 -6
  347. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +0 -1
  348. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +0 -161
  349. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +0 -1
  350. package/dist/types/src/components/ThreadSettings/index.d.ts +0 -2
  351. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
  352. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
  353. package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
  354. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +0 -1
  355. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
  356. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
  357. package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
  358. package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
  359. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
  360. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
  361. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +0 -162
  362. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
  363. package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
  364. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
  365. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
  366. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  367. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
  368. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
  369. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  370. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +0 -8
  371. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +0 -1
  372. package/dist/types/src/containers/ThreadCompanion/index.d.ts +0 -2
  373. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +0 -1
  374. package/dist/types/src/extensions/command.d.ts +0 -3
  375. package/dist/types/src/extensions/command.d.ts.map +0 -1
  376. package/dist/types/src/extensions/index.d.ts +0 -3
  377. package/dist/types/src/extensions/index.d.ts.map +0 -1
  378. package/dist/types/src/extensions/threads.d.ts +0 -14
  379. package/dist/types/src/extensions/threads.d.ts.map +0 -1
  380. package/dist/types/src/hooks/analytics.d.ts +0 -3
  381. package/dist/types/src/hooks/analytics.d.ts.map +0 -1
  382. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
  383. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
  384. package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
  385. package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
  386. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
  387. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
  388. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
  389. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
  390. package/dist/types/src/operations/add-message.d.ts +0 -5
  391. package/dist/types/src/operations/add-message.d.ts.map +0 -1
  392. package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
  393. package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
  394. package/dist/types/src/operations/create-proposals.d.ts +0 -5
  395. package/dist/types/src/operations/create-proposals.d.ts.map +0 -1
  396. package/dist/types/src/operations/create.d.ts +0 -5
  397. package/dist/types/src/operations/create.d.ts.map +0 -1
  398. package/dist/types/src/operations/definitions.d.ts +0 -2804
  399. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  400. package/dist/types/src/operations/delete-message.d.ts +0 -5
  401. package/dist/types/src/operations/delete-message.d.ts.map +0 -1
  402. package/dist/types/src/operations/delete.d.ts +0 -5
  403. package/dist/types/src/operations/delete.d.ts.map +0 -1
  404. package/dist/types/src/operations/on-create-space.d.ts +0 -5
  405. package/dist/types/src/operations/on-create-space.d.ts.map +0 -1
  406. package/dist/types/src/operations/restore-message.d.ts +0 -5
  407. package/dist/types/src/operations/restore-message.d.ts.map +0 -1
  408. package/dist/types/src/operations/restore.d.ts +0 -5
  409. package/dist/types/src/operations/restore.d.ts.map +0 -1
  410. package/dist/types/src/operations/select.d.ts +0 -5
  411. package/dist/types/src/operations/select.d.ts.map +0 -1
  412. package/dist/types/src/operations/toggle-resolved.d.ts +0 -5
  413. package/dist/types/src/operations/toggle-resolved.d.ts.map +0 -1
  414. package/dist/types/src/testing/data.d.ts +0 -5
  415. package/dist/types/src/testing/data.d.ts.map +0 -1
  416. package/dist/types/src/testing/index.d.ts +0 -2
  417. package/dist/types/src/testing/index.d.ts.map +0 -1
  418. package/dist/types/src/testing/stories.d.ts +0 -3
  419. package/dist/types/src/testing/stories.d.ts.map +0 -1
  420. package/dist/types/src/types/Channel.d.ts +0 -715
  421. package/dist/types/src/types/Channel.d.ts.map +0 -1
  422. package/dist/types/src/types/Settings.d.ts +0 -5
  423. package/dist/types/src/types/Settings.d.ts.map +0 -1
  424. package/dist/types/src/types/capabilities.d.ts +0 -24
  425. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  426. package/dist/types/src/types/types.d.ts +0 -18
  427. package/dist/types/src/types/types.d.ts.map +0 -1
  428. package/src/blueprints/index.ts +0 -5
  429. package/src/blueprints/thread-blueprint.ts +0 -37
  430. package/src/calls/call-manager.ts +0 -270
  431. package/src/calls/call-swarm-synchronizer.ts +0 -350
  432. package/src/calls/index.ts +0 -10
  433. package/src/calls/media-manager.ts +0 -378
  434. package/src/calls/speaking-monitor.ts +0 -85
  435. package/src/calls/types.ts +0 -74
  436. package/src/calls/util/audio.ts +0 -58
  437. package/src/calls/util/calls-service.ts +0 -580
  438. package/src/calls/util/history-cache.ts +0 -27
  439. package/src/calls/util/index.ts +0 -8
  440. package/src/calls/util/media.ts +0 -52
  441. package/src/calls/util/stub-media-streams.ts +0 -127
  442. package/src/calls/util/task-scheduling.ts +0 -92
  443. package/src/calls-service.stories.tsx +0 -230
  444. package/src/capabilities/blueprint-definition.ts +0 -17
  445. package/src/capabilities/call-manager.ts +0 -27
  446. package/src/capabilities/markdown.ts +0 -82
  447. package/src/capabilities/react-root.tsx +0 -20
  448. package/src/capabilities/settings.ts +0 -35
  449. package/src/capabilities/state.ts +0 -22
  450. package/src/capabilities/undo-mappings.ts +0 -46
  451. package/src/components/Call/Call.tsx +0 -93
  452. package/src/components/Call/Toolbar.tsx +0 -199
  453. package/src/components/Call/index.ts +0 -6
  454. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +0 -93
  455. package/src/components/CommentsPanel/CommentsPanel.tsx +0 -71
  456. package/src/components/CommentsPanel/CommentsThread.tsx +0 -172
  457. package/src/components/CommentsPanel/index.ts +0 -6
  458. package/src/components/Lobby/Lobby.tsx +0 -122
  459. package/src/components/Lobby/index.ts +0 -5
  460. package/src/components/Media/AudioStream.tsx +0 -67
  461. package/src/components/Media/VideoObject.stories.tsx +0 -59
  462. package/src/components/Media/VideoObject.tsx +0 -58
  463. package/src/components/Media/index.ts +0 -6
  464. package/src/components/MessagePanel/MessagePanel.tsx +0 -222
  465. package/src/components/MessagePanel/index.ts +0 -5
  466. package/src/components/Participant/Participant.tsx +0 -77
  467. package/src/components/Participant/ParticipantGrid.tsx +0 -88
  468. package/src/components/Participant/index.ts +0 -6
  469. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -157
  470. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
  471. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
  472. package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -53
  473. package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
  474. package/src/components/ResponsiveGrid/index.ts +0 -7
  475. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +0 -31
  476. package/src/components/ThreadSettings/ThreadSettings.tsx +0 -20
  477. package/src/components/ThreadSettings/index.ts +0 -5
  478. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
  479. package/src/containers/CallDebugPanel/index.ts +0 -5
  480. package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
  481. package/src/containers/CallSidebar/index.ts +0 -5
  482. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +0 -61
  483. package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
  484. package/src/containers/ChannelContainer/index.ts +0 -5
  485. package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
  486. package/src/containers/ChatContainer/index.ts +0 -8
  487. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +0 -217
  488. package/src/containers/ThreadCompanion/index.ts +0 -5
  489. package/src/extensions/command.ts +0 -36
  490. package/src/extensions/index.ts +0 -6
  491. package/src/extensions/threads.ts +0 -171
  492. package/src/hooks/analytics.ts +0 -41
  493. package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
  494. package/src/hooks/useDebugMode.ts +0 -25
  495. package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
  496. package/src/hooks/useVideoStreamTrack.tsx +0 -36
  497. package/src/operations/add-message.ts +0 -81
  498. package/src/operations/create-channel-thread.ts +0 -26
  499. package/src/operations/create-proposals.ts +0 -49
  500. package/src/operations/create.ts +0 -48
  501. package/src/operations/definitions.ts +0 -177
  502. package/src/operations/delete-message.ts +0 -53
  503. package/src/operations/delete.ts +0 -63
  504. package/src/operations/on-create-space.ts +0 -27
  505. package/src/operations/restore-message.ts +0 -38
  506. package/src/operations/restore.ts +0 -38
  507. package/src/operations/select.ts +0 -24
  508. package/src/operations/toggle-resolved.ts +0 -41
  509. package/src/testing/data.ts +0 -49
  510. package/src/testing/index.ts +0 -5
  511. package/src/testing/stories.ts +0 -51
  512. package/src/types/Channel.ts +0 -37
  513. package/src/types/Settings.ts +0 -10
  514. package/src/types/capabilities.ts +0 -36
  515. package/src/types/types.ts +0 -24
  516. package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
  517. package/src/typings.d.ts +0 -8
  518. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  519. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  520. /package/dist/lib/{browser/types → neutral/hooks}/index.mjs.map +0 -0
  521. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  522. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Effect from 'effect/Effect';
8
+ import type * as Schema from 'effect/Schema';
9
+
10
+ import { Capability } from '@dxos/app-framework';
11
+ import { type Obj } from '@dxos/echo';
12
+ import { type Channel, type Message } from '@dxos/types';
13
+
14
+ import { meta } from '#meta';
15
+
16
+ /**
17
+ * A pluggable message backend for a `Channel`. Providers are contributed by
18
+ * plugins and resolved by `Channel.backend.kind`.
19
+ */
20
+ export interface ChannelBackendProvider {
21
+ /** Stable backend id; matches `Channel.backend.kind`. */
22
+ kind: string;
23
+ /** Human-readable label shown in the create-channel form. */
24
+ label: string;
25
+ /** Icon name (phosphor) for the create-channel form. */
26
+ icon?: string;
27
+ /**
28
+ * Per-backend create-form inputs (a struct; excludes the `kind` discriminant
29
+ * and the channel `name`, which the panel adds). Empty struct when the backend
30
+ * needs no extra input (e.g. the local feed).
31
+ */
32
+ createFields: Schema.Schema.AnyNoContext;
33
+ /** Builds the provider's config object from the collected create-form inputs. */
34
+ makeConfig: (options: Record<string, unknown>) => Obj.Any;
35
+ /**
36
+ * Subscribes to the channel's messages. Invokes `onMessages` with the current
37
+ * list immediately and on every change. Returns an unsubscribe function.
38
+ */
39
+ subscribe: (channel: Channel.Channel, onMessages: (messages: readonly Message.Message[]) => void) => () => void;
40
+ /** Sends a message through the backend. */
41
+ send: (channel: Channel.Channel, message: Message.Message) => Effect.Effect<void, Error, Capability.Service>;
42
+ /** Whether the channel is read-only. Defaults to "channel has foreign-key Obj.Meta". */
43
+ readOnly?: (channel: Channel.Channel) => boolean;
44
+ }
45
+
46
+ /** Registry of channel-message backends. Collect with `Capability.getAll`. */
47
+ export const ChannelBackend = Capability.make<ChannelBackendProvider>(`${meta.id}.capability.channel-backend`);
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { Capability } from '@dxos/app-framework';
10
+ import { Operation } from '@dxos/compute';
11
+ import { Key, Type, DXN } from '@dxos/echo';
12
+ import { Actor, Channel } from '@dxos/types';
13
+
14
+ import { meta } from '#meta';
15
+
16
+ const makeKey = (name: string) => DXN.make(`${meta.id}.operation.${name}`);
17
+
18
+ export const CreateChannel = Operation.make({
19
+ meta: { key: makeKey('createChannel'), name: 'Create Channel', icon: 'ph--hash--regular' },
20
+ services: [Capability.Service],
21
+ input: Schema.Struct({
22
+ spaceId: Key.SpaceId,
23
+ name: Schema.optional(Schema.String),
24
+ /** Backend provider id; defaults to the local feed backend. */
25
+ kind: Schema.optional(Schema.String),
26
+ /** Per-backend create options passed to the provider's makeConfig. */
27
+ options: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),
28
+ }),
29
+ output: Schema.Struct({
30
+ object: Type.getSchema(Channel.Channel),
31
+ }),
32
+ });
33
+
34
+ export const AppendChannelMessage = Operation.make({
35
+ meta: {
36
+ key: makeKey('appendChannelMessage'),
37
+ name: 'Append Channel Message',
38
+ icon: 'ph--chat-text--regular',
39
+ },
40
+ // Note: Feed.FeedService is provided inside the handler from space.queues, not at the
41
+ // operation level — the runtime can't fulfill it without a space context.
42
+ services: [Capability.Service],
43
+ input: Schema.Struct({
44
+ channel: Type.getSchema(Channel.Channel),
45
+ sender: Actor.Actor,
46
+ text: Schema.String,
47
+ }),
48
+ output: Schema.Void,
49
+ });
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+ import { describe, test } from 'vitest';
8
+
9
+ import { Feed } from '@dxos/echo';
10
+
11
+ import { buildChannelFormSchema, resolveProvider } from './channel-backend';
12
+ import * as ThreadCapabilities from './ThreadCapabilities';
13
+
14
+ describe('channel-backend helpers', () => {
15
+ test('resolveProvider finds by kind', ({ expect }) => {
16
+ const providers = [fakeProvider('a', Schema.Struct({})), fakeProvider('b', Schema.Struct({}))];
17
+ expect(resolveProvider(providers, 'b')?.kind).to.eq('b');
18
+ expect(resolveProvider(providers, 'missing')).to.be.undefined;
19
+ });
20
+
21
+ test('buildChannelFormSchema with a single empty-field provider is just a name field', ({ expect }) => {
22
+ const schema = buildChannelFormSchema([fakeProvider('feed', Schema.Struct({}))]);
23
+ const value = Schema.decodeUnknownSync(schema)({ name: 'general' });
24
+ expect(value.name).to.eq('general');
25
+ expect(value.backend).to.be.undefined;
26
+ });
27
+
28
+ test('buildChannelFormSchema with multiple providers builds a discriminated backend union', ({ expect }) => {
29
+ const schema = buildChannelFormSchema([
30
+ fakeProvider('feed', Schema.Struct({})),
31
+ fakeProvider('atproto', Schema.Struct({ channelId: Schema.String })),
32
+ ]);
33
+ const feedValue = Schema.decodeUnknownSync(schema)({ name: 'x', backend: { kind: 'feed' } });
34
+ expect(feedValue.backend.kind).to.eq('feed');
35
+ const atValue = Schema.decodeUnknownSync(schema)({ name: 'y', backend: { kind: 'atproto', channelId: 'c' } });
36
+ expect(atValue.backend.kind).to.eq('atproto');
37
+ expect(atValue.backend.channelId).to.eq('c');
38
+ });
39
+ });
40
+
41
+ const fakeProvider = (kind: string, fields: Schema.Schema.AnyNoContext): ThreadCapabilities.ChannelBackendProvider => ({
42
+ kind,
43
+ label: kind,
44
+ createFields: fields,
45
+ makeConfig: () => Feed.make(),
46
+ subscribe: () => () => {},
47
+ send: () => Effect.void,
48
+ });
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import * as SchemaAST from 'effect/SchemaAST';
7
+
8
+ import * as ThreadCapabilities from './ThreadCapabilities';
9
+
10
+ /** Finds the provider matching a `Channel.backend.kind`. */
11
+ export const resolveProvider = (
12
+ providers: readonly ThreadCapabilities.ChannelBackendProvider[],
13
+ kind: string,
14
+ ): ThreadCapabilities.ChannelBackendProvider | undefined => providers.find((provider) => provider.kind === kind);
15
+
16
+ /** Throws if two providers share a `kind` (which would make resolution order-dependent). */
17
+ export const assertUniqueKinds = (providers: readonly ThreadCapabilities.ChannelBackendProvider[]): void => {
18
+ const seen = new Set<string>();
19
+ for (const provider of providers) {
20
+ if (seen.has(provider.kind)) {
21
+ throw new Error(`Duplicate channel backend kind: ${provider.kind}`);
22
+ }
23
+ seen.add(provider.kind);
24
+ }
25
+ };
26
+
27
+ /**
28
+ * Builds the create-channel form schema from the registered providers.
29
+ *
30
+ * With a single provider whose create-fields are empty the form is just a
31
+ * `name` field (today's behaviour). With multiple providers (or extra fields)
32
+ * it becomes `{ name?, backend: Union(<{ kind: Literal(p.kind) } & p.createFields>) }`,
33
+ * which react-ui-form renders as a `kind` Select plus the selected branch's fields.
34
+ */
35
+ export const buildChannelFormSchema = (
36
+ providers: readonly ThreadCapabilities.ChannelBackendProvider[],
37
+ ): Schema.Schema.AnyNoContext => {
38
+ assertUniqueKinds(providers);
39
+ const needsSelector = providers.length > 1 || providers.some((provider) => fieldCount(provider.createFields) > 0);
40
+ if (!needsSelector) {
41
+ return Schema.Struct({ name: Schema.optional(Schema.String) });
42
+ }
43
+
44
+ const branches = providers.map((provider) =>
45
+ Schema.extend(Schema.Struct({ kind: Schema.Literal(provider.kind) }), provider.createFields),
46
+ );
47
+ const backend = branches.length === 1 ? branches[0] : Schema.Union(...branches);
48
+ return Schema.Struct({
49
+ name: Schema.optional(Schema.String),
50
+ backend,
51
+ });
52
+ };
53
+
54
+ const fieldCount = (schema: Schema.Schema.AnyNoContext): number => SchemaAST.getPropertySignatures(schema.ast).length;
@@ -2,6 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './capabilities';
6
- export * as Channel from './Channel';
7
- export * from './types';
5
+ export * from './channel-backend';
6
+ export * as ThreadCapabilities from './ThreadCapabilities';
7
+ export * as ThreadOperation from './ThreadOperation';
package/src/util.ts CHANGED
@@ -2,37 +2,54 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import * as Match from 'effect/Match';
6
-
7
5
  import { generateName } from '@dxos/display-name';
8
- import { type PublicKey } from '@dxos/react-client';
9
6
  import { type Identity } from '@dxos/react-client/halo';
10
- import { type Selection } from '@dxos/react-ui-attention';
11
7
  import { type MessageMetadata } from '@dxos/react-ui-thread';
12
- import { hexToFallback } from '@dxos/util';
8
+ import { hexToFallback, toFallback } from '@dxos/util';
13
9
 
14
- export type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;
10
+ /**
11
+ * Stable hash for an arbitrary string — used as the avatar-fallback seed for
12
+ * external senders who have no DXOS identity (e.g. Slack/Discord-synced
13
+ * messages). djb2-ish, only stability matters.
14
+ *
15
+ * Coerced to unsigned 32-bit via `>>> 0` because `toFallback` does a plain
16
+ * modulo against `idEmoji.length * idHue.length` and JavaScript's `%`
17
+ * preserves the sign of the dividend — a negative hash would index
18
+ * `idEmoji[-x]` and `idHue[-x]` to `undefined`, causing the avatar to fall
19
+ * through to `Avatar.Content`'s default red/ghost.
20
+ */
21
+ const hashString = (s: string): number => {
22
+ let h = 0;
23
+ for (let i = 0; i < s.length; i++) {
24
+ h = (h * 31 + s.charCodeAt(i)) | 0;
25
+ }
26
+ return h >>> 0;
27
+ };
15
28
 
16
- export const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {
17
- const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');
29
+ export const getMessageMetadata = (
30
+ id: string,
31
+ identity?: Identity,
32
+ /**
33
+ * Externally-sourced sender info (Slack/Discord/etc). Used only when no
34
+ * matching DXOS `identity` is available — provides `name`/`email` for the
35
+ * author label and a stable seed for the avatar fallback.
36
+ */
37
+ fallbackSender?: { name?: string; email?: string },
38
+ ): MessageMetadata => {
39
+ const fallback = identity?.identityKey
40
+ ? hexToFallback(identity.identityKey.toHex())
41
+ : toFallback(hashString(fallbackSender?.name ?? fallbackSender?.email ?? '0'));
18
42
  return {
19
43
  id,
20
44
  authorId: identity?.did,
21
45
  authorName:
22
46
  identity?.profile?.displayName ??
23
- (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),
47
+ (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined) ??
48
+ fallbackSender?.name ??
49
+ fallbackSender?.email,
24
50
  authorAvatarProps: {
25
51
  hue: identity?.profile?.data?.hue ?? fallback.hue,
26
52
  emoji: identity?.profile?.data?.emoji ?? fallback.emoji,
27
53
  },
28
54
  };
29
55
  };
30
-
31
- export const getAnchor = Match.type<Selection | undefined>().pipe(
32
- Match.when({ mode: 'single' }, (s) => s.id),
33
- Match.when({ mode: 'multi' }, (s) => (s.ids.length > 0 ? s.ids.join(',') : undefined)),
34
- Match.when({ mode: 'range' }, (s) => (s.from && s.to ? `${s.from}:${s.to}` : undefined)),
35
- Match.when({ mode: 'multi-range' }, (s) => s.ranges[0] && `${s.ranges[0].from}:${s.ranges[0].to}`),
36
- Match.when(undefined, () => undefined),
37
- Match.exhaustive,
38
- );
@@ -0,0 +1,10 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ //
4
+ // Copyright 2026 DXOS.org
5
+ //
6
+
7
+ declare module '*.mdl?raw' {
8
+ const content: string;
9
+ export default content;
10
+ }
@@ -1,97 +0,0 @@
1
- import {
2
- AddMessage
3
- } from "./chunk-VPM44Z35.mjs";
4
- import {
5
- ThreadCapabilities
6
- } from "./chunk-MESW3R4Q.mjs";
7
- import "./chunk-J5LGTIGS.mjs";
8
-
9
- // src/operations/add-message.ts
10
- import * as Effect from "effect/Effect";
11
- import { Capabilities, Capability } from "@dxos/app-framework";
12
- import { Obj, Ref, Relation } from "@dxos/echo";
13
- import { invariant } from "@dxos/invariant";
14
- import { Operation } from "@dxos/operation";
15
- import { ObservabilityOperation } from "@dxos/plugin-observability/operations";
16
- import { SpaceOperation } from "@dxos/plugin-space/operations";
17
- import { AnchoredTo, Message } from "@dxos/types";
18
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/operations/add-message.ts";
19
- var handler = AddMessage.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ anchor, subject, sender, text }) {
20
- const registry = yield* Capability.get(Capabilities.AtomRegistry);
21
- const stateAtom = yield* Capability.get(ThreadCapabilities.State);
22
- const thread = Relation.getSource(anchor);
23
- const subjectId = Obj.getDXN(subject).toString();
24
- const db = Obj.getDatabase(subject);
25
- invariant(db, "Database not found", {
26
- F: __dxlog_file,
27
- L: 26,
28
- S: this,
29
- A: [
30
- "db",
31
- "'Database not found'"
32
- ]
33
- });
34
- const message = Obj.make(Message.Message, {
35
- created: (/* @__PURE__ */ new Date()).toISOString(),
36
- sender,
37
- blocks: [
38
- {
39
- _tag: "text",
40
- text
41
- }
42
- ]
43
- });
44
- Obj.change(thread, (thread2) => {
45
- thread2.messages.push(Ref.make(message));
46
- });
47
- const state = registry.get(stateAtom);
48
- const draft = state.drafts[subjectId]?.find((a) => a.id === anchor.id);
49
- if (draft) {
50
- Obj.change(thread, (thread2) => {
51
- thread2.status = "active";
52
- });
53
- registry.set(stateAtom, {
54
- ...state,
55
- drafts: {
56
- ...state.drafts,
57
- [subjectId]: state.drafts[subjectId]?.filter((a) => a.id !== anchor.id)
58
- }
59
- });
60
- yield* Operation.invoke(SpaceOperation.AddObject, {
61
- object: thread,
62
- target: db,
63
- hidden: true
64
- });
65
- yield* Operation.invoke(SpaceOperation.AddRelation, {
66
- db,
67
- schema: AnchoredTo.AnchoredTo,
68
- source: thread,
69
- target: subject,
70
- fields: {
71
- anchor: draft.anchor
72
- }
73
- });
74
- yield* Operation.schedule(ObservabilityOperation.SendEvent, {
75
- name: "threads.create",
76
- properties: {
77
- spaceId: db.spaceId,
78
- threadId: thread.id
79
- }
80
- });
81
- }
82
- yield* Operation.schedule(ObservabilityOperation.SendEvent, {
83
- name: "threads.message.add",
84
- properties: {
85
- spaceId: db.spaceId,
86
- threadId: thread.id,
87
- threadLength: thread.messages.length,
88
- messageId: message.id,
89
- messageLength: text.length
90
- }
91
- });
92
- })));
93
- var add_message_default = handler;
94
- export {
95
- add_message_default as default
96
- };
97
- //# sourceMappingURL=add-message-VPPFFLFL.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/operations/add-message.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Obj, Ref, Relation } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { Operation } from '@dxos/operation';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/operations';\nimport { SpaceOperation } from '@dxos/plugin-space/operations';\nimport { AnchoredTo, Message, Thread } from '@dxos/types';\n\nimport { ThreadCapabilities } from '../types';\nimport { AddMessage } from './definitions';\n\nconst handler: Operation.WithHandler<typeof AddMessage> = AddMessage.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ anchor, subject, sender, text }) {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const stateAtom = yield* Capability.get(ThreadCapabilities.State);\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const subjectId = Obj.getDXN(subject).toString();\n const db = Obj.getDatabase(subject);\n invariant(db, 'Database not found');\n\n const message = Obj.make(Message.Message, {\n created: new Date().toISOString(),\n sender,\n blocks: [{ _tag: 'text', text }],\n });\n Obj.change(thread, (thread) => {\n thread.messages.push(Ref.make(message));\n });\n\n const state = registry.get(stateAtom);\n const draft = state.drafts[subjectId]?.find((a: { id: string }) => a.id === anchor.id);\n if (draft) {\n Obj.change(thread, (thread) => {\n thread.status = 'active';\n });\n registry.set(stateAtom, {\n ...state,\n drafts: {\n ...state.drafts,\n [subjectId]: state.drafts[subjectId]?.filter((a: { id: string }) => a.id !== anchor.id),\n },\n });\n yield* Operation.invoke(SpaceOperation.AddObject, { object: thread, target: db, hidden: true });\n yield* Operation.invoke(SpaceOperation.AddRelation, {\n db,\n schema: AnchoredTo.AnchoredTo,\n source: thread,\n target: subject,\n fields: { anchor: draft.anchor },\n });\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'threads.create',\n properties: {\n spaceId: db.spaceId,\n threadId: thread.id,\n },\n });\n }\n\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'threads.message.add',\n properties: {\n spaceId: db.spaceId,\n threadId: thread.id,\n threadLength: thread.messages.length,\n messageId: message.id,\n messageLength: text.length,\n },\n });\n }),\n ),\n);\n\nexport default handler;\n"],
5
- "mappings": ";;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,KAAKC,KAAKC,gBAAgB;AACnC,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,8BAA8B;AACvC,SAASC,sBAAsB;AAC/B,SAASC,YAAYC,eAAuB;;AAK5C,IAAMC,UAAoDC,WAAWC,KACnEC,UAAUC,YACDC,kBAAW,WAAW,EAAEC,QAAQC,SAASC,QAAQC,KAAI,GAAE;AAC5D,QAAMC,WAAW,OAAOC,WAAWC,IAAIC,aAAaC,YAAY;AAChE,QAAMC,YAAY,OAAOJ,WAAWC,IAAII,mBAAmBC,KAAK;AAChE,QAAMC,SAASC,SAASC,UAAUd,MAAAA;AAClC,QAAMe,YAAYC,IAAIC,OAAOhB,OAAAA,EAASiB,SAAQ;AAC9C,QAAMC,KAAKH,IAAII,YAAYnB,OAAAA;AAC3BoB,YAAUF,IAAI,sBAAA;;;;;;;;;AAEd,QAAMG,UAAUN,IAAIO,KAAKC,QAAQA,SAAS;IACxCC,UAAS,oBAAIC,KAAAA,GAAOC,YAAW;IAC/BzB;IACA0B,QAAQ;MAAC;QAAEC,MAAM;QAAQ1B;MAAK;;EAChC,CAAA;AACAa,MAAIc,OAAOlB,QAAQ,CAACA,YAAAA;AAClBA,IAAAA,QAAOmB,SAASC,KAAKC,IAAIV,KAAKD,OAAAA,CAAAA;EAChC,CAAA;AAEA,QAAMY,QAAQ9B,SAASE,IAAIG,SAAAA;AAC3B,QAAM0B,QAAQD,MAAME,OAAOrB,SAAAA,GAAYsB,KAAK,CAACC,MAAsBA,EAAEC,OAAOvC,OAAOuC,EAAE;AACrF,MAAIJ,OAAO;AACTnB,QAAIc,OAAOlB,QAAQ,CAACA,YAAAA;AAClBA,MAAAA,QAAO4B,SAAS;IAClB,CAAA;AACApC,aAASqC,IAAIhC,WAAW;MACtB,GAAGyB;MACHE,QAAQ;QACN,GAAGF,MAAME;QACT,CAACrB,SAAAA,GAAYmB,MAAME,OAAOrB,SAAAA,GAAY2B,OAAO,CAACJ,MAAsBA,EAAEC,OAAOvC,OAAOuC,EAAE;MACxF;IACF,CAAA;AACA,WAAO1C,UAAU8C,OAAOC,eAAeC,WAAW;MAAEC,QAAQlC;MAAQmC,QAAQ5B;MAAI6B,QAAQ;IAAK,CAAA;AAC7F,WAAOnD,UAAU8C,OAAOC,eAAeK,aAAa;MAClD9B;MACA+B,QAAQC,WAAWA;MACnBC,QAAQxC;MACRmC,QAAQ9C;MACRoD,QAAQ;QAAErD,QAAQmC,MAAMnC;MAAO;IACjC,CAAA;AACA,WAAOH,UAAUyD,SAASC,uBAAuBC,WAAW;MAC1DC,MAAM;MACNC,YAAY;QACVC,SAASxC,GAAGwC;QACZC,UAAUhD,OAAO2B;MACnB;IACF,CAAA;EACF;AAEA,SAAO1C,UAAUyD,SAASC,uBAAuBC,WAAW;IAC1DC,MAAM;IACNC,YAAY;MACVC,SAASxC,GAAGwC;MACZC,UAAUhD,OAAO2B;MACjBsB,cAAcjD,OAAOmB,SAAS+B;MAC9BC,WAAWzC,QAAQiB;MACnByB,eAAe7D,KAAK2D;IACtB;EACF,CAAA;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,sBAAepE;",
6
- "names": ["Effect", "Capabilities", "Capability", "Obj", "Ref", "Relation", "invariant", "Operation", "ObservabilityOperation", "SpaceOperation", "AnchoredTo", "Message", "handler", "AddMessage", "pipe", "Operation", "withHandler", "fnUntraced", "anchor", "subject", "sender", "text", "registry", "Capability", "get", "Capabilities", "AtomRegistry", "stateAtom", "ThreadCapabilities", "State", "thread", "Relation", "getSource", "subjectId", "Obj", "getDXN", "toString", "db", "getDatabase", "invariant", "message", "make", "Message", "created", "Date", "toISOString", "blocks", "_tag", "change", "messages", "push", "Ref", "state", "draft", "drafts", "find", "a", "id", "status", "set", "filter", "invoke", "SpaceOperation", "AddObject", "object", "target", "hidden", "AddRelation", "schema", "AnchoredTo", "source", "fields", "schedule", "ObservabilityOperation", "SendEvent", "name", "properties", "spaceId", "threadId", "threadLength", "length", "messageId", "messageLength"]
7
- }
@@ -1,37 +0,0 @@
1
- import "../chunk-J5LGTIGS.mjs";
2
-
3
- // src/blueprints/thread-blueprint.ts
4
- import { Blueprint, Template } from "@dxos/blueprints";
5
- import { trim } from "@dxos/util";
6
- import { ThreadOperation } from "#operations";
7
- var BLUEPRINT_KEY = "org.dxos.blueprint.thread";
8
- var make = () => Blueprint.make({
9
- key: BLUEPRINT_KEY,
10
- name: "Thread",
11
- tools: Blueprint.toolDefinitions({
12
- operations: [
13
- ThreadOperation.CreateProposals
14
- ]
15
- }),
16
- instructions: Template.make({
17
- // TODO(wittjosiah): Move example to function input schema annotation.
18
- source: trim`
19
- You can update markdown documents via proposals.
20
- For each diff, respond with the smallest possible matching span.
21
- For example:
22
- - "There is a tyop in this sentence."
23
- + "There is a typo in this sentence."
24
- - "This id goof."
25
- + "This is good."
26
- `
27
- })
28
- });
29
- var blueprint = {
30
- key: BLUEPRINT_KEY,
31
- make
32
- };
33
- var thread_blueprint_default = blueprint;
34
- export {
35
- thread_blueprint_default as ThreadBlueprint
36
- };
37
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/blueprints/thread-blueprint.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AppCapabilities } from '@dxos/app-toolkit';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { trim } from '@dxos/util';\n\nimport { ThreadOperation } from '#operations';\n\nconst BLUEPRINT_KEY = 'org.dxos.blueprint.thread';\n\nconst make = () =>\n Blueprint.make({\n key: BLUEPRINT_KEY,\n name: 'Thread',\n tools: Blueprint.toolDefinitions({ operations: [ThreadOperation.CreateProposals] }),\n instructions: Template.make({\n // TODO(wittjosiah): Move example to function input schema annotation.\n source: trim`\n You can update markdown documents via proposals.\n For each diff, respond with the smallest possible matching span.\n For example:\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id goof.\"\n + \"This is good.\"\n `,\n }),\n });\n\nconst blueprint: AppCapabilities.BlueprintDefinition = {\n key: BLUEPRINT_KEY,\n make,\n};\n\nexport default blueprint;\n"],
5
- "mappings": ";;;AAKA,SAASA,WAAWC,gBAAgB;AACpC,SAASC,YAAY;AAErB,SAASC,uBAAuB;AAEhC,IAAMC,gBAAgB;AAEtB,IAAMC,OAAO,MACXC,UAAUD,KAAK;EACbE,KAAKH;EACLI,MAAM;EACNC,OAAOH,UAAUI,gBAAgB;IAAEC,YAAY;MAACC,gBAAgBC;;EAAiB,CAAA;EACjFC,cAAcC,SAASV,KAAK;;IAE1BW,QAAQC;;;;;;;;;EASV,CAAA;AACF,CAAA;AAEF,IAAMC,YAAiD;EACrDX,KAAKH;EACLC;AACF;AAEA,IAAA,2BAAea;",
6
- "names": ["Blueprint", "Template", "trim", "ThreadOperation", "BLUEPRINT_KEY", "make", "Blueprint", "key", "name", "tools", "toolDefinitions", "operations", "ThreadOperation", "CreateProposals", "instructions", "Template", "source", "trim", "blueprint"]
7
- }
@@ -1,61 +0,0 @@
1
- import {
2
- __export
3
- } from "./chunk-J5LGTIGS.mjs";
4
-
5
- // src/types/capabilities.ts
6
- import { Capability } from "@dxos/app-framework";
7
- import { meta } from "#meta";
8
- (function(ThreadCapabilities2) {
9
- ThreadCapabilities2.Settings = Capability.make(`${meta.id}.capability.settings`);
10
- ThreadCapabilities2.CallManager = Capability.make(`${meta.id}.capability.call-manager`);
11
- ThreadCapabilities2.CallExtension = Capability.make(`${meta.id}.capability.call-extension`);
12
- ThreadCapabilities2.State = Capability.make(`${meta.id}.capability.state`);
13
- ThreadCapabilities2.ViewState = Capability.make(`${meta.id}.capability.view-state`);
14
- })(ThreadCapabilities || (ThreadCapabilities = {}));
15
- var ThreadCapabilities;
16
-
17
- // src/types/Channel.ts
18
- var Channel_exports = {};
19
- __export(Channel_exports, {
20
- Channel: () => Channel,
21
- make: () => make
22
- });
23
- import * as Schema from "effect/Schema";
24
- import { Annotation, Obj, Ref, Type } from "@dxos/echo";
25
- import { FormInputAnnotation } from "@dxos/echo/internal";
26
- import { Thread } from "@dxos/types";
27
- var Channel = Schema.Struct({
28
- name: Schema.optional(Schema.String),
29
- defaultThread: Ref.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),
30
- // TODO(wittjosiah): Should be an "ordered collection".
31
- threads: Ref.Ref(Thread.Thread).pipe(Schema.Array, FormInputAnnotation.set(false))
32
- }).pipe(Type.object({
33
- typename: "org.dxos.type.channel",
34
- version: "0.1.0"
35
- }), Annotation.IconAnnotation.set({
36
- icon: "ph--hash--regular",
37
- hue: "rose"
38
- }));
39
- var make = (props = {}) => Obj.make(Channel, {
40
- ...props,
41
- defaultThread: Ref.make(Obj.make(Thread.Thread, {
42
- messages: [],
43
- status: "active"
44
- })),
45
- threads: []
46
- });
47
-
48
- // src/types/Settings.ts
49
- var Settings_exports = {};
50
- __export(Settings_exports, {
51
- Settings: () => Settings
52
- });
53
- import * as Schema2 from "effect/Schema";
54
- var Settings = Schema2.mutable(Schema2.Struct({}));
55
-
56
- export {
57
- ThreadCapabilities,
58
- Channel_exports,
59
- Settings_exports
60
- };
61
- //# sourceMappingURL=chunk-MESW3R4Q.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/capabilities.ts", "../../../src/types/Channel.ts", "../../../src/types/Settings.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\n\nimport { type CallManager, type CallState, type MediaState } from '../calls';\nimport { type Channel, type ThreadState, type ViewStore } from '../types';\nimport * as Settings from './Settings';\n\nexport namespace ThreadCapabilities {\n export const Settings = Capability.make<Atom.Writable<Settings.Settings>>(`${meta.id}.capability.settings`);\n export const CallManager = Capability.make<CallManager>(`${meta.id}.capability.call-manager`);\n\n // TODO(burdon): Better way to define specific extensions for meeting companions.\n // TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?\n // TODO(wittjosiah): These callbacks could be intents once we support broadcast.\n export type CallProperties = {\n onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;\n onLeave: (roomId?: string) => Promise<void>;\n onCallStateUpdated: (callState: CallState) => Promise<void>;\n onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;\n };\n\n export const CallExtension = Capability.make<CallProperties>(`${meta.id}.capability.call-extension`);\n\n /** Thread state (drafts, toolbar state, current selection). */\n export const State = Capability.make<Atom.Writable<ThreadState>>(`${meta.id}.capability.state`);\n\n /** Per-subject view state (e.g., showResolvedThreads). */\n export const ViewState = Capability.make<Atom.Writable<ViewStore>>(`${meta.id}.capability.view-state`);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Annotation, Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation } from '@dxos/echo/internal';\nimport { Thread } from '@dxos/types';\n\n// TODO(burdon): What is the difference between Thread and Channel.\nexport const Channel = Schema.Struct({\n name: Schema.optional(Schema.String),\n defaultThread: Ref.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),\n // TODO(wittjosiah): Should be an \"ordered collection\".\n threads: Ref.Ref(Thread.Thread).pipe(Schema.Array, FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.channel',\n version: '0.1.0',\n }),\n Annotation.IconAnnotation.set({\n icon: 'ph--hash--regular',\n hue: 'rose',\n }),\n);\n\nexport interface Channel extends Schema.Schema.Type<typeof Channel> {}\n\nexport const make = (props: Pick<Obj.MakeProps<typeof Channel>, 'name'> = {}) =>\n Obj.make(Channel, {\n ...props,\n defaultThread: Ref.make(Obj.make(Thread.Thread, { messages: [], status: 'active' })),\n threads: [],\n });\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nexport const Settings = Schema.mutable(Schema.Struct({}));\nexport interface Settings extends Schema.Schema.Type<typeof Settings> {}\n"],
5
- "mappings": ";;;;;AAMA,SAASA,kBAAkB;AAE3B,SAASC,YAAY;UAMJC,qBAAAA;sBACFC,WAAWC,WAAWC,KAAuC,GAAGC,KAAKC,EAAE,sBAAsB;sBAC7FC,cAAcJ,WAAWC,KAAkB,GAAGC,KAAKC,EAAE,0BAA0B;sBAY/EE,gBAAgBL,WAAWC,KAAqB,GAAGC,KAAKC,EAAE,4BAA4B;sBAGtFG,QAAQN,WAAWC,KAAiC,GAAGC,KAAKC,EAAE,mBAAmB;sBAGjFI,YAAYP,WAAWC,KAA+B,GAAGC,KAAKC,EAAE,wBAAwB;AACvG,GArBiBL,uBAAAA,qBAAAA,CAAAA,EAAAA;;;;ACdjB;;;;;AAMA,YAAYU,YAAY;AAExB,SAASC,YAAYC,KAAKC,KAAKC,YAAY;AAC3C,SAASC,2BAA2B;AACpC,SAASC,cAAc;AAGhB,IAAMC,UAAiBC,cAAO;EACnCC,MAAaC,gBAAgBC,aAAM;EACnCC,eAAeC,IAAIA,IAAIC,OAAOA,MAAM,EAAEC,KAAKC,oBAAoBC,IAAI,KAAA,CAAA;;EAEnEC,SAASL,IAAIA,IAAIC,OAAOA,MAAM,EAAEC,KAAYI,cAAOH,oBAAoBC,IAAI,KAAA,CAAA;AAC7E,CAAA,EAAGF,KACDK,KAAKC,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,WAAWC,eAAeR,IAAI;EAC5BS,MAAM;EACNC,KAAK;AACP,CAAA,CAAA;AAKK,IAAMC,OAAO,CAACC,QAAqD,CAAC,MACzEC,IAAIF,KAAKrB,SAAS;EAChB,GAAGsB;EACHjB,eAAeC,IAAIe,KAAKE,IAAIF,KAAKd,OAAOA,QAAQ;IAAEiB,UAAU,CAAA;IAAIC,QAAQ;EAAS,CAAA,CAAA;EACjFd,SAAS,CAAA;AACX,CAAA;;;ACpCF;;;;AAMA,YAAYe,aAAY;AAEjB,IAAMC,WAAkBC,gBAAeC,eAAO,CAAC,CAAA,CAAA;",
6
- "names": ["Capability", "meta", "ThreadCapabilities", "Settings", "Capability", "make", "meta", "id", "CallManager", "CallExtension", "State", "ViewState", "Schema", "Annotation", "Obj", "Ref", "Type", "FormInputAnnotation", "Thread", "Channel", "Struct", "name", "optional", "String", "defaultThread", "Ref", "Thread", "pipe", "FormInputAnnotation", "set", "threads", "Array", "Type", "object", "typename", "version", "Annotation", "IconAnnotation", "icon", "hue", "make", "props", "Obj", "messages", "status", "Schema", "Settings", "mutable", "Struct"]
7
- }