@dxos/plugin-thread 0.8.4-main.c1de068 → 0.8.4-main.fd6878d

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 (195) hide show
  1. package/dist/lib/browser/ChannelContainer-O2SFQJU7.mjs +16 -0
  2. package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs → ChatContainer-PVT3DUZJ.mjs} +4 -4
  3. package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-AF3M7UWN.mjs} +5 -5
  4. package/dist/lib/browser/app-graph-builder-AF3M7UWN.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-XRRCAVLI.mjs} +4 -4
  6. package/dist/lib/browser/call-manager-XRRCAVLI.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2CWJBXBH.mjs +21 -0
  8. package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
  9. package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  10. package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-DW7JD64V.mjs} +1 -1
  11. package/dist/lib/browser/{chunk-GCLD5ESP.mjs.map → chunk-DW7JD64V.mjs.map} +2 -2
  12. package/dist/lib/browser/{chunk-XLPJXUKO.mjs → chunk-FY4ZRD5X.mjs} +8 -8
  13. package/dist/lib/{node-esm/chunk-J4NSON5Q.mjs.map → browser/chunk-FY4ZRD5X.mjs.map} +3 -3
  14. package/dist/lib/browser/{chunk-VUWC4IJM.mjs → chunk-J3JO5NWO.mjs} +26 -28
  15. package/dist/lib/browser/chunk-J3JO5NWO.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-JGKMMI65.mjs} +2 -2
  17. package/dist/lib/browser/{chunk-6NSMBO3B.mjs.map → chunk-JGKMMI65.mjs.map} +3 -3
  18. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-TUFWPOVS.mjs} +92 -63
  19. package/dist/lib/browser/chunk-TUFWPOVS.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-X5PIP5YR.mjs} +3 -3
  21. package/dist/lib/browser/{chunk-ERWASUQK.mjs.map → chunk-X5PIP5YR.mjs.map} +3 -3
  22. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-ZJ7QBXK6.mjs} +225 -225
  23. package/dist/lib/browser/chunk-ZJ7QBXK6.mjs.map +7 -0
  24. package/dist/lib/browser/index.mjs +7 -7
  25. package/dist/lib/browser/index.mjs.map +3 -3
  26. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-DCY4P4OX.mjs} +8 -8
  27. package/dist/lib/browser/intent-resolver-DCY4P4OX.mjs.map +7 -0
  28. package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-WZSXCEZJ.mjs} +4 -4
  29. package/dist/lib/browser/markdown-WZSXCEZJ.mjs.map +7 -0
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/{react-root-X4UIVGTX.mjs → react-root-QXPALOUQ.mjs} +9 -9
  32. package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-PYAMIADB.mjs} +9 -9
  33. package/dist/lib/browser/react-surface-PYAMIADB.mjs.map +7 -0
  34. package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-AC6YSASL.mjs} +2 -2
  35. package/dist/lib/browser/{state-H6CYONWE.mjs → state-2T4KDWBX.mjs} +2 -2
  36. package/dist/lib/browser/{state-H6CYONWE.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  37. package/dist/lib/browser/types/index.mjs +1 -1
  38. package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs → ChannelContainer-B2ZGAE4P.mjs} +7 -7
  39. package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-2CT4PJ7I.mjs} +4 -4
  40. package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-OLSJVCWY.mjs} +5 -5
  41. package/dist/lib/node-esm/app-graph-builder-OLSJVCWY.mjs.map +7 -0
  42. package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-EI7FXRAU.mjs} +4 -4
  43. package/dist/lib/node-esm/call-manager-EI7FXRAU.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-4TME3BR4.mjs} +92 -63
  45. package/dist/lib/node-esm/chunk-4TME3BR4.mjs.map +7 -0
  46. package/dist/lib/node-esm/chunk-6CRHHOST.mjs +23 -0
  47. package/dist/lib/node-esm/{chunk-J4NSON5Q.mjs → chunk-BF4UKS55.mjs} +8 -8
  48. package/dist/lib/node-esm/chunk-BF4UKS55.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
  50. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  51. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-QBHKLWGR.mjs} +2 -2
  52. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs.map → chunk-QBHKLWGR.mjs.map} +3 -3
  53. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-SED3O2XO.mjs} +3 -3
  54. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs.map → chunk-SED3O2XO.mjs.map} +3 -3
  55. package/dist/lib/node-esm/{chunk-2MFNK53T.mjs → chunk-VNG6M2IY.mjs} +26 -28
  56. package/dist/lib/node-esm/chunk-VNG6M2IY.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-XVKWHTH4.mjs} +1 -1
  58. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs.map → chunk-XVKWHTH4.mjs.map} +2 -2
  59. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-YIDU3DXK.mjs} +225 -225
  60. package/dist/lib/node-esm/chunk-YIDU3DXK.mjs.map +7 -0
  61. package/dist/lib/node-esm/index.mjs +7 -7
  62. package/dist/lib/node-esm/index.mjs.map +3 -3
  63. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-QGTPU6QB.mjs} +8 -8
  64. package/dist/lib/node-esm/intent-resolver-QGTPU6QB.mjs.map +7 -0
  65. package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-3MZXUGUA.mjs} +4 -4
  66. package/dist/lib/node-esm/markdown-3MZXUGUA.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs → react-root-7ZFJYVUZ.mjs} +9 -9
  69. package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-UJFCSFNO.mjs} +9 -9
  70. package/dist/lib/node-esm/react-surface-UJFCSFNO.mjs.map +7 -0
  71. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-N52O7MLS.mjs} +2 -2
  72. package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-62TQKQVB.mjs} +2 -2
  73. package/dist/lib/node-esm/{state-D7WNDT3N.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  74. package/dist/lib/node-esm/types/index.mjs +1 -1
  75. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  76. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  77. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  78. package/dist/types/src/calls/types.d.ts +1 -1
  79. package/dist/types/src/calls/types.d.ts.map +1 -1
  80. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  81. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  82. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  83. package/dist/types/src/calls-service.stories.d.ts +1 -1
  84. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  87. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/index.d.ts +1 -1
  89. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  92. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  95. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  96. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  97. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  98. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  99. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  100. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  103. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  105. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  106. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  107. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  108. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  109. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  111. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  112. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +1 -1
  113. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +1 -1
  115. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  117. package/dist/types/src/extensions/threads.d.ts +2 -2
  118. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  119. package/dist/types/src/types/schema.d.ts +5 -3
  120. package/dist/types/src/types/schema.d.ts.map +1 -1
  121. package/dist/types/src/types/types.d.ts +6 -4
  122. package/dist/types/src/types/types.d.ts.map +1 -1
  123. package/dist/types/tsconfig.tsbuildinfo +1 -1
  124. package/package.json +47 -45
  125. package/src/ThreadPlugin.tsx +2 -2
  126. package/src/calls/call-manager.ts +1 -1
  127. package/src/calls/call-swarm-synchronizer.ts +1 -1
  128. package/src/calls/media-manager.ts +2 -2
  129. package/src/calls/types.ts +1 -1
  130. package/src/calls/util/calls-service.ts +4 -3
  131. package/src/calls/util/stub-media-streams.ts +2 -2
  132. package/src/calls-service.stories.tsx +3 -3
  133. package/src/capabilities/app-graph-builder.ts +6 -5
  134. package/src/capabilities/call-manager.ts +3 -2
  135. package/src/capabilities/capabilities.ts +2 -2
  136. package/src/capabilities/intent-resolver.ts +4 -3
  137. package/src/capabilities/markdown.ts +4 -3
  138. package/src/capabilities/react-surface.tsx +5 -4
  139. package/src/capabilities/state.ts +2 -1
  140. package/src/components/Call/Call.tsx +3 -2
  141. package/src/components/Call/Toolbar.tsx +2 -2
  142. package/src/components/CallDebugPanel.tsx +1 -1
  143. package/src/components/CallSidebar.tsx +2 -1
  144. package/src/components/ChannelContainer.stories.tsx +3 -2
  145. package/src/components/ChannelContainer.tsx +7 -6
  146. package/src/components/Chat.stories.tsx +3 -2
  147. package/src/components/ChatContainer.tsx +4 -3
  148. package/src/components/Comments.stories.tsx +4 -3
  149. package/src/components/CommentsContainer.tsx +2 -1
  150. package/src/components/CommentsThreadContainer.tsx +3 -2
  151. package/src/components/Lobby/Lobby.tsx +1 -1
  152. package/src/components/Media/VideoObject.stories.tsx +4 -3
  153. package/src/components/MessageContainer.tsx +4 -3
  154. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  155. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +4 -3
  156. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -3
  157. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  158. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  159. package/src/components/ThreadComplementary.tsx +1 -1
  160. package/src/components/command-extension.ts +1 -1
  161. package/src/extensions/threads.ts +6 -6
  162. package/src/hooks/useDebugMode.ts +1 -1
  163. package/src/testing/stories.ts +2 -2
  164. package/src/types/types.ts +2 -1
  165. package/src/typings.d.ts +8 -0
  166. package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
  167. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  168. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
  170. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
  173. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  174. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  175. package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
  176. package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
  177. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  178. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  179. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  181. package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
  182. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  183. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  184. package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
  185. package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
  186. /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-O2SFQJU7.mjs.map} +0 -0
  187. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-PVT3DUZJ.mjs.map} +0 -0
  188. /package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-2CWJBXBH.mjs.map} +0 -0
  189. /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-QXPALOUQ.mjs.map} +0 -0
  190. /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-AC6YSASL.mjs.map} +0 -0
  191. /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-B2ZGAE4P.mjs.map} +0 -0
  192. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-2CT4PJ7I.mjs.map} +0 -0
  193. /package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-6CRHHOST.mjs.map} +0 -0
  194. /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-7ZFJYVUZ.mjs.map} +0 -0
  195. /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-N52O7MLS.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';\nimport { Obj, type Ref } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport {\n CallDebugPanel,\n CallSidebar,\n ChannelContainer,\n ChatContainer,\n ThreadComplementary,\n ThreadSettings,\n} from '../components';\nimport { THREAD_PLUGIN } from '../meta';\nimport { ChannelType, type ThreadSettingsProps, ThreadType } from '../types';\n\nimport { ThreadCapabilities } from './capabilities';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${THREAD_PLUGIN}/channel`,\n role: 'article',\n filter: (data): data is { subject: ChannelType } => Obj.instanceOf(ChannelType, data.subject),\n component: ({ data: { subject: channel }, role }) => <ChannelContainer channel={channel} role={role} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/chat-companion`,\n role: 'article',\n filter: (data): data is { companionTo: ChannelType; subject: 'chat' } =>\n Obj.instanceOf(ChannelType, data.companionTo) && data.subject === 'chat',\n component: ({ data: { companionTo: channel } }) => {\n const space = getSpace(channel);\n const thread = channel.defaultThread.target;\n if (!space || !thread) {\n return null;\n }\n\n return <ChatContainer thread={thread} space={space} />;\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/thread`,\n role: 'article',\n filter: (data): data is { subject: ThreadType } => Obj.instanceOf(ThreadType, data.subject),\n component: ({ data: { subject: thread } }) => {\n const space = getSpace(thread);\n if (!space || !thread) {\n return null;\n }\n\n return <ChatContainer thread={thread} space={space} />;\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/comments`,\n role: 'article',\n filter: (data): data is { companionTo: { threads: Ref.Ref<ThreadType>[] } } =>\n data.subject === 'comments' && Obj.isObject(data.companionTo),\n // TODO(wittjosiah): This isn't scrolling properly in a plank.\n component: ({ data }) => <ThreadComplementary subject={data.companionTo} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<ThreadSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === THREAD_PLUGIN,\n component: ({ data: { subject } }) => <ThreadSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/assistant`,\n role: 'deck-companion--active-call',\n component: () => <CallSidebar />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/devtools-overview`,\n role: 'devtools-overview',\n component: () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n return <CallDebugPanel state={call.state} />;\n },\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,eAAeC,qBAAqB;AACxE,SAASC,WAAqB;AAC9B,SAASC,qBAAqB;AAC9B,SAASC,gBAAgB;AAezB,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA2CC,IAAIC,WAAWC,aAAaH,KAAKI,OAAO;IAC5FC,WAAW,CAAC,EAAEL,MAAM,EAAEI,SAASE,QAAO,GAAIR,KAAI,MAAO,sBAAA,cAACS,kBAAAA;MAAiBD;MAAkBR;;EAC3F,CAAA;EACAH,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPC,IAAIC,WAAWC,aAAaH,KAAKQ,WAAW,KAAKR,KAAKI,YAAY;IACpEC,WAAW,CAAC,EAAEL,MAAM,EAAEQ,aAAaF,QAAO,EAAE,MAAE;AAC5C,YAAMG,QAAQC,SAASJ,OAAAA;AACvB,YAAMK,SAASL,QAAQM,cAAcC;AACrC,UAAI,CAACJ,SAAS,CAACE,QAAQ;AACrB,eAAO;MACT;AAEA,aAAO,sBAAA,cAACG,eAAAA;QAAcH;QAAgBF;;IACxC;EACF,CAAA;EACAd,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA0CC,IAAIC,WAAWa,YAAYf,KAAKI,OAAO;IAC1FC,WAAW,CAAC,EAAEL,MAAM,EAAEI,SAASO,OAAM,EAAE,MAAE;AACvC,YAAMF,QAAQC,SAASC,MAAAA;AACvB,UAAI,CAACF,SAAS,CAACE,QAAQ;AACrB,eAAO;MACT;AAEA,aAAO,sBAAA,cAACG,eAAAA;QAAcH;QAAgBF;;IACxC;EACF,CAAA;EACAd,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKI,YAAY,cAAcH,IAAIe,SAAShB,KAAKQ,WAAW;;IAE9DH,WAAW,CAAC,EAAEL,KAAI,MAAO,sBAAA,cAACiB,qBAAAA;MAAoBb,SAASJ,KAAKQ;;EAC9D,CAAA;EACAb,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKI,mBAAmBc,iBAAiBlB,KAAKI,QAAQe,WAAWtB;IACnEQ,WAAW,CAAC,EAAEL,MAAM,EAAEI,QAAO,EAAE,MAAO,sBAAA,cAACgB,gBAAAA;MAAeC,UAAUjB,QAAQkB;;EAC1E,CAAA;EACA3B,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNO,WAAW,MAAM,sBAAA,cAACkB,aAAAA,IAAAA;EACpB,CAAA;EACA5B,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNO,WAAW,MAAA;AACT,YAAMmB,OAAOC,cAAcC,mBAAmBC,WAAW;AACzD,aAAO,sBAAA,cAACC,gBAAAA;QAAeC,OAAOL,KAAKK;;IACrC;EACF,CAAA;CACD;",
6
+ "names": ["React", "Capabilities", "contributes", "createSurface", "useCapability", "Obj", "SettingsStore", "getSpace", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "THREAD_PLUGIN", "role", "filter", "data", "Obj", "instanceOf", "ChannelType", "subject", "component", "channel", "ChannelContainer", "companionTo", "space", "getSpace", "thread", "defaultThread", "target", "ChatContainer", "ThreadType", "isObject", "ThreadComplementary", "SettingsStore", "prefix", "ThreadSettings", "settings", "value", "CallSidebar", "call", "useCapability", "ThreadCapabilities", "CallManager", "CallDebugPanel", "state"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ThreadSettingsSchema
3
- } from "./chunk-GCLD5ESP.mjs";
3
+ } from "./chunk-DW7JD64V.mjs";
4
4
  import {
5
5
  meta
6
6
  } from "./chunk-EV4JWI7L.mjs";
@@ -19,4 +19,4 @@ var settings_default = () => {
19
19
  export {
20
20
  settings_default as default
21
21
  };
22
- //# sourceMappingURL=settings-E32MTL7A.mjs.map
22
+ //# sourceMappingURL=settings-AC6YSASL.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ThreadCapabilities
3
- } from "./chunk-LGSDKXPF.mjs";
3
+ } from "./chunk-4APCDRSH.mjs";
4
4
  import "./chunk-EV4JWI7L.mjs";
5
5
 
6
6
  // src/capabilities/state.ts
@@ -31,4 +31,4 @@ var state_default = () => {
31
31
  export {
32
32
  state_default as default
33
33
  };
34
- //# sourceMappingURL=state-H6CYONWE.mjs.map
34
+ //# sourceMappingURL=state-2T4KDWBX.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/state.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { type ThreadState, type ViewStore } from '../types';\n\nconst initialViewState = { showResolvedThreads: false };\n\nexport default () => {\n const state = live<ThreadState>({ toolbar: {}, drafts: {} });\n const viewStore = live<ViewStore>({});\n\n const getViewState = (subjectId: string) => {\n if (!viewStore[subjectId]) {\n viewStore[subjectId] = { ...initialViewState };\n }\n return viewStore[subjectId];\n };\n\n return contributes(ThreadCapabilities.State, { state, getViewState });\n};\n"],
5
- "mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,YAAY;AAKrB,IAAMC,mBAAmB;EAAEC,qBAAqB;AAAM;AAEtD,IAAA,gBAAe,MAAA;AACb,QAAMC,QAAQC,KAAkB;IAAEC,SAAS,CAAC;IAAGC,QAAQ,CAAC;EAAE,CAAA;AAC1D,QAAMC,YAAYH,KAAgB,CAAC,CAAA;AAEnC,QAAMI,eAAe,CAACC,cAAAA;AACpB,QAAI,CAACF,UAAUE,SAAAA,GAAY;AACzBF,gBAAUE,SAAAA,IAAa;QAAE,GAAGR;MAAiB;IAC/C;AACA,WAAOM,UAAUE,SAAAA;EACnB;AAEA,SAAOC,YAAYC,mBAAmBC,OAAO;IAAET;IAAOK;EAAa,CAAA;AACrE;",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport { type ThreadState, type ViewStore } from '../types';\n\nimport { ThreadCapabilities } from './capabilities';\n\nconst initialViewState = { showResolvedThreads: false };\n\nexport default () => {\n const state = live<ThreadState>({ toolbar: {}, drafts: {} });\n const viewStore = live<ViewStore>({});\n\n const getViewState = (subjectId: string) => {\n if (!viewStore[subjectId]) {\n viewStore[subjectId] = { ...initialViewState };\n }\n return viewStore[subjectId];\n };\n\n return contributes(ThreadCapabilities.State, { state, getViewState });\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,YAAY;AAMrB,IAAMC,mBAAmB;EAAEC,qBAAqB;AAAM;AAEtD,IAAA,gBAAe,MAAA;AACb,QAAMC,QAAQC,KAAkB;IAAEC,SAAS,CAAC;IAAGC,QAAQ,CAAC;EAAE,CAAA;AAC1D,QAAMC,YAAYH,KAAgB,CAAC,CAAA;AAEnC,QAAMI,eAAe,CAACC,cAAAA;AACpB,QAAI,CAACF,UAAUE,SAAAA,GAAY;AACzBF,gBAAUE,SAAAA,IAAa;QAAE,GAAGR;MAAiB;IAC/C;AACA,WAAOM,UAAUE,SAAAA;EACnB;AAEA,SAAOC,YAAYC,mBAAmBC,OAAO;IAAET;IAAOK;EAAa,CAAA;AACrE;",
6
6
  "names": ["contributes", "live", "initialViewState", "showResolvedThreads", "state", "live", "toolbar", "drafts", "viewStore", "getViewState", "subjectId", "contributes", "ThreadCapabilities", "State"]
7
7
  }
@@ -4,7 +4,7 @@ import {
4
4
  ThreadSettingsSchema,
5
5
  ThreadStatus,
6
6
  ThreadType
7
- } from "../chunk-GCLD5ESP.mjs";
7
+ } from "../chunk-DW7JD64V.mjs";
8
8
  import "../chunk-EV4JWI7L.mjs";
9
9
  export {
10
10
  ChannelType,
@@ -2,16 +2,16 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  ChannelContainer,
4
4
  ChannelContainer_default
5
- } from "./chunk-C3XFMUAY.mjs";
6
- import "./chunk-GW37AAM4.mjs";
7
- import "./chunk-75RJ5DJI.mjs";
8
- import "./chunk-2MFNK53T.mjs";
9
- import "./chunk-25ABSYP2.mjs";
5
+ } from "./chunk-YIDU3DXK.mjs";
6
+ import "./chunk-6CRHHOST.mjs";
7
+ import "./chunk-PYTVBN5J.mjs";
8
+ import "./chunk-VNG6M2IY.mjs";
9
+ import "./chunk-SED3O2XO.mjs";
10
10
  import "./chunk-57XR3LEF.mjs";
11
- import "./chunk-OU5BYIDO.mjs";
11
+ import "./chunk-QBHKLWGR.mjs";
12
12
  import "./chunk-GRLRWTRU.mjs";
13
13
  export {
14
14
  ChannelContainer,
15
15
  ChannelContainer_default as default
16
16
  };
17
- //# sourceMappingURL=ChannelContainer-DET6T5N2.mjs.map
17
+ //# sourceMappingURL=ChannelContainer-B2ZGAE4P.mjs.map
@@ -3,14 +3,14 @@ import {
3
3
  ChatContainer,
4
4
  ChatContainer_default,
5
5
  ChatHeading
6
- } from "./chunk-2MFNK53T.mjs";
7
- import "./chunk-25ABSYP2.mjs";
6
+ } from "./chunk-VNG6M2IY.mjs";
7
+ import "./chunk-SED3O2XO.mjs";
8
8
  import "./chunk-57XR3LEF.mjs";
9
- import "./chunk-OU5BYIDO.mjs";
9
+ import "./chunk-QBHKLWGR.mjs";
10
10
  import "./chunk-GRLRWTRU.mjs";
11
11
  export {
12
12
  ChatContainer,
13
13
  ChatHeading,
14
14
  ChatContainer_default as default
15
15
  };
16
- //# sourceMappingURL=ChatContainer-IQUWU426.mjs.map
16
+ //# sourceMappingURL=ChatContainer-2CT4PJ7I.mjs.map
@@ -2,10 +2,10 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  ChannelType,
4
4
  ThreadAction
5
- } from "./chunk-TDFHTCZZ.mjs";
5
+ } from "./chunk-XVKWHTH4.mjs";
6
6
  import {
7
7
  ThreadCapabilities
8
- } from "./chunk-75RJ5DJI.mjs";
8
+ } from "./chunk-PYTVBN5J.mjs";
9
9
  import {
10
10
  getAnchor
11
11
  } from "./chunk-57XR3LEF.mjs";
@@ -20,8 +20,8 @@ import { Option, pipe } from "effect";
20
20
  import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
21
21
  import { Obj } from "@dxos/echo";
22
22
  import { AttentionCapabilities } from "@dxos/plugin-attention";
23
- import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
24
- import { createExtension, ROOT_ID, rxFromSignal } from "@dxos/plugin-graph";
23
+ import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
24
+ import { ROOT_ID, createExtension, rxFromSignal } from "@dxos/plugin-graph";
25
25
  import { fullyQualifiedId } from "@dxos/react-client/echo";
26
26
  var app_graph_builder_default = (context) => {
27
27
  const resolve = (typename) => context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
@@ -169,4 +169,4 @@ var app_graph_builder_default = (context) => {
169
169
  export {
170
170
  app_graph_builder_default as default
171
171
  };
172
- //# sourceMappingURL=app-graph-builder-VCW76Z6V.mjs.map
172
+ //# sourceMappingURL=app-graph-builder-OLSJVCWY.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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\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, createExtension, rxFromSignal } from '@dxos/plugin-graph';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\n\nimport { THREAD_PLUGIN, meta } from '../meta';\nimport { ChannelType, ThreadAction } from '../types';\nimport { getAnchor } from '../util';\n\nimport { ThreadCapabilities } from './capabilities';\n\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: `${THREAD_PLUGIN}/active-call`,\n connector: (node) =>\n Rx.make((get) =>\n 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 rxFromSignal(() =>\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: THREAD_PLUGIN }],\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: `${THREAD_PLUGIN}/channel-chat-companion`,\n connector: (node) => {\n return Rx.make((get) => {\n return pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(ChannelType, node.data) ? Option.some(node.data) : Option.none())),\n Option.map((channel) => {\n const callManager = context.getCapability(ThreadCapabilities.CallManager);\n const joined = get(\n rxFromSignal(() => callManager.joined && callManager.roomId === fullyQualifiedId(channel)),\n );\n if (!joined) {\n return [];\n }\n\n return [\n {\n id: `${fullyQualifiedId(channel)}${ATTENDABLE_PATH_SEPARATOR}chat`,\n type: PLANK_COMPANION_TYPE,\n data: 'chat',\n properties: {\n label: ['channel companion label', { ns: THREAD_PLUGIN }],\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 Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => {\n if (!Obj.isObject(node.data) || Obj.instanceOf(ChannelType, 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 Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => {\n if (!Obj.isObject(node.data) || Obj.instanceOf(ChannelType, 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 rxFromSignal(() => {\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(fullyQualifiedId(object), metadata.selectionMode);\n const anchor = getAnchor(selection);\n const invalidSelection = !anchor;\n const overlappingComment = toolbar[fullyQualifiedId(object)];\n return (metadata.comments === 'anchored' && invalidSelection) || overlappingComment;\n }),\n );\n\n return [\n {\n id: `${fullyQualifiedId(object)}/comment`,\n data: () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(fullyQualifiedId(object));\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(createIntent(ThreadAction.Create, { anchor, name, subject: object }));\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": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "Obj", "AttentionCapabilities", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "PLANK_COMPANION_TYPE", "ROOT_ID", "createExtension", "rxFromSignal", "fullyQualifiedId", "context", "resolve", "typename", "getCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "THREAD_PLUGIN", "connector", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "call", "capabilities", "ThreadCapabilities", "CallManager", "rxFromSignal", "joined", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "position", "disposition", "getOrElse", "Obj", "instanceOf", "ChannelType", "channel", "callManager", "getCapability", "roomId", "fullyQualifiedId", "PLANK_COMPANION_TYPE", "meta", "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", "toString", "name", "getAnchorLabel", "createIntent", "ThreadAction", "Create", "subject", "testId"]
7
+ }
@@ -1,11 +1,11 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  CallManager
4
- } from "./chunk-IHDNQLLR.mjs";
4
+ } from "./chunk-4TME3BR4.mjs";
5
5
  import {
6
6
  ThreadCapabilities
7
- } from "./chunk-75RJ5DJI.mjs";
8
- import "./chunk-OU5BYIDO.mjs";
7
+ } from "./chunk-PYTVBN5J.mjs";
8
+ import "./chunk-QBHKLWGR.mjs";
9
9
  import "./chunk-GRLRWTRU.mjs";
10
10
 
11
11
  // src/capabilities/call-manager.ts
@@ -22,4 +22,4 @@ var call_manager_default = async (context) => {
22
22
  export {
23
23
  call_manager_default as default
24
24
  };
25
- //# sourceMappingURL=call-manager-D6O5ZJJ4.mjs.map
25
+ //# sourceMappingURL=call-manager-EI7FXRAU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/call-manager.ts"],
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;",
6
+ "names": ["contributes", "ClientCapabilities", "context", "client", "getCapability", "ClientCapabilities", "Client", "callManager", "CallManager", "open", "contributes", "ThreadCapabilities", "close"]
7
+ }
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  createBlackCanvasStreamTrack,
4
4
  createInaudibleAudioStreamTrack
5
- } from "./chunk-OU5BYIDO.mjs";
5
+ } from "./chunk-QBHKLWGR.mjs";
6
6
 
7
7
  // src/calls/types.ts
8
8
  import { buf } from "@dxos/protocols/buf";
@@ -51,19 +51,20 @@ function _ts_decorate(decorators, target, key, desc) {
51
51
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
52
52
  var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
53
53
  var CallSwarmSynchronizer = class extends Resource {
54
+ stateUpdated = new Event();
55
+ _state = {
56
+ activities: {}
57
+ };
58
+ _networkService;
59
+ _lastSwarmEvent = void 0;
60
+ _reconcileSwarmStateTask = void 0;
61
+ _identityKey = void 0;
62
+ _deviceKey = void 0;
63
+ _displayName = void 0;
64
+ _swarmCtx = void 0;
65
+ _sendStateTask = void 0;
54
66
  constructor({ networkService }) {
55
67
  super();
56
- this.stateUpdated = new Event();
57
- this._state = {
58
- activities: {}
59
- };
60
- this._lastSwarmEvent = void 0;
61
- this._reconcileSwarmStateTask = void 0;
62
- this._identityKey = void 0;
63
- this._deviceKey = void 0;
64
- this._displayName = void 0;
65
- this._swarmCtx = void 0;
66
- this._sendStateTask = void 0;
67
68
  this._networkService = networkService;
68
69
  }
69
70
  /**
@@ -411,6 +412,8 @@ import { log as log2 } from "@dxos/log";
411
412
 
412
413
  // src/calls/util/history-cache.ts
413
414
  var HistoryCache = class {
415
+ _limit;
416
+ _messages;
414
417
  constructor(limit = 100) {
415
418
  this._limit = limit;
416
419
  this._messages = [];
@@ -487,17 +490,18 @@ var BulkRequestDispatcher = class {
487
490
  var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
488
491
  var NETWORK_TIMEOUT = 5e3;
489
492
  var CallsServicePeer = class extends Resource2 {
493
+ history = new HistoryCache(100);
494
+ _persistentLifecycle = new PersistentLifecycle({
495
+ start: () => this._startSession(),
496
+ stop: (session) => this._stopSession(session)
497
+ });
498
+ _config;
499
+ taskScheduler = new FIFOScheduler();
500
+ pushTrackDispatcher = new BulkRequestDispatcher(32);
501
+ pullTrackDispatcher = new BulkRequestDispatcher(32);
502
+ closeTrackDispatcher = new BulkRequestDispatcher(32);
490
503
  constructor(config) {
491
504
  super();
492
- this.history = new HistoryCache(100);
493
- this._persistentLifecycle = new PersistentLifecycle({
494
- start: () => this._startSession(),
495
- stop: (session) => this._stopSession(session)
496
- });
497
- this.taskScheduler = new FIFOScheduler();
498
- this.pushTrackDispatcher = new BulkRequestDispatcher(32);
499
- this.pullTrackDispatcher = new BulkRequestDispatcher(32);
500
- this.closeTrackDispatcher = new BulkRequestDispatcher(32);
501
505
  this._config = config;
502
506
  }
503
507
  async _open(ctx) {
@@ -531,7 +535,7 @@ var CallsServicePeer = class extends Resource2 {
531
535
  state: peerConnection.connectionState
532
536
  }, {
533
537
  F: __dxlog_file2,
534
- L: 118,
538
+ L: 119,
535
539
  S: this,
536
540
  C: (f, a) => f(...a)
537
541
  });
@@ -546,7 +550,7 @@ var CallsServicePeer = class extends Resource2 {
546
550
  state: peerConnection.iceConnectionState
547
551
  }, {
548
552
  F: __dxlog_file2,
549
- L: 127,
553
+ L: 128,
550
554
  S: this,
551
555
  C: (f, a) => f(...a)
552
556
  });
@@ -557,7 +561,7 @@ var CallsServicePeer = class extends Resource2 {
557
561
  if (peerConnection.iceConnectionState === "connected") {
558
562
  log2.info("calls iceConnectionState is connected", void 0, {
559
563
  F: __dxlog_file2,
560
- L: 136,
564
+ L: 137,
561
565
  S: this,
562
566
  C: (f, a) => f(...a)
563
567
  });
@@ -568,7 +572,7 @@ var CallsServicePeer = class extends Resource2 {
568
572
  timeoutSeconds
569
573
  }, {
570
574
  F: __dxlog_file2,
571
- L: 140,
575
+ L: 141,
572
576
  S: this,
573
577
  C: (f, a) => f(...a)
574
578
  });
@@ -581,7 +585,7 @@ var CallsServicePeer = class extends Resource2 {
581
585
  async _initiateCallSession() {
582
586
  log2("creating new session", void 0, {
583
587
  F: __dxlog_file2,
584
- L: 150,
588
+ L: 151,
585
589
  S: this,
586
590
  C: (f, a) => f(...a)
587
591
  });
@@ -607,7 +611,7 @@ var CallsServicePeer = class extends Resource2 {
607
611
  text: await response.text()
608
612
  }, {
609
613
  F: __dxlog_file2,
610
- L: 165,
614
+ L: 166,
611
615
  S: this,
612
616
  C: (f, a) => f(...a)
613
617
  });
@@ -639,7 +643,7 @@ var CallsServicePeer = class extends Resource2 {
639
643
  status: response.status
640
644
  }, {
641
645
  F: __dxlog_file2,
642
- L: 190,
646
+ L: 191,
643
647
  S: this,
644
648
  C: (f, a) => f(...a)
645
649
  });
@@ -649,7 +653,7 @@ var CallsServicePeer = class extends Resource2 {
649
653
  async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
650
654
  log2.verbose("pushing track ", trackName, {
651
655
  F: __dxlog_file2,
652
- L: 212,
656
+ L: 213,
653
657
  S: this,
654
658
  C: (f, a) => f(...a)
655
659
  });
@@ -676,7 +680,7 @@ var CallsServicePeer = class extends Resource2 {
676
680
  });
677
681
  invariant2(response.tracks !== void 0, void 0, {
678
682
  F: __dxlog_file2,
679
- L: 237,
683
+ L: 238,
680
684
  S: this,
681
685
  A: [
682
686
  "response.tracks !== undefined",
@@ -701,7 +705,7 @@ var CallsServicePeer = class extends Resource2 {
701
705
  } else {
702
706
  log2.error("missing track data", void 0, {
703
707
  F: __dxlog_file2,
704
- L: 257,
708
+ L: 258,
705
709
  S: this,
706
710
  C: (f, a) => f(...a)
707
711
  });
@@ -709,7 +713,7 @@ var CallsServicePeer = class extends Resource2 {
709
713
  }).catch((err) => {
710
714
  log2.catch(err, void 0, {
711
715
  F: __dxlog_file2,
712
- L: 261,
716
+ L: 262,
713
717
  S: this,
714
718
  C: (f, a) => f(...a)
715
719
  });
@@ -727,7 +731,7 @@ var CallsServicePeer = class extends Resource2 {
727
731
  await this.waitUntilOpen();
728
732
  invariant2(this.session, void 0, {
729
733
  F: __dxlog_file2,
730
- L: 288,
734
+ L: 289,
731
735
  S: this,
732
736
  A: [
733
737
  "this.session",
@@ -740,7 +744,7 @@ var CallsServicePeer = class extends Resource2 {
740
744
  encodings
741
745
  }, {
742
746
  F: __dxlog_file2,
743
- L: 289,
747
+ L: 290,
744
748
  S: this,
745
749
  C: (f, a) => f(...a)
746
750
  });
@@ -753,7 +757,7 @@ var CallsServicePeer = class extends Resource2 {
753
757
  transceiver: transceiver2
754
758
  }, {
755
759
  F: __dxlog_file2,
756
- L: 293,
760
+ L: 294,
757
761
  S: this,
758
762
  C: (f, a) => f(...a)
759
763
  });
@@ -765,13 +769,13 @@ var CallsServicePeer = class extends Resource2 {
765
769
  transceiver: transceiver2
766
770
  }, {
767
771
  F: __dxlog_file2,
768
- L: 296,
772
+ L: 297,
769
773
  S: this,
770
774
  C: (f, a) => f(...a)
771
775
  });
772
776
  transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
773
777
  F: __dxlog_file2,
774
- L: 297,
778
+ L: 298,
775
779
  S: this,
776
780
  C: (f, a) => f(...a)
777
781
  }));
@@ -780,7 +784,7 @@ var CallsServicePeer = class extends Resource2 {
780
784
  }
781
785
  invariant2(track, void 0, {
782
786
  F: __dxlog_file2,
783
- L: 301,
787
+ L: 302,
784
788
  S: this,
785
789
  A: [
786
790
  "track",
@@ -793,7 +797,7 @@ var CallsServicePeer = class extends Resource2 {
793
797
  });
794
798
  log2.verbose("creating transceiver", void 0, {
795
799
  F: __dxlog_file2,
796
- L: 306,
800
+ L: 307,
797
801
  S: this,
798
802
  C: (f, a) => f(...a)
799
803
  });
@@ -806,7 +810,7 @@ var CallsServicePeer = class extends Resource2 {
806
810
  });
807
811
  invariant2(pushedTrackData, void 0, {
808
812
  F: __dxlog_file2,
809
- L: 315,
813
+ L: 316,
810
814
  S: this,
811
815
  A: [
812
816
  "pushedTrackData",
@@ -823,7 +827,7 @@ var CallsServicePeer = class extends Resource2 {
823
827
  });
824
828
  transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
825
829
  F: __dxlog_file2,
826
- L: 322,
830
+ L: 323,
827
831
  S: this,
828
832
  C: (f, a) => f(...a)
829
833
  }));
@@ -836,7 +840,7 @@ var CallsServicePeer = class extends Resource2 {
836
840
  trackName: trackData.trackName
837
841
  }, {
838
842
  F: __dxlog_file2,
839
- L: 340,
843
+ L: 341,
840
844
  S: this,
841
845
  C: (f, a) => f(...a)
842
846
  });
@@ -852,7 +856,7 @@ var CallsServicePeer = class extends Resource2 {
852
856
  }
853
857
  invariant2(newTrackResponse.tracks, void 0, {
854
858
  F: __dxlog_file2,
855
- L: 353,
859
+ L: 354,
856
860
  S: this,
857
861
  A: [
858
862
  "newTrackResponse.tracks",
@@ -899,7 +903,7 @@ var CallsServicePeer = class extends Resource2 {
899
903
  return track;
900
904
  }).catch((err) => log2.catch(err, void 0, {
901
905
  F: __dxlog_file2,
902
- L: 405,
906
+ L: 406,
903
907
  S: this,
904
908
  C: (f, a) => f(...a)
905
909
  }));
@@ -909,7 +913,7 @@ var CallsServicePeer = class extends Resource2 {
909
913
  availableTracks: Array.from(trackMap.keys())
910
914
  }, {
911
915
  F: __dxlog_file2,
912
- L: 407,
916
+ L: 408,
913
917
  S: this,
914
918
  C: (f, a) => f(...a)
915
919
  });
@@ -919,7 +923,7 @@ var CallsServicePeer = class extends Resource2 {
919
923
  if (mid) {
920
924
  log2("closing pulled track ", trackData.trackName, {
921
925
  F: __dxlog_file2,
922
- L: 413,
926
+ L: 414,
923
927
  S: this,
924
928
  C: (f, a) => f(...a)
925
929
  });
@@ -935,7 +939,7 @@ var CallsServicePeer = class extends Resource2 {
935
939
  await this.waitUntilOpen();
936
940
  invariant2(this.session, void 0, {
937
941
  F: __dxlog_file2,
938
- L: 434,
942
+ L: 435,
939
943
  S: this,
940
944
  A: [
941
945
  "this.session",
@@ -1083,6 +1087,18 @@ var START_SPEAKING_THRESHOLD = 0.05;
1083
1087
  var CONTINUE_SPEAKING_THRESHOLD = 0.02;
1084
1088
  var MIN_EVENT_INTERVAL = 100;
1085
1089
  var SpeakingMonitor = class extends Resource3 {
1090
+ _mediaStreamTrack;
1091
+ /**
1092
+ * Event that is emitted when the user starts or stops speaking.
1093
+ * It is debounced to prevent rapid state changes.
1094
+ */
1095
+ speakingChanged;
1096
+ /**
1097
+ * Real state of the user speaking.
1098
+ */
1099
+ _isSpeaking;
1100
+ _lastEventTime;
1101
+ _deferredUpdate;
1086
1102
  constructor(_mediaStreamTrack) {
1087
1103
  super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
1088
1104
  }
@@ -1133,7 +1149,7 @@ var SpeakingMonitor = class extends Resource3 {
1133
1149
 
1134
1150
  // src/calls/media-manager.ts
1135
1151
  import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
1136
- import { cancelWithContext, Resource as Resource4 } from "@dxos/context";
1152
+ import { Resource as Resource4, cancelWithContext } from "@dxos/context";
1137
1153
  import { log as log4 } from "@dxos/log";
1138
1154
  function _ts_decorate2(decorators, target, key, desc) {
1139
1155
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -1149,20 +1165,17 @@ var MAX_WEB_CAM_BITRATE = 12e5;
1149
1165
  var RETRY_INTERVAL = 500;
1150
1166
  var USE_INAUDIBLE_AUDIO = false;
1151
1167
  var MediaManager = class extends Resource4 {
1152
- constructor() {
1153
- super(...arguments);
1154
- this.stateUpdated = new Event3();
1155
- this._state = {
1156
- pulledVideoStreams: {},
1157
- pulledAudioTracks: {}
1158
- };
1159
- this._speakingMonitor = void 0;
1160
- this._trackToReconcile = [];
1161
- this._blackCanvasStreamTrack = void 0;
1162
- this._inaudibleAudioStreamTrack = void 0;
1163
- this._pushTracksTask = void 0;
1164
- this._pullTracksTask = void 0;
1165
- }
1168
+ stateUpdated = new Event3();
1169
+ _state = {
1170
+ pulledVideoStreams: {},
1171
+ pulledAudioTracks: {}
1172
+ };
1173
+ _speakingMonitor = void 0;
1174
+ _trackToReconcile = [];
1175
+ _blackCanvasStreamTrack = void 0;
1176
+ _inaudibleAudioStreamTrack = void 0;
1177
+ _pushTracksTask = void 0;
1178
+ _pullTracksTask = void 0;
1166
1179
  get isSpeaking() {
1167
1180
  return this._speakingMonitor?.isSpeaking;
1168
1181
  }
@@ -1469,6 +1482,22 @@ function _ts_decorate3(decorators, target, key, desc) {
1469
1482
  }
1470
1483
  var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1471
1484
  var CallManager = class extends Resource5 {
1485
+ _client;
1486
+ callStateUpdated;
1487
+ // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
1488
+ mediaStateUpdated;
1489
+ left;
1490
+ /**
1491
+ * Live object state. Is changed on internal events.
1492
+ * CAUTION: Do not change directly.
1493
+ */
1494
+ _state;
1495
+ // TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
1496
+ _raisedHandSignal;
1497
+ _speakingSignal;
1498
+ _joinedSignal;
1499
+ _swarmSynchronizer;
1500
+ _mediaManager;
1472
1501
  /** @reactive */
1473
1502
  get roomId() {
1474
1503
  return this._state.call.roomId;
@@ -1667,4 +1696,4 @@ export {
1667
1696
  MediaManager,
1668
1697
  CallManager
1669
1698
  };
1670
- //# sourceMappingURL=chunk-IHDNQLLR.mjs.map
1699
+ //# sourceMappingURL=chunk-4TME3BR4.mjs.map