@dxos/plugin-thread 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

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 (376) hide show
  1. package/dist/lib/browser/app-graph-builder-7C2QW32W.mjs +188 -0
  2. package/dist/lib/browser/app-graph-builder-7C2QW32W.mjs.map +7 -0
  3. package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs +17 -0
  4. package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs.map +7 -0
  5. package/dist/lib/browser/blueprints/index.mjs +8 -0
  6. package/dist/lib/browser/call-manager-4P536YNX.mjs +26 -0
  7. package/dist/lib/browser/call-manager-4P536YNX.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-2FIHSX35.mjs +293 -0
  9. package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-HDEQRBOC.mjs → chunk-DLO2G3DM.mjs} +79 -76
  11. package/dist/lib/browser/chunk-DLO2G3DM.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-US5ZQYC3.mjs → chunk-ERK254BS.mjs} +78 -61
  13. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-XYUJXHYV.mjs → chunk-ISCHODBV.mjs} +1 -1
  15. package/dist/lib/browser/{chunk-XYUJXHYV.mjs.map → chunk-ISCHODBV.mjs.map} +2 -2
  16. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  17. package/dist/lib/browser/chunk-YSHXWAL3.mjs +1815 -0
  18. package/dist/lib/browser/chunk-YSHXWAL3.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-ZFLSTQSE.mjs +106 -0
  20. package/dist/lib/browser/chunk-ZFLSTQSE.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +121 -114
  22. package/dist/lib/browser/index.mjs.map +4 -4
  23. package/dist/lib/browser/markdown-QMJLRR6R.mjs +210 -0
  24. package/dist/lib/browser/markdown-QMJLRR6R.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/operation-resolver-T63EP5TY.mjs +441 -0
  27. package/dist/lib/browser/operation-resolver-T63EP5TY.mjs.map +7 -0
  28. package/dist/lib/browser/react-root-56MJI77R.mjs +25 -0
  29. package/dist/lib/browser/react-root-56MJI77R.mjs.map +7 -0
  30. package/dist/lib/browser/{react-surface-IC576W2W.mjs → react-surface-DMBHQOXJ.mjs} +43 -42
  31. package/dist/lib/browser/react-surface-DMBHQOXJ.mjs.map +7 -0
  32. package/dist/lib/browser/repair-6OZ75AUU.mjs +38 -0
  33. package/dist/lib/browser/repair-6OZ75AUU.mjs.map +7 -0
  34. package/dist/lib/browser/settings-WZMJMML3.mjs +32 -0
  35. package/dist/lib/browser/settings-WZMJMML3.mjs.map +7 -0
  36. package/dist/lib/browser/state-SJR2GL5G.mjs +24 -0
  37. package/dist/lib/browser/state-SJR2GL5G.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +7 -7
  39. package/dist/lib/node-esm/app-graph-builder-JCSVFRVY.mjs +189 -0
  40. package/dist/lib/node-esm/app-graph-builder-JCSVFRVY.mjs.map +7 -0
  41. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs +18 -0
  42. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs.map +7 -0
  43. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  44. package/dist/lib/node-esm/call-manager-FMLRR5S5.mjs +27 -0
  45. package/dist/lib/node-esm/call-manager-FMLRR5S5.mjs.map +7 -0
  46. package/dist/lib/node-esm/chunk-7XQLXMX7.mjs +1816 -0
  47. package/dist/lib/node-esm/chunk-7XQLXMX7.mjs.map +7 -0
  48. package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs +107 -0
  49. package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs.map +7 -0
  50. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  51. package/dist/lib/node-esm/{chunk-2MMJF7DW.mjs → chunk-KRBZBJRI.mjs} +79 -76
  52. package/dist/lib/node-esm/chunk-KRBZBJRI.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-KGYDYYKJ.mjs → chunk-QP3KQOPQ.mjs} +78 -61
  54. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs → chunk-VBI32FGI.mjs} +1 -1
  56. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs.map → chunk-VBI32FGI.mjs.map} +2 -2
  57. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs +294 -0
  58. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
  59. package/dist/lib/node-esm/index.mjs +121 -114
  60. package/dist/lib/node-esm/index.mjs.map +4 -4
  61. package/dist/lib/node-esm/markdown-L6LLQLIN.mjs +211 -0
  62. package/dist/lib/node-esm/markdown-L6LLQLIN.mjs.map +7 -0
  63. package/dist/lib/node-esm/meta.json +1 -1
  64. package/dist/lib/node-esm/operation-resolver-G6GZPBRP.mjs +442 -0
  65. package/dist/lib/node-esm/operation-resolver-G6GZPBRP.mjs.map +7 -0
  66. package/dist/lib/node-esm/react-root-V4W4X5GL.mjs +26 -0
  67. package/dist/lib/node-esm/react-root-V4W4X5GL.mjs.map +7 -0
  68. package/dist/lib/node-esm/{react-surface-O4LGTAZ3.mjs → react-surface-ELDSTUA3.mjs} +43 -42
  69. package/dist/lib/node-esm/react-surface-ELDSTUA3.mjs.map +7 -0
  70. package/dist/lib/node-esm/repair-6777EPOM.mjs +39 -0
  71. package/dist/lib/node-esm/repair-6777EPOM.mjs.map +7 -0
  72. package/dist/lib/node-esm/settings-37CO3SNR.mjs +33 -0
  73. package/dist/lib/node-esm/settings-37CO3SNR.mjs.map +7 -0
  74. package/dist/lib/node-esm/state-5R3TZJQE.mjs +25 -0
  75. package/dist/lib/node-esm/state-5R3TZJQE.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +7 -7
  77. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  78. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  79. package/dist/types/src/blueprints/index.d.ts +2 -0
  80. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  81. package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
  82. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  83. package/dist/types/src/calls/call-manager.d.ts +40 -30
  84. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  85. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  86. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  87. package/dist/types/src/calls/media-manager.d.ts +1 -1
  88. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  89. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  90. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  91. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  92. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  94. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  96. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +9 -0
  98. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  100. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  102. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  104. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/index.d.ts +10 -16
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  108. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  110. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  112. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  114. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  116. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  118. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  120. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  122. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  124. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  126. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/settings/settings.d.ts +5 -0
  130. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  132. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  134. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  135. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  136. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  137. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  138. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  139. package/dist/types/src/components/ChannelContainer.d.ts +4 -5
  140. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  141. package/dist/types/src/components/ChannelContainer.stories.d.ts +6 -2
  142. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/Chat.stories.d.ts +5 -1
  144. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/ChatContainer.d.ts +2 -2
  146. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  147. package/dist/types/src/components/Comments.stories.d.ts +5 -1
  148. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  150. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  151. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  152. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  153. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  154. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  155. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  156. package/dist/types/src/components/MessageContainer.d.ts +4 -3
  157. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  159. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -1
  160. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -1
  162. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  163. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  164. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  165. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  166. package/dist/types/src/components/ThreadSettings.d.ts +4 -2
  167. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  168. package/dist/types/src/components/index.d.ts +3 -3
  169. package/dist/types/src/components/index.d.ts.map +1 -1
  170. package/dist/types/src/components/testing.d.ts +1 -1
  171. package/dist/types/src/components/testing.d.ts.map +1 -1
  172. package/dist/types/src/extensions/threads.d.ts +7 -2
  173. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  174. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  175. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  176. package/dist/types/src/functions/index.d.ts +2 -0
  177. package/dist/types/src/functions/index.d.ts.map +1 -0
  178. package/dist/types/src/hooks/analytics.d.ts +2 -3
  179. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  180. package/dist/types/src/hooks/index.d.ts +2 -2
  181. package/dist/types/src/hooks/index.d.ts.map +1 -1
  182. package/dist/types/src/index.d.ts +1 -1
  183. package/dist/types/src/index.d.ts.map +1 -1
  184. package/dist/types/src/meta.d.ts +2 -2
  185. package/dist/types/src/meta.d.ts.map +1 -1
  186. package/dist/types/src/testing/stories.d.ts +2 -1
  187. package/dist/types/src/testing/stories.d.ts.map +1 -1
  188. package/dist/types/src/translations.d.ts +5 -1
  189. package/dist/types/src/translations.d.ts.map +1 -1
  190. package/dist/types/src/types/Channel.d.ts +691 -12
  191. package/dist/types/src/types/Channel.d.ts.map +1 -1
  192. package/dist/types/src/types/capabilities.d.ts +23 -0
  193. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  194. package/dist/types/src/types/index.d.ts +1 -1
  195. package/dist/types/src/types/index.d.ts.map +1 -1
  196. package/dist/types/src/types/types.d.ts +3216 -430
  197. package/dist/types/src/types/types.d.ts.map +1 -1
  198. package/dist/types/tsconfig.tsbuildinfo +1 -1
  199. package/package.json +86 -65
  200. package/src/ThreadPlugin.tsx +56 -88
  201. package/src/blueprints/index.ts +5 -0
  202. package/src/blueprints/thread-blueprint.ts +32 -0
  203. package/src/calls/call-manager.ts +76 -52
  204. package/src/calls/call-swarm-synchronizer.ts +2 -2
  205. package/src/calls/media-manager.ts +10 -7
  206. package/src/calls/util/calls-service.ts +1 -1
  207. package/src/calls/util/stub-media-streams.ts +2 -2
  208. package/src/calls/util/task-scheduling.ts +4 -4
  209. package/src/capabilities/app-graph-builder/app-graph-builder.ts +201 -0
  210. package/src/capabilities/app-graph-builder/index.ts +7 -0
  211. package/src/capabilities/blueprint-definition/blueprint-definition.ts +23 -0
  212. package/src/capabilities/blueprint-definition/index.ts +7 -0
  213. package/src/capabilities/call-manager/call-manager.ts +26 -0
  214. package/src/capabilities/call-manager/index.ts +7 -0
  215. package/src/capabilities/index.ts +10 -13
  216. package/src/capabilities/markdown/index.ts +7 -0
  217. package/src/capabilities/markdown/markdown.ts +83 -0
  218. package/src/capabilities/operation-resolver/index.ts +7 -0
  219. package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
  220. package/src/capabilities/react-root/index.ts +7 -0
  221. package/src/capabilities/react-root/react-root.tsx +20 -0
  222. package/src/capabilities/react-surface/index.ts +7 -0
  223. package/src/capabilities/react-surface/react-surface.tsx +97 -0
  224. package/src/capabilities/repair/index.ts +7 -0
  225. package/src/capabilities/repair/repair.ts +51 -0
  226. package/src/capabilities/settings/index.ts +7 -0
  227. package/src/capabilities/settings/settings.ts +33 -0
  228. package/src/capabilities/state/index.ts +7 -0
  229. package/src/capabilities/state/state.ts +22 -0
  230. package/src/components/Call/Call.tsx +8 -4
  231. package/src/components/Call/Toolbar.tsx +31 -23
  232. package/src/components/CallDebugPanel.tsx +12 -14
  233. package/src/components/CallSidebar.tsx +5 -3
  234. package/src/components/ChannelContainer.stories.tsx +12 -10
  235. package/src/components/ChannelContainer.tsx +22 -19
  236. package/src/components/Chat.stories.tsx +9 -9
  237. package/src/components/ChatContainer.tsx +22 -21
  238. package/src/components/Comments.stories.tsx +25 -23
  239. package/src/components/CommentsContainer.tsx +4 -6
  240. package/src/components/CommentsThreadContainer.tsx +21 -22
  241. package/src/components/Lobby/Lobby.tsx +9 -7
  242. package/src/components/Media/AudioStream.tsx +2 -2
  243. package/src/components/Media/VideoObject.tsx +2 -2
  244. package/src/components/MessageContainer.tsx +59 -28
  245. package/src/components/Participant/Participant.tsx +32 -19
  246. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +3 -3
  247. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +1 -1
  248. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
  249. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +6 -3
  250. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +79 -67
  251. package/src/components/ThreadSettings.tsx +6 -1
  252. package/src/components/command-extension.ts +2 -2
  253. package/src/components/index.ts +4 -7
  254. package/src/components/testing.ts +3 -5
  255. package/src/extensions/threads.ts +82 -38
  256. package/src/functions/create-proposals.ts +57 -0
  257. package/src/functions/index.ts +5 -0
  258. package/src/hooks/analytics.ts +21 -21
  259. package/src/hooks/index.ts +3 -2
  260. package/src/index.ts +1 -1
  261. package/src/meta.ts +2 -2
  262. package/src/testing/stories.ts +15 -11
  263. package/src/translations.ts +3 -1
  264. package/src/types/Channel.ts +13 -10
  265. package/src/types/capabilities.ts +34 -0
  266. package/src/types/index.ts +1 -1
  267. package/src/types/types.ts +163 -85
  268. package/dist/lib/browser/ChannelContainer-SVV4ZX5T.mjs +0 -16
  269. package/dist/lib/browser/ChatContainer-ALFWQ65B.mjs +0 -15
  270. package/dist/lib/browser/app-graph-builder-ACBXRBOS.mjs +0 -171
  271. package/dist/lib/browser/app-graph-builder-ACBXRBOS.mjs.map +0 -7
  272. package/dist/lib/browser/call-manager-P3MYR2JS.mjs +0 -24
  273. package/dist/lib/browser/call-manager-P3MYR2JS.mjs.map +0 -7
  274. package/dist/lib/browser/chunk-6CUDBEYP.mjs +0 -377
  275. package/dist/lib/browser/chunk-6CUDBEYP.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-BBTXGRIR.mjs +0 -18
  277. package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-DJOUMWEL.mjs +0 -988
  279. package/dist/lib/browser/chunk-DJOUMWEL.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-HDEQRBOC.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-IQSXEHOW.mjs +0 -618
  282. package/dist/lib/browser/chunk-IQSXEHOW.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-K2DUJRFJ.mjs +0 -27
  284. package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-L6F2AG6W.mjs +0 -23
  286. package/dist/lib/browser/chunk-L6F2AG6W.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-US5ZQYC3.mjs.map +0 -7
  288. package/dist/lib/browser/chunk-UTSLSZED.mjs +0 -178
  289. package/dist/lib/browser/chunk-UTSLSZED.mjs.map +0 -7
  290. package/dist/lib/browser/intent-resolver-5POQTZ24.mjs +0 -419
  291. package/dist/lib/browser/intent-resolver-5POQTZ24.mjs.map +0 -7
  292. package/dist/lib/browser/markdown-L7LDNF56.mjs +0 -169
  293. package/dist/lib/browser/markdown-L7LDNF56.mjs.map +0 -7
  294. package/dist/lib/browser/react-root-RCJLK4EP.mjs +0 -28
  295. package/dist/lib/browser/react-root-RCJLK4EP.mjs.map +0 -7
  296. package/dist/lib/browser/react-surface-IC576W2W.mjs.map +0 -7
  297. package/dist/lib/browser/settings-5FYGBOGI.mjs +0 -22
  298. package/dist/lib/browser/settings-5FYGBOGI.mjs.map +0 -7
  299. package/dist/lib/browser/state-36REWXO5.mjs +0 -34
  300. package/dist/lib/browser/state-36REWXO5.mjs.map +0 -7
  301. package/dist/lib/browser/toolkit-PXASLYEQ.mjs +0 -74
  302. package/dist/lib/browser/toolkit-PXASLYEQ.mjs.map +0 -7
  303. package/dist/lib/node-esm/ChannelContainer-63GMQ753.mjs +0 -17
  304. package/dist/lib/node-esm/ChatContainer-MFKPXMIK.mjs +0 -16
  305. package/dist/lib/node-esm/app-graph-builder-JXD7KY3G.mjs +0 -172
  306. package/dist/lib/node-esm/app-graph-builder-JXD7KY3G.mjs.map +0 -7
  307. package/dist/lib/node-esm/call-manager-FCEFP7EJ.mjs +0 -25
  308. package/dist/lib/node-esm/call-manager-FCEFP7EJ.mjs.map +0 -7
  309. package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +0 -7
  310. package/dist/lib/node-esm/chunk-AFDO2SUZ.mjs +0 -25
  311. package/dist/lib/node-esm/chunk-AFDO2SUZ.mjs.map +0 -7
  312. package/dist/lib/node-esm/chunk-KGYDYYKJ.mjs.map +0 -7
  313. package/dist/lib/node-esm/chunk-NWUUMKVQ.mjs +0 -378
  314. package/dist/lib/node-esm/chunk-NWUUMKVQ.mjs.map +0 -7
  315. package/dist/lib/node-esm/chunk-Q7AKKZNY.mjs +0 -619
  316. package/dist/lib/node-esm/chunk-Q7AKKZNY.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-QCQAAU6J.mjs +0 -989
  318. package/dist/lib/node-esm/chunk-QCQAAU6J.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-TYLLHI46.mjs +0 -179
  320. package/dist/lib/node-esm/chunk-TYLLHI46.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-XI45H4IV.mjs +0 -28
  322. package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +0 -19
  324. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +0 -7
  325. package/dist/lib/node-esm/intent-resolver-63NV3XD2.mjs +0 -420
  326. package/dist/lib/node-esm/intent-resolver-63NV3XD2.mjs.map +0 -7
  327. package/dist/lib/node-esm/markdown-ZQW7MI5U.mjs +0 -170
  328. package/dist/lib/node-esm/markdown-ZQW7MI5U.mjs.map +0 -7
  329. package/dist/lib/node-esm/react-root-4IDB2SN2.mjs +0 -29
  330. package/dist/lib/node-esm/react-root-4IDB2SN2.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-surface-O4LGTAZ3.mjs.map +0 -7
  332. package/dist/lib/node-esm/settings-EOBQUZSW.mjs +0 -23
  333. package/dist/lib/node-esm/settings-EOBQUZSW.mjs.map +0 -7
  334. package/dist/lib/node-esm/state-X3W67GTL.mjs +0 -35
  335. package/dist/lib/node-esm/state-X3W67GTL.mjs.map +0 -7
  336. package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs +0 -75
  337. package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs.map +0 -7
  338. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  339. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  340. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  341. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  342. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  343. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  344. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  345. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  346. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  347. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  348. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  349. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  350. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  351. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  352. package/dist/types/src/capabilities/settings.d.ts +0 -4
  353. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  354. package/dist/types/src/capabilities/state.d.ts +0 -7
  355. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  356. package/dist/types/src/capabilities/toolkit.d.ts +0 -24
  357. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  358. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  359. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  360. package/dist/types/src/types/Thread.d.ts +0 -167
  361. package/dist/types/src/types/Thread.d.ts.map +0 -1
  362. package/src/capabilities/app-graph-builder.ts +0 -186
  363. package/src/capabilities/call-manager.ts +0 -20
  364. package/src/capabilities/capabilities.ts +0 -33
  365. package/src/capabilities/intent-resolver.ts +0 -344
  366. package/src/capabilities/markdown.ts +0 -69
  367. package/src/capabilities/react-root.tsx +0 -17
  368. package/src/capabilities/react-surface.tsx +0 -89
  369. package/src/capabilities/settings.ts +0 -19
  370. package/src/capabilities/state.ts +0 -26
  371. package/src/capabilities/toolkit.ts +0 -85
  372. package/src/types/Thread.ts +0 -26
  373. /package/dist/lib/browser/{ChannelContainer-SVV4ZX5T.mjs.map → blueprints/index.mjs.map} +0 -0
  374. /package/dist/lib/browser/{ChatContainer-ALFWQ65B.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  375. /package/dist/lib/node-esm/{ChannelContainer-63GMQ753.mjs.map → blueprints/index.mjs.map} +0 -0
  376. /package/dist/lib/node-esm/{ChatContainer-MFKPXMIK.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
@@ -50,7 +50,7 @@ export type CallState = {
50
50
  tracks?: UserState['tracks'];
51
51
  };
52
52
 
53
- export type CallSwarmSynchronizerParams = { networkService: NetworkService };
53
+ export type CallSwarmSynchronizerProps = { networkService: NetworkService };
54
54
 
55
55
  /**
56
56
  * Period for peer to reconnect to the call swarm gracefully if connection was lost abruptly.
@@ -76,7 +76,7 @@ export class CallSwarmSynchronizer extends Resource {
76
76
 
77
77
  private _sendStateTask?: DeferredTask = undefined;
78
78
 
79
- constructor({ networkService }: CallSwarmSynchronizerParams) {
79
+ constructor({ networkService }: CallSwarmSynchronizerProps) {
80
80
  super();
81
81
  this._networkService = networkService;
82
82
  }
@@ -51,7 +51,7 @@ const MAX_WEB_CAM_FRAMERATE = 24;
51
51
  const MAX_WEB_CAM_BITRATE = 120_0000;
52
52
  const RETRY_INTERVAL = 100;
53
53
 
54
- export type MediaManagerParams = {
54
+ export type MediaManagerProps = {
55
55
  serviceConfig: CallsServiceConfig;
56
56
  };
57
57
 
@@ -59,9 +59,13 @@ const USE_INAUDIBLE_AUDIO = true;
59
59
 
60
60
  export class MediaManager extends Resource {
61
61
  public readonly stateUpdated = new Event<MediaState>();
62
- private readonly _state: MediaState = { pulledVideoStreams: {}, pulledAudioTracks: {} };
63
- private _speakingMonitor?: SpeakingMonitor = undefined;
64
62
 
63
+ private readonly _state: MediaState = {
64
+ pulledVideoStreams: {},
65
+ pulledAudioTracks: {},
66
+ };
67
+
68
+ private _speakingMonitor?: SpeakingMonitor = undefined;
65
69
  private _trackToReconcile: EncodedTrackName[] = [];
66
70
  private _blackCanvasStreamTrack?: MediaStreamTrack = undefined;
67
71
  private _inaudibleAudioStreamTrack?: MediaStreamTrack = undefined;
@@ -85,6 +89,7 @@ export class MediaManager extends Resource {
85
89
  width: VIDEO_WIDTH,
86
90
  height: VIDEO_HEIGHT,
87
91
  });
92
+
88
93
  this._state.videoTrack = this._blackCanvasStreamTrack;
89
94
  this._state.videoStream = new MediaStream();
90
95
  this._state.videoStream.addTrack(this._state.videoTrack);
@@ -137,6 +142,7 @@ export class MediaManager extends Resource {
137
142
  this._state.videoStream!.removeTrack(this._state.videoTrack!);
138
143
  this._state.videoTrack = await getUserMediaTrack('videoinput', { width: VIDEO_WIDTH, height: VIDEO_HEIGHT });
139
144
  this._state.videoStream!.addTrack(this._state.videoTrack);
145
+
140
146
  this._state.videoEnabled = true;
141
147
  this.stateUpdated.emit(this._state);
142
148
  this._pushTracksTask!.schedule();
@@ -226,7 +232,6 @@ export class MediaManager extends Resource {
226
232
  // Wait for cloudflare to process the track.
227
233
  await cancelWithContext(this._ctx, sleep(800));
228
234
  const trackNames = this._trackToReconcile;
229
-
230
235
  const tracksToPull = trackNames.filter(
231
236
  (name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name],
232
237
  );
@@ -258,8 +263,8 @@ export class MediaManager extends Resource {
258
263
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
259
264
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams),
260
265
  });
261
- this.stateUpdated.emit(this._state);
262
266
 
267
+ this.stateUpdated.emit(this._state);
263
268
  if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
264
269
  await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));
265
270
  log.info('retrying pull tracks', { tracksToPull });
@@ -296,7 +301,6 @@ export class MediaManager extends Resource {
296
301
  }
297
302
 
298
303
  const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
299
-
300
304
  if (updated) {
301
305
  this.stateUpdated.emit(this._state);
302
306
  }
@@ -356,7 +360,6 @@ export class MediaManager extends Resource {
356
360
  }
357
361
 
358
362
  const ctx = this._ctx.derive();
359
-
360
363
  try {
361
364
  return {
362
365
  track: await this._state.peer!.pushTrack({
@@ -27,7 +27,7 @@ export type Session = {
27
27
 
28
28
  export type CallsServiceConfig = {
29
29
  apiBase: string;
30
- apiExtraParams?: string;
30
+ apiExtraProps?: string;
31
31
  iceServers?: RTCIceServer[];
32
32
  };
33
33
 
@@ -60,13 +60,12 @@ const userGestureEvents = [
60
60
  */
61
61
  export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {
62
62
  const audioContext = new window.AudioContext();
63
+
63
64
  const oscillator = audioContext.createOscillator();
64
65
  oscillator.type = 'triangle';
65
- // roughly sounds like a box fan
66
66
  oscillator.frequency.setValueAtTime(20, audioContext.currentTime);
67
67
 
68
68
  const gainNode = audioContext.createGain();
69
- // even w/ gain at 0 some packets are sent
70
69
  gainNode.gain.setValueAtTime(0, audioContext.currentTime);
71
70
  oscillator.connect(gainNode);
72
71
 
@@ -85,6 +84,7 @@ export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context })
85
84
  audioContextStartedPreviously = true;
86
85
  ensureOscillatorStarted();
87
86
  }
87
+
88
88
  if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {
89
89
  resumeAudioContext();
90
90
  }
@@ -27,8 +27,8 @@ export class FIFOScheduler {
27
27
  }
28
28
 
29
29
  // TODO(mykola): Reconcile with @dxos/async task scheduling.
30
- export class BulkRequestDispatcher<RequestEntryParams, BulkResponse> {
31
- #currentBatch: RequestEntryParams[];
30
+ export class BulkRequestDispatcher<RequestEntryProps, BulkResponse> {
31
+ #currentBatch: RequestEntryProps[];
32
32
  #currentBulkResponse: Promise<BulkResponse> | null;
33
33
  #batchSizeLimit: number;
34
34
 
@@ -43,8 +43,8 @@ export class BulkRequestDispatcher<RequestEntryParams, BulkResponse> {
43
43
  * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
44
44
  */
45
45
  doBulkRequest(
46
- params: RequestEntryParams,
47
- bulkRequestFunc: (bulkCopy: RequestEntryParams[]) => Promise<BulkResponse>,
46
+ params: RequestEntryProps,
47
+ bulkRequestFunc: (bulkCopy: RequestEntryProps[]) => Promise<BulkResponse>,
48
48
  ): Promise<BulkResponse> {
49
49
  if (this.#currentBatch.length >= this.#batchSizeLimit) {
50
50
  // If it reaches the batch size limit, we make another bulk request.
@@ -0,0 +1,201 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Atom } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Option from 'effect/Option';
8
+
9
+ import { Capability, Common } from '@dxos/app-framework';
10
+ import { Obj } from '@dxos/echo';
11
+ import { Operation } from '@dxos/operation';
12
+ import { AttentionCapabilities } from '@dxos/plugin-attention';
13
+ import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
14
+ import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
15
+ import { type SelectionManager, type SelectionMode, defaultSelection } from '@dxos/react-ui-attention';
16
+
17
+ import { meta } from '../../meta';
18
+ import { Channel, ThreadCapabilities, ThreadOperation, type ThreadState } from '../../types';
19
+ import { getAnchor } from '../../util';
20
+
21
+ type CommentDisabledParams = {
22
+ stateAtom: Atom.Atom<Atom.Writable<ThreadState>[]>;
23
+ selectionManager: SelectionManager;
24
+ objectId: string;
25
+ commentsType: string;
26
+ selectionMode: SelectionMode | undefined;
27
+ };
28
+
29
+ /**
30
+ * Atom family to derive whether the comment button should be disabled.
31
+ * Uses a composite key to ensure proper caching.
32
+ */
33
+ const commentDisabledFamily = Atom.family(
34
+ ({ stateAtom, selectionManager, objectId, commentsType, selectionMode }: CommentDisabledParams) =>
35
+ Atom.make((get) => {
36
+ const stateAtoms = get(stateAtom);
37
+ const state = stateAtoms[0] ? get(stateAtoms[0]) : undefined;
38
+ const toolbar = state?.toolbar ?? {};
39
+ const selectionState = get(selectionManager.state);
40
+ const selection =
41
+ selectionState.selections[objectId] ?? (selectionMode ? defaultSelection(selectionMode) : undefined);
42
+ const anchor = getAnchor(selection);
43
+ const invalidSelection = !anchor;
44
+ const overlappingComment = toolbar[objectId];
45
+ return (commentsType === 'anchored' && invalidSelection) || overlappingComment;
46
+ }),
47
+ );
48
+
49
+ /** Match ECHO objects that are NOT Channels (i.e. objects that can have comments). */
50
+ const whenCommentableObject = NodeMatcher.whenAll(
51
+ NodeMatcher.whenEchoObjectMatches,
52
+ NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),
53
+ );
54
+
55
+ // TODO(wittjosiah): Highlight active calls in L1.
56
+ // Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.
57
+ export default Capability.makeModule(
58
+ Effect.fnUntraced(function* () {
59
+ const capabilities = yield* Capability.Service;
60
+
61
+ const resolve = (typename: string) =>
62
+ capabilities.getAll(Common.Capability.Metadata).find(({ id }: { id: string }) => id === typename)?.metadata ?? {};
63
+
64
+ const extensions = yield* Effect.all([
65
+ GraphBuilder.createExtension({
66
+ id: `${meta.id}/active-call`,
67
+ match: NodeMatcher.whenRoot,
68
+ connector: (node, get) => {
69
+ const callManagerAtom = capabilities.atom(ThreadCapabilities.CallManager);
70
+ const [call] = get(callManagerAtom);
71
+ if (!call) {
72
+ return Effect.succeed([]);
73
+ }
74
+ // Use derived joinedAtom for efficient subscription.
75
+ const joined = get(call.joinedAtom);
76
+ return Effect.succeed(
77
+ joined
78
+ ? [
79
+ {
80
+ id: `${node.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,
81
+ type: DECK_COMPANION_TYPE,
82
+ data: null,
83
+ properties: {
84
+ label: ['call panel label', { ns: meta.id }],
85
+ icon: 'ph--video-conference--regular',
86
+ position: 'hoist',
87
+ disposition: 'hidden',
88
+ },
89
+ },
90
+ ]
91
+ : [],
92
+ );
93
+ },
94
+ }),
95
+ GraphBuilder.createTypeExtension({
96
+ id: `${meta.id}/channel-chat-companion`,
97
+ type: Channel.Channel,
98
+ connector: (channel, get) => {
99
+ const callManager = capabilities.get(ThreadCapabilities.CallManager);
100
+ // Use derived atoms for efficient subscription.
101
+ const joined = get(callManager.joinedAtom);
102
+ const roomId = get(callManager.roomIdAtom);
103
+ const isActive = joined && roomId === Obj.getDXN(channel).toString();
104
+ if (!isActive) {
105
+ return Effect.succeed([]);
106
+ }
107
+
108
+ return Effect.succeed([
109
+ {
110
+ id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,
111
+ type: PLANK_COMPANION_TYPE,
112
+ data: 'chat',
113
+ properties: {
114
+ label: ['channel companion label', { ns: meta.id }],
115
+ icon: 'ph--hash--regular',
116
+ position: 'hoist',
117
+ disposition: 'hidden',
118
+ },
119
+ },
120
+ ]);
121
+ },
122
+ }),
123
+ GraphBuilder.createExtension({
124
+ id: `${meta.id}/comments-companion`,
125
+ match: (node) => {
126
+ if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {
127
+ return Option.none();
128
+ }
129
+ const metadata = resolve(Obj.getTypename(node.data)!);
130
+ return typeof metadata.comments === 'string' ? Option.some(node) : Option.none();
131
+ },
132
+ connector: (node) =>
133
+ Effect.succeed([
134
+ {
135
+ id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),
136
+ type: PLANK_COMPANION_TYPE,
137
+ data: 'comments',
138
+ properties: {
139
+ label: ['comments label', { ns: meta.id }],
140
+ icon: 'ph--chat-text--regular',
141
+ disposition: 'hidden',
142
+ position: 'hoist',
143
+ },
144
+ },
145
+ ]),
146
+ }),
147
+ GraphBuilder.createExtension({
148
+ id: `${meta.id}/comment-toolbar`,
149
+ match: (node) => {
150
+ if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {
151
+ return Option.none();
152
+ }
153
+ const metadata = resolve(Obj.getTypename(node.data)!);
154
+ return typeof metadata.comments === 'string' ? Option.some(node.data) : Option.none();
155
+ },
156
+ actions: (object, get) => {
157
+ const stateAtom = capabilities.atom(ThreadCapabilities.State);
158
+ const selectionManager = capabilities.get(AttentionCapabilities.Selection);
159
+ const objectId = Obj.getDXN(object).toString();
160
+ const metadata = resolve(Obj.getTypename(object)!);
161
+
162
+ const disabled = get(
163
+ commentDisabledFamily({
164
+ stateAtom,
165
+ selectionManager,
166
+ objectId,
167
+ commentsType: metadata.comments as string,
168
+ selectionMode: metadata.selectionMode,
169
+ }),
170
+ );
171
+
172
+ return Effect.succeed([
173
+ {
174
+ id: `${Obj.getDXN(object).toString()}/comment`,
175
+ data: Effect.fnUntraced(function* () {
176
+ const metadata = resolve(Obj.getTypename(object)!);
177
+ const selection = selectionManager.getSelection(Obj.getDXN(object).toString());
178
+ const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();
179
+ const name = metadata.getAnchorLabel?.(object, anchor);
180
+ yield* Operation.invoke(ThreadOperation.Create, {
181
+ anchor,
182
+ name,
183
+ subject: object,
184
+ });
185
+ }),
186
+ properties: {
187
+ label: ['add comment label', { ns: meta.id }],
188
+ icon: 'ph--chat-text--regular',
189
+ disposition: 'toolbar',
190
+ disabled,
191
+ testId: 'thread.comment.add',
192
+ },
193
+ },
194
+ ]);
195
+ },
196
+ }),
197
+ ]);
198
+
199
+ return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
200
+ }),
201
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+
9
+ import { ThreadBlueprint } from '../../blueprints';
10
+
11
+ export type BlueprintCapabilities = [
12
+ Capability.Capability<typeof Common.Capability.Functions>,
13
+ Capability.Capability<typeof Common.Capability.BlueprintDefinition>,
14
+ ];
15
+
16
+ const blueprintDefinition = Capability.makeModule<[], BlueprintCapabilities>(() =>
17
+ Effect.succeed([
18
+ Capability.contributes(Common.Capability.Functions, ThreadBlueprint.functions),
19
+ Capability.contributes(Common.Capability.BlueprintDefinition, ThreadBlueprint.make()),
20
+ ]),
21
+ );
22
+
23
+ export default blueprintDefinition;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const BlueprintDefinition = Capability.lazy('BlueprintDefinition', () => import('./blueprint-definition'));
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { ClientCapabilities } from '@dxos/plugin-client';
9
+
10
+ import { CallManager } from '../../calls';
11
+ import { ThreadCapabilities } from '../../types';
12
+
13
+ export default Capability.makeModule(
14
+ Effect.fnUntraced(function* () {
15
+ const client = yield* Capability.get(ClientCapabilities.Client);
16
+ const registry = yield* Capability.get(Common.Capability.AtomRegistry);
17
+ const callManager = new CallManager(client, registry);
18
+ yield* Effect.tryPromise(() => callManager.open());
19
+
20
+ return Capability.contributes(ThreadCapabilities.CallManager, callManager, () =>
21
+ Effect.sync(() => {
22
+ void callManager.close();
23
+ }),
24
+ );
25
+ }),
26
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const CallManager = Capability.lazy('CallManager', () => import('./call-manager'));
@@ -2,16 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
6
-
7
- export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
8
- export const CallManager = lazy(() => import('./call-manager'));
9
- export const IntentResolver = lazy(() => import('./intent-resolver'));
10
- export const Markdown = lazy(() => import('./markdown'));
11
- export const ReactRoot = lazy(() => import('./react-root'));
12
- export const ReactSurface = lazy(() => import('./react-surface'));
13
- export const ThreadSettings = lazy(() => import('./settings'));
14
- export const ThreadState = lazy(() => import('./state'));
15
- export const Toolkit = lazy(() => import('./toolkit'));
16
-
17
- export * from './capabilities';
5
+ export * from './app-graph-builder';
6
+ export * from './blueprint-definition';
7
+ export * from './call-manager';
8
+ export * from './markdown';
9
+ export * from './operation-resolver';
10
+ export * from './react-root';
11
+ export * from './react-surface';
12
+ export * from './repair';
13
+ export * from './settings';
14
+ export * from './state';
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const Markdown = Capability.lazy('Markdown', () => import('./markdown'));
@@ -0,0 +1,83 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { EditorView } from '@codemirror/view';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Capability, Common } from '@dxos/app-framework';
9
+ import { Obj } from '@dxos/echo';
10
+ import { ATTENDABLE_PATH_SEPARATOR, DeckOperation } from '@dxos/plugin-deck/types';
11
+ import { MarkdownCapabilities } from '@dxos/plugin-markdown';
12
+ import { type EditorState, commentClickedEffect, commentsState, overlap } from '@dxos/ui-editor';
13
+
14
+ import { threads } from '../../extensions';
15
+ import { ThreadCapabilities } from '../../types';
16
+
17
+ export default Capability.makeModule(
18
+ Effect.fnUntraced(function* () {
19
+ // Get context for lazy capability access in callbacks.
20
+ const capabilities = yield* Capability.Service;
21
+
22
+ return Capability.contributes(MarkdownCapabilities.Extensions, [
23
+ ({ document: doc }) => {
24
+ const { invokePromise } = capabilities.get(Common.Capability.OperationInvoker);
25
+ const registry = capabilities.get(Common.Capability.AtomRegistry);
26
+ const stateAtom = capabilities.get(ThreadCapabilities.State);
27
+ return threads({ registry, stateAtom }, doc, invokePromise);
28
+ },
29
+ ({ document: doc }) => {
30
+ if (!doc) return [];
31
+ const registry = capabilities.get(Common.Capability.AtomRegistry);
32
+ const stateAtom = capabilities.get(ThreadCapabilities.State);
33
+
34
+ return EditorView.updateListener.of((update) => {
35
+ if (update.docChanged || update.selectionSet) {
36
+ const objectId = Obj.getDXN(doc).toString();
37
+ const overlaps = selectionOverlapsComment(update.state);
38
+ const current = registry.get(stateAtom);
39
+ registry.set(stateAtom, {
40
+ ...current,
41
+ toolbar: { ...current.toolbar, [objectId]: overlaps },
42
+ });
43
+ }
44
+ });
45
+ },
46
+ ({ document: doc }) => {
47
+ if (!doc) return [];
48
+ const { invokePromise } = capabilities.get(Common.Capability.OperationInvoker);
49
+ const id = Obj.getDXN(doc).toString();
50
+
51
+ return EditorView.updateListener.of((update) => {
52
+ update.transactions.forEach((transaction) => {
53
+ transaction.effects.forEach(async (effect) => {
54
+ if (effect.is(commentClickedEffect)) {
55
+ void invokePromise(DeckOperation.ChangeCompanion, {
56
+ primary: id,
57
+ companion: `${id}${ATTENDABLE_PATH_SEPARATOR}comments`,
58
+ });
59
+ }
60
+ });
61
+ });
62
+ });
63
+ },
64
+ ]);
65
+ }),
66
+ );
67
+
68
+ const selectionOverlapsComment = (state: EditorState): boolean => {
69
+ // May not be defined if thread plugin not installed.
70
+ const commentState = state.field(commentsState, false);
71
+ if (commentState === undefined) {
72
+ return false;
73
+ }
74
+
75
+ const { selection } = state;
76
+ for (const range of selection.ranges) {
77
+ if (commentState.comments.some(({ range: commentRange }) => overlap(commentRange, range))) {
78
+ return true;
79
+ }
80
+ }
81
+
82
+ return false;
83
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const OperationResolver = Capability.lazy('OperationResolver', () => import('./operation-resolver'));