@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 2023 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo } from 'react';
6
+
7
+ import { Obj, Ref } from '@dxos/echo';
8
+ import { type Space, useMembers } from '@dxos/react-client/echo';
9
+ import { useIdentity } from '@dxos/react-client/halo';
10
+ import { type ThemedClassName } from '@dxos/react-ui';
11
+ import { composable, composableProps } from '@dxos/react-ui';
12
+ import { type ThreadRootProps } from '@dxos/react-ui-thread';
13
+ import { Message, type Thread } from '@dxos/types';
14
+ import { isNonNullable } from '@dxos/util';
15
+
16
+ import { Chat } from '#components';
17
+ import { useStatus } from '#hooks';
18
+
19
+ export type ThreadContainerProps = ThemedClassName<
20
+ {
21
+ space: Space;
22
+ thread: Thread.Thread;
23
+ context?: Obj.Unknown;
24
+ autoFocusTextbox?: boolean;
25
+ } & Pick<ThreadRootProps, 'current'>
26
+ >;
27
+
28
+ /**
29
+ * Renders an AutoMerge {@link Thread} as a chat: appends new messages by pushing
30
+ * onto `thread.messages`. Used for comment threads and the meeting in-call chat.
31
+ */
32
+ export const ThreadContainer = composable<HTMLDivElement, ThreadContainerProps>(
33
+ ({ space, thread, context, autoFocusTextbox, current, ...props }, forwardedRef) => {
34
+ const id = Obj.getURI(thread);
35
+ const identity = useIdentity()!;
36
+ const members = useMembers(space?.id);
37
+ const activity = useStatus(space, id);
38
+
39
+ const messages = useMemo(
40
+ () => thread.messages.map((message) => message.target).filter(isNonNullable),
41
+ [thread.messages],
42
+ );
43
+
44
+ const handleSend = (text: string) => {
45
+ Obj.update(thread, (thread) => {
46
+ thread.messages.push(
47
+ Ref.make(
48
+ Obj.make(Message.Message, {
49
+ created: new Date().toISOString(),
50
+ sender: { identityDid: identity.did },
51
+ blocks: [{ _tag: 'text', text }],
52
+ properties: context ? { context: Ref.make(context) } : undefined,
53
+ }),
54
+ ),
55
+ );
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
+ autoFocusTextbox={autoFocusTextbox}
70
+ current={current}
71
+ ref={forwardedRef}
72
+ />
73
+ );
74
+ },
75
+ );
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { ThreadContainer } from './ThreadContainer';
6
+
7
+ export { ThreadContainer };
8
+ export default ThreadContainer;
@@ -4,8 +4,7 @@
4
4
 
5
5
  import { type ComponentType, lazy } from 'react';
6
6
 
7
- export const CallDebugPanel: ComponentType<any> = lazy(() => import('./CallDebugPanel'));
8
- export const CallSidebar: ComponentType<any> = lazy(() => import('./CallSidebar'));
9
- export const ChannelContainer: ComponentType<any> = lazy(() => import('./ChannelContainer'));
10
- export const ChatContainer: ComponentType<any> = lazy(() => import('./ChatContainer'));
11
- export const ThreadCompanion: ComponentType<any> = lazy(() => import('./ThreadCompanion'));
7
+ export const ChannelChat: ComponentType<any> = lazy(() => import('./ChannelChat'));
8
+ export const ChannelArticle: ComponentType<any> = lazy(() => import('./ChannelArticle'));
9
+ export const ThreadContainer: ComponentType<any> = lazy(() => import('./ThreadContainer'));
10
+ export const CommentsCompanion: ComponentType<any> = lazy(() => import('./CommentsCompanion'));
@@ -29,7 +29,7 @@ const parser = StreamLanguage.define<{ count: number }>({
29
29
  const styles = HighlightStyle.define([
30
30
  {
31
31
  tag: tags.tagName,
32
- class: mx('dx-tag dx-tag--indigo text-base-surface-text font-medium'),
32
+ class: mx('dx-tag dx-tag--indigo text-base-fg font-medium'),
33
33
  },
34
34
  ]);
35
35
 
@@ -8,12 +8,12 @@ import { type Atom, type Registry } from '@effect-atom/atom-react';
8
8
 
9
9
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
10
10
  import { createDocAccessor, getTextInRange } from '@dxos/echo-db';
11
- import { type OperationInvoker } from '@dxos/operation';
12
- import { type Markdown } from '@dxos/plugin-markdown/types';
11
+ import { OperationInvoker } from '@dxos/operation';
12
+ import { type Markdown } from '@dxos/plugin-markdown';
13
13
  import { AnchoredTo, Thread } from '@dxos/types';
14
14
  import { comments, createExternalCommentSync } from '@dxos/ui-editor';
15
15
 
16
- import { ThreadOperation } from '#operations';
16
+ import { ThreadOperation } from '#types';
17
17
  import { type ThreadState } from '#types';
18
18
 
19
19
  // TODO(burdon): Factor out.
@@ -45,7 +45,7 @@ export const threads = (
45
45
  }
46
46
 
47
47
  const { registry, stateAtom } = store;
48
- const objectId = Obj.getDXN(doc).toString();
48
+ const objectId = Obj.getURI(doc);
49
49
  const query = db.query(Query.select(Filter.id(doc.id)).targetOf(AnchoredTo.AnchoredTo));
50
50
 
51
51
  // Get current anchors by combining query results with store drafts.
@@ -73,7 +73,7 @@ export const threads = (
73
73
  const name = getName(doc, anchor.anchor);
74
74
  const thread = Relation.getSource(anchor) as Thread.Thread;
75
75
  if (name && name !== thread.name) {
76
- Obj.change(thread, (thread) => {
76
+ Obj.update(thread, (thread) => {
77
77
  thread.name = name;
78
78
  });
79
79
  }
@@ -97,7 +97,7 @@ export const threads = (
97
97
  getAnchors()
98
98
  .filter((anchor) => anchor.anchor)
99
99
  .map((anchor) => ({
100
- id: Obj.getDXN(Relation.getSource(anchor)).toString(),
100
+ id: Obj.getURI(Relation.getSource(anchor)),
101
101
  cursor: anchor.anchor,
102
102
  })),
103
103
  ),
@@ -115,7 +115,7 @@ export const threads = (
115
115
  onDelete: ({ id }) => {
116
116
  const drafts = registry.get(stateAtom).drafts[objectId];
117
117
  if (drafts) {
118
- const index = drafts.findIndex((draft) => Relation.getDXN(draft).toString() === id);
118
+ const index = drafts.findIndex((draft) => Relation.getURI(draft) === id);
119
119
  if (index !== -1) {
120
120
  const current = registry.get(stateAtom);
121
121
  registry.set(stateAtom, {
@@ -130,19 +130,19 @@ export const threads = (
130
130
 
131
131
  const thread = query.results.find((object) => Relation.getSource(object).id === id);
132
132
  if (thread) {
133
- Relation.change(thread, (thread) => {
133
+ Relation.update(thread, (thread) => {
134
134
  thread.anchor = undefined;
135
135
  });
136
136
  }
137
137
  },
138
138
  onUpdate: ({ id, cursor }) => {
139
- const draft = registry.get(stateAtom).drafts[objectId]?.find((d) => Relation.getDXN(d).toString() === id);
139
+ const draft = registry.get(stateAtom).drafts[objectId]?.find((d) => Relation.getURI(d) === id);
140
140
  if (draft) {
141
141
  const thread = Relation.getSource(draft) as Thread.Thread;
142
- Obj.change(thread, (thread) => {
142
+ Obj.update(thread, (thread) => {
143
143
  thread.name = getName(doc, cursor);
144
144
  });
145
- Relation.change(draft, (draft) => {
145
+ Relation.update(draft, (draft) => {
146
146
  draft.anchor = cursor;
147
147
  });
148
148
  }
@@ -151,10 +151,10 @@ export const threads = (
151
151
  if (relation) {
152
152
  const thread = Relation.getSource(relation);
153
153
  if (Obj.instanceOf(Thread.Thread, thread)) {
154
- Obj.change(thread, (thread) => {
154
+ Obj.update(thread, (thread) => {
155
155
  thread.name = getName(doc, cursor);
156
156
  });
157
- Relation.change(relation, (relation) => {
157
+ Relation.update(relation, (relation) => {
158
158
  relation.anchor = cursor;
159
159
  });
160
160
  }
@@ -6,7 +6,7 @@ import { useCallback } from 'react';
6
6
 
7
7
  import { useOperationInvoker } from '@dxos/app-framework/ui';
8
8
  import { Obj } from '@dxos/echo';
9
- import { ObservabilityOperation } from '@dxos/plugin-observability/operations';
9
+ import { ObservabilityOperation } from '@dxos/plugin-observability';
10
10
  import { useOnTransition } from '@dxos/react-ui';
11
11
  import { type ContentBlock } from '@dxos/types';
12
12
 
@@ -3,9 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './analytics';
6
-
7
- export * from './useBlackCanvasStreamTrack';
8
- export * from './useDebugMode';
9
- export * from './useInaudibleAudioStreamTrack';
10
6
  export * from './useStatus';
11
- export * from './useVideoStreamTrack';
package/src/index.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { ThreadCapabilities } from './types';
6
- export * from './calls';
5
+ export * from './blueprints';
6
+ // TODO(wittjosiah): Hooks should not be exported from the plugin package at all.
7
+ // Either refactor callers to not need them or factor them out to a shared package.
7
8
  export * from './hooks';
8
9
  export * from './meta';
9
-
10
- export * from './ThreadPlugin';
10
+ export * from './types';
package/src/meta.ts CHANGED
@@ -2,20 +2,46 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type Plugin } from '@dxos/app-framework';
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { DXN } from '@dxos/keys';
6
7
  import { trim } from '@dxos/util';
7
8
 
8
- // TODO(wittjosiah): Needs screenshots.
9
- export const meta: Plugin.Meta = {
10
- id: 'org.dxos.plugin.thread',
11
- name: 'Chat',
9
+ export const meta = Plugin.makeMeta({
10
+ key: DXN.make('org.dxos.plugin.thread'),
11
+ name: 'Threads',
12
+ author: 'DXOS',
12
13
  description: trim`
13
- Multi-modal communication platform supporting text chat, voice, and video conferencing.
14
- Create threaded conversations and add contextual comments directly on any workspace object.
14
+ ThreadPlugin renders comment threads anchored to ECHO objects and provides a
15
+ persistent chat channel attached to every workspace. Threads can be created
16
+ inline on any Markdown document, letting collaborators leave contextual
17
+ comments and hold focused discussions without leaving the document surface.
18
+
19
+ Each thread carries an optional AI agent configuration that controls how the
20
+ built-in assistant participates in the conversation. Threads can be set to
21
+ off, mention-only (the agent responds only when @-mentioned by name), or
22
+ auto mode (the agent replies to every new user message). The agent identity —
23
+ display name, DID, and avatar — is resolved at runtime from a pluggable
24
+ Effect capability so host applications can substitute their own assistant
25
+ persona.
26
+
27
+ When the agent is enabled, it executes one LLM turn per trigger via the
28
+ AgentRunner capability. The runner has access to edit tools that can splice
29
+ a replacement range into the anchored document span or replace the entire
30
+ document content, so the assistant can propose inline edits in addition to
31
+ posting chat replies. A self-loop guard prevents the agent from responding
32
+ to its own messages, and resolved threads are excluded from triggering.
33
+
34
+ The toggle UI appears as a per-thread icon button in the CommentsPanel
35
+ header. Clicking it opens a popover with three radio options (off / mention /
36
+ auto) and a read-only label showing the active agent name. All state changes
37
+ go through the SetAgentConfig operation rather than direct schema writes,
38
+ keeping mutation logic in one place and making the feature testable with
39
+ stub runners in storybook.
15
40
  `,
16
41
  icon: 'ph--video-conference--regular',
17
42
  iconHue: 'rose',
18
43
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',
19
- };
44
+ spec: 'PLUGIN.mdl',
45
+ });
20
46
 
21
47
  export const THREAD_ITEM = `${meta.id}.item`;
@@ -5,23 +5,24 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
8
9
  import { Obj, Ref, Relation } from '@dxos/echo';
9
10
  import { invariant } from '@dxos/invariant';
10
- import { Operation } from '@dxos/operation';
11
- import { ObservabilityOperation } from '@dxos/plugin-observability/operations';
12
- import { SpaceOperation } from '@dxos/plugin-space/operations';
11
+ import { ObservabilityOperation } from '@dxos/plugin-observability';
12
+ import { SpaceOperation } from '@dxos/plugin-space';
13
13
  import { AnchoredTo, Message, Thread } from '@dxos/types';
14
14
 
15
- import { ThreadCapabilities } from '../types';
16
- import { AddMessage } from './definitions';
15
+ import { shouldTriggerAgent } from '../should-trigger-agent';
16
+ import { AgentIdentity, ThreadCapabilities } from '../types';
17
+ import { ThreadOperation } from '../types';
17
18
 
18
- const handler: Operation.WithHandler<typeof AddMessage> = AddMessage.pipe(
19
+ const handler: Operation.WithHandler<typeof ThreadOperation.AddMessage> = ThreadOperation.AddMessage.pipe(
19
20
  Operation.withHandler(
20
21
  Effect.fnUntraced(function* ({ anchor, subject, sender, text }) {
21
22
  const registry = yield* Capability.get(Capabilities.AtomRegistry);
22
23
  const stateAtom = yield* Capability.get(ThreadCapabilities.State);
23
24
  const thread = Relation.getSource(anchor) as Thread.Thread;
24
- const subjectId = Obj.getDXN(subject).toString();
25
+ const subjectId = Obj.getURI(subject);
25
26
  const db = Obj.getDatabase(subject);
26
27
  invariant(db, 'Database not found');
27
28
 
@@ -30,14 +31,14 @@ const handler: Operation.WithHandler<typeof AddMessage> = AddMessage.pipe(
30
31
  sender,
31
32
  blocks: [{ _tag: 'text', text }],
32
33
  });
33
- Obj.change(thread, (thread) => {
34
+ Obj.update(thread, (thread) => {
34
35
  thread.messages.push(Ref.make(message));
35
36
  });
36
37
 
37
38
  const state = registry.get(stateAtom);
38
39
  const draft = state.drafts[subjectId]?.find((a: { id: string }) => a.id === anchor.id);
39
40
  if (draft) {
40
- Obj.change(thread, (thread) => {
41
+ Obj.update(thread, (thread) => {
41
42
  thread.status = 'active';
42
43
  });
43
44
  registry.set(stateAtom, {
@@ -74,6 +75,18 @@ const handler: Operation.WithHandler<typeof AddMessage> = AddMessage.pipe(
74
75
  messageLength: text.length,
75
76
  },
76
77
  });
78
+
79
+ // Gate the comment-thread agent. Identity is optional — if no capability
80
+ // is contributed we simply never trigger. Schedule (not invoke) so the
81
+ // user's message commit returns immediately and the agent runs out-of-band.
82
+ const identities = yield* Capability.getAll(AgentIdentity);
83
+ const identity = identities[0];
84
+ if (identity && shouldTriggerAgent(thread, message, identity.name)) {
85
+ yield* Operation.schedule(ThreadOperation.RespondToThread, {
86
+ thread: Ref.make(thread),
87
+ subject: Ref.make(subject),
88
+ });
89
+ }
77
90
  }),
78
91
  ),
79
92
  );
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
9
+ import { Database, Feed, Obj } from '@dxos/echo';
10
+ import { createFeedServiceLayer } from '@dxos/echo-db';
11
+ import { invariant } from '@dxos/invariant';
12
+ import { ClientCapabilities } from '@dxos/plugin-client';
13
+ import { Message } from '@dxos/types';
14
+
15
+ import { ThreadOperation } from '../types';
16
+
17
+ const handler: Operation.WithHandler<typeof ThreadOperation.AppendChannelMessage> =
18
+ ThreadOperation.AppendChannelMessage.pipe(
19
+ Operation.withHandler(
20
+ Effect.fnUntraced(function* ({ channel, sender, text }) {
21
+ const db = Obj.getDatabase(channel);
22
+ invariant(db, 'Database not found');
23
+ const client = yield* Capability.get(ClientCapabilities.Client);
24
+ const space = client.spaces.get(db.spaceId);
25
+ invariant(space, 'Space not found');
26
+
27
+ const feed = yield* Database.load(channel.feed);
28
+ const message = Message.make({
29
+ sender,
30
+ blocks: [{ _tag: 'text', text }],
31
+ });
32
+ yield* Feed.append(feed, [message]).pipe(Effect.provide(createFeedServiceLayer(space.queues)));
33
+ }),
34
+ ),
35
+ );
36
+
37
+ export default handler;
@@ -4,12 +4,12 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Operation } from '@dxos/operation';
7
+ import { Operation } from '@dxos/compute';
8
+ import { Channel } from '@dxos/types';
8
9
 
9
- import { Channel } from '../types';
10
- import { CreateChannel } from './definitions';
10
+ import { ThreadOperation } from '../types';
11
11
 
12
- const handler: Operation.WithHandler<typeof CreateChannel> = CreateChannel.pipe(
12
+ const handler: Operation.WithHandler<typeof ThreadOperation.CreateChannel> = ThreadOperation.CreateChannel.pipe(
13
13
  Operation.withHandler((input) =>
14
14
  Effect.sync(() => ({
15
15
  object: Channel.make({ name: input.name }),
@@ -7,14 +7,14 @@ import * as Effect from 'effect/Effect';
7
7
  import * as Function from 'effect/Function';
8
8
 
9
9
  import { computeDiffsWithCursors } from '@dxos/assistant';
10
+ import { Operation } from '@dxos/compute';
10
11
  import { Database, Obj, Ref, Relation } from '@dxos/echo';
11
12
  import { createDocAccessor } from '@dxos/echo-db';
12
- import { Operation } from '@dxos/operation';
13
13
  import { AnchoredTo, Message, Thread } from '@dxos/types';
14
14
 
15
- import { CreateProposals } from './definitions';
15
+ import { ThreadOperation } from '../types';
16
16
 
17
- const handler: Operation.WithHandler<typeof CreateProposals> = CreateProposals.pipe(
17
+ const handler: Operation.WithHandler<typeof ThreadOperation.CreateProposals> = ThreadOperation.CreateProposals.pipe(
18
18
  Operation.withHandler(
19
19
  Effect.fn(function* ({ doc, diffs }) {
20
20
  const object = yield* Database.load(doc);
@@ -6,21 +6,36 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
8
  import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { Operation } from '@dxos/compute';
9
10
  import { Obj, Relation } from '@dxos/echo';
10
- import { Operation } from '@dxos/operation';
11
+ import { Markdown, MarkdownCapabilities } from '@dxos/plugin-markdown';
11
12
  import { linkedSegment } from '@dxos/react-ui-attention';
12
13
  import { AnchoredTo, Thread } from '@dxos/types';
13
14
 
14
15
  import { ThreadCapabilities } from '../types';
15
- import { Create, Select } from './definitions';
16
+ import { ThreadOperation } from '../types';
16
17
 
17
- const handler: Operation.WithHandler<typeof Create> = Create.pipe(
18
+ const handler: Operation.WithHandler<typeof ThreadOperation.Create> = ThreadOperation.Create.pipe(
18
19
  Operation.withHandler(
19
20
  Effect.fnUntraced(function* ({ name, anchor: _anchor, subject }) {
20
21
  const registry = yield* Capability.get(Capabilities.AtomRegistry);
21
22
  const stateAtom = yield* Capability.get(ThreadCapabilities.State);
22
- const subjectId = Obj.getDXN(subject).toString();
23
- const thread = Thread.make({ name });
23
+ const subjectId = Obj.getURI(subject);
24
+
25
+ // Inherit the markdown plugin's `commentAgentMode` setting when the
26
+ // subject is a Markdown.Document, so new comment threads on docs are
27
+ // opted-in (or not) based on the user's preference. Non-markdown
28
+ // subjects always get an un-opted thread (no agent).
29
+ const markdownSettingsAtoms = yield* Capability.getAll(MarkdownCapabilities.Settings);
30
+ const markdownSettingsAtom = markdownSettingsAtoms[0];
31
+ const commentAgentMode =
32
+ markdownSettingsAtom && Obj.instanceOf(Markdown.Document, subject)
33
+ ? registry.get(markdownSettingsAtom).commentAgentMode
34
+ : undefined;
35
+ const agent =
36
+ commentAgentMode && commentAgentMode !== 'off' ? { enabled: true, mode: commentAgentMode } : undefined;
37
+
38
+ const thread = Thread.make({ name, agent });
24
39
  const anchor = Relation.make(AnchoredTo.AnchoredTo, {
25
40
  [Relation.Source]: thread,
26
41
  [Relation.Target]: subject,
@@ -37,7 +52,7 @@ const handler: Operation.WithHandler<typeof Create> = Create.pipe(
37
52
  },
38
53
  });
39
54
 
40
- yield* Operation.invoke(Select, { current: Obj.getDXN(thread).toString() });
55
+ yield* Operation.invoke(ThreadOperation.Select, { current: Obj.getURI(thread) });
41
56
  yield* Operation.invoke(LayoutOperation.UpdateCompanion, {
42
57
  subject: linkedSegment('comments'),
43
58
  });
@@ -4,15 +4,15 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
+ import { Operation } from '@dxos/compute';
7
8
  import { Obj, Relation } from '@dxos/echo';
8
9
  import { invariant } from '@dxos/invariant';
9
- import { Operation } from '@dxos/operation';
10
- import { ObservabilityOperation } from '@dxos/plugin-observability/operations';
10
+ import { ObservabilityOperation } from '@dxos/plugin-observability';
11
11
  import { Thread } from '@dxos/types';
12
12
 
13
- import { Delete, DeleteMessage } from './definitions';
13
+ import { ThreadOperation } from '../types';
14
14
 
15
- const handler: Operation.WithHandler<typeof DeleteMessage> = DeleteMessage.pipe(
15
+ const handler: Operation.WithHandler<typeof ThreadOperation.DeleteMessage> = ThreadOperation.DeleteMessage.pipe(
16
16
  Operation.withHandler(
17
17
  Effect.fnUntraced(function* ({ subject, anchor, messageId }) {
18
18
  const thread = Relation.getSource(anchor) as Thread.Thread;
@@ -27,11 +27,11 @@ const handler: Operation.WithHandler<typeof DeleteMessage> = DeleteMessage.pipe(
27
27
 
28
28
  if (msgIndex === 0 && thread.messages.length === 1) {
29
29
  // TODO(wittjosiah): This doesn't support restoring the thread.
30
- yield* Operation.invoke(Delete, { subject, anchor });
30
+ yield* Operation.invoke(ThreadOperation.Delete, { subject, anchor });
31
31
  return { messageIndex: -1 };
32
32
  }
33
33
 
34
- Obj.change(thread, (thread) => {
34
+ Obj.update(thread, (thread) => {
35
35
  thread.messages.splice(msgIndex, 1);
36
36
  });
37
37
 
@@ -6,21 +6,21 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
8
  import { sleep } from '@dxos/async';
9
+ import { Operation } from '@dxos/compute';
9
10
  import { Obj, Relation } from '@dxos/echo';
10
- import { Operation } from '@dxos/operation';
11
- import { ObservabilityOperation } from '@dxos/plugin-observability/operations';
11
+ import { ObservabilityOperation } from '@dxos/plugin-observability';
12
12
  import { Thread } from '@dxos/types';
13
13
 
14
14
  import { ThreadCapabilities } from '../types';
15
- import { Delete } from './definitions';
15
+ import { ThreadOperation } from '../types';
16
16
 
17
- const handler: Operation.WithHandler<typeof Delete> = Delete.pipe(
17
+ const handler: Operation.WithHandler<typeof ThreadOperation.Delete> = ThreadOperation.Delete.pipe(
18
18
  Operation.withHandler(
19
19
  Effect.fnUntraced(function* ({ subject, anchor, thread: _thread }) {
20
20
  const registry = yield* Capability.get(Capabilities.AtomRegistry);
21
21
  const stateAtom = yield* Capability.get(ThreadCapabilities.State);
22
22
  const thread = _thread ?? (Relation.getSource(anchor) as Thread.Thread);
23
- const subjectId = Obj.getDXN(subject).toString();
23
+ const subjectId = Obj.getURI(subject);
24
24
  const state = registry.get(stateAtom);
25
25
  const draft = state.drafts[subjectId];
26
26
  if (draft) {
@@ -2,21 +2,21 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { OperationHandlerSet } from '@dxos/operation';
6
-
7
- export * as ThreadOperation from './definitions';
5
+ import { OperationHandlerSet } from '@dxos/compute';
8
6
 
9
7
  export const ThreadOperationHandlerSet = OperationHandlerSet.lazy(
10
8
  () => import('./add-message'),
9
+ () => import('./append-channel-message'),
11
10
  () => import('./create'),
12
11
  () => import('./create-channel'),
13
- () => import('./create-channel-thread'),
14
12
  () => import('./create-proposals'),
15
13
  () => import('./delete'),
16
14
  () => import('./delete-message'),
17
15
  () => import('./on-create-space'),
16
+ () => import('./respond-to-thread'),
18
17
  () => import('./restore'),
19
18
  () => import('./restore-message'),
20
19
  () => import('./select'),
20
+ () => import('./set-agent-config'),
21
21
  () => import('./toggle-resolved'),
22
22
  );
@@ -4,18 +4,18 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Operation } from '@dxos/operation';
7
+ import { Operation } from '@dxos/compute';
8
8
 
9
- import { CreateChannel, OnCreateSpace } from './definitions';
9
+ import { ThreadOperation } from '../types';
10
10
 
11
- const handler: Operation.WithHandler<typeof OnCreateSpace> = OnCreateSpace.pipe(
11
+ const handler: Operation.WithHandler<typeof ThreadOperation.OnCreateSpace> = ThreadOperation.OnCreateSpace.pipe(
12
12
  Operation.withHandler(
13
13
  Effect.fnUntraced(function* ({ space, isDefault }) {
14
14
  if (isDefault) {
15
15
  return;
16
16
  }
17
17
 
18
- const { object: channel } = yield* Operation.invoke(CreateChannel, {
18
+ const { object: channel } = yield* Operation.invoke(ThreadOperation.CreateChannel, {
19
19
  name: 'General',
20
20
  spaceId: space.id,
21
21
  });
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
9
+ import { Database } from '@dxos/echo';
10
+ import { log } from '@dxos/log';
11
+
12
+ import { ThreadCapabilities, ThreadOperation } from '../types';
13
+
14
+ const handler: Operation.WithHandler<typeof ThreadOperation.RespondToThread> = ThreadOperation.RespondToThread.pipe(
15
+ Operation.withHandler(
16
+ Effect.fnUntraced(function* ({ thread: threadRef, subject: subjectRef }) {
17
+ const runner = yield* Capability.get(ThreadCapabilities.AgentRunner);
18
+ const thread = yield* Database.load(threadRef);
19
+ const subject = yield* Database.load(subjectRef);
20
+
21
+ yield* runner.run({ thread, subject }).pipe(
22
+ Effect.catchAll((error) =>
23
+ Effect.sync(() => {
24
+ log.warn('comment-thread agent failed', { threadId: thread.id, error });
25
+ }),
26
+ ),
27
+ );
28
+ }),
29
+ ),
30
+ );
31
+
32
+ export default handler;