@dxos/plugin-thread 0.8.4-main.422d1c7879 → 0.8.4-main.43cb759274

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 (532) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +271 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/ChannelArticle-UJHPOUWA.mjs +28 -0
  5. package/dist/lib/neutral/ChannelArticle-UJHPOUWA.mjs.map +7 -0
  6. package/dist/lib/neutral/ChannelChat-LZEDFJVD.mjs +10 -0
  7. package/dist/lib/neutral/CommentsCompanion-FOUIGCEK.mjs +208 -0
  8. package/dist/lib/neutral/CommentsCompanion-FOUIGCEK.mjs.map +7 -0
  9. package/dist/lib/neutral/ThreadContainer-QWB6WRMI.mjs +61 -0
  10. package/dist/lib/neutral/ThreadContainer-QWB6WRMI.mjs.map +7 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs +109 -0
  12. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs +40 -0
  14. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  15. package/dist/lib/neutral/ThreadPlugin.workerd.mjs +24 -0
  16. package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
  17. package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs +15 -0
  18. package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs.map +7 -0
  19. package/dist/lib/{browser/add-message-VPPFFLFL.mjs → neutral/add-message-RDIABSIX.mjs} +48 -23
  20. package/dist/lib/neutral/add-message-RDIABSIX.mjs.map +7 -0
  21. package/dist/lib/neutral/agent-runner-RB7N5HLD.mjs +244 -0
  22. package/dist/lib/neutral/agent-runner-RB7N5HLD.mjs.map +7 -0
  23. package/dist/lib/neutral/app-graph-builder-PDLRFYSI.mjs +120 -0
  24. package/dist/lib/neutral/app-graph-builder-PDLRFYSI.mjs.map +7 -0
  25. package/dist/lib/neutral/append-channel-message-TBBQUVMH.mjs +40 -0
  26. package/dist/lib/neutral/append-channel-message-TBBQUVMH.mjs.map +7 -0
  27. package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs +15 -0
  28. package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs.map +7 -0
  29. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  30. package/dist/lib/neutral/capabilities/index.mjs +27 -0
  31. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-35GUWXBB.mjs +48 -0
  33. package/dist/lib/neutral/chunk-35GUWXBB.mjs.map +7 -0
  34. package/dist/lib/{browser/blueprints/index.mjs → neutral/chunk-5T5LPLBN.mjs} +5 -6
  35. package/dist/lib/neutral/chunk-5T5LPLBN.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-BHEZLLXG.mjs +55 -0
  37. package/dist/lib/neutral/chunk-BHEZLLXG.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-HQZWTDJC.mjs +164 -0
  39. package/dist/lib/neutral/chunk-HQZWTDJC.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-IQBZZAMX.mjs +335 -0
  41. package/dist/lib/neutral/chunk-IQBZZAMX.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-JJETHBAZ.mjs +8 -0
  43. package/dist/lib/neutral/chunk-JJETHBAZ.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-JLY4NVTA.mjs +38 -0
  45. package/dist/lib/neutral/chunk-JLY4NVTA.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-QFDT33VT.mjs +69 -0
  47. package/dist/lib/neutral/chunk-QFDT33VT.mjs.map +7 -0
  48. package/dist/lib/neutral/components/index.mjs +541 -0
  49. package/dist/lib/neutral/components/index.mjs.map +7 -0
  50. package/dist/lib/neutral/containers/index.mjs +15 -0
  51. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  52. package/dist/lib/{browser/create-UGT7V733.mjs → neutral/create-VXM6HJMN.mjs} +20 -14
  53. package/dist/lib/neutral/create-VXM6HJMN.mjs.map +7 -0
  54. package/dist/lib/neutral/create-channel-FSJOMRHF.mjs +19 -0
  55. package/dist/lib/neutral/create-channel-FSJOMRHF.mjs.map +7 -0
  56. package/dist/lib/neutral/create-object-D5XEG7MQ.mjs +28 -0
  57. package/dist/lib/neutral/create-object-D5XEG7MQ.mjs.map +7 -0
  58. package/dist/lib/{browser/create-proposals-CMK7S7VS.mjs → neutral/create-proposals-ILYIYJEN.mjs} +5 -6
  59. package/dist/lib/neutral/create-proposals-ILYIYJEN.mjs.map +7 -0
  60. package/dist/lib/{browser/delete-FSFVU6ZA.mjs → neutral/delete-6KZERY6K.mjs} +9 -11
  61. package/dist/lib/neutral/delete-6KZERY6K.mjs.map +7 -0
  62. package/dist/lib/{browser/delete-message-XL5M5J33.mjs → neutral/delete-message-PATSHW36.mjs} +9 -19
  63. package/dist/lib/neutral/delete-message-PATSHW36.mjs.map +7 -0
  64. package/dist/lib/neutral/hooks/index.mjs +10 -0
  65. package/dist/lib/neutral/index.mjs +32 -0
  66. package/dist/lib/neutral/index.mjs.map +7 -0
  67. package/dist/lib/neutral/markdown-5UHAAC5Z.mjs +83 -0
  68. package/dist/lib/neutral/markdown-5UHAAC5Z.mjs.map +7 -0
  69. package/dist/lib/neutral/meta.json +1 -0
  70. package/dist/lib/neutral/meta.mjs +10 -0
  71. package/dist/lib/neutral/meta.mjs.map +7 -0
  72. package/dist/lib/neutral/on-create-space-6NLTBGGD.mjs +23 -0
  73. package/dist/lib/neutral/on-create-space-6NLTBGGD.mjs.map +7 -0
  74. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  75. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  76. package/dist/lib/neutral/operations/index.mjs +8 -0
  77. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  78. package/dist/lib/neutral/plugin.mjs +16 -0
  79. package/dist/lib/neutral/plugin.mjs.map +7 -0
  80. package/dist/lib/neutral/react-surface-TUMXARMI.mjs +76 -0
  81. package/dist/lib/neutral/react-surface-TUMXARMI.mjs.map +7 -0
  82. package/dist/lib/neutral/respond-to-thread-ROQA3B6U.mjs +32 -0
  83. package/dist/lib/neutral/respond-to-thread-ROQA3B6U.mjs.map +7 -0
  84. package/dist/lib/{browser/restore-2ZGMKUSD.mjs → neutral/restore-SP4HADCE.mjs} +6 -7
  85. package/dist/lib/neutral/restore-SP4HADCE.mjs.map +7 -0
  86. package/dist/lib/{browser/restore-message-OYEGWPII.mjs → neutral/restore-message-TVIC66VL.mjs} +8 -17
  87. package/dist/lib/neutral/restore-message-TVIC66VL.mjs.map +7 -0
  88. package/dist/lib/{browser/select-VG2XLULE.mjs → neutral/select-DLHPEKEA.mjs} +7 -9
  89. package/dist/lib/neutral/select-DLHPEKEA.mjs.map +7 -0
  90. package/dist/lib/neutral/set-agent-config-7GEYCG7Y.mjs +20 -0
  91. package/dist/lib/neutral/set-agent-config-7GEYCG7Y.mjs.map +7 -0
  92. package/dist/lib/neutral/settings-HK4EB6TF.mjs +30 -0
  93. package/dist/lib/neutral/settings-HK4EB6TF.mjs.map +7 -0
  94. package/dist/lib/neutral/state-UU7VEAKV.mjs +22 -0
  95. package/dist/lib/neutral/state-UU7VEAKV.mjs.map +7 -0
  96. package/dist/lib/neutral/testing/index.mjs +58 -0
  97. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  98. package/dist/lib/{browser/toggle-resolved-MM6YC5BU.mjs → neutral/toggle-resolved-GMAD3SZ2.mjs} +8 -17
  99. package/dist/lib/neutral/toggle-resolved-GMAD3SZ2.mjs.map +7 -0
  100. package/dist/lib/neutral/translations.mjs +91 -0
  101. package/dist/lib/neutral/translations.mjs.map +7 -0
  102. package/dist/lib/neutral/types/index.mjs +16 -0
  103. package/dist/lib/neutral/types/index.mjs.map +7 -0
  104. package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs +54 -0
  105. package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs.map +7 -0
  106. package/dist/types/src/ThreadPlugin.d.ts +1 -0
  107. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  108. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  109. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  110. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  111. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  112. package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
  113. package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/thread-blueprint.d.ts +2 -2
  115. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/agent-runner.d.ts +22 -0
  117. package/dist/types/src/capabilities/agent-runner.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/blueprint-definition.d.ts +2 -2
  120. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  122. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/index.d.ts +10 -8
  124. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  125. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  126. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  127. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  130. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
  132. package/dist/types/src/components/Chat/Chat.d.ts +51 -0
  133. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  134. package/dist/types/src/components/Chat/index.d.ts +2 -0
  135. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  136. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -1
  137. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +70 -70
  138. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -1
  140. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -1
  141. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -1
  142. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +70 -70
  143. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/index.d.ts +1 -1
  145. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +13 -0
  146. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
  147. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts +162 -0
  148. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
  149. package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
  150. package/dist/types/src/containers/{CallDebugPanel → ChannelArticle}/index.d.ts.map +1 -1
  151. package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts +20 -0
  152. package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts.map +1 -0
  153. package/dist/types/src/containers/ChannelChat/index.d.ts +4 -0
  154. package/dist/types/src/containers/ChannelChat/index.d.ts.map +1 -0
  155. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.d.ts +11 -0
  156. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.d.ts.map +1 -0
  157. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.stories.d.ts +198 -0
  158. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.stories.d.ts.map +1 -0
  159. package/dist/types/src/containers/CommentsCompanion/index.d.ts +2 -0
  160. package/dist/types/src/containers/CommentsCompanion/index.d.ts.map +1 -0
  161. package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts +20 -0
  162. package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts.map +1 -0
  163. package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadContainer/ThreadContainer.stories.d.ts} +71 -71
  164. package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts.map +1 -0
  165. package/dist/types/src/containers/ThreadContainer/index.d.ts +4 -0
  166. package/dist/types/src/containers/ThreadContainer/index.d.ts.map +1 -0
  167. package/dist/types/src/containers/index.d.ts +4 -5
  168. package/dist/types/src/containers/index.d.ts.map +1 -1
  169. package/dist/types/src/extensions/threads.d.ts +3 -3
  170. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  171. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  172. package/dist/types/src/hooks/index.d.ts +0 -4
  173. package/dist/types/src/hooks/index.d.ts.map +1 -1
  174. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  175. package/dist/types/src/index.d.ts +2 -3
  176. package/dist/types/src/index.d.ts.map +1 -1
  177. package/dist/types/src/meta.d.ts +1 -1
  178. package/dist/types/src/meta.d.ts.map +1 -1
  179. package/dist/types/src/operations/add-message.d.ts +3 -3
  180. package/dist/types/src/operations/add-message.d.ts.map +1 -1
  181. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  182. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  183. package/dist/types/src/operations/create-channel.d.ts +3 -3
  184. package/dist/types/src/operations/create-channel.d.ts.map +1 -1
  185. package/dist/types/src/operations/create-proposals.d.ts +3 -3
  186. package/dist/types/src/operations/create-proposals.d.ts.map +1 -1
  187. package/dist/types/src/operations/create.d.ts +3 -3
  188. package/dist/types/src/operations/create.d.ts.map +1 -1
  189. package/dist/types/src/operations/delete-message.d.ts +3 -3
  190. package/dist/types/src/operations/delete-message.d.ts.map +1 -1
  191. package/dist/types/src/operations/delete.d.ts +3 -3
  192. package/dist/types/src/operations/delete.d.ts.map +1 -1
  193. package/dist/types/src/operations/index.d.ts +1 -2
  194. package/dist/types/src/operations/index.d.ts.map +1 -1
  195. package/dist/types/src/operations/on-create-space.d.ts +3 -3
  196. package/dist/types/src/operations/on-create-space.d.ts.map +1 -1
  197. package/dist/types/src/operations/respond-to-thread.d.ts +5 -0
  198. package/dist/types/src/operations/respond-to-thread.d.ts.map +1 -0
  199. package/dist/types/src/operations/restore-message.d.ts +3 -3
  200. package/dist/types/src/operations/restore-message.d.ts.map +1 -1
  201. package/dist/types/src/operations/restore.d.ts +3 -3
  202. package/dist/types/src/operations/restore.d.ts.map +1 -1
  203. package/dist/types/src/operations/select.d.ts +3 -3
  204. package/dist/types/src/operations/select.d.ts.map +1 -1
  205. package/dist/types/src/operations/set-agent-config.d.ts +5 -0
  206. package/dist/types/src/operations/set-agent-config.d.ts.map +1 -0
  207. package/dist/types/src/operations/toggle-resolved.d.ts +3 -3
  208. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -1
  209. package/dist/types/src/plugin.d.ts +4 -0
  210. package/dist/types/src/plugin.d.ts.map +1 -0
  211. package/dist/types/src/should-trigger-agent.d.ts +22 -0
  212. package/dist/types/src/should-trigger-agent.d.ts.map +1 -0
  213. package/dist/types/src/should-trigger-agent.test.d.ts +2 -0
  214. package/dist/types/src/should-trigger-agent.test.d.ts.map +1 -0
  215. package/dist/types/src/testing/data.d.ts.map +1 -1
  216. package/dist/types/src/testing/index.d.ts +1 -1
  217. package/dist/types/src/testing/index.d.ts.map +1 -1
  218. package/dist/types/src/translations.d.ts +70 -70
  219. package/dist/types/src/translations.d.ts.map +1 -1
  220. package/dist/types/src/types/AgentIdentity.d.ts +27 -0
  221. package/dist/types/src/types/AgentIdentity.d.ts.map +1 -0
  222. package/dist/types/src/types/ThreadCapabilities.d.ts +34 -0
  223. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  224. package/dist/types/src/{operations/definitions.d.ts → types/ThreadOperation.d.ts} +1882 -1941
  225. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  226. package/dist/types/src/types/index.d.ts +4 -2
  227. package/dist/types/src/types/index.d.ts.map +1 -1
  228. package/dist/types/src/types/types.d.ts +1 -1
  229. package/dist/types/src/types/types.d.ts.map +1 -1
  230. package/dist/types/src/util.d.ts +6 -3
  231. package/dist/types/src/util.d.ts.map +1 -1
  232. package/dist/types/tsconfig.tsbuildinfo +1 -1
  233. package/package.json +133 -96
  234. package/src/ThreadPlugin.node.ts +39 -0
  235. package/src/ThreadPlugin.test.ts +37 -0
  236. package/src/ThreadPlugin.tsx +35 -65
  237. package/src/ThreadPlugin.workerd.ts +20 -0
  238. package/src/blueprints/thread-blueprint.ts +3 -4
  239. package/src/capabilities/agent-runner.ts +291 -0
  240. package/src/capabilities/app-graph-builder.ts +24 -74
  241. package/src/capabilities/blueprint-definition.ts +2 -0
  242. package/src/capabilities/create-object.ts +30 -0
  243. package/src/capabilities/index.ts +4 -3
  244. package/src/capabilities/markdown.ts +6 -2
  245. package/src/capabilities/operation-handler.ts +1 -1
  246. package/src/capabilities/react-surface.tsx +11 -27
  247. package/src/capabilities/settings.ts +1 -3
  248. package/src/capabilities/undo-mappings.ts +1 -1
  249. package/src/components/Chat/Chat.tsx +259 -0
  250. package/src/components/Chat/index.ts +5 -0
  251. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +8 -7
  252. package/src/components/CommentsPanel/CommentsPanel.tsx +5 -5
  253. package/src/components/CommentsPanel/CommentsThread.tsx +16 -12
  254. package/src/components/MessagePanel/MessagePanel.tsx +8 -9
  255. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +2 -1
  256. package/src/components/ThreadSettings/ThreadSettings.tsx +0 -1
  257. package/src/components/index.ts +1 -1
  258. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +105 -0
  259. package/src/containers/ChannelArticle/ChannelArticle.tsx +42 -0
  260. package/src/containers/ChannelArticle/index.ts +5 -0
  261. package/src/containers/ChannelChat/ChannelChat.tsx +75 -0
  262. package/src/containers/ChannelChat/index.ts +8 -0
  263. package/src/containers/CommentsCompanion/CommentsCompanion.stories.tsx +355 -0
  264. package/src/containers/{ThreadCompanion/ThreadCompanion.tsx → CommentsCompanion/CommentsCompanion.tsx} +33 -34
  265. package/src/containers/CommentsCompanion/index.ts +5 -0
  266. package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadContainer/ThreadContainer.stories.tsx} +10 -11
  267. package/src/containers/ThreadContainer/ThreadContainer.tsx +75 -0
  268. package/src/containers/ThreadContainer/index.ts +8 -0
  269. package/src/containers/index.ts +4 -5
  270. package/src/extensions/command.ts +1 -1
  271. package/src/extensions/threads.ts +13 -13
  272. package/src/hooks/analytics.ts +1 -1
  273. package/src/hooks/index.ts +0 -5
  274. package/src/index.ts +4 -4
  275. package/src/meta.ts +34 -8
  276. package/src/operations/add-message.ts +22 -9
  277. package/src/operations/append-channel-message.ts +37 -0
  278. package/src/operations/create-channel.ts +4 -4
  279. package/src/operations/create-proposals.ts +3 -3
  280. package/src/operations/create.ts +21 -6
  281. package/src/operations/delete-message.ts +6 -6
  282. package/src/operations/delete.ts +5 -5
  283. package/src/operations/index.ts +4 -4
  284. package/src/operations/on-create-space.ts +4 -4
  285. package/src/operations/respond-to-thread.ts +32 -0
  286. package/src/operations/restore-message.ts +5 -5
  287. package/src/operations/restore.ts +4 -4
  288. package/src/operations/select.ts +3 -3
  289. package/src/operations/set-agent-config.ts +24 -0
  290. package/src/operations/toggle-resolved.ts +5 -5
  291. package/src/plugin.ts +11 -0
  292. package/src/should-trigger-agent.test.ts +72 -0
  293. package/src/should-trigger-agent.ts +50 -0
  294. package/src/testing/index.ts +1 -1
  295. package/src/translations.ts +2 -1
  296. package/src/types/AgentIdentity.ts +35 -0
  297. package/src/types/ThreadCapabilities.ts +46 -0
  298. package/src/types/ThreadOperation.ts +225 -0
  299. package/src/types/index.ts +5 -2
  300. package/src/types/types.ts +0 -2
  301. package/src/util.ts +36 -4
  302. package/src/vite-env.d.ts +10 -0
  303. package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
  304. package/dist/lib/browser/blueprints/index.mjs.map +0 -7
  305. package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
  306. package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
  307. package/dist/lib/browser/chunk-VPM44Z35.mjs +0 -259
  308. package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
  309. package/dist/lib/browser/create-UGT7V733.mjs.map +0 -7
  310. package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
  311. package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
  312. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
  313. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
  314. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
  315. package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
  316. package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
  317. package/dist/lib/browser/index.mjs +0 -2334
  318. package/dist/lib/browser/index.mjs.map +0 -7
  319. package/dist/lib/browser/meta.json +0 -1
  320. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
  321. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
  322. package/dist/lib/browser/operations/index.mjs +0 -14
  323. package/dist/lib/browser/operations/index.mjs.map +0 -7
  324. package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
  325. package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
  326. package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
  327. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
  328. package/dist/lib/browser/types/index.mjs +0 -12
  329. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
  330. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
  331. package/dist/lib/node-esm/blueprints/index.mjs +0 -38
  332. package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
  333. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  334. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
  335. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
  337. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
  338. package/dist/lib/node-esm/create-XAYNDVU2.mjs +0 -56
  339. package/dist/lib/node-esm/create-XAYNDVU2.mjs.map +0 -7
  340. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
  341. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
  342. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
  343. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
  344. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
  345. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
  346. package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
  347. package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
  348. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
  349. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
  350. package/dist/lib/node-esm/index.mjs +0 -2335
  351. package/dist/lib/node-esm/index.mjs.map +0 -7
  352. package/dist/lib/node-esm/meta.json +0 -1
  353. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
  354. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
  355. package/dist/lib/node-esm/operations/index.mjs +0 -15
  356. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  357. package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
  358. package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
  359. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
  360. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
  361. package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
  362. package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
  363. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
  364. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
  365. package/dist/lib/node-esm/types/index.mjs +0 -13
  366. package/dist/types/src/calls/call-manager.d.ts +0 -87
  367. package/dist/types/src/calls/call-manager.d.ts.map +0 -1
  368. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
  369. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
  370. package/dist/types/src/calls/index.d.ts +0 -7
  371. package/dist/types/src/calls/index.d.ts.map +0 -1
  372. package/dist/types/src/calls/media-manager.d.ts +0 -60
  373. package/dist/types/src/calls/media-manager.d.ts.map +0 -1
  374. package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
  375. package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
  376. package/dist/types/src/calls/types.d.ts +0 -45
  377. package/dist/types/src/calls/types.d.ts.map +0 -1
  378. package/dist/types/src/calls/util/audio.d.ts +0 -6
  379. package/dist/types/src/calls/util/audio.d.ts.map +0 -1
  380. package/dist/types/src/calls/util/calls-service.d.ts +0 -77
  381. package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
  382. package/dist/types/src/calls/util/history-cache.d.ts +0 -11
  383. package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
  384. package/dist/types/src/calls/util/index.d.ts +0 -5
  385. package/dist/types/src/calls/util/index.d.ts.map +0 -1
  386. package/dist/types/src/calls/util/media.d.ts +0 -6
  387. package/dist/types/src/calls/util/media.d.ts.map +0 -1
  388. package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
  389. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
  390. package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
  391. package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
  392. package/dist/types/src/calls-service.stories.d.ts +0 -23
  393. package/dist/types/src/calls-service.stories.d.ts.map +0 -1
  394. package/dist/types/src/capabilities/call-manager.d.ts +0 -6
  395. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  396. package/dist/types/src/capabilities/react-root.d.ts +0 -9
  397. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  398. package/dist/types/src/components/Call/Call.d.ts +0 -17
  399. package/dist/types/src/components/Call/Call.d.ts.map +0 -1
  400. package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
  401. package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
  402. package/dist/types/src/components/Call/index.d.ts +0 -3
  403. package/dist/types/src/components/Call/index.d.ts.map +0 -1
  404. package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
  405. package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
  406. package/dist/types/src/components/Lobby/index.d.ts +0 -2
  407. package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
  408. package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
  409. package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
  410. package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
  411. package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
  412. package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
  413. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
  414. package/dist/types/src/components/Media/index.d.ts +0 -3
  415. package/dist/types/src/components/Media/index.d.ts.map +0 -1
  416. package/dist/types/src/components/Participant/Participant.d.ts +0 -6
  417. package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
  418. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
  419. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
  420. package/dist/types/src/components/Participant/index.d.ts +0 -3
  421. package/dist/types/src/components/Participant/index.d.ts.map +0 -1
  422. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
  423. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
  424. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
  425. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
  426. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
  427. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
  428. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
  429. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
  430. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
  431. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
  432. package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
  433. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
  434. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
  435. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
  436. package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
  437. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
  438. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
  439. package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
  440. package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
  441. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
  442. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
  443. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +0 -162
  444. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
  445. package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
  446. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
  447. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
  448. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  449. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
  450. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
  451. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  452. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +0 -8
  453. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +0 -1
  454. package/dist/types/src/containers/ThreadCompanion/index.d.ts +0 -2
  455. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +0 -1
  456. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
  457. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
  458. package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
  459. package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
  460. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
  461. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
  462. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
  463. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
  464. package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
  465. package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
  466. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  467. package/dist/types/src/testing/stories.d.ts +0 -3
  468. package/dist/types/src/testing/stories.d.ts.map +0 -1
  469. package/dist/types/src/types/Channel.d.ts +0 -715
  470. package/dist/types/src/types/Channel.d.ts.map +0 -1
  471. package/dist/types/src/types/capabilities.d.ts +0 -24
  472. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  473. package/src/calls/call-manager.ts +0 -270
  474. package/src/calls/call-swarm-synchronizer.ts +0 -350
  475. package/src/calls/index.ts +0 -10
  476. package/src/calls/media-manager.ts +0 -378
  477. package/src/calls/speaking-monitor.ts +0 -85
  478. package/src/calls/types.ts +0 -74
  479. package/src/calls/util/audio.ts +0 -58
  480. package/src/calls/util/calls-service.ts +0 -580
  481. package/src/calls/util/history-cache.ts +0 -27
  482. package/src/calls/util/index.ts +0 -8
  483. package/src/calls/util/media.ts +0 -52
  484. package/src/calls/util/stub-media-streams.ts +0 -127
  485. package/src/calls/util/task-scheduling.ts +0 -92
  486. package/src/calls-service.stories.tsx +0 -230
  487. package/src/capabilities/call-manager.ts +0 -27
  488. package/src/capabilities/react-root.tsx +0 -20
  489. package/src/components/Call/Call.tsx +0 -93
  490. package/src/components/Call/Toolbar.tsx +0 -199
  491. package/src/components/Call/index.ts +0 -6
  492. package/src/components/Lobby/Lobby.tsx +0 -122
  493. package/src/components/Lobby/index.ts +0 -5
  494. package/src/components/Media/AudioStream.tsx +0 -67
  495. package/src/components/Media/VideoObject.stories.tsx +0 -59
  496. package/src/components/Media/VideoObject.tsx +0 -58
  497. package/src/components/Media/index.ts +0 -6
  498. package/src/components/Participant/Participant.tsx +0 -77
  499. package/src/components/Participant/ParticipantGrid.tsx +0 -88
  500. package/src/components/Participant/index.ts +0 -6
  501. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -157
  502. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
  503. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
  504. package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -53
  505. package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
  506. package/src/components/ResponsiveGrid/index.ts +0 -7
  507. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
  508. package/src/containers/CallDebugPanel/index.ts +0 -5
  509. package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
  510. package/src/containers/CallSidebar/index.ts +0 -5
  511. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +0 -61
  512. package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
  513. package/src/containers/ChannelContainer/index.ts +0 -5
  514. package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
  515. package/src/containers/ChatContainer/index.ts +0 -8
  516. package/src/containers/ThreadCompanion/index.ts +0 -5
  517. package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
  518. package/src/hooks/useDebugMode.ts +0 -25
  519. package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
  520. package/src/hooks/useVideoStreamTrack.tsx +0 -36
  521. package/src/operations/create-channel-thread.ts +0 -26
  522. package/src/operations/definitions.ts +0 -177
  523. package/src/testing/stories.ts +0 -51
  524. package/src/types/Channel.ts +0 -37
  525. package/src/types/capabilities.ts +0 -36
  526. package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
  527. package/src/typings.d.ts +0 -8
  528. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChannelChat-LZEDFJVD.mjs.map} +0 -0
  529. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  530. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  531. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  532. /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
@@ -0,0 +1,75 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { Filter, Obj, Query } from '@dxos/echo';
9
+ import { type Space, useMembers, useQuery } from '@dxos/react-client/echo';
10
+ import { useIdentity } from '@dxos/react-client/halo';
11
+ import { composable, composableProps } from '@dxos/react-ui';
12
+ import { type Channel, Message } from '@dxos/types';
13
+
14
+ import { Chat } from '#components';
15
+ import { useStatus } from '#hooks';
16
+ import { ThreadOperation } from '#types';
17
+
18
+ export type ChannelChatProps = {
19
+ space: Space;
20
+ channel: Channel.Channel;
21
+ };
22
+
23
+ /**
24
+ * Channel chat: composer pinned to the bottom of the panel, messages scrolling
25
+ * above it (newest at the bottom). Threading via `Message.threadId` is
26
+ * intentionally not reconstructed in this round.
27
+ *
28
+ * Externally-synced channels (any Channel carrying foreign-key `Obj.Meta`,
29
+ * e.g. Slack/Discord-sourced rooms) render read-only — the composer is
30
+ * suppressed because there's no local-write path back to the source.
31
+ */
32
+ export const ChannelChat = composable<HTMLDivElement, ChannelChatProps>(
33
+ ({ space, channel, ...props }, forwardedRef) => {
34
+ const identity = useIdentity()!;
35
+ const members = useMembers(space.id);
36
+ const id = Obj.getURI(channel);
37
+ const activity = useStatus(space, id);
38
+ const { invokePromise } = useOperationInvoker();
39
+
40
+ const feed = channel.feed?.target;
41
+ const messages = useQuery(
42
+ space.db,
43
+ feed ? Query.select(Filter.type(Message.Message)).from(feed) : Query.select(Filter.nothing()),
44
+ );
45
+
46
+ const readOnly = Obj.getMeta(channel).keys.length > 0;
47
+
48
+ const handleSend = (text: string) => {
49
+ if (readOnly) {
50
+ return false;
51
+ }
52
+ void invokePromise(ThreadOperation.AppendChannelMessage, {
53
+ channel,
54
+ sender: { identityDid: identity.did },
55
+ text,
56
+ });
57
+ return true;
58
+ };
59
+
60
+ return (
61
+ <Chat
62
+ {...composableProps(props)}
63
+ id={id}
64
+ identity={identity}
65
+ members={members}
66
+ messages={messages}
67
+ activity={activity}
68
+ onSend={handleSend}
69
+ orientation='bottom'
70
+ readOnly={readOnly}
71
+ ref={forwardedRef}
72
+ />
73
+ );
74
+ },
75
+ );
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { ChannelChat } from './ChannelChat';
6
+
7
+ export { ChannelChat };
8
+ export default ChannelChat;
@@ -0,0 +1,355 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as AnthropicClient from '@effect/ai-anthropic/AnthropicClient';
6
+ import * as FetchHttpClient from '@effect/platform/FetchHttpClient';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Layer from 'effect/Layer';
10
+ import React, { useEffect, useMemo } from 'react';
11
+
12
+ import { AiModelResolver } from '@dxos/ai';
13
+ import { AnthropicResolver } from '@dxos/ai/resolvers';
14
+ import { ActivationEvents, Capabilities, Capability, Plugin } from '@dxos/app-framework';
15
+ import { withPluginManager } from '@dxos/app-framework/testing';
16
+ import { Surface, useCapability } from '@dxos/app-framework/ui';
17
+ import {
18
+ AppActivationEvents,
19
+ AppCapabilities,
20
+ AppPlugin,
21
+ LayoutOperation,
22
+ createObjectNode,
23
+ getPersonalSpace,
24
+ } from '@dxos/app-toolkit';
25
+ import { AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';
26
+ import { Operation, OperationHandlerSet } from '@dxos/compute';
27
+ import { Filter, Obj, Query, Ref } from '@dxos/echo';
28
+ import { AtomQuery } from '@dxos/echo-atom';
29
+ import { DXN } from '@dxos/keys';
30
+ import { ClientCapabilities } from '@dxos/plugin-client';
31
+ import { ClientPlugin, initializeIdentity } from '@dxos/plugin-client/testing';
32
+ import { Graph, GraphBuilder, Node, NodeMatcher, qualifyId } from '@dxos/plugin-graph';
33
+ import { Markdown, MarkdownCapabilities, MarkdownEvents } from '@dxos/plugin-markdown';
34
+ import { MarkdownPlugin } from '@dxos/plugin-markdown/testing';
35
+ import { SpacePlugin } from '@dxos/plugin-space/testing';
36
+ import { corePlugins } from '@dxos/plugin-testing';
37
+ import { random } from '@dxos/random';
38
+ import { useQuery, useSpaces } from '@dxos/react-client/echo';
39
+ import { useAttentionAttributes } from '@dxos/react-ui-attention';
40
+ import { Loading, withLayout } from '@dxos/react-ui/testing';
41
+ import { Text } from '@dxos/schema';
42
+ import { AnchoredTo, Message, Thread } from '@dxos/types';
43
+ import { isNonNullable } from '@dxos/util';
44
+
45
+ import { translations } from '#translations';
46
+
47
+ import { textOf } from '../../should-trigger-agent';
48
+ import { ThreadPlugin } from '../../ThreadPlugin';
49
+ import { AgentIdentity, ThreadCapabilities } from '../../types';
50
+
51
+ random.seed(1);
52
+
53
+ const STORY_AGENT_NAME = 'Kai';
54
+
55
+ /**
56
+ * Canned echo runner — never makes network calls. On each turn finds the
57
+ * last non-assistant message and appends an assistant message that quotes it.
58
+ * Used by the WithMentionAgent / WithAutoAgent variants.
59
+ */
60
+ const StubAgentRunner: ThreadCapabilities.AgentRunner = {
61
+ run: ({ thread }) =>
62
+ Effect.gen(function* () {
63
+ const identity = yield* Capability.get(AgentIdentity);
64
+ // User-authored messages have no role set; only assistant messages do.
65
+ const lastUser = [...thread.messages].reverse().find((ref) => ref.target?.sender.role !== 'assistant');
66
+ const echoText = textOf(lastUser?.target);
67
+ const reply = Obj.make(Message.Message, {
68
+ created: new Date().toISOString(),
69
+ sender: { role: 'assistant', name: identity.name, identityDid: identity.identityDid },
70
+ blocks: [{ _tag: 'text', text: `(${identity.name}) you said: "${echoText}"` }],
71
+ });
72
+ Obj.update(thread, (thread) => {
73
+ (thread.messages as Ref.Ref<Message.Message>[]).push(Ref.make(reply));
74
+ });
75
+ }),
76
+ };
77
+
78
+ /**
79
+ * Live `AppCapabilities.AiServiceLayer` wired through the DXOS edge so
80
+ * `ThreadPlugin`'s default `AgentRunner` can call Claude. The edge endpoint is
81
+ * open in dev — no API key is needed for the storybook to round-trip a real
82
+ * LLM response. Used by the WithLiveAgent variant.
83
+ *
84
+ * Headless `test-storybook` runs render the story but don't submit a comment,
85
+ * so no network call is made there either.
86
+ */
87
+ const anthropicResolverLayer = AnthropicResolver.make().pipe(
88
+ Layer.provide(
89
+ AnthropicClient.layer({
90
+ apiUrl: 'https://ai-service.dxos.workers.dev/provider/anthropic',
91
+ }),
92
+ ),
93
+ Layer.provide(FetchHttpClient.layer),
94
+ );
95
+
96
+ const aiServiceLayer = AiModelResolver.AiModelResolver.buildAiService.pipe(
97
+ Layer.provide(
98
+ anthropicResolverLayer.pipe(
99
+ Layer.provide(AiModelResolver.AiModelResolver.fromModelMap({ name: 'Fallback' }, Effect.succeed({}))),
100
+ ),
101
+ ),
102
+ );
103
+
104
+ /**
105
+ * Common story-only plugin:
106
+ * 1. Exposes Markdown documents in the personal space as direct children of the
107
+ * graph root, so ThreadPlugin's `comment-toolbar` extension can attach the
108
+ * `comment` action to the doc's node.
109
+ * 2. Stubs out plugin-deck's layout operations (`UpdateCompanion`,
110
+ * `ScrollIntoView`) that ThreadPlugin and the CommentsCompanion invoke —
111
+ * no handler errors otherwise.
112
+ * 3. Contributes a static `AgentIdentity` ("Kai") so any AgentRunner has a name
113
+ * to stamp on assistant messages.
114
+ *
115
+ * Agent runner / LLM hookup is contributed separately by `StoryStubAgentPlugin`
116
+ * (no network) or `StoryLiveAgentPlugin` (real Anthropic via DXOS edge),
117
+ * selected per-story via the `liveAgent` arg.
118
+ */
119
+ const StoryGraphPlugin = Plugin.define(
120
+ Plugin.makeMeta({
121
+ key: DXN.make('org.dxos.plugin.thread.story.storyGraph'),
122
+ name: 'Story Graph',
123
+ }),
124
+ ).pipe(
125
+ AppPlugin.addAppGraphModule({
126
+ activate: Effect.fnUntraced(function* () {
127
+ const capabilities = yield* Capability.Service;
128
+ const extensions = yield* GraphBuilder.createExtension({
129
+ id: 'storyDocs',
130
+ match: NodeMatcher.whenRoot,
131
+ connector: (_, get) =>
132
+ Effect.gen(function* () {
133
+ const client = capabilities.get(ClientCapabilities.Client);
134
+ const space = getPersonalSpace(client);
135
+ if (!space) {
136
+ return [];
137
+ }
138
+ const docs = get(AtomQuery.make(space.db, Filter.type(Markdown.Document)));
139
+ return docs
140
+ .map((object) => createObjectNode({ db: space.db, object, droppable: false }))
141
+ .filter(isNonNullable);
142
+ }),
143
+ });
144
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
145
+ }),
146
+ }),
147
+ AppPlugin.addOperationHandlerModule({
148
+ activate: () =>
149
+ Effect.succeed(
150
+ Capability.contributes(
151
+ Capabilities.OperationHandler,
152
+ OperationHandlerSet.make(
153
+ Operation.withHandler(LayoutOperation.UpdateCompanion, () => Effect.void),
154
+ Operation.withHandler(LayoutOperation.ScrollIntoView, () => Effect.void),
155
+ ),
156
+ ),
157
+ ),
158
+ }),
159
+ Plugin.addModule({
160
+ id: 'story-graph.identity',
161
+ activatesOn: ActivationEvents.Startup,
162
+ activate: () => Effect.succeed(Capability.contributes(AgentIdentity, { name: STORY_AGENT_NAME })),
163
+ }),
164
+ Plugin.make,
165
+ );
166
+
167
+ /**
168
+ * Stub agent runner — used by the WithMentionAgent / WithAutoAgent variants.
169
+ * Loaded BEFORE ThreadPlugin so its `AgentRunner` contribution wins over
170
+ * ThreadPlugin's default LLM-backed runner.
171
+ */
172
+ const StoryStubAgentPlugin = Plugin.define(
173
+ Plugin.makeMeta({
174
+ key: DXN.make('org.dxos.plugin.thread.story.storyStubAgent'),
175
+ name: 'Story Stub Agent',
176
+ }),
177
+ ).pipe(
178
+ Plugin.addModule({
179
+ id: 'story-stub-agent.runner',
180
+ activatesOn: ActivationEvents.Startup,
181
+ activate: () => Effect.succeed(Capability.contributes(ThreadCapabilities.AgentRunner, StubAgentRunner)),
182
+ }),
183
+ Plugin.make,
184
+ );
185
+
186
+ /**
187
+ * Live agent runner hookup — contributes `AppCapabilities.AiServiceLayer` so
188
+ * ThreadPlugin's default `AgentRunner` routes through Anthropic via the DXOS
189
+ * edge. Used by the WithLiveAgent variant.
190
+ */
191
+ const StoryLiveAgentPlugin = Plugin.define(
192
+ Plugin.makeMeta({
193
+ key: DXN.make('org.dxos.plugin.thread.story.storyLiveAgent'),
194
+ name: 'Story Live Agent',
195
+ }),
196
+ ).pipe(
197
+ Plugin.addModule({
198
+ id: 'story-live-agent.ai-service',
199
+ activatesOn: ActivationEvents.Startup,
200
+ activate: () => Effect.succeed(Capability.contributes(AppCapabilities.AiServiceLayer, aiServiceLayer)),
201
+ }),
202
+ Plugin.make,
203
+ );
204
+
205
+ type StoryArgs = {
206
+ /**
207
+ * Sets the Markdown plugin's `commentAgentMode` setting so newly-created
208
+ * comment threads on the seeded doc are stamped with the matching agent
209
+ * config by ThreadOperation.Create.
210
+ */
211
+ agentMode?: Markdown.Settings['commentAgentMode'];
212
+
213
+ /**
214
+ * When true, contributes a live `AiServiceLayer` (Anthropic via DXOS edge)
215
+ * so ThreadPlugin's default `AgentRunner` makes a real LLM call.
216
+ * Defaults to `false` — variants use the stub echo runner.
217
+ */
218
+ liveAgent?: boolean;
219
+ };
220
+
221
+ const DefaultStory = ({ agentMode }: StoryArgs) => {
222
+ const { graph } = useAppGraph();
223
+ const [space] = useSpaces();
224
+ const [doc] = useQuery(space?.db, Query.type(Markdown.Document));
225
+ const attendableId = doc && qualifyId(Node.RootId, doc.id);
226
+ const attentionAttrs = useAttentionAttributes(attendableId);
227
+
228
+ // Story renders surfaces directly (no deck), so expand graph actions for the doc node.
229
+ useEffect(() => {
230
+ if (attendableId) {
231
+ void Graph.expand(graph, attendableId, 'action');
232
+ }
233
+ }, [graph, attendableId]);
234
+
235
+ // Push the variant's `agentMode` into the markdown plugin settings so that
236
+ // ThreadOperation.Create stamps new threads with the matching agent config.
237
+ const markdownSettings = useCapability(MarkdownCapabilities.Settings);
238
+ const registry = useCapability(Capabilities.AtomRegistry);
239
+ useEffect(() => {
240
+ if (!markdownSettings) {
241
+ return;
242
+ }
243
+ registry.set(markdownSettings, { ...registry.get(markdownSettings), commentAgentMode: agentMode ?? 'off' });
244
+ }, [markdownSettings, registry, agentMode]);
245
+
246
+ const articleData = useMemo(() => ({ subject: doc, attendableId: attendableId ?? 'story' }), [doc, attendableId]);
247
+ const companionData = useMemo(
248
+ () => ({ subject: 'comments', companionTo: doc, attendableId: attendableId ?? 'story' }),
249
+ [doc, attendableId],
250
+ );
251
+
252
+ if (!doc) {
253
+ return <Loading data={{ doc: !!doc }} />;
254
+ }
255
+
256
+ return (
257
+ <div className='dx-container grid grid-cols-[3fr_2fr] gap-4' {...attentionAttrs}>
258
+ <Surface.Surface type={AppSurface.Article} data={articleData} limit={1} />
259
+ <Surface.Surface type={AppSurface.Article} data={companionData} limit={1} />
260
+ </div>
261
+ );
262
+ };
263
+
264
+ const meta = {
265
+ title: 'plugins/plugin-thread/containers/CommentsCompanion',
266
+ render: DefaultStory,
267
+ decorators: [
268
+ withLayout({ layout: 'fullscreen' }),
269
+ withPluginManager<StoryArgs>((context) => ({
270
+ setupEvents: [AppActivationEvents.SetupSettings, MarkdownEvents.SetupExtensions],
271
+ plugins: [
272
+ ...corePlugins(),
273
+ ClientPlugin({
274
+ types: [Markdown.Document, Text.Text, Thread.Thread, Message.Message, AnchoredTo.AnchoredTo],
275
+ onClientInitialized: ({ client }) =>
276
+ Effect.gen(function* () {
277
+ const { personalSpace } = yield* initializeIdentity(client);
278
+ personalSpace.db.add(
279
+ Markdown.make({
280
+ name: 'Sample',
281
+ content: [
282
+ '# Sample',
283
+ '',
284
+ 'This document has comment threads attached to it.',
285
+ '',
286
+ 'Select text in the editor to add a new comment, or view existing threads in the companion.',
287
+ '',
288
+ ].join('\n'),
289
+ }),
290
+ );
291
+
292
+ yield* Effect.promise(() => personalSpace.db.flush({ indexes: true }));
293
+ }),
294
+ }),
295
+ SpacePlugin({}),
296
+ MarkdownPlugin(),
297
+ StoryGraphPlugin(),
298
+ // The stub agent plugin must come BEFORE ThreadPlugin so its
299
+ // `AgentRunner` contribution wins over ThreadPlugin's default
300
+ // (LLM-backed) runner — `Capability.get` returns the first match.
301
+ // The live variant simply doesn't contribute a stub, letting the
302
+ // default runner reach Anthropic via the AiServiceLayer.
303
+ ...(context.args.liveAgent ? [] : [StoryStubAgentPlugin()]),
304
+ ThreadPlugin(),
305
+ ...(context.args.liveAgent ? [StoryLiveAgentPlugin()] : []),
306
+ ],
307
+ })),
308
+ ],
309
+ parameters: {
310
+ layout: 'fullscreen',
311
+ controls: { disable: true },
312
+ translations,
313
+ },
314
+ } satisfies Meta<typeof DefaultStory>;
315
+
316
+ export default meta;
317
+
318
+ type Story = StoryObj<typeof meta>;
319
+
320
+ export const Default: Story = {};
321
+
322
+ /**
323
+ * Thread opted in to the AI agent in `mention` mode.
324
+ * Type `@Kai …` in the comment input to trigger the stub runner; plain messages are ignored.
325
+ */
326
+ export const WithMentionAgent: Story = {
327
+ args: {
328
+ agentMode: 'mention',
329
+ },
330
+ };
331
+
332
+ /**
333
+ * Thread opted in to the AI agent in `auto` mode.
334
+ * Each user message triggers the stub runner, which appends a canned echo reply.
335
+ */
336
+ export const WithAutoAgent: Story = {
337
+ args: {
338
+ agentMode: 'auto',
339
+ },
340
+ };
341
+
342
+ /**
343
+ * Thread opted in to the AI agent in `auto` mode with the LIVE runner —
344
+ * ThreadPlugin's default `AgentRunner` calls Anthropic Claude via the DXOS
345
+ * edge proxy. Each user message triggers a real LLM response.
346
+ *
347
+ * Note: headless `test-storybook` only renders the story (no comment is
348
+ * submitted) so this variant does not make a network call in CI.
349
+ */
350
+ export const WithLiveAgent: Story = {
351
+ args: {
352
+ agentMode: 'auto',
353
+ liveAgent: true,
354
+ },
355
+ };
@@ -6,11 +6,11 @@ import { useAtomValue } from '@effect-atom/atom-react';
6
6
  import React, { useCallback, useMemo } from 'react';
7
7
 
8
8
  import { Capabilities } from '@dxos/app-framework';
9
- import { useCapabilities, useCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';
9
+ import { useCapabilities, useCapability, useOperationInvoker } from '@dxos/app-framework/ui';
10
10
  import { AppCapabilities, CollaborationOperation, LayoutOperation } from '@dxos/app-toolkit';
11
11
  import { type AppSurface } from '@dxos/app-toolkit/ui';
12
- import { Filter, Obj, Query, Relation } from '@dxos/echo';
13
- import { Ref, useQuery } from '@dxos/react-client/echo';
12
+ import { Filter, Obj, Query, Ref, Relation } from '@dxos/echo';
13
+ import { useQuery } from '@dxos/react-client/echo';
14
14
  import { useIdentity } from '@dxos/react-client/halo';
15
15
  import { Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
16
16
  import { getParentId, useAttention } from '@dxos/react-ui-attention';
@@ -19,24 +19,23 @@ import { AnchoredTo, Thread } from '@dxos/types';
19
19
 
20
20
  import { CommentsPanel, type CommentsPanelProps } from '#components';
21
21
  import { meta } from '#meta';
22
- import { ThreadOperation } from '#operations';
22
+ import { ThreadOperation } from '#types';
23
23
  import { ThreadCapabilities, type ViewState } from '#types';
24
24
 
25
25
  const initialViewState: ViewState = { showResolvedThreads: false };
26
26
 
27
- export type ThreadCompanionProps = AppSurface.ObjectArticleProps<
28
- Thread.Thread,
29
- {
30
- attendableId?: string;
31
- }
32
- >;
27
+ /**
28
+ * Subject is the host object being commented on (e.g. a Markdown.Document),
29
+ * not a Thread — the threads anchored to that host are discovered via the
30
+ * `AnchoredTo` query inside the component.
31
+ */
32
+ export type CommentsCompanionProps = AppSurface.ObjectArticleProps<Obj.Any>;
33
33
 
34
- export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps) => {
34
+ export const CommentsCompanion = ({ attendableId, subject }: CommentsCompanionProps) => {
35
35
  const { t } = useTranslation(meta.id);
36
- const manager = usePluginManager();
37
36
  const { invokePromise } = useOperationInvoker();
38
37
  const identity = useIdentity();
39
- const subjectId = Obj.getDXN(subject).toString();
38
+ const subjectId = Obj.getURI(subject);
40
39
  const parentId = attendableId ? getParentId(attendableId) : undefined;
41
40
  const registry = useCapability(Capabilities.AtomRegistry);
42
41
 
@@ -52,20 +51,12 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
52
51
  registry.set(viewStoreAtom, { ...viewStore, [subjectId]: { ...initialViewState } });
53
52
  return initialViewState;
54
53
  }
54
+
55
55
  return viewStore[subjectId];
56
56
  }, [viewStore, subjectId, registry, viewStoreAtom]);
57
57
  const { showResolvedThreads } = viewState;
58
58
 
59
- const onChangeViewState = useCallback(
60
- (nextValue: string) => {
61
- registry.set(viewStoreAtom, {
62
- ...registry.get(viewStoreAtom),
63
- [subjectId]: { ...registry.get(viewStoreAtom)[subjectId], showResolvedThreads: nextValue === 'all' },
64
- });
65
- },
66
- [registry, viewStoreAtom, subjectId],
67
- );
68
-
59
+ const commentConfigs = useCapabilities(AppCapabilities.CommentConfig);
69
60
  const anchorSorts = useCapabilities(AppCapabilities.AnchorSort);
70
61
  const sort = useMemo(
71
62
  () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,
@@ -79,13 +70,23 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
79
70
  .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
80
71
  .concat(drafts ?? []);
81
72
 
73
+ const handleChangeViewState = useCallback(
74
+ (nextValue: string) => {
75
+ registry.set(viewStoreAtom, {
76
+ ...registry.get(viewStoreAtom),
77
+ [subjectId]: { ...registry.get(viewStoreAtom)[subjectId], showResolvedThreads: nextValue === 'all' },
78
+ });
79
+ },
80
+ [registry, viewStoreAtom, subjectId],
81
+ );
82
+
82
83
  const { hasAttention, isAncestor, isRelated } = useAttention(parentId);
83
84
  const isAttended = hasAttention || isAncestor || isRelated;
84
85
 
85
86
  const handleAttend = useCallback(
86
87
  (anchor: AnchoredTo.AnchoredTo) => {
87
88
  const thread = Relation.getSource(anchor) as Thread.Thread;
88
- const threadId = Obj.getDXN(thread).toString();
89
+ const threadId = Obj.getURI(thread);
89
90
 
90
91
  if (state.current !== threadId) {
91
92
  registry.set(stateAtom, { ...registry.get(stateAtom), current: threadId });
@@ -93,14 +94,12 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
93
94
  // Scroll plank into view (deck handler).
94
95
  void invokePromise(LayoutOperation.ScrollIntoView, { subject: parentId });
95
96
 
96
- // Scroll within content to anchor (metadata-driven, per typename).
97
+ // Scroll within content to anchor (comment config per typename).
97
98
  if (anchor.anchor && parentId) {
98
99
  const typename = Obj.getTypename(subject);
99
- const metadata = manager.capabilities
100
- .getAll(AppCapabilities.Metadata)
101
- .find(({ id }) => id === typename)?.metadata;
102
- if (metadata?.scrollToAnchor) {
103
- void invokePromise(metadata.scrollToAnchor, {
100
+ const commentConfig = commentConfigs.find(({ id }) => id === typename);
101
+ if (commentConfig?.scrollToAnchor) {
102
+ void invokePromise(commentConfig.scrollToAnchor, {
104
103
  subject: parentId,
105
104
  cursor: anchor.anchor,
106
105
  ref: threadId,
@@ -109,7 +108,7 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
109
108
  }
110
109
  }
111
110
  },
112
- [state.current, invokePromise, registry, stateAtom, parentId, subject, manager],
111
+ [state.current, invokePromise, registry, stateAtom, parentId, subject, commentConfigs],
113
112
  );
114
113
 
115
114
  const handleComment = useCallback(
@@ -122,7 +121,7 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
122
121
  });
123
122
 
124
123
  const thread = Relation.getSource(anchor) as Thread.Thread;
125
- registry.set(stateAtom, { ...registry.get(stateAtom), current: Obj.getDXN(thread).toString() });
124
+ registry.set(stateAtom, { ...registry.get(stateAtom), current: Obj.getURI(thread) });
126
125
  },
127
126
  [invokePromise, identity, subject, registry, stateAtom],
128
127
  );
@@ -153,7 +152,7 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
153
152
  const handleAcceptProposal = useCallback<NonNullable<CommentsPanelProps['onAcceptProposal']>>(
154
153
  async (anchor, messageId) => {
155
154
  const thread = Relation.getSource(anchor) as Thread.Thread;
156
- const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
155
+ const messageIndex = thread.messages.findIndex(Ref.hasEntityId(messageId));
157
156
  const message = thread.messages[messageIndex]?.target;
158
157
  const proposal = message?.blocks.find((block) => block._tag === 'proposal');
159
158
  if (!proposal || !anchor.anchor) {
@@ -188,7 +187,7 @@ export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps)
188
187
  <Tabs.Root
189
188
  orientation='horizontal'
190
189
  value={showResolvedThreads ? 'all' : 'unresolved'}
191
- onValueChange={onChangeViewState}
190
+ onValueChange={handleChangeViewState}
192
191
  >
193
192
  <Panel.Root>
194
193
  <Panel.Toolbar asChild>
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { CommentsCompanion as default } from './CommentsCompanion';
@@ -19,10 +19,9 @@ import { Thread as ThreadComponent } from '@dxos/react-ui-thread';
19
19
  import { withLayout, Loading } from '@dxos/react-ui/testing';
20
20
  import { Message, Thread } from '@dxos/types';
21
21
 
22
- import { Channel } from '#types';
22
+ import { translations } from '#translations';
23
23
 
24
- import { translations } from '../../translations';
25
- import { ChatContainer } from './ChatContainer';
24
+ import { ThreadContainer } from './ThreadContainer';
26
25
 
27
26
  random.seed(1);
28
27
 
@@ -30,26 +29,26 @@ const DefaultStory = () => {
30
29
  const client = useClient();
31
30
  const identity = useIdentity();
32
31
  const [space, setSpace] = useState<Space>();
33
- const [channel, setChannel] = useState<Channel.Channel | null>();
32
+ const [thread, setThread] = useState<Thread.Thread | null>();
34
33
 
35
34
  useAsyncEffect(async () => {
36
35
  if (identity) {
37
36
  const space = await client.spaces.create();
38
- const channel = space.db.add(Channel.make());
37
+ const thread = space.db.add(Thread.make({ status: 'active' }));
39
38
  setSpace(space);
40
- setChannel(channel);
39
+ setThread(thread);
41
40
  }
42
41
  }, [identity]);
43
42
 
44
- if (!identity || !channel || !space || !channel.defaultThread.target) {
45
- return <Loading data={{ identity: !!identity, space: !!space, channel: !!channel }} />;
43
+ if (!identity || !thread || !space) {
44
+ return <Loading data={{ identity: !!identity, space: !!space, thread: !!thread }} />;
46
45
  }
47
46
 
48
- return <ChatContainer space={space} thread={channel.defaultThread.target} />;
47
+ return <ThreadContainer space={space} thread={thread} />;
49
48
  };
50
49
 
51
50
  const meta = {
52
- title: 'plugins/plugin-thread/containers/ChatContainer',
51
+ title: 'plugins/plugin-thread/containers/ThreadContainer',
53
52
  component: ThreadComponent.Root as any,
54
53
  render: DefaultStory,
55
54
  decorators: [
@@ -71,7 +70,7 @@ const meta = {
71
70
  }),
72
71
  withClientProvider({
73
72
  createSpace: true,
74
- types: [Thread.Thread, Channel.Channel, Message.Message],
73
+ types: [Thread.Thread, Message.Message],
75
74
  }),
76
75
  ],
77
76
  parameters: {