@dxos/plugin-thread 0.8.4-main.1f223c7 → 0.8.4-main.2c6827d

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 (279) hide show
  1. package/dist/lib/browser/ChannelContainer-JI3ZRZ5S.mjs +17 -0
  2. package/dist/lib/browser/ChatContainer-6FVFME3R.mjs +16 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-URVQHGMR.mjs} +32 -32
  4. package/dist/lib/browser/app-graph-builder-URVQHGMR.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +101 -0
  6. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-RMPTWSTF.mjs → call-manager-4YFT4XA6.mjs} +8 -7
  8. package/dist/lib/{node-esm/call-manager-QAREJFVX.mjs.map → browser/call-manager-4YFT4XA6.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-PBMNFG3B.mjs → chunk-6LWKNZUV.mjs} +18 -17
  10. package/dist/lib/browser/chunk-6LWKNZUV.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-CBUNHCOE.mjs +23 -0
  12. package/dist/lib/browser/chunk-CBUNHCOE.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-CFC7LEPD.mjs +18 -0
  14. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  16. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-7W7QK5ZP.mjs → chunk-F36NHPJG.mjs} +37 -34
  18. package/dist/lib/browser/chunk-F36NHPJG.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-XYUJXHYV.mjs → chunk-ISCHODBV.mjs} +1 -1
  20. package/dist/lib/browser/{chunk-XYUJXHYV.mjs.map → chunk-ISCHODBV.mjs.map} +2 -2
  21. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  22. package/dist/lib/browser/{chunk-RI3Z6MK3.mjs → chunk-KOBXMDCI.mjs} +68 -67
  23. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
  25. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
  26. package/dist/lib/browser/{chunk-KTWYVC5X.mjs → chunk-R5UOPOO7.mjs} +44 -49
  27. package/dist/lib/browser/chunk-R5UOPOO7.mjs.map +7 -0
  28. package/dist/lib/browser/{chunk-ZH2WPTNP.mjs → chunk-VIRD2QSK.mjs} +65 -72
  29. package/dist/lib/browser/chunk-VIRD2QSK.mjs.map +7 -0
  30. package/dist/lib/browser/{chunk-ZCEU5K23.mjs → chunk-ZCW3NSDZ.mjs} +139 -236
  31. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  32. package/dist/lib/browser/index.mjs +41 -42
  33. package/dist/lib/browser/index.mjs.map +3 -3
  34. package/dist/lib/browser/{intent-resolver-J7OCP2P6.mjs → intent-resolver-YR6W4CRP.mjs} +32 -108
  35. package/dist/lib/browser/intent-resolver-YR6W4CRP.mjs.map +7 -0
  36. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-GSOBOXA7.mjs} +26 -24
  37. package/dist/lib/browser/markdown-GSOBOXA7.mjs.map +7 -0
  38. package/dist/lib/browser/meta.json +1 -1
  39. package/dist/lib/browser/react-root-RAWRPF7Z.mjs +29 -0
  40. package/dist/lib/browser/react-root-RAWRPF7Z.mjs.map +7 -0
  41. package/dist/lib/browser/{react-surface-GVGZRBDK.mjs → react-surface-GOEFSXQ6.mjs} +38 -36
  42. package/dist/lib/browser/react-surface-GOEFSXQ6.mjs.map +7 -0
  43. package/dist/lib/browser/{settings-GRKEID73.mjs → settings-JN2HHORY.mjs} +6 -5
  44. package/dist/lib/{node-esm/settings-F2ODVNNW.mjs.map → browser/settings-JN2HHORY.mjs.map} +1 -1
  45. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-UYPLBGZJ.mjs} +6 -5
  46. package/dist/lib/{node-esm/state-62TQKQVB.mjs.map → browser/state-UYPLBGZJ.mjs.map} +1 -1
  47. package/dist/lib/browser/types/index.mjs +7 -10
  48. package/dist/lib/node-esm/ChannelContainer-RQY4PR4F.mjs +18 -0
  49. package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs +17 -0
  50. package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-2IH5RPR7.mjs} +32 -32
  52. package/dist/lib/node-esm/app-graph-builder-2IH5RPR7.mjs.map +7 -0
  53. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +102 -0
  54. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +7 -0
  55. package/dist/lib/node-esm/{call-manager-QAREJFVX.mjs → call-manager-UMUXEYH5.mjs} +8 -7
  56. package/dist/lib/{browser/call-manager-RMPTWSTF.mjs.map → node-esm/call-manager-UMUXEYH5.mjs.map} +1 -1
  57. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +22 -0
  58. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-TIPIOH2J.mjs → chunk-7KZWZS2U.mjs} +139 -236
  60. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  62. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  64. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-I3O6NXMN.mjs +25 -0
  66. package/dist/lib/node-esm/chunk-I3O6NXMN.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-P6E247RF.mjs → chunk-MEIWWPR2.mjs} +44 -49
  68. package/dist/lib/node-esm/chunk-MEIWWPR2.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-JNPKMT7O.mjs → chunk-PZH2EDU5.mjs} +68 -67
  70. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-LE2LIYGX.mjs → chunk-QFCIKJOD.mjs} +65 -72
  72. package/dist/lib/node-esm/chunk-QFCIKJOD.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
  74. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
  75. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs → chunk-VBI32FGI.mjs} +1 -1
  76. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs.map → chunk-VBI32FGI.mjs.map} +2 -2
  77. package/dist/lib/node-esm/{chunk-SNKFZQST.mjs → chunk-Y3F2SGNH.mjs} +37 -34
  78. package/dist/lib/node-esm/chunk-Y3F2SGNH.mjs.map +7 -0
  79. package/dist/lib/node-esm/{chunk-DKCQCENK.mjs → chunk-Z4GUSLWL.mjs} +18 -17
  80. package/dist/lib/node-esm/chunk-Z4GUSLWL.mjs.map +7 -0
  81. package/dist/lib/node-esm/index.mjs +41 -42
  82. package/dist/lib/node-esm/index.mjs.map +3 -3
  83. package/dist/lib/node-esm/{intent-resolver-SR2LW4HF.mjs → intent-resolver-SJFABEE7.mjs} +32 -108
  84. package/dist/lib/node-esm/intent-resolver-SJFABEE7.mjs.map +7 -0
  85. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-GG5566TL.mjs} +26 -24
  86. package/dist/lib/node-esm/markdown-GG5566TL.mjs.map +7 -0
  87. package/dist/lib/node-esm/meta.json +1 -1
  88. package/dist/lib/node-esm/react-root-K5OGECUS.mjs +30 -0
  89. package/dist/lib/node-esm/react-root-K5OGECUS.mjs.map +7 -0
  90. package/dist/lib/node-esm/{react-surface-WLQUVRAX.mjs → react-surface-5QDQD7MN.mjs} +38 -36
  91. package/dist/lib/node-esm/react-surface-5QDQD7MN.mjs.map +7 -0
  92. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-VSPM3BIM.mjs} +6 -5
  93. package/dist/lib/{browser/settings-GRKEID73.mjs.map → node-esm/settings-VSPM3BIM.mjs.map} +1 -1
  94. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-XNWOLBNE.mjs} +6 -5
  95. package/dist/lib/{browser/state-2T4KDWBX.mjs.map → node-esm/state-XNWOLBNE.mjs.map} +1 -1
  96. package/dist/lib/node-esm/types/index.mjs +7 -10
  97. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  98. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  99. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  100. package/dist/types/src/calls-service.stories.d.ts +0 -1
  101. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  104. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  106. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/index.d.ts +1 -1
  108. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  113. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  114. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  115. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  116. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  117. package/dist/types/src/components/ChannelContainer.stories.d.ts +73 -8
  118. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Chat.stories.d.ts +73 -6
  120. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  122. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  123. package/dist/types/src/components/Comments.stories.d.ts +1 -2
  124. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  126. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  127. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  128. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  130. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  131. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  132. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/MessageContainer.d.ts +2 -2
  134. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +2 -2
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +2 -2
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  140. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  141. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  142. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  143. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  144. package/dist/types/src/components/index.d.ts +3 -3
  145. package/dist/types/src/components/index.d.ts.map +1 -1
  146. package/dist/types/src/components/testing.d.ts +3 -3
  147. package/dist/types/src/components/testing.d.ts.map +1 -1
  148. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  149. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  150. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  151. package/dist/types/src/functions/index.d.ts +2 -0
  152. package/dist/types/src/functions/index.d.ts.map +1 -0
  153. package/dist/types/src/hooks/analytics.d.ts +2 -2
  154. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  155. package/dist/types/src/hooks/index.d.ts +2 -2
  156. package/dist/types/src/hooks/index.d.ts.map +1 -1
  157. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  158. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  159. package/dist/types/src/meta.d.ts +1 -2
  160. package/dist/types/src/meta.d.ts.map +1 -1
  161. package/dist/types/src/testing/stories.d.ts.map +1 -1
  162. package/dist/types/src/translations.d.ts +72 -6
  163. package/dist/types/src/translations.d.ts.map +1 -1
  164. package/dist/types/src/types/Channel.d.ts +16 -0
  165. package/dist/types/src/types/Channel.d.ts.map +1 -0
  166. package/dist/types/src/types/index.d.ts +1 -1
  167. package/dist/types/src/types/index.d.ts.map +1 -1
  168. package/dist/types/src/types/types.d.ts +30 -117
  169. package/dist/types/src/types/types.d.ts.map +1 -1
  170. package/dist/types/tsconfig.tsbuildinfo +1 -1
  171. package/package.json +62 -58
  172. package/src/ThreadPlugin.tsx +139 -132
  173. package/src/calls/media-manager.ts +9 -6
  174. package/src/calls/util/stub-media-streams.ts +2 -2
  175. package/src/calls-service.stories.tsx +2 -5
  176. package/src/capabilities/app-graph-builder.ts +41 -30
  177. package/src/capabilities/blueprint-definition.ts +38 -0
  178. package/src/capabilities/capabilities.ts +7 -7
  179. package/src/capabilities/index.ts +1 -1
  180. package/src/capabilities/intent-resolver.ts +22 -62
  181. package/src/capabilities/markdown.ts +5 -3
  182. package/src/capabilities/react-root.tsx +2 -2
  183. package/src/capabilities/react-surface.tsx +25 -23
  184. package/src/components/Call/Call.tsx +1 -1
  185. package/src/components/Call/Toolbar.tsx +5 -5
  186. package/src/components/CallDebugPanel.tsx +12 -14
  187. package/src/components/CallSidebar.tsx +1 -1
  188. package/src/components/ChannelContainer.stories.tsx +10 -10
  189. package/src/components/ChannelContainer.tsx +19 -15
  190. package/src/components/Chat.stories.tsx +14 -19
  191. package/src/components/ChatContainer.tsx +29 -21
  192. package/src/components/Comments.stories.tsx +11 -17
  193. package/src/components/CommentsContainer.tsx +5 -7
  194. package/src/components/CommentsThreadContainer.tsx +31 -27
  195. package/src/components/Lobby/Lobby.tsx +1 -1
  196. package/src/components/Media/VideoObject.stories.tsx +12 -7
  197. package/src/components/Media/VideoObject.tsx +1 -1
  198. package/src/components/MessageContainer.tsx +6 -6
  199. package/src/components/Participant/Participant.tsx +1 -1
  200. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  201. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  202. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
  203. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  204. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
  205. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
  206. package/src/components/ThreadSettings.tsx +4 -5
  207. package/src/components/index.ts +4 -4
  208. package/src/components/testing.ts +7 -9
  209. package/src/extensions/threads.ts +26 -17
  210. package/src/functions/create-proposals.ts +56 -0
  211. package/src/functions/index.ts +5 -0
  212. package/src/hooks/analytics.ts +4 -7
  213. package/src/hooks/index.ts +3 -2
  214. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  215. package/src/meta.ts +9 -5
  216. package/src/testing/stories.ts +3 -6
  217. package/src/translations.ts +4 -3
  218. package/src/types/Channel.ts +26 -0
  219. package/src/types/index.ts +1 -1
  220. package/src/types/types.ts +18 -27
  221. package/src/util.ts +1 -1
  222. package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +0 -16
  223. package/dist/lib/browser/ChatContainer-EXNNREYB.mjs +0 -15
  224. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  226. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  229. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-G4CNILRR.mjs +0 -23
  231. package/dist/lib/browser/chunk-G4CNILRR.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-RI3Z6MK3.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +0 -7
  238. package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +0 -7
  239. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  240. package/dist/lib/browser/react-root-XKOD4KRB.mjs +0 -28
  241. package/dist/lib/browser/react-root-XKOD4KRB.mjs.map +0 -7
  242. package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +0 -7
  243. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  244. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  245. package/dist/lib/node-esm/ChannelContainer-KQQEZWUN.mjs +0 -17
  246. package/dist/lib/node-esm/ChatContainer-QVQKFBWA.mjs +0 -16
  247. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  248. package/dist/lib/node-esm/chunk-4T45PCKP.mjs +0 -25
  249. package/dist/lib/node-esm/chunk-4T45PCKP.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  251. package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  253. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  258. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +0 -7
  261. package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +0 -7
  262. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  263. package/dist/lib/node-esm/react-root-4JWDRIQB.mjs +0 -29
  264. package/dist/lib/node-esm/react-root-4JWDRIQB.mjs.map +0 -7
  265. package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +0 -7
  266. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  267. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  268. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  269. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  270. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  271. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  272. package/dist/types/src/types/schema.d.ts +0 -177
  273. package/dist/types/src/types/schema.d.ts.map +0 -1
  274. package/src/capabilities/toolkit.ts +0 -78
  275. package/src/types/schema.ts +0 -33
  276. /package/dist/lib/browser/{ChannelContainer-4PYFOIDK.mjs.map → ChannelContainer-JI3ZRZ5S.mjs.map} +0 -0
  277. /package/dist/lib/browser/{ChatContainer-EXNNREYB.mjs.map → ChatContainer-6FVFME3R.mjs.map} +0 -0
  278. /package/dist/lib/{node-esm/ChannelContainer-KQQEZWUN.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  279. /package/dist/lib/node-esm/{ChatContainer-QVQKFBWA.mjs.map → ChannelContainer-RQY4PR4F.mjs.map} +0 -0
@@ -0,0 +1,17 @@
1
+ import {
2
+ ChannelContainer,
3
+ ChannelContainer_default
4
+ } from "./chunk-F36NHPJG.mjs";
5
+ import "./chunk-CBUNHCOE.mjs";
6
+ import "./chunk-CFC7LEPD.mjs";
7
+ import "./chunk-6LWKNZUV.mjs";
8
+ import "./chunk-KOBXMDCI.mjs";
9
+ import "./chunk-CP7E2HRE.mjs";
10
+ import "./chunk-ISCHODBV.mjs";
11
+ import "./chunk-QM34EZQK.mjs";
12
+ import "./chunk-J5LGTIGS.mjs";
13
+ export {
14
+ ChannelContainer,
15
+ ChannelContainer_default as default
16
+ };
17
+ //# sourceMappingURL=ChannelContainer-JI3ZRZ5S.mjs.map
@@ -0,0 +1,16 @@
1
+ import {
2
+ ChatContainer,
3
+ ChatContainer_default,
4
+ ChatHeading
5
+ } from "./chunk-6LWKNZUV.mjs";
6
+ import "./chunk-KOBXMDCI.mjs";
7
+ import "./chunk-CP7E2HRE.mjs";
8
+ import "./chunk-ISCHODBV.mjs";
9
+ import "./chunk-QM34EZQK.mjs";
10
+ import "./chunk-J5LGTIGS.mjs";
11
+ export {
12
+ ChatContainer,
13
+ ChatHeading,
14
+ ChatContainer_default as default
15
+ };
16
+ //# sourceMappingURL=ChatContainer-6FVFME3R.mjs.map
@@ -1,35 +1,35 @@
1
1
  import {
2
- ChannelType,
2
+ Channel_exports,
3
3
  ThreadAction
4
- } from "./chunk-KTWYVC5X.mjs";
4
+ } from "./chunk-R5UOPOO7.mjs";
5
5
  import {
6
6
  ThreadCapabilities
7
- } from "./chunk-4APCDRSH.mjs";
7
+ } from "./chunk-CFC7LEPD.mjs";
8
8
  import {
9
9
  getAnchor
10
- } from "./chunk-GERVMFQW.mjs";
10
+ } from "./chunk-CP7E2HRE.mjs";
11
11
  import {
12
- THREAD_PLUGIN,
13
12
  meta
14
- } from "./chunk-EV4JWI7L.mjs";
13
+ } from "./chunk-QM34EZQK.mjs";
14
+ import "./chunk-J5LGTIGS.mjs";
15
15
 
16
16
  // src/capabilities/app-graph-builder.ts
17
- import { Rx } from "@effect-rx/rx-react";
18
- import { Option, pipe } from "effect";
17
+ import { Atom } from "@effect-atom/atom-react";
18
+ import * as Function from "effect/Function";
19
+ import * as Option from "effect/Option";
19
20
  import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
20
21
  import { Obj } from "@dxos/echo";
21
22
  import { AttentionCapabilities } from "@dxos/plugin-attention";
22
23
  import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
23
- import { ROOT_ID, createExtension, rxFromSignal } from "@dxos/plugin-graph";
24
- import { fullyQualifiedId } from "@dxos/react-client/echo";
25
- var app_graph_builder_default = (context) => {
24
+ import { ROOT_ID, atomFromSignal, createExtension } from "@dxos/plugin-graph";
25
+ var app_graph_builder_default = ((context) => {
26
26
  const resolve = (typename) => context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
27
27
  return contributes(Capabilities.AppGraphBuilder, [
28
28
  createExtension({
29
- id: `${THREAD_PLUGIN}/active-call`,
30
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map((node2) => {
29
+ id: `${meta.id}/active-call`,
30
+ connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map((node2) => {
31
31
  const [call] = get(context.capabilities(ThreadCapabilities.CallManager));
32
- return get(rxFromSignal(() => call?.joined ? [
32
+ return get(atomFromSignal(() => call?.joined ? [
33
33
  {
34
34
  id: `${node2.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,
35
35
  type: DECK_COMPANION_TYPE,
@@ -38,7 +38,7 @@ var app_graph_builder_default = (context) => {
38
38
  label: [
39
39
  "call panel label",
40
40
  {
41
- ns: THREAD_PLUGIN
41
+ ns: meta.id
42
42
  }
43
43
  ],
44
44
  icon: "ph--video-conference--regular",
@@ -52,25 +52,25 @@ var app_graph_builder_default = (context) => {
52
52
  // TODO(wittjosiah): The channel shouldn't become the companion during a call.
53
53
  // Alternative: the call/meeting/thread should be a child node of the channel and that should be opened.
54
54
  createExtension({
55
- id: `${THREAD_PLUGIN}/channel-chat-companion`,
55
+ id: `${meta.id}/channel-chat-companion`,
56
56
  connector: (node) => {
57
- return Rx.make((get) => {
58
- return pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(ChannelType, node2.data) ? Option.some(node2.data) : Option.none()), Option.map((channel) => {
57
+ return Atom.make((get) => {
58
+ return Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Channel_exports.Channel, node2.data) ? Option.some(node2.data) : Option.none()), Option.map((channel) => {
59
59
  const callManager = context.getCapability(ThreadCapabilities.CallManager);
60
- const joined = get(rxFromSignal(() => callManager.joined && callManager.roomId === fullyQualifiedId(channel)));
60
+ const joined = get(atomFromSignal(() => callManager.joined && callManager.roomId === Obj.getDXN(channel).toString()));
61
61
  if (!joined) {
62
62
  return [];
63
63
  }
64
64
  return [
65
65
  {
66
- id: `${fullyQualifiedId(channel)}${ATTENDABLE_PATH_SEPARATOR}chat`,
66
+ id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,
67
67
  type: PLANK_COMPANION_TYPE,
68
68
  data: "chat",
69
69
  properties: {
70
70
  label: [
71
71
  "channel companion label",
72
72
  {
73
- ns: THREAD_PLUGIN
73
+ ns: meta.id
74
74
  }
75
75
  ],
76
76
  icon: "ph--hash--regular",
@@ -85,8 +85,8 @@ var app_graph_builder_default = (context) => {
85
85
  }),
86
86
  createExtension({
87
87
  id: `${meta.id}/comments-companion`,
88
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => {
89
- if (!Obj.isObject(node2.data) || Obj.instanceOf(ChannelType, node2.data)) {
88
+ connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => {
89
+ if (!Obj.isObject(node2.data) || Obj.instanceOf(Channel_exports.Channel, node2.data)) {
90
90
  return Option.none();
91
91
  }
92
92
  const metadata = resolve(Obj.getTypename(node2.data));
@@ -115,8 +115,8 @@ var app_graph_builder_default = (context) => {
115
115
  }),
116
116
  createExtension({
117
117
  id: `${meta.id}/comment-toolbar`,
118
- actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => {
119
- if (!Obj.isObject(node2.data) || Obj.instanceOf(ChannelType, node2.data)) {
118
+ actions: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => {
119
+ if (!Obj.isObject(node2.data) || Obj.instanceOf(Channel_exports.Channel, node2.data)) {
120
120
  return Option.none();
121
121
  }
122
122
  const metadata = resolve(Obj.getTypename(node2.data));
@@ -124,21 +124,21 @@ var app_graph_builder_default = (context) => {
124
124
  }), Option.map((object) => {
125
125
  const selectionManager = context.getCapability(AttentionCapabilities.Selection);
126
126
  const toolbar = get(context.capabilities(ThreadCapabilities.State))[0]?.state.toolbar ?? {};
127
- const disabled = get(rxFromSignal(() => {
127
+ const disabled = get(atomFromSignal(() => {
128
128
  const metadata = resolve(Obj.getTypename(object));
129
- const selection = selectionManager.getSelection(fullyQualifiedId(object), metadata.selectionMode);
129
+ const selection = selectionManager.getSelection(Obj.getDXN(object).toString(), metadata.selectionMode);
130
130
  const anchor = getAnchor(selection);
131
131
  const invalidSelection = !anchor;
132
- const overlappingComment = toolbar[fullyQualifiedId(object)];
132
+ const overlappingComment = toolbar[Obj.getDXN(object).toString()];
133
133
  return metadata.comments === "anchored" && invalidSelection || overlappingComment;
134
134
  }));
135
135
  return [
136
136
  {
137
- id: `${fullyQualifiedId(object)}/comment`,
137
+ id: `${Obj.getDXN(object).toString()}/comment`,
138
138
  data: () => {
139
139
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
140
140
  const metadata = resolve(Obj.getTypename(object));
141
- const selection = selectionManager.getSelection(fullyQualifiedId(object));
141
+ const selection = selectionManager.getSelection(Obj.getDXN(object).toString());
142
142
  const anchor = metadata.comments === "anchored" ? getAnchor(selection) : Date.now().toString();
143
143
  const name = metadata.getAnchorLabel?.(object, anchor);
144
144
  void dispatch(createIntent(ThreadAction.Create, {
@@ -164,8 +164,8 @@ var app_graph_builder_default = (context) => {
164
164
  }), Option.getOrElse(() => [])))
165
165
  })
166
166
  ]);
167
- };
167
+ });
168
168
  export {
169
169
  app_graph_builder_default as default
170
170
  };
171
- //# sourceMappingURL=app-graph-builder-FHAOPO57.mjs.map
171
+ //# sourceMappingURL=app-graph-builder-URVQHGMR.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { ROOT_ID, atomFromSignal, createExtension } from '@dxos/plugin-graph';\n\nimport { meta } from '../meta';\nimport { Channel, ThreadAction } from '../types';\nimport { getAnchor } from '../util';\n\nimport { ThreadCapabilities } from './capabilities';\n\n// TODO(wittjosiah): Highlight active calls in L1.\n// Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.\nexport default (context: PluginContext) => {\n const resolve = (typename: string) =>\n context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/active-call`,\n connector: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map((node) => {\n const [call] = get(context.capabilities(ThreadCapabilities.CallManager));\n return get(\n atomFromSignal(() =>\n call?.joined\n ? [\n {\n id: `${node.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,\n type: DECK_COMPANION_TYPE,\n data: null,\n properties: {\n label: ['call panel label', { ns: meta.id }],\n icon: 'ph--video-conference--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ]\n : [],\n ),\n );\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n // TODO(wittjosiah): The channel shouldn't become the companion during a call.\n // Alternative: the call/meeting/thread should be a child node of the channel and that should be opened.\n createExtension({\n id: `${meta.id}/channel-chat-companion`,\n connector: (node) => {\n return Atom.make((get) => {\n return Function.pipe(\n get(node),\n Option.flatMap((node) =>\n Obj.instanceOf(Channel.Channel, node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.map((channel) => {\n const callManager = context.getCapability(ThreadCapabilities.CallManager);\n const joined = get(\n atomFromSignal(() => callManager.joined && callManager.roomId === Obj.getDXN(channel).toString()),\n );\n if (!joined) {\n return [];\n }\n\n return [\n {\n id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,\n type: PLANK_COMPANION_TYPE,\n data: 'chat',\n properties: {\n label: ['channel companion label', { ns: meta.id }],\n icon: 'ph--hash--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n );\n });\n },\n }),\n createExtension({\n id: `${meta.id}/comments-companion`,\n connector: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => {\n if (!Obj.isObject(node.data) || Obj.instanceOf(Channel.Channel, node.data)) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node) : Option.none();\n }),\n Option.map((node) => [\n {\n id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'comments',\n properties: {\n label: ['comments label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${meta.id}/comment-toolbar`,\n actions: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => {\n if (!Obj.isObject(node.data) || Obj.instanceOf(Channel.Channel, node.data)) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node.data) : Option.none();\n }),\n Option.map((object) => {\n const selectionManager = context.getCapability(AttentionCapabilities.Selection);\n const toolbar = get(context.capabilities(ThreadCapabilities.State))[0]?.state.toolbar ?? {};\n const disabled = get(\n atomFromSignal(() => {\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(\n Obj.getDXN(object).toString(),\n metadata.selectionMode,\n );\n const anchor = getAnchor(selection);\n const invalidSelection = !anchor;\n const overlappingComment = toolbar[Obj.getDXN(object).toString()];\n return (metadata.comments === 'anchored' && invalidSelection) || overlappingComment;\n }),\n );\n\n return [\n {\n id: `${Obj.getDXN(object).toString()}/comment`,\n data: () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(Obj.getDXN(object).toString());\n // TODO(wittjosiah): Use presence of selection to determine if the comment should be anchored.\n // Requires all components which support selection (e.g. table/kanban) to support anchored comments.\n const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();\n const name = metadata.getAnchorLabel?.(object, anchor);\n void dispatch(\n createIntent(ThreadAction.Create, {\n anchor,\n name,\n subject: object,\n }),\n );\n },\n properties: {\n label: ['add comment label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'toolbar',\n disabled,\n testId: 'thread.comment.add',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Atom", "Function", "Option", "Capabilities", "contributes", "createIntent", "Obj", "AttentionCapabilities", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "PLANK_COMPANION_TYPE", "ROOT_ID", "atomFromSignal", "createExtension", "context", "resolve", "typename", "getCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "meta", "connector", "node", "Atom", "make", "get", "pipe", "flatMap", "ROOT_ID", "some", "none", "map", "call", "capabilities", "ThreadCapabilities", "CallManager", "atomFromSignal", "joined", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "position", "disposition", "getOrElse", "Obj", "instanceOf", "Channel", "channel", "callManager", "getCapability", "roomId", "getDXN", "toString", "PLANK_COMPANION_TYPE", "isObject", "getTypename", "comments", "join", "actions", "object", "selectionManager", "AttentionCapabilities", "Selection", "toolbar", "State", "state", "disabled", "selection", "getSelection", "selectionMode", "anchor", "getAnchor", "invalidSelection", "overlappingComment", "dispatchPromise", "dispatch", "IntentDispatcher", "Date", "now", "name", "getAnchorLabel", "createIntent", "ThreadAction", "Create", "subject", "testId"]
7
+ }
@@ -0,0 +1,101 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/blueprint-definition.ts
4
+ import { Capabilities, contributes } from "@dxos/app-framework";
5
+ import { Blueprint, Template } from "@dxos/blueprints";
6
+ import { trim } from "@dxos/util";
7
+
8
+ // src/functions/create-proposals.ts
9
+ import * as Array from "effect/Array";
10
+ import * as Effect from "effect/Effect";
11
+ import * as Function from "effect/Function";
12
+ import * as Schema from "effect/Schema";
13
+ import { ArtifactId, computeDiffsWithCursors } from "@dxos/assistant";
14
+ import { Obj, Ref, Relation } from "@dxos/echo";
15
+ import { createDocAccessor } from "@dxos/echo-db";
16
+ import { DatabaseService, defineFunction } from "@dxos/functions";
17
+ import { DXN } from "@dxos/keys";
18
+ import { Markdown } from "@dxos/plugin-markdown/types";
19
+ import { AnchoredTo, Message, Thread } from "@dxos/types";
20
+ var create_proposals_default = defineFunction({
21
+ key: "dxos.org/function/thread/create-proposals",
22
+ name: "Create Proposals",
23
+ description: "Proposes a set of changes to a document.",
24
+ inputSchema: Schema.Struct({
25
+ id: ArtifactId,
26
+ diffs: Schema.Array(Schema.String).annotations({
27
+ description: "The diffs to propose for the document."
28
+ })
29
+ }),
30
+ outputSchema: Schema.Void,
31
+ handler: Effect.fn(function* ({ data: { id, diffs: _diffs } }) {
32
+ const object = yield* DatabaseService.resolve(DXN.parse(id), Markdown.Document);
33
+ const content = yield* Effect.promise(() => object.content.load());
34
+ const accessor = createDocAccessor(content, [
35
+ "content"
36
+ ]);
37
+ yield* Function.pipe(computeDiffsWithCursors(accessor, _diffs), Array.map(Effect.fnUntraced(function* ({ cursor, text }) {
38
+ const proposal = Obj.make(Message.Message, {
39
+ created: (/* @__PURE__ */ new Date()).toISOString(),
40
+ sender: {
41
+ role: "assistant"
42
+ },
43
+ blocks: [
44
+ {
45
+ _tag: "proposal",
46
+ text
47
+ }
48
+ ]
49
+ });
50
+ const thread = Thread.make({
51
+ name: "Proposal",
52
+ messages: [
53
+ Ref.make(proposal)
54
+ ],
55
+ status: "active"
56
+ });
57
+ const relation = Relation.make(AnchoredTo.AnchoredTo, {
58
+ [Relation.Source]: thread,
59
+ [Relation.Target]: object,
60
+ anchor: cursor
61
+ });
62
+ yield* DatabaseService.add(thread);
63
+ yield* DatabaseService.add(relation);
64
+ })), Effect.allWith({
65
+ concurrency: "unbounded"
66
+ }));
67
+ })
68
+ });
69
+
70
+ // src/capabilities/blueprint-definition.ts
71
+ var functions = [
72
+ create_proposals_default
73
+ ];
74
+ var ASSISTANT_BLUEPRINT_KEY = "dxos.org/blueprint/thread";
75
+ var blueprint_definition_default = (() => [
76
+ contributes(Capabilities.Functions, functions),
77
+ contributes(Capabilities.BlueprintDefinition, Blueprint.make({
78
+ key: ASSISTANT_BLUEPRINT_KEY,
79
+ name: "Thread",
80
+ tools: Blueprint.toolDefinitions({
81
+ functions
82
+ }),
83
+ instructions: Template.make({
84
+ // TODO(wittjosiah): Move example to function input schema annotation.
85
+ source: trim`
86
+ You can update markdown documents via proposals.
87
+ For each diff, respond with the smallest possible matching span.
88
+ For example:
89
+ - "There is a tyop in this sentence."
90
+ + "There is a typo in this sentence."
91
+ - "This id goof."
92
+ + "This is good."
93
+ `
94
+ })
95
+ }))
96
+ ]);
97
+ export {
98
+ ASSISTANT_BLUEPRINT_KEY,
99
+ blueprint_definition_default as default
100
+ };
101
+ //# sourceMappingURL=blueprint-definition-TQ4JFMZZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/blueprint-definition.ts", "../../../src/functions/create-proposals.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, type Capability, contributes } from '@dxos/app-framework';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { createProposals } from '../functions';\n\nconst functions: FunctionDefinition[] = [createProposals];\n\nexport const ASSISTANT_BLUEPRINT_KEY = 'dxos.org/blueprint/thread';\n\nexport default (): Capability<any>[] => [\n contributes(Capabilities.Functions, functions),\n contributes(\n Capabilities.BlueprintDefinition,\n Blueprint.make({\n key: ASSISTANT_BLUEPRINT_KEY,\n name: 'Thread',\n tools: Blueprint.toolDefinitions({ functions }),\n instructions: Template.make({\n // TODO(wittjosiah): Move example to function input schema annotation.\n source: trim`\n You can update markdown documents via proposals.\n For each diff, respond with the smallest possible matching span.\n For example:\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id goof.\"\n + \"This is good.\"\n `,\n }),\n }),\n ),\n];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Schema from 'effect/Schema';\n\nimport { ArtifactId, computeDiffsWithCursors } from '@dxos/assistant';\nimport { Obj, Ref, Relation } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { DatabaseService, defineFunction } from '@dxos/functions';\nimport { DXN } from '@dxos/keys';\nimport { Markdown } from '@dxos/plugin-markdown/types';\nimport { AnchoredTo, Message, Thread } from '@dxos/types';\n\nexport default defineFunction({\n key: 'dxos.org/function/thread/create-proposals',\n name: 'Create Proposals',\n description: 'Proposes a set of changes to a document.',\n inputSchema: Schema.Struct({\n id: ArtifactId,\n diffs: Schema.Array(Schema.String).annotations({\n description: 'The diffs to propose for the document.',\n }),\n }),\n outputSchema: Schema.Void,\n handler: Effect.fn(function* ({ data: { id, diffs: _diffs } }) {\n const object = yield* DatabaseService.resolve(DXN.parse(id), Markdown.Document);\n const content = yield* Effect.promise(() => object.content.load());\n const accessor = createDocAccessor(content, ['content']);\n\n yield* Function.pipe(\n computeDiffsWithCursors(accessor, _diffs),\n Array.map(\n Effect.fnUntraced(function* ({ cursor, text }) {\n const proposal = Obj.make(Message.Message, {\n created: new Date().toISOString(),\n sender: { role: 'assistant' },\n blocks: [{ _tag: 'proposal', text }],\n });\n const thread = Thread.make({ name: 'Proposal', messages: [Ref.make(proposal)], status: 'active' });\n const relation = Relation.make(AnchoredTo.AnchoredTo, {\n [Relation.Source]: thread,\n [Relation.Target]: object,\n anchor: cursor,\n });\n yield* DatabaseService.add(thread);\n yield* DatabaseService.add(relation);\n }),\n ),\n Effect.allWith({ concurrency: 'unbounded' }),\n );\n }),\n});\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAA+BC,mBAAmB;AAC3D,SAASC,WAAWC,gBAAgB;AAEpC,SAASC,YAAY;;;ACHrB,YAAYC,WAAW;AACvB,YAAYC,YAAY;AACxB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AAExB,SAASC,YAAYC,+BAA+B;AACpD,SAASC,KAAKC,KAAKC,gBAAgB;AACnC,SAASC,yBAAyB;AAClC,SAASC,iBAAiBC,sBAAsB;AAChD,SAASC,WAAW;AACpB,SAASC,gBAAgB;AACzB,SAASC,YAAYC,SAASC,cAAc;AAE5C,IAAA,2BAAeC,eAAe;EAC5BC,KAAK;EACLC,MAAM;EACNC,aAAa;EACbC,aAAoBC,cAAO;IACzBC,IAAIC;IACJC,OAAcC,aAAaC,aAAM,EAAEC,YAAY;MAC7CR,aAAa;IACf,CAAA;EACF,CAAA;EACAS,cAAqBC;EACrBC,SAAgBC,UAAG,WAAW,EAAEC,MAAM,EAAEV,IAAIE,OAAOS,OAAM,EAAE,GAAE;AAC3D,UAAMC,SAAS,OAAOC,gBAAgBC,QAAQC,IAAIC,MAAMhB,EAAAA,GAAKiB,SAASC,QAAQ;AAC9E,UAAMC,UAAU,OAAcC,eAAQ,MAAMR,OAAOO,QAAQE,KAAI,CAAA;AAC/D,UAAMC,WAAWC,kBAAkBJ,SAAS;MAAC;KAAU;AAEvD,WAAgBK,cACdC,wBAAwBH,UAAUX,MAAAA,GAC5Be,UACGC,kBAAW,WAAW,EAAEC,QAAQC,KAAI,GAAE;AAC3C,YAAMC,WAAWC,IAAIC,KAAKC,QAAQA,SAAS;QACzCC,UAAS,oBAAIC,KAAAA,GAAOC,YAAW;QAC/BC,QAAQ;UAAEC,MAAM;QAAY;QAC5BC,QAAQ;UAAC;YAAEC,MAAM;YAAYX;UAAK;;MACpC,CAAA;AACA,YAAMY,SAASC,OAAOV,KAAK;QAAEpC,MAAM;QAAY+C,UAAU;UAACC,IAAIZ,KAAKF,QAAAA;;QAAYe,QAAQ;MAAS,CAAA;AAChG,YAAMC,WAAWC,SAASf,KAAKgB,WAAWA,YAAY;QACpD,CAACD,SAASE,MAAM,GAAGR;QACnB,CAACM,SAASG,MAAM,GAAGtC;QACnBuC,QAAQvB;MACV,CAAA;AACA,aAAOf,gBAAgBuC,IAAIX,MAAAA;AAC3B,aAAO5B,gBAAgBuC,IAAIN,QAAAA;IAC7B,CAAA,CAAA,GAEKO,eAAQ;MAAEC,aAAa;IAAY,CAAA,CAAA;EAE9C,CAAA;AACF,CAAA;;;AD5CA,IAAMC,YAAkC;EAACC;;AAElC,IAAMC,0BAA0B;AAEvC,IAAA,gCAAe,MAAyB;EACtCC,YAAYC,aAAaC,WAAWL,SAAAA;EACpCG,YACEC,aAAaE,qBACbC,UAAUC,KAAK;IACbC,KAAKP;IACLQ,MAAM;IACNC,OAAOJ,UAAUK,gBAAgB;MAAEZ;IAAU,CAAA;IAC7Ca,cAAcC,SAASN,KAAK;;MAE1BO,QAAQC;;;;;;;;;IASV,CAAA;EACF,CAAA,CAAA;;",
6
+ "names": ["Capabilities", "contributes", "Blueprint", "Template", "trim", "Array", "Effect", "Function", "Schema", "ArtifactId", "computeDiffsWithCursors", "Obj", "Ref", "Relation", "createDocAccessor", "DatabaseService", "defineFunction", "DXN", "Markdown", "AnchoredTo", "Message", "Thread", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "id", "ArtifactId", "diffs", "Array", "String", "annotations", "outputSchema", "Void", "handler", "fn", "data", "_diffs", "object", "DatabaseService", "resolve", "DXN", "parse", "Markdown", "Document", "content", "promise", "load", "accessor", "createDocAccessor", "pipe", "computeDiffsWithCursors", "map", "fnUntraced", "cursor", "text", "proposal", "Obj", "make", "Message", "created", "Date", "toISOString", "sender", "role", "blocks", "_tag", "thread", "Thread", "messages", "Ref", "status", "relation", "Relation", "AnchoredTo", "Source", "Target", "anchor", "add", "allWith", "concurrency", "functions", "createProposals", "ASSISTANT_BLUEPRINT_KEY", "contributes", "Capabilities", "Functions", "BlueprintDefinition", "Blueprint", "make", "key", "name", "tools", "toolDefinitions", "instructions", "Template", "source", "trim"]
7
+ }
@@ -1,24 +1,25 @@
1
1
  import {
2
2
  CallManager
3
- } from "./chunk-ZCEU5K23.mjs";
3
+ } from "./chunk-ZCW3NSDZ.mjs";
4
4
  import {
5
5
  ThreadCapabilities
6
- } from "./chunk-4APCDRSH.mjs";
7
- import "./chunk-XYUJXHYV.mjs";
8
- import "./chunk-EV4JWI7L.mjs";
6
+ } from "./chunk-CFC7LEPD.mjs";
7
+ import "./chunk-ISCHODBV.mjs";
8
+ import "./chunk-QM34EZQK.mjs";
9
+ import "./chunk-J5LGTIGS.mjs";
9
10
 
10
11
  // src/capabilities/call-manager.ts
11
12
  import { contributes } from "@dxos/app-framework";
12
13
  import { ClientCapabilities } from "@dxos/plugin-client";
13
- var call_manager_default = async (context) => {
14
+ var call_manager_default = (async (context) => {
14
15
  const client = context.getCapability(ClientCapabilities.Client);
15
16
  const callManager = new CallManager(client);
16
17
  await callManager.open();
17
18
  return contributes(ThreadCapabilities.CallManager, callManager, () => {
18
19
  void callManager.close();
19
20
  });
20
- };
21
+ });
21
22
  export {
22
23
  call_manager_default as default
23
24
  };
24
- //# sourceMappingURL=call-manager-RMPTWSTF.mjs.map
25
+ //# sourceMappingURL=call-manager-4YFT4XA6.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/call-manager.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PluginContext, contributes } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { CallManager } from '../calls';\n\nimport { ThreadCapabilities } from './capabilities';\n\nexport default async (context: PluginContext) => {\n const client = context.getCapability(ClientCapabilities.Client);\n const callManager = new CallManager(client);\n await callManager.open();\n\n return contributes(ThreadCapabilities.CallManager, callManager, () => {\n void callManager.close();\n });\n};\n"],
5
- "mappings": ";;;;;;;;;;;AAIA,SAA6BA,mBAAmB;AAChD,SAASC,0BAA0B;AAMnC,IAAA,uBAAe,OAAOC,YAAAA;AACpB,QAAMC,SAASD,QAAQE,cAAcC,mBAAmBC,MAAM;AAC9D,QAAMC,cAAc,IAAIC,YAAYL,MAAAA;AACpC,QAAMI,YAAYE,KAAI;AAEtB,SAAOC,YAAYC,mBAAmBH,aAAaD,aAAa,MAAA;AAC9D,SAAKA,YAAYK,MAAK;EACxB,CAAA;AACF;",
5
+ "mappings": ";;;;;;;;;;;AAIA,SAA6BA,mBAAmB;AAChD,SAASC,0BAA0B;AAMnC,IAAA,wBAAe,OAAOC,YAAAA;AACpB,QAAMC,SAASD,QAAQE,cAAcC,mBAAmBC,MAAM;AAC9D,QAAMC,cAAc,IAAIC,YAAYL,MAAAA;AACpC,QAAMI,YAAYE,KAAI;AAEtB,SAAOC,YAAYC,mBAAmBH,aAAaD,aAAa,MAAA;AAC9D,SAAKA,YAAYK,MAAK;EACxB,CAAA;AACF;",
6
6
  "names": ["contributes", "ClientCapabilities", "context", "client", "getCapability", "ClientCapabilities", "Client", "callManager", "CallManager", "open", "contributes", "ThreadCapabilities", "close"]
7
7
  }
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  useOnEditAnalytics,
3
3
  useStatus
4
- } from "./chunk-RI3Z6MK3.mjs";
4
+ } from "./chunk-KOBXMDCI.mjs";
5
5
  import {
6
6
  getMessageMetadata
7
- } from "./chunk-GERVMFQW.mjs";
7
+ } from "./chunk-CP7E2HRE.mjs";
8
8
  import {
9
9
  meta
10
- } from "./chunk-EV4JWI7L.mjs";
10
+ } from "./chunk-QM34EZQK.mjs";
11
11
 
12
12
  // src/components/ChatContainer.tsx
13
13
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
14
14
  import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
15
15
  import { Obj, Ref as Ref2 } from "@dxos/echo";
16
- import { fullyQualifiedId, useMembers } from "@dxos/react-client/echo";
16
+ import { useMembers } from "@dxos/react-client/echo";
17
17
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
18
18
  import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
19
19
  import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
20
20
  import { StackItem } from "@dxos/react-ui-stack";
21
21
  import { mx as mx3 } from "@dxos/react-ui-theme";
22
- import { MessageTextbox, Thread, threadLayout } from "@dxos/react-ui-thread";
23
- import { DataType } from "@dxos/schema";
22
+ import { MessageTextbox, Thread as ThreadComponent, threadLayout } from "@dxos/react-ui-thread";
23
+ import { Message } from "@dxos/types";
24
24
  import { isNonNullable } from "@dxos/util";
25
25
 
26
26
  // src/components/command-extension.ts
@@ -58,7 +58,7 @@ var command = [
58
58
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
59
59
  import { EditorView } from "@codemirror/view";
60
60
  import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
61
- import { Surface } from "@dxos/app-framework";
61
+ import { Surface } from "@dxos/app-framework/react";
62
62
  import { Ref } from "@dxos/echo";
63
63
  import { PublicKey } from "@dxos/react-client";
64
64
  import { useIdentity } from "@dxos/react-client/halo";
@@ -231,7 +231,7 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ subject }, forwardedR
231
231
  }
232
232
  return /* @__PURE__ */ React.createElement("div", {
233
233
  role: "group",
234
- className: mx2("grid col-span-3 py-1 pr-4", hoverableControls, hoverableFocusedWithinControls),
234
+ className: mx2("grid col-span-3 plb-1 pr-4", hoverableControls, hoverableFocusedWithinControls),
235
235
  ref: forwardedRef
236
236
  }, /* @__PURE__ */ React.createElement(Surface, {
237
237
  role: "card",
@@ -266,11 +266,11 @@ var ChatHeading = ({ attendableId }) => {
266
266
  _effect.f();
267
267
  }
268
268
  };
269
- var ChatContainer = ({ space, thread, context, current, autoFocusTextbox }) => {
269
+ var ChatContainer = ({ classNames, space, thread, context, current, autoFocusTextbox }) => {
270
270
  var _effect = _useSignals2();
271
271
  try {
272
272
  const { t } = useTranslation2(meta.id);
273
- const id = fullyQualifiedId(thread);
273
+ const id = Obj.getDXN(thread).toString();
274
274
  const identity = useIdentity2();
275
275
  const members = useMembers(space?.key);
276
276
  const activity = useStatus(space, id);
@@ -289,7 +289,7 @@ var ChatContainer = ({ space, thread, context, current, autoFocusTextbox }) => {
289
289
  themeMode
290
290
  }),
291
291
  listener({
292
- onChange: (text) => messageRef.current = text
292
+ onChange: ({ text }) => messageRef.current = text
293
293
  }),
294
294
  command
295
295
  ], [
@@ -307,7 +307,7 @@ var ChatContainer = ({ space, thread, context, current, autoFocusTextbox }) => {
307
307
  if (!messageRef.current?.length) {
308
308
  return false;
309
309
  }
310
- thread.messages.push(Ref2.make(Obj.make(DataType.Message, {
310
+ thread.messages.push(Ref2.make(Obj.make(Message.Message, {
311
311
  created: (/* @__PURE__ */ new Date()).toISOString(),
312
312
  sender: {
313
313
  identityDid: identity.did
@@ -328,12 +328,13 @@ var ChatContainer = ({ space, thread, context, current, autoFocusTextbox }) => {
328
328
  rerenderEditor();
329
329
  return true;
330
330
  };
331
- return /* @__PURE__ */ React2.createElement(Thread.Root, {
331
+ return /* @__PURE__ */ React2.createElement(ThreadComponent.Root, {
332
332
  current,
333
333
  id,
334
334
  classNames: [
335
- "bs-full is-full max-is-prose mli-auto grid-rows-[1fr_min-content_min-content] overflow-hidden",
336
- "transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0"
335
+ "bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden",
336
+ "transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0",
337
+ classNames
337
338
  ]
338
339
  }, /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
339
340
  classNames: "col-span-2"
@@ -355,7 +356,7 @@ var ChatContainer = ({ space, thread, context, current, autoFocusTextbox }) => {
355
356
  autoFocus,
356
357
  onSend: handleCreate,
357
358
  ...textboxMetadata
358
- }), /* @__PURE__ */ React2.createElement(Thread.Status, {
359
+ }), /* @__PURE__ */ React2.createElement(ThreadComponent.Status, {
359
360
  activity
360
361
  }, t("activity message")));
361
362
  } finally {
@@ -373,4 +374,4 @@ export {
373
374
  ChatContainer,
374
375
  ChatContainer_default
375
376
  };
376
- //# sourceMappingURL=chunk-PBMNFG3B.mjs.map
377
+ //# sourceMappingURL=chunk-6LWKNZUV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/components/MessageContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Obj, Ref } from '@dxos/echo';\nimport { type Space, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\nimport {\n MessageTextbox,\n type MessageTextboxProps,\n Thread as ThreadComponent,\n type ThreadRootProps,\n threadLayout,\n} from '@dxos/react-ui-thread';\nimport { Message, type Thread } from '@dxos/types';\nimport { isNonNullable } from '@dxos/util';\n\nimport { useStatus } from '../hooks';\nimport { meta } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nimport { command } from './command-extension';\nimport { MessageContainer } from './MessageContainer';\n\nexport const ChatHeading = ({ attendableId }: { attendableId?: string }) => {\n const { t } = useTranslation(meta.id);\n return (\n <div role='none' className='flex items-center'>\n <StackItem.SigilButton attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </StackItem.SigilButton>\n <StackItem.HeadingLabel attendableId={attendableId}>{t('chat heading')}</StackItem.HeadingLabel>\n </div>\n );\n};\n\nexport type ChatContainerProps = ThemedClassName<\n {\n space: Space;\n thread: Thread.Thread;\n context?: Obj.Any;\n autoFocusTextbox?: boolean;\n } & Pick<ThreadRootProps, 'current'>\n>;\n\nexport const ChatContainer = ({\n classNames,\n space,\n thread,\n context,\n current,\n autoFocusTextbox,\n}: ChatContainerProps) => {\n const { t } = useTranslation(meta.id);\n const id = Obj.getDXN(thread).toString();\n const identity = useIdentity()!;\n const members = useMembers(space?.key);\n const activity = useStatus(space, id);\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [_count, _setCount] = useState(0);\n const rerenderEditor = () => _setCount((count) => count + 1);\n const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(id, identity);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: ({ text }) => (messageRef.current = text) }),\n command,\n ],\n [themeMode, _count],\n );\n\n // TODO(thure): Factor out.\n // TODO(thure): `flex-col-reverse` does not work to start the container scrolled to the end while also using\n // `ScrollArea`. This is the least-bad way I found to scroll to the end on mount. Note that 0ms was insufficient\n // for the desired effect; this is likely hardware-dependent and should be reevaluated.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n useLayoutEffect(() => {\n scrollToEnd('instant');\n }, []);\n\n // TODO(burdon): Change to model.\n const handleCreate: MessageTextboxProps['onSend'] = () => {\n if (!messageRef.current?.length) {\n return false;\n }\n\n thread.messages.push(\n Ref.make(\n Obj.make(Message.Message, {\n created: new Date().toISOString(),\n sender: { identityDid: identity.did },\n blocks: [{ _tag: 'text', text: messageRef.current }],\n properties: context ? { context: Ref.make(context) } : undefined,\n }),\n ),\n );\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n return (\n <ThreadComponent.Root\n current={current}\n id={id}\n classNames={[\n 'bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden',\n 'transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0',\n classNames,\n ]}\n >\n <ScrollArea.Root classNames='col-span-2'>\n <ScrollArea.Viewport classNames='overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]'>\n <div role='none' className={mx(threadLayout, 'place-self-end')}>\n {thread.messages\n .map((message) => message.target)\n .filter(isNonNullable)\n .map((message) => (\n <MessageContainer key={message.id} message={message} members={members} />\n ))}\n </div>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n <ScrollArea.Scrollbar>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />\n <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>\n </ThreadComponent.Root>\n );\n};\n\nexport default ChatContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n {\n tag: tags.tagName,\n class: mx('dx-tag dx-tag--indigo text-baseText font-medium'),\n },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { type Obj, Ref, type Type } from '@dxos/echo';\nimport { PublicKey } from '@dxos/react-client';\nimport { type SpaceMember } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport { IconButton, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { type ContentBlock, type Message } from '@dxos/types';\n\nimport { useOnEditAnalytics } from '../hooks';\nimport { meta } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nimport { command } from './command-extension';\n\nexport const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pie-2';\nexport const buttonClassNames = '!p-1 transition-opacity';\n\nexport type MessageContainerProps = {\n message: Message.Message;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n onAcceptProposal?: (id: string) => void;\n};\n\nexport const MessageContainer = ({\n message,\n members,\n editable = false,\n onDelete,\n onAcceptProposal,\n}: MessageContainerProps) => {\n const { t } = useTranslation(meta.id);\n const senderIdentity = members.find(\n (member) =>\n (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||\n (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleEdit = useCallback(() => setEditing((editing) => !editing), []);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const handleAcceptProposal = useCallback(() => onAcceptProposal?.(message.id), [message, onAcceptProposal]);\n const textBlock = message.blocks.find((block) => block._tag === 'text');\n const proposalBlock = message.blocks.find((block) => block._tag === 'proposal');\n const references = message.blocks.filter((block) => block._tag === 'reference').map((block) => block.reference);\n\n useOnEditAnalytics(message, textBlock, !!editing);\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <div role='none' className={buttonGroupClassNames}>\n {userIsAuthor && editable && (\n <IconButton\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n variant='ghost'\n icon={editing ? 'ph--check--regular' : 'ph--pencil-simple--regular'}\n iconOnly\n label={t(editing ? 'save message label' : 'edit message label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleEdit}\n />\n )}\n {/* TODO(wittjosiah): Proposal controls should probably be hoisted to thread level. */}\n {proposalBlock && onAcceptProposal && (\n <IconButton\n data-testid='thread.message.accept'\n variant='ghost'\n icon='ph--check--regular'\n iconOnly\n label={t('accept proposal label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleAcceptProposal}\n />\n )}\n {onDelete && (\n <IconButton\n data-testid='thread.message.delete'\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('delete message label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleDelete}\n />\n )}\n </div>\n </MessageHeading>\n {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}\n {proposalBlock && <ProposalBlock block={proposalBlock} />}\n {Ref.Array.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Type.Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n}: {\n block: ContentBlock.Text;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n block.text = inMemoryContentRef.current;\n }, [block]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.text,\n extensions: [\n createBasicExtensions({ readOnly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {\n return (\n <div role='none' className='mie-4 italic'>\n {block.text}\n </div>\n );\n};\n\nconst MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(({ subject }, forwardedRef) => {\n // TODO(burdon): Use annotation to get title.\n let title = (subject as any).name ?? (subject as any).title ?? (subject as any).type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 plb-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n ref={forwardedRef}\n >\n <Surface role='card' limit={1} data={{ subject }} fallback={title} />\n </div>\n );\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useLayoutEffect", "useMemo", "useRef", "useState", "Obj", "Ref", "useMembers", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadComponent", "threadLayout", "Message", "isNonNullable", "HighlightStyle", "StreamLanguage", "syntaxHighlighting", "tags", "mx", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "EditorView", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "Ref", "PublicKey", "useIdentity", "IconButton", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageHeading", "MessageRoot", "buttonGroupClassNames", "buttonClassNames", "MessageContainer", "message", "members", "editable", "onDelete", "onAcceptProposal", "t", "useTranslation", "meta", "id", "senderIdentity", "find", "member", "sender", "identityDid", "identity", "did", "identityKey", "PublicKey", "equals", "messageMetadata", "getMessageMetadata", "userIsAuthor", "useIdentity", "authorId", "editing", "setEditing", "useState", "handleEdit", "useCallback", "handleDelete", "handleAcceptProposal", "textBlock", "blocks", "block", "_tag", "proposalBlock", "references", "filter", "map", "reference", "useOnEditAnalytics", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "div", "role", "className", "IconButton", "data-testid", "variant", "icon", "iconOnly", "label", "hoverableControlItem", "onClick", "TextboxBlock", "isAuthor", "ProposalBlock", "Ref", "Array", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readOnly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "ref", "forwardRef", "forwardedRef", "title", "name", "type", "content", "mx", "Surface", "limit", "data", "fallback", "ChatHeading", "attendableId", "t", "useTranslation", "meta", "id", "React", "div", "role", "className", "StackItem", "SigilButton", "Icon", "icon", "size", "HeadingLabel", "ChatContainer", "classNames", "space", "thread", "context", "current", "autoFocusTextbox", "Obj", "getDXN", "toString", "identity", "useIdentity", "members", "useMembers", "key", "activity", "useStatus", "_count", "_setCount", "useState", "rerenderEditor", "count", "autoFocus", "setAutoFocus", "threadScrollRef", "useRef", "themeMode", "useThemeContext", "textboxMetadata", "getMessageMetadata", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "length", "messages", "push", "Ref", "make", "Message", "created", "Date", "toISOString", "sender", "identityDid", "did", "blocks", "_tag", "properties", "undefined", "ThreadComponent", "Root", "ScrollArea", "Viewport", "mx", "threadLayout", "map", "message", "target", "filter", "isNonNullable", "MessageContainer", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "Status"]
7
+ }
@@ -0,0 +1,23 @@
1
+ // src/capabilities/index.ts
2
+ import { lazy } from "@dxos/app-framework";
3
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-URVQHGMR.mjs"));
4
+ var BlueprintDefinition = lazy(() => import("./blueprint-definition-TQ4JFMZZ.mjs"));
5
+ var CallManager = lazy(() => import("./call-manager-4YFT4XA6.mjs"));
6
+ var IntentResolver = lazy(() => import("./intent-resolver-YR6W4CRP.mjs"));
7
+ var Markdown = lazy(() => import("./markdown-GSOBOXA7.mjs"));
8
+ var ReactRoot = lazy(() => import("./react-root-RAWRPF7Z.mjs"));
9
+ var ReactSurface = lazy(() => import("./react-surface-GOEFSXQ6.mjs"));
10
+ var ThreadSettings = lazy(() => import("./settings-JN2HHORY.mjs"));
11
+ var ThreadState = lazy(() => import("./state-UYPLBGZJ.mjs"));
12
+
13
+ export {
14
+ AppGraphBuilder,
15
+ BlueprintDefinition,
16
+ CallManager,
17
+ IntentResolver,
18
+ Markdown,
19
+ ReactRoot,
20
+ ReactSurface,
21
+ ThreadState
22
+ };
23
+ //# sourceMappingURL=chunk-CBUNHCOE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const BlueprintDefinition = lazy(() => import('./blueprint-definition'));\nexport const CallManager = lazy(() => import('./call-manager'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,sBAAsBD,KAAK,MAAM,OAAO,qCAAA,CAAA;AAC9C,IAAME,cAAcF,KAAK,MAAM,OAAO,6BAAA,CAAA;AACtC,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMI,WAAWJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMK,YAAYL,KAAK,MAAM,OAAO,2BAAA,CAAA;AACpC,IAAMM,eAAeN,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMO,iBAAiBP,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMQ,cAAcR,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "BlueprintDefinition", "CallManager", "IntentResolver", "Markdown", "ReactRoot", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }
@@ -0,0 +1,18 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-QM34EZQK.mjs";
4
+
5
+ // src/capabilities/capabilities.ts
6
+ import { defineCapability } from "@dxos/app-framework";
7
+ (function(ThreadCapabilities2) {
8
+ ThreadCapabilities2.CallManager = defineCapability(`${meta.id}/capability/call-manager`);
9
+ ThreadCapabilities2.CallExtension = defineCapability(`${meta.id}/capability/call-extension`);
10
+ ThreadCapabilities2.State = defineCapability(`${meta.id}/capability/state`);
11
+ ThreadCapabilities2.MutableState = defineCapability(`${meta.id}/capability/state`);
12
+ })(ThreadCapabilities || (ThreadCapabilities = {}));
13
+ var ThreadCapabilities;
14
+
15
+ export {
16
+ ThreadCapabilities
17
+ };
18
+ //# sourceMappingURL=chunk-CFC7LEPD.mjs.map