@dxos/plugin-transcription 0.8.2-main.f11618f → 0.8.2-staging.7ac8446

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 (239) hide show
  1. package/dist/lib/browser/{TranscriptContainer-D3EH2SLO.mjs → TranscriptContainer-JQ3HFHLQ.mjs} +2 -3
  2. package/dist/lib/browser/app-graph-builder-VDQOVX7P.mjs +191 -0
  3. package/dist/lib/browser/app-graph-builder-VDQOVX7P.mjs.map +7 -0
  4. package/dist/lib/browser/chunk-G4B6CPC2.mjs +253 -0
  5. package/dist/lib/browser/chunk-G4B6CPC2.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-KLD7O5GJ.mjs → chunk-GU2BNYKZ.mjs} +12 -2
  7. package/dist/lib/browser/chunk-GU2BNYKZ.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-K7FOYAXO.mjs +8 -0
  9. package/dist/lib/browser/chunk-K7FOYAXO.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-YRWBY6UK.mjs → chunk-OGNXNGJB.mjs} +27 -15
  11. package/dist/lib/browser/chunk-OGNXNGJB.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-KSUYWWIU.mjs → chunk-YCZISX63.mjs} +81 -108
  13. package/dist/lib/browser/chunk-YCZISX63.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-LTIQFX4W.mjs → chunk-YEPT334A.mjs} +1 -1
  15. package/dist/lib/browser/chunk-YEPT334A.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +209 -46
  17. package/dist/lib/browser/index.mjs.map +4 -4
  18. package/dist/lib/browser/{intent-resolver-ZWKYRFE7.mjs → intent-resolver-4R66ZCKT.mjs} +8 -8
  19. package/dist/lib/browser/intent-resolver-4R66ZCKT.mjs.map +7 -0
  20. package/dist/lib/browser/{meeting-transcription-state-MNA2XROE.mjs → meeting-transcription-state-DLFHQK72.mjs} +4 -4
  21. package/dist/lib/browser/meeting-transcription-state-DLFHQK72.mjs.map +7 -0
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-F7DBDGHS.mjs → react-surface-FQUHU5G7.mjs} +6 -18
  24. package/dist/lib/browser/react-surface-FQUHU5G7.mjs.map +7 -0
  25. package/dist/lib/browser/{transcriber-MSBS4VBI.mjs → transcriber-LGMIWDYI.mjs} +7 -8
  26. package/dist/lib/browser/{transcriber-MSBS4VBI.mjs.map → transcriber-LGMIWDYI.mjs.map} +3 -3
  27. package/dist/lib/browser/types/index.mjs +3 -3
  28. package/dist/lib/node/{TranscriptContainer-WCBZMA5K.cjs → TranscriptContainer-QEYTTT2V.cjs} +7 -8
  29. package/dist/lib/node/TranscriptContainer-QEYTTT2V.cjs.map +7 -0
  30. package/dist/lib/node/app-graph-builder-IFSIVNUR.cjs +200 -0
  31. package/dist/lib/node/app-graph-builder-IFSIVNUR.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-J72PUQ3C.cjs → chunk-3KHUSQNW.cjs} +15 -6
  33. package/dist/lib/node/chunk-3KHUSQNW.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-JUGOXWES.cjs → chunk-CZMLKKWT.cjs} +4 -4
  35. package/dist/lib/node/chunk-CZMLKKWT.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-7XIIUVN3.cjs → chunk-FCCJALOT.cjs} +83 -111
  37. package/dist/lib/node/chunk-FCCJALOT.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-OCHTKDL7.cjs → chunk-LP4FG423.cjs} +8 -23
  39. package/dist/lib/node/chunk-LP4FG423.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-IXU57SCA.cjs → chunk-P4VVD6ZO.cjs} +27 -15
  41. package/dist/lib/node/chunk-P4VVD6ZO.cjs.map +7 -0
  42. package/dist/lib/node/chunk-UOFHT4GZ.cjs +280 -0
  43. package/dist/lib/node/chunk-UOFHT4GZ.cjs.map +7 -0
  44. package/dist/lib/node/index.cjs +237 -65
  45. package/dist/lib/node/index.cjs.map +4 -4
  46. package/dist/lib/node/{intent-resolver-RM4JOCDV.cjs → intent-resolver-WMMCOUEH.cjs} +10 -11
  47. package/dist/lib/node/intent-resolver-WMMCOUEH.cjs.map +7 -0
  48. package/dist/lib/node/{meeting-transcription-state-5XLTMWPA.cjs → meeting-transcription-state-URIYILEQ.cjs} +7 -7
  49. package/dist/lib/node/meeting-transcription-state-URIYILEQ.cjs.map +7 -0
  50. package/dist/lib/node/meta.json +1 -1
  51. package/dist/lib/node/{react-surface-7F37EYZA.cjs → react-surface-WI2MGWCC.cjs} +10 -20
  52. package/dist/lib/node/react-surface-WI2MGWCC.cjs.map +7 -0
  53. package/dist/lib/node/{transcriber-55OE4X6I.cjs → transcriber-QG5WPKX4.cjs} +13 -14
  54. package/dist/lib/node/{transcriber-55OE4X6I.cjs.map → transcriber-QG5WPKX4.cjs.map} +3 -3
  55. package/dist/lib/node/types/index.cjs +8 -8
  56. package/dist/lib/node/types/index.cjs.map +1 -1
  57. package/dist/lib/node-esm/{TranscriptContainer-GBPY6KKA.mjs → TranscriptContainer-ZXUCOWGY.mjs} +2 -3
  58. package/dist/lib/node-esm/app-graph-builder-UL6XLIZY.mjs +192 -0
  59. package/dist/lib/node-esm/app-graph-builder-UL6XLIZY.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-6X7X2UZF.mjs +254 -0
  61. package/dist/lib/node-esm/chunk-6X7X2UZF.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-OS2ITZUL.mjs → chunk-GIO6J6FE.mjs} +27 -15
  63. package/dist/lib/node-esm/chunk-GIO6J6FE.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-QMHMEKB3.mjs → chunk-HKATMD34.mjs} +12 -2
  65. package/dist/lib/node-esm/chunk-HKATMD34.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-J4D2RBBH.mjs +10 -0
  67. package/dist/lib/node-esm/chunk-J4D2RBBH.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-5E2MR5XK.mjs → chunk-PTZHDZ36.mjs} +1 -1
  69. package/dist/lib/node-esm/chunk-PTZHDZ36.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-UWF6LM27.mjs → chunk-YQYBLFNI.mjs} +81 -108
  71. package/dist/lib/node-esm/chunk-YQYBLFNI.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +209 -46
  73. package/dist/lib/node-esm/index.mjs.map +4 -4
  74. package/dist/lib/node-esm/{intent-resolver-HDRFXMKP.mjs → intent-resolver-QN2LO5TX.mjs} +8 -8
  75. package/dist/lib/node-esm/intent-resolver-QN2LO5TX.mjs.map +7 -0
  76. package/dist/lib/node-esm/{meeting-transcription-state-3WOZ52BQ.mjs → meeting-transcription-state-ZYVRAW6Y.mjs} +4 -4
  77. package/dist/lib/node-esm/meeting-transcription-state-ZYVRAW6Y.mjs.map +7 -0
  78. package/dist/lib/node-esm/meta.json +1 -1
  79. package/dist/lib/node-esm/{react-surface-D3L6VBEV.mjs → react-surface-PCH6NTVB.mjs} +6 -18
  80. package/dist/lib/node-esm/react-surface-PCH6NTVB.mjs.map +7 -0
  81. package/dist/lib/node-esm/{transcriber-HH7EMCGH.mjs → transcriber-TMPYZ5L4.mjs} +7 -8
  82. package/dist/lib/node-esm/{transcriber-HH7EMCGH.mjs.map → transcriber-TMPYZ5L4.mjs.map} +3 -3
  83. package/dist/lib/node-esm/types/index.mjs +3 -3
  84. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/capabilities.d.ts +7 -5
  87. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/index.d.ts +4 -2
  89. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/meeting-transcription-state.d.ts +4 -2
  91. package/dist/types/src/capabilities/meeting-transcription-state.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  94. package/dist/types/src/components/Transcript/Transcript.d.ts +4 -14
  95. package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
  96. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +4 -19
  97. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/TranscriptContainer.d.ts.map +1 -1
  99. package/dist/types/src/components/index.d.ts +0 -1
  100. package/dist/types/src/components/index.d.ts.map +1 -1
  101. package/dist/types/src/components/transcription.stories.d.ts +3 -6
  102. package/dist/types/src/components/transcription.stories.d.ts.map +1 -1
  103. package/dist/types/src/hooks/index.d.ts +0 -1
  104. package/dist/types/src/hooks/index.d.ts.map +1 -1
  105. package/dist/types/src/hooks/useTranscriber.d.ts +1 -1
  106. package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
  107. package/dist/types/src/transcriber/transcriber.d.ts +2 -2
  108. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  109. package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
  110. package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
  111. package/dist/types/src/transcriber/transcription-manager.d.ts +15 -17
  112. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  113. package/dist/types/src/translations.d.ts +0 -3
  114. package/dist/types/src/translations.d.ts.map +1 -1
  115. package/dist/types/src/types/schema.d.ts +28 -7
  116. package/dist/types/src/types/schema.d.ts.map +1 -1
  117. package/dist/types/src/types/types.d.ts +1 -5
  118. package/dist/types/src/types/types.d.ts.map +1 -1
  119. package/dist/types/src/util/index.d.ts +1 -0
  120. package/dist/types/src/util/index.d.ts.map +1 -1
  121. package/dist/types/src/util/random-queue-dxn.d.ts +3 -0
  122. package/dist/types/src/util/random-queue-dxn.d.ts.map +1 -0
  123. package/package.json +39 -50
  124. package/src/TranscriptionPlugin.tsx +12 -29
  125. package/src/capabilities/app-graph-builder.ts +52 -111
  126. package/src/capabilities/capabilities.ts +3 -4
  127. package/src/capabilities/index.ts +0 -1
  128. package/src/capabilities/intent-resolver.ts +5 -5
  129. package/src/capabilities/meeting-transcription-state.ts +2 -2
  130. package/src/capabilities/react-surface.tsx +4 -12
  131. package/src/capabilities/transcriber.ts +1 -2
  132. package/src/components/Transcript/Transcript.stories.tsx +43 -201
  133. package/src/components/Transcript/Transcript.tsx +208 -83
  134. package/src/components/TranscriptContainer.tsx +6 -11
  135. package/src/components/index.ts +0 -1
  136. package/src/components/transcription.stories.tsx +60 -157
  137. package/src/hooks/index.ts +0 -1
  138. package/src/hooks/useTranscriber.ts +2 -3
  139. package/src/transcriber/{transcriber.browser.test.ts → transcriber.test.ts} +3 -3
  140. package/src/transcriber/transcriber.ts +11 -17
  141. package/src/transcriber/transcription-manager.ts +58 -67
  142. package/src/translations.ts +0 -2
  143. package/src/types/schema.ts +28 -5
  144. package/src/types/types.ts +5 -13
  145. package/src/util/index.ts +1 -0
  146. package/src/util/random-queue-dxn.ts +9 -0
  147. package/dist/lib/browser/app-graph-builder-7HN3M24G.mjs +0 -349
  148. package/dist/lib/browser/app-graph-builder-7HN3M24G.mjs.map +0 -7
  149. package/dist/lib/browser/chunk-BSZSM6KA.mjs +0 -720
  150. package/dist/lib/browser/chunk-BSZSM6KA.mjs.map +0 -7
  151. package/dist/lib/browser/chunk-IWZ7C3OA.mjs +0 -27
  152. package/dist/lib/browser/chunk-IWZ7C3OA.mjs.map +0 -7
  153. package/dist/lib/browser/chunk-KLD7O5GJ.mjs.map +0 -7
  154. package/dist/lib/browser/chunk-KSUYWWIU.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-LTIQFX4W.mjs.map +0 -7
  156. package/dist/lib/browser/chunk-YRWBY6UK.mjs.map +0 -7
  157. package/dist/lib/browser/intent-resolver-ZWKYRFE7.mjs.map +0 -7
  158. package/dist/lib/browser/meeting-transcription-state-MNA2XROE.mjs.map +0 -7
  159. package/dist/lib/browser/react-surface-F7DBDGHS.mjs.map +0 -7
  160. package/dist/lib/browser/settings-6YAHKVKX.mjs +0 -24
  161. package/dist/lib/browser/settings-6YAHKVKX.mjs.map +0 -7
  162. package/dist/lib/node/TranscriptContainer-WCBZMA5K.cjs.map +0 -7
  163. package/dist/lib/node/app-graph-builder-BVWYUGUO.cjs +0 -350
  164. package/dist/lib/node/app-graph-builder-BVWYUGUO.cjs.map +0 -7
  165. package/dist/lib/node/chunk-7XIIUVN3.cjs.map +0 -7
  166. package/dist/lib/node/chunk-IXU57SCA.cjs.map +0 -7
  167. package/dist/lib/node/chunk-J72PUQ3C.cjs.map +0 -7
  168. package/dist/lib/node/chunk-JSCC2AQW.cjs +0 -737
  169. package/dist/lib/node/chunk-JSCC2AQW.cjs.map +0 -7
  170. package/dist/lib/node/chunk-JUGOXWES.cjs.map +0 -7
  171. package/dist/lib/node/chunk-OCHTKDL7.cjs.map +0 -7
  172. package/dist/lib/node/intent-resolver-RM4JOCDV.cjs.map +0 -7
  173. package/dist/lib/node/meeting-transcription-state-5XLTMWPA.cjs.map +0 -7
  174. package/dist/lib/node/react-surface-7F37EYZA.cjs.map +0 -7
  175. package/dist/lib/node/settings-ZMB4XRWS.cjs +0 -38
  176. package/dist/lib/node/settings-ZMB4XRWS.cjs.map +0 -7
  177. package/dist/lib/node-esm/app-graph-builder-QK25O5K5.mjs +0 -350
  178. package/dist/lib/node-esm/app-graph-builder-QK25O5K5.mjs.map +0 -7
  179. package/dist/lib/node-esm/chunk-5E2MR5XK.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-B2BD7S4X.mjs +0 -721
  181. package/dist/lib/node-esm/chunk-B2BD7S4X.mjs.map +0 -7
  182. package/dist/lib/node-esm/chunk-DXJN2JWV.mjs +0 -28
  183. package/dist/lib/node-esm/chunk-DXJN2JWV.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-OS2ITZUL.mjs.map +0 -7
  185. package/dist/lib/node-esm/chunk-QMHMEKB3.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-UWF6LM27.mjs.map +0 -7
  187. package/dist/lib/node-esm/intent-resolver-HDRFXMKP.mjs.map +0 -7
  188. package/dist/lib/node-esm/meeting-transcription-state-3WOZ52BQ.mjs.map +0 -7
  189. package/dist/lib/node-esm/react-surface-D3L6VBEV.mjs.map +0 -7
  190. package/dist/lib/node-esm/settings-I35TVDUG.mjs +0 -25
  191. package/dist/lib/node-esm/settings-I35TVDUG.mjs.map +0 -7
  192. package/dist/types/src/capabilities/settings.d.ts +0 -4
  193. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  194. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +0 -27
  195. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +0 -1
  196. package/dist/types/src/components/Transcript/transcript-extension.d.ts +0 -19
  197. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +0 -1
  198. package/dist/types/src/components/TranscriptionSettings/TranscriptionSettings.d.ts +0 -6
  199. package/dist/types/src/components/TranscriptionSettings/TranscriptionSettings.d.ts.map +0 -1
  200. package/dist/types/src/components/TranscriptionSettings/index.d.ts +0 -2
  201. package/dist/types/src/components/TranscriptionSettings/index.d.ts.map +0 -1
  202. package/dist/types/src/entity-extraction/entity-extraction.d.ts +0 -42
  203. package/dist/types/src/entity-extraction/entity-extraction.d.ts.map +0 -1
  204. package/dist/types/src/entity-extraction/entity-extraction.test.d.ts +0 -2
  205. package/dist/types/src/entity-extraction/entity-extraction.test.d.ts.map +0 -1
  206. package/dist/types/src/entity-extraction/index.d.ts +0 -2
  207. package/dist/types/src/entity-extraction/index.d.ts.map +0 -1
  208. package/dist/types/src/hooks/useQueueModelAdapter.d.ts +0 -7
  209. package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +0 -1
  210. package/dist/types/src/model/index.d.ts +0 -2
  211. package/dist/types/src/model/index.d.ts.map +0 -1
  212. package/dist/types/src/model/model.d.ts +0 -68
  213. package/dist/types/src/model/model.d.ts.map +0 -1
  214. package/dist/types/src/model/model.test.d.ts +0 -2
  215. package/dist/types/src/model/model.test.d.ts.map +0 -1
  216. package/dist/types/src/testing/index.d.ts +0 -2
  217. package/dist/types/src/testing/index.d.ts.map +0 -1
  218. package/dist/types/src/testing/testing.d.ts +0 -39
  219. package/dist/types/src/testing/testing.d.ts.map +0 -1
  220. package/dist/types/src/transcriber/transcriber.browser.test.d.ts +0 -2
  221. package/dist/types/src/transcriber/transcriber.browser.test.d.ts.map +0 -1
  222. package/src/capabilities/settings.ts +0 -20
  223. package/src/components/Transcript/deprecated/OldTranscript.tsx +0 -254
  224. package/src/components/Transcript/transcript-extension.ts +0 -236
  225. package/src/components/TranscriptionSettings/TranscriptionSettings.tsx +0 -26
  226. package/src/components/TranscriptionSettings/index.ts +0 -5
  227. package/src/entity-extraction/entity-extraction.test.ts +0 -97
  228. package/src/entity-extraction/entity-extraction.ts +0 -149
  229. package/src/entity-extraction/index.ts +0 -5
  230. package/src/entity-extraction/system-prompt.tpl +0 -38
  231. package/src/entity-extraction/types.d.ts +0 -8
  232. package/src/hooks/useQueueModelAdapter.ts +0 -63
  233. package/src/model/index.ts +0 -5
  234. package/src/model/model.test.ts +0 -165
  235. package/src/model/model.ts +0 -229
  236. package/src/testing/index.ts +0 -5
  237. package/src/testing/testing.ts +0 -208
  238. /package/dist/lib/browser/{TranscriptContainer-D3EH2SLO.mjs.map → TranscriptContainer-JQ3HFHLQ.mjs.map} +0 -0
  239. /package/dist/lib/node-esm/{TranscriptContainer-GBPY6KKA.mjs.map → TranscriptContainer-ZXUCOWGY.mjs.map} +0 -0
@@ -1,47 +1,221 @@
1
1
  import {
2
- TranscriptContainer,
3
- TranscriptionSettings
4
- } from "./chunk-IWZ7C3OA.mjs";
2
+ TranscriptContainer
3
+ } from "./chunk-K7FOYAXO.mjs";
5
4
  import {
6
- AppGraphBuilder,
7
- IntentResolver,
8
- MeetingTranscriptionState,
9
- ReactSurface,
10
- Settings,
11
- Transcriber as Transcriber2,
12
5
  Transcript,
13
- TranscriptionContainer,
14
- renderMarkdown,
15
- useAudioFile,
16
- useAudioTrack,
17
- useQueueModelAdapter,
18
- useTranscriber,
19
- useVoiceInput
20
- } from "./chunk-BSZSM6KA.mjs";
6
+ TranscriptionContainer
7
+ } from "./chunk-G4B6CPC2.mjs";
21
8
  import {
22
9
  MediaStreamRecorder,
23
10
  Transcriber,
24
11
  TranscriptionManager
25
- } from "./chunk-KSUYWWIU.mjs";
26
- import "./chunk-KLD7O5GJ.mjs";
27
- import {
28
- TranscriptType
29
- } from "./chunk-YRWBY6UK.mjs";
12
+ } from "./chunk-YCZISX63.mjs";
13
+ import "./chunk-GU2BNYKZ.mjs";
30
14
  import {
31
15
  TranscriptionCapabilities
32
- } from "./chunk-LTIQFX4W.mjs";
16
+ } from "./chunk-YEPT334A.mjs";
17
+ import {
18
+ TranscriptBlock,
19
+ TranscriptType
20
+ } from "./chunk-OGNXNGJB.mjs";
33
21
  import {
34
22
  TRANSCRIPTION_PLUGIN,
35
23
  meta
36
24
  } from "./chunk-6ZR5MDK3.mjs";
37
25
 
26
+ // packages/plugins/plugin-transcription/src/capabilities/index.ts
27
+ import { lazy } from "@dxos/app-framework";
28
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-VDQOVX7P.mjs"));
29
+ var IntentResolver = lazy(() => import("./intent-resolver-4R66ZCKT.mjs"));
30
+ var MeetingTranscriptionState = lazy(() => import("./meeting-transcription-state-DLFHQK72.mjs"));
31
+ var ReactSurface = lazy(() => import("./react-surface-FQUHU5G7.mjs"));
32
+ var Transcriber2 = lazy(() => import("./transcriber-LGMIWDYI.mjs"));
33
+
34
+ // packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts
35
+ import { useEffect, useState } from "react";
36
+ import { log } from "@dxos/log";
37
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts";
38
+ var useAudioFile = (audioUrl) => {
39
+ const [{ audio, stream, track }, setStream] = useState({});
40
+ useEffect(() => {
41
+ const t = setTimeout(async () => {
42
+ const response = await fetch(audioUrl);
43
+ const blob = await response.blob();
44
+ const audio2 = new Audio();
45
+ audio2.src = URL.createObjectURL(blob);
46
+ await new Promise((resolve, reject) => {
47
+ audio2.addEventListener("error", (err) => {
48
+ log.error("error", {
49
+ err
50
+ }, {
51
+ F: __dxlog_file,
52
+ L: 27,
53
+ S: void 0,
54
+ C: (f, a) => f(...a)
55
+ });
56
+ reject(err);
57
+ }, {
58
+ once: true
59
+ });
60
+ audio2.addEventListener("canplay", () => {
61
+ log.info("starting...", void 0, {
62
+ F: __dxlog_file,
63
+ L: 35,
64
+ S: void 0,
65
+ C: (f, a) => f(...a)
66
+ });
67
+ resolve();
68
+ }, {
69
+ once: true
70
+ });
71
+ audio2.load();
72
+ });
73
+ const ctx = new AudioContext();
74
+ const destination = ctx.createMediaStreamDestination();
75
+ destination.channelCount = 1;
76
+ const source = ctx.createMediaElementSource(audio2);
77
+ source.connect(destination);
78
+ setStream({
79
+ audio: audio2,
80
+ stream: destination.stream,
81
+ track: destination.stream.getAudioTracks()[0]
82
+ });
83
+ });
84
+ return () => clearTimeout(t);
85
+ }, [
86
+ audioUrl
87
+ ]);
88
+ return {
89
+ audio,
90
+ stream,
91
+ track
92
+ };
93
+ };
94
+
95
+ // packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts
96
+ import { useEffect as useEffect2, useState as useState2 } from "react";
97
+ var useAudioTrack = (active) => {
98
+ const [track, setTrack] = useState2();
99
+ useEffect2(() => {
100
+ if (!active) {
101
+ track?.stop();
102
+ setTrack(void 0);
103
+ return;
104
+ }
105
+ const initAudio = async () => {
106
+ const audio = new Audio();
107
+ audio.srcObject = await navigator.mediaDevices.getUserMedia({
108
+ audio: true
109
+ });
110
+ const [track2] = audio.srcObject.getAudioTracks();
111
+ if (track2) {
112
+ setTrack(track2);
113
+ }
114
+ };
115
+ if (active) {
116
+ void initAudio();
117
+ }
118
+ }, [
119
+ active
120
+ ]);
121
+ return track;
122
+ };
123
+
124
+ // packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts
125
+ import { useEffect as useEffect3, useMemo } from "react";
126
+ import { useCapabilities } from "@dxos/app-framework";
127
+ var useTranscriber = ({ audioStreamTrack, onSegments }) => {
128
+ const [getTranscriber] = useCapabilities(TranscriptionCapabilities.Transcriber);
129
+ const transcriber = useMemo(() => {
130
+ if (!onSegments || !audioStreamTrack || !getTranscriber) {
131
+ return void 0;
132
+ }
133
+ return getTranscriber({
134
+ audioStreamTrack,
135
+ onSegments
136
+ });
137
+ }, [
138
+ audioStreamTrack,
139
+ onSegments,
140
+ getTranscriber
141
+ ]);
142
+ useEffect3(() => {
143
+ return () => {
144
+ void transcriber?.close();
145
+ };
146
+ }, [
147
+ transcriber
148
+ ]);
149
+ return transcriber;
150
+ };
151
+
152
+ // packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts
153
+ import { useState as useState3, useEffect as useEffect4, useCallback } from "react";
154
+ import { scheduleMicroTask } from "@dxos/async";
155
+ import { Context } from "@dxos/context";
156
+ import { log as log2 } from "@dxos/log";
157
+ import { useSoundEffect } from "@dxos/react-ui-sfx";
158
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts";
159
+ var useVoiceInput = ({ active, onUpdate }) => {
160
+ const soundStart = useSoundEffect("StartRecording");
161
+ const soundStop = useSoundEffect("StopRecording");
162
+ const handleSegments = useCallback(async (segments) => {
163
+ const text = segments.map((str) => str.text.trim().replace(/[^\w\s]/g, "")).join(" ");
164
+ onUpdate(text);
165
+ }, []);
166
+ const [recording, setRecording] = useState3(false);
167
+ const track = useAudioTrack(active);
168
+ const transcriber = useTranscriber({
169
+ audioStreamTrack: track,
170
+ onSegments: handleSegments
171
+ });
172
+ useEffect4(() => {
173
+ const ctx = new Context(void 0, {
174
+ F: __dxlog_file2,
175
+ L: 43
176
+ });
177
+ scheduleMicroTask(ctx, async () => {
178
+ if (active && transcriber) {
179
+ await transcriber.open();
180
+ log2.info("starting...", void 0, {
181
+ F: __dxlog_file2,
182
+ L: 47,
183
+ S: void 0,
184
+ C: (f, a) => f(...a)
185
+ });
186
+ setRecording(true);
187
+ void soundStart.play();
188
+ transcriber.startChunksRecording();
189
+ } else if (!active && transcriber?.isOpen) {
190
+ transcriber?.stopChunksRecording();
191
+ await transcriber?.close();
192
+ log2.info("stopped", void 0, {
193
+ F: __dxlog_file2,
194
+ L: 54,
195
+ S: void 0,
196
+ C: (f, a) => f(...a)
197
+ });
198
+ setRecording(false);
199
+ void soundStop.play();
200
+ }
201
+ });
202
+ return () => {
203
+ void ctx.dispose();
204
+ };
205
+ }, [
206
+ active,
207
+ transcriber
208
+ ]);
209
+ return {
210
+ recording
211
+ };
212
+ };
213
+
38
214
  // packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx
39
215
  import { Capabilities, Events, contributes, defineModule, definePlugin } from "@dxos/app-framework";
40
216
  import { QueueImpl } from "@dxos/echo-db";
41
217
  import { isInstanceOf } from "@dxos/echo-schema";
42
218
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
43
- import { getSpace } from "@dxos/react-client/echo";
44
- import { MessageType } from "@dxos/schema";
45
219
 
46
220
  // packages/plugins/plugin-transcription/src/translations.ts
47
221
  var translations_default = [
@@ -58,8 +232,7 @@ var translations_default = [
58
232
  "stop transcription label": "Stop transcription",
59
233
  "delete button": "Delete",
60
234
  "bookmark button": "Bookmark",
61
- "scroll to end label": "Scroll to latest",
62
- "settings entity extraction label": "Entity extraction"
235
+ "scroll to end label": "Scroll to latest"
63
236
  }
64
237
  }
65
238
  }
@@ -73,9 +246,14 @@ var TranscriptionPlugin = () => definePlugin(meta, [
73
246
  activate: () => contributes(Capabilities.Translations, translations_default)
74
247
  }),
75
248
  defineModule({
76
- id: `${meta.id}/module/settings`,
77
- activatesOn: Events.SetupSettings,
78
- activate: Settings
249
+ id: `${meta.id}/module/transcription`,
250
+ activatesOn: Events.SetupAppGraph,
251
+ activate: Transcriber2
252
+ }),
253
+ defineModule({
254
+ id: `${meta.id}/module/meeting-transcription-state`,
255
+ activatesOn: Events.SetupAppGraph,
256
+ activate: MeetingTranscriptionState
79
257
  }),
80
258
  defineModule({
81
259
  id: `${meta.id}/module/metadata`,
@@ -87,11 +265,9 @@ var TranscriptionPlugin = () => definePlugin(meta, [
87
265
  // TODO(wittjosiah): Factor out. Artifact? Separate capability?
88
266
  getTextContent: async (transcript) => {
89
267
  const client = context.requestCapability(ClientCapabilities.Client);
90
- const space = getSpace(transcript);
91
- const members = space?.members.get().map((member) => member.identity) ?? [];
92
268
  const queue = new QueueImpl(client.edge, transcript.queue.dxn);
93
269
  await queue.refresh();
94
- const content = queue.items.filter((message) => isInstanceOf(MessageType, message)).flatMap((message, index) => renderMarkdown(members)(message, index)).join("\n\n");
270
+ const content = queue.items.filter((block) => isInstanceOf(TranscriptBlock, block)).map((block) => `${block.authorName}: ${block.segments.map((segment) => segment.text).join("\n")}`).join("\n\n");
95
271
  return content;
96
272
  }
97
273
  }
@@ -120,16 +296,6 @@ var TranscriptionPlugin = () => definePlugin(meta, [
120
296
  id: `${meta.id}/module/app-graph-builder`,
121
297
  activatesOn: Events.SetupAppGraph,
122
298
  activate: AppGraphBuilder
123
- }),
124
- defineModule({
125
- id: `${meta.id}/module/transcription`,
126
- activatesOn: Events.SetupAppGraph,
127
- activate: Transcriber2
128
- }),
129
- defineModule({
130
- id: `${meta.id}/module/meeting-transcription-state`,
131
- activatesOn: Events.SetupAppGraph,
132
- activate: MeetingTranscriptionState
133
299
  })
134
300
  ]);
135
301
  export {
@@ -142,12 +308,9 @@ export {
142
308
  TranscriptionContainer,
143
309
  TranscriptionManager,
144
310
  TranscriptionPlugin,
145
- TranscriptionSettings,
146
311
  meta,
147
- renderMarkdown,
148
312
  useAudioFile,
149
313
  useAudioTrack,
150
- useQueueModelAdapter,
151
314
  useTranscriber,
152
315
  useVoiceInput
153
316
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/TranscriptionPlugin.tsx", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';\nimport { QueueImpl } from '@dxos/echo-db';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { MessageType } from '@dxos/schema';\n\nimport {\n AppGraphBuilder,\n IntentResolver,\n MeetingTranscriptionState,\n ReactSurface,\n Transcriber,\n Settings,\n} from './capabilities';\nimport { renderMarkdown } from './components';\nimport { meta } from './meta';\nimport translations from './translations';\nimport { TranscriptType } from './types';\n\nexport const TranscriptionPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/settings`,\n activatesOn: Events.SetupSettings,\n activate: Settings,\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: (context) =>\n contributes(Capabilities.Metadata, {\n id: TranscriptType.typename,\n metadata: {\n icon: 'ph--subtitles--regular',\n // TODO(wittjosiah): Factor out. Artifact? Separate capability?\n getTextContent: async (transcript: TranscriptType) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const space = getSpace(transcript);\n const members = space?.members.get().map((member) => member.identity) ?? [];\n const queue = new QueueImpl(client.edge, transcript.queue.dxn);\n await queue.refresh();\n const content = queue.items\n .filter((message) => isInstanceOf(MessageType, message))\n .flatMap((message, index) => renderMarkdown(members)(message, index))\n .join('\\n\\n');\n return content;\n },\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => [contributes(ClientCapabilities.Schema, [TranscriptType])],\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n defineModule({\n id: `${meta.id}/module/transcription`,\n activatesOn: Events.SetupAppGraph,\n activate: Transcriber,\n }),\n defineModule({\n id: `${meta.id}/module/meeting-transcription-state`,\n activatesOn: Events.SetupAppGraph,\n activate: MeetingTranscriptionState,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { TRANSCRIPTION_PLUGIN } from './meta';\nimport { TranscriptType } from './types';\n\nexport default [\n {\n 'en-US': {\n [TranscriptType.typename]: {\n 'typename label': 'Transcript',\n 'object name placeholder': 'New transcript',\n },\n [TRANSCRIPTION_PLUGIN]: {\n 'plugin name': 'Transcription',\n 'transcript companion label': 'Transcript',\n\n 'start transcription label': 'Start transcription',\n 'stop transcription label': 'Stop transcription',\n\n 'delete button': 'Delete',\n 'bookmark button': 'Bookmark',\n 'scroll to end label': 'Scroll to latest',\n\n 'settings entity extraction label': 'Entity extraction',\n },\n },\n },\n];\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAcC,QAAQC,aAAaC,cAAcC,oBAAoB;AAC9E,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoBC,oBAAoB;AACjD,SAASC,gBAAgB;AACzB,SAASC,mBAAmB;;;ACF5B,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,eAAeC,QAAQ,GAAG;QACzB,kBAAkB;QAClB,2BAA2B;MAC7B;MACA,CAACC,oBAAAA,GAAuB;QACtB,eAAe;QACf,8BAA8B;QAE9B,6BAA6B;QAC7B,4BAA4B;QAE5B,iBAAiB;QACjB,mBAAmB;QACnB,uBAAuB;QAEvB,oCAAoC;MACtC;IACF;EACF;;;;ADJK,IAAMC,sBAAsB,MACjCC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOO;IACpBL,UAAUM;EACZ,CAAA;EACAX,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOS;IACpBP,UAAU,CAACQ,YACTP,YAAYC,aAAaO,UAAU;MACjCb,IAAIc,eAAeC;MACnBC,UAAU;QACRC,MAAM;;QAENC,gBAAgB,OAAOC,eAAAA;AACrB,gBAAMC,SAASR,QAAQS,kBAAkBC,mBAAmBC,MAAM;AAClE,gBAAMC,QAAQC,SAASN,UAAAA;AACvB,gBAAMO,UAAUF,OAAOE,QAAQC,IAAAA,EAAMC,IAAI,CAACC,WAAWA,OAAOC,QAAQ,KAAK,CAAA;AACzE,gBAAMC,QAAQ,IAAIC,UAAUZ,OAAOa,MAAMd,WAAWY,MAAMG,GAAG;AAC7D,gBAAMH,MAAMI,QAAO;AACnB,gBAAMC,UAAUL,MAAMM,MACnBC,OAAO,CAACC,YAAYC,aAAaC,aAAaF,OAAAA,CAAAA,EAC9CG,QAAQ,CAACH,SAASI,UAAUC,eAAelB,OAAAA,EAASa,SAASI,KAAAA,CAAAA,EAC7DE,KAAK,MAAA;AACR,iBAAOT;QACT;MACF;IACF,CAAA;EACJ,CAAA;EACArC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAa6C,aAAaC;IAC1B3C,UAAU,MAAM;MAACC,YAAYiB,mBAAmB0B,QAAQ;QAAClC;OAAe;;EAC1E,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAO+C;IACpB7C,UAAU8C;EACZ,CAAA;EACAnD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOiD;IACpB/C,UAAUgD;EACZ,CAAA;EACArD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOmD;IACpBjD,UAAUkD;EACZ,CAAA;EACAvD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOmD;IACpBjD,UAAUmD;EACZ,CAAA;EACAxD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOmD;IACpBjD,UAAUoD;EACZ,CAAA;CACD;",
6
- "names": ["Capabilities", "Events", "contributes", "defineModule", "definePlugin", "QueueImpl", "isInstanceOf", "ClientCapabilities", "ClientEvents", "getSpace", "MessageType", "TranscriptType", "typename", "TRANSCRIPTION_PLUGIN", "TranscriptionPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "SetupSettings", "Settings", "SetupMetadata", "context", "Metadata", "TranscriptType", "typename", "metadata", "icon", "getTextContent", "transcript", "client", "requestCapability", "ClientCapabilities", "Client", "space", "getSpace", "members", "get", "map", "member", "identity", "queue", "QueueImpl", "edge", "dxn", "refresh", "content", "items", "filter", "message", "isInstanceOf", "MessageType", "flatMap", "index", "renderMarkdown", "join", "ClientEvents", "SetupSchema", "Schema", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder", "Transcriber", "MeetingTranscriptionState"]
3
+ "sources": ["../../../src/capabilities/index.ts", "../../../src/hooks/useAudioFile.ts", "../../../src/hooks/useAudioTrack.ts", "../../../src/hooks/useTranscriber.ts", "../../../src/hooks/useVoiceInput.ts", "../../../src/TranscriptionPlugin.tsx", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const MeetingTranscriptionState = lazy(() => import('./meeting-transcription-state'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Transcriber = lazy(() => import('./transcriber'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\n\nexport type UseAudioState = {\n audio?: HTMLAudioElement;\n stream?: MediaStream;\n track?: MediaStreamTrack;\n};\n\nexport const useAudioFile = (audioUrl: string): UseAudioState => {\n const [{ audio, stream, track }, setStream] = useState<UseAudioState>({});\n useEffect(() => {\n const t = setTimeout(async () => {\n const response = await fetch(audioUrl);\n const blob = await response.blob();\n const audio = new Audio();\n audio.src = URL.createObjectURL(blob);\n await new Promise<void>((resolve, reject) => {\n audio.addEventListener(\n 'error',\n (err) => {\n log.error('error', { err });\n reject(err);\n },\n { once: true },\n );\n audio.addEventListener(\n 'canplay',\n () => {\n log.info('starting...');\n resolve();\n },\n { once: true },\n );\n audio.load();\n });\n\n const ctx = new AudioContext();\n\n const destination = ctx.createMediaStreamDestination();\n destination.channelCount = 1;\n\n const source = ctx.createMediaElementSource(audio);\n source.connect(destination);\n\n setStream({\n audio,\n stream: destination.stream,\n track: destination.stream.getAudioTracks()[0],\n });\n });\n\n return () => clearTimeout(t);\n }, [audioUrl]);\n\n return { audio, stream, track };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n/**\n *\n */\n// TODO(burdon): Reconcile with react-ui-sfx and plugin-calls.\nexport const useAudioTrack = (active?: boolean): MediaStreamTrack | undefined => {\n const [track, setTrack] = useState<MediaStreamTrack>();\n useEffect(() => {\n if (!active) {\n track?.stop();\n setTrack(undefined);\n return;\n }\n\n const initAudio = async () => {\n const audio = new Audio();\n audio.srcObject = await navigator.mediaDevices.getUserMedia({ audio: true });\n const [track] = audio.srcObject.getAudioTracks();\n if (track) {\n setTrack(track);\n }\n };\n\n if (active) {\n void initAudio();\n }\n }, [active]);\n\n return track;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework';\n\nimport { TranscriptionCapabilities } from '../capabilities';\nimport { type Transcriber } from '../transcriber';\n\n/**\n * Records audio while user is speaking and transcribes it after user is done speaking.\n */\nexport const useTranscriber = ({\n audioStreamTrack,\n onSegments,\n}: Partial<TranscriptionCapabilities.GetTranscriberProps>) => {\n const [getTranscriber] = useCapabilities(TranscriptionCapabilities.Transcriber);\n\n // Initialize audio transcription.\n const transcriber = useMemo<Transcriber | undefined>(() => {\n if (!onSegments || !audioStreamTrack || !getTranscriber) {\n return undefined;\n }\n\n return getTranscriber({ audioStreamTrack, onSegments });\n }, [audioStreamTrack, onSegments, getTranscriber]);\n\n useEffect(() => {\n return () => {\n void transcriber?.close();\n };\n }, [transcriber]);\n\n return transcriber;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useState, useEffect, useCallback } from 'react';\n\nimport { scheduleMicroTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\n\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\nimport { type TranscriberParams } from '../transcriber';\n\nexport type UseVoiceInputProps = {\n active?: boolean;\n onUpdate: (text: string) => void;\n};\n\n/**\n * Hook for voice input.\n */\nexport const useVoiceInput = ({ active, onUpdate }: UseVoiceInputProps) => {\n const soundStart = useSoundEffect('StartRecording');\n const soundStop = useSoundEffect('StopRecording');\n\n const handleSegments = useCallback<TranscriberParams['onSegments']>(async (segments) => {\n const text = segments.map((str) => str.text.trim().replace(/[^\\w\\s]/g, '')).join(' ');\n onUpdate(text);\n }, []);\n\n // Audio/transcription.\n const [recording, setRecording] = useState(false);\n const track = useAudioTrack(active);\n const transcriber = useTranscriber({\n audioStreamTrack: track,\n onSegments: handleSegments,\n });\n\n // Start/stop transcription.\n useEffect(() => {\n const ctx = new Context();\n scheduleMicroTask(ctx, async () => {\n if (active && transcriber) {\n await transcriber.open();\n log.info('starting...');\n setRecording(true);\n void soundStart.play();\n transcriber.startChunksRecording();\n } else if (!active && transcriber?.isOpen) {\n transcriber?.stopChunksRecording();\n await transcriber?.close();\n log.info('stopped');\n setRecording(false);\n void soundStop.play();\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [active, transcriber]);\n\n return { recording };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';\nimport { QueueImpl } from '@dxos/echo-db';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\n\nimport { AppGraphBuilder, IntentResolver, MeetingTranscriptionState, ReactSurface, Transcriber } from './capabilities';\nimport { meta } from './meta';\nimport translations from './translations';\nimport { TranscriptBlock, TranscriptType } from './types';\n\nexport const TranscriptionPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/transcription`,\n activatesOn: Events.SetupAppGraph,\n activate: Transcriber,\n }),\n defineModule({\n id: `${meta.id}/module/meeting-transcription-state`,\n activatesOn: Events.SetupAppGraph,\n activate: MeetingTranscriptionState,\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: (context) =>\n contributes(Capabilities.Metadata, {\n id: TranscriptType.typename,\n metadata: {\n icon: 'ph--subtitles--regular',\n // TODO(wittjosiah): Factor out. Artifact? Separate capability?\n getTextContent: async (transcript: TranscriptType) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const queue = new QueueImpl(client.edge, transcript.queue.dxn);\n await queue.refresh();\n const content = queue.items\n .filter((block) => isInstanceOf(TranscriptBlock, block))\n .map((block) => `${block.authorName}: ${block.segments.map((segment) => segment.text).join('\\n')}`)\n .join('\\n\\n');\n return content;\n },\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => [contributes(ClientCapabilities.Schema, [TranscriptType])],\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { TRANSCRIPTION_PLUGIN } from './meta';\nimport { TranscriptType } from './types';\n\nexport default [\n {\n 'en-US': {\n [TranscriptType.typename]: {\n 'typename label': 'Transcript',\n 'object name placeholder': 'New transcript',\n },\n [TRANSCRIPTION_PLUGIN]: {\n 'plugin name': 'Transcription',\n 'transcript companion label': 'Transcript',\n\n 'start transcription label': 'Start transcription',\n 'stop transcription label': 'Stop transcription',\n\n 'delete button': 'Delete',\n 'bookmark button': 'Bookmark',\n 'scroll to end label': 'Scroll to latest',\n },\n },\n },\n];\n"],
5
+ "mappings": "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",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "IntentResolver", "MeetingTranscriptionState", "ReactSurface", "Transcriber", "useEffect", "useState", "log", "useAudioFile", "audioUrl", "audio", "stream", "track", "setStream", "t", "setTimeout", "response", "fetch", "blob", "Audio", "src", "URL", "createObjectURL", "Promise", "resolve", "reject", "addEventListener", "err", "error", "once", "info", "load", "ctx", "AudioContext", "destination", "createMediaStreamDestination", "channelCount", "source", "createMediaElementSource", "connect", "getAudioTracks", "clearTimeout", "useEffect", "useState", "useAudioTrack", "active", "track", "setTrack", "useState", "useEffect", "stop", "undefined", "initAudio", "audio", "Audio", "srcObject", "navigator", "mediaDevices", "getUserMedia", "getAudioTracks", "useEffect", "useMemo", "useCapabilities", "useTranscriber", "audioStreamTrack", "onSegments", "getTranscriber", "useCapabilities", "TranscriptionCapabilities", "Transcriber", "transcriber", "useMemo", "undefined", "useEffect", "close", "useState", "useEffect", "useCallback", "scheduleMicroTask", "Context", "log", "useSoundEffect", "useVoiceInput", "active", "onUpdate", "soundStart", "useSoundEffect", "soundStop", "handleSegments", "useCallback", "segments", "text", "map", "str", "trim", "replace", "join", "recording", "setRecording", "useState", "track", "useAudioTrack", "transcriber", "useTranscriber", "audioStreamTrack", "onSegments", "useEffect", "ctx", "Context", "scheduleMicroTask", "open", "log", "info", "play", "startChunksRecording", "isOpen", "stopChunksRecording", "close", "dispose", "Capabilities", "Events", "contributes", "defineModule", "definePlugin", "QueueImpl", "isInstanceOf", "ClientCapabilities", "ClientEvents", "TranscriptType", "typename", "TRANSCRIPTION_PLUGIN", "TranscriptionPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "SetupAppGraph", "Transcriber", "MeetingTranscriptionState", "SetupMetadata", "context", "Metadata", "TranscriptType", "typename", "metadata", "icon", "getTextContent", "transcript", "client", "requestCapability", "ClientCapabilities", "Client", "queue", "QueueImpl", "edge", "dxn", "refresh", "content", "items", "filter", "block", "isInstanceOf", "TranscriptBlock", "map", "authorName", "segments", "segment", "text", "join", "ClientEvents", "SetupSchema", "Schema", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "AppGraphBuilder"]
7
7
  }
@@ -1,22 +1,22 @@
1
1
  import {
2
- getTimeStr
3
- } from "./chunk-KLD7O5GJ.mjs";
2
+ getTimeStr,
3
+ randomQueueDxn
4
+ } from "./chunk-GU2BNYKZ.mjs";
4
5
  import {
5
6
  TranscriptType,
6
7
  TranscriptionAction
7
- } from "./chunk-YRWBY6UK.mjs";
8
+ } from "./chunk-OGNXNGJB.mjs";
8
9
  import "./chunk-6ZR5MDK3.mjs";
9
10
 
10
11
  // packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts
11
12
  import { Capabilities, contributes, createResolver } from "@dxos/app-framework";
12
- import { live, refFromDXN } from "@dxos/live-object";
13
- import { createQueueDxn } from "@dxos/react-client/echo";
13
+ import { create, refFromDXN } from "@dxos/live-object";
14
14
  var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, [
15
15
  createResolver({
16
16
  intent: TranscriptionAction.Create,
17
17
  resolve: ({ name, spaceId }) => {
18
- const transcript = live(TranscriptType, {
19
- queue: refFromDXN(createQueueDxn(spaceId)),
18
+ const transcript = create(TranscriptType, {
19
+ queue: refFromDXN(randomQueueDxn(spaceId)),
20
20
  name: name ?? `Transcript ${getTimeStr(Date.now())}`
21
21
  });
22
22
  return {
@@ -30,4 +30,4 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
30
30
  export {
31
31
  intent_resolver_default as default
32
32
  };
33
- //# sourceMappingURL=intent-resolver-ZWKYRFE7.mjs.map
33
+ //# sourceMappingURL=intent-resolver-4R66ZCKT.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createResolver, type PluginsContext } from '@dxos/app-framework';\nimport { create, refFromDXN } from '@dxos/live-object';\nimport { type SpaceId } from '@dxos/react-client/echo';\n\nimport { TranscriptionAction, TranscriptType } from '../types';\nimport { getTimeStr, randomQueueDxn } from '../util';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: TranscriptionAction.Create,\n resolve: ({ name, spaceId }) => {\n const transcript = create(TranscriptType, {\n queue: refFromDXN(randomQueueDxn(spaceId as SpaceId)),\n name: name ?? `Transcript ${getTimeStr(Date.now())}`,\n });\n\n return { data: { object: transcript } };\n },\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;AAIA,SAASA,cAAcC,aAAaC,sBAA2C;AAC/E,SAASC,QAAQC,kBAAkB;AAMnC,IAAA,0BAAe,CAACC,YACdC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAe;IACbC,QAAQC,oBAAoBC;IAC5BC,SAAS,CAAC,EAAEC,MAAMC,QAAO,MAAE;AACzB,YAAMC,aAAaC,OAAOC,gBAAgB;QACxCC,OAAOC,WAAWC,eAAeN,OAAAA,CAAAA;QACjCD,MAAMA,QAAQ,cAAcQ,WAAWC,KAAKC,IAAG,CAAA,CAAA;MACjD,CAAA;AAEA,aAAO;QAAEC,MAAM;UAAEC,QAAQV;QAAW;MAAE;IACxC;EACF,CAAA;CACD;",
6
+ "names": ["Capabilities", "contributes", "createResolver", "create", "refFromDXN", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "TranscriptionAction", "Create", "resolve", "name", "spaceId", "transcript", "create", "TranscriptType", "queue", "refFromDXN", "randomQueueDxn", "getTimeStr", "Date", "now", "data", "object"]
7
+ }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  TranscriptionCapabilities
3
- } from "./chunk-LTIQFX4W.mjs";
3
+ } from "./chunk-YEPT334A.mjs";
4
4
  import "./chunk-6ZR5MDK3.mjs";
5
5
 
6
6
  // packages/plugins/plugin-transcription/src/capabilities/meeting-transcription-state.ts
7
7
  import { contributes } from "@dxos/app-framework";
8
- import { live } from "@dxos/live-object";
8
+ import { create } from "@dxos/live-object";
9
9
  var meeting_transcription_state_default = () => {
10
- const state = live({
10
+ const state = create({
11
11
  enabled: false
12
12
  });
13
13
  return contributes(TranscriptionCapabilities.MeetingTranscriptionState, state);
@@ -15,4 +15,4 @@ var meeting_transcription_state_default = () => {
15
15
  export {
16
16
  meeting_transcription_state_default as default
17
17
  };
18
- //# sourceMappingURL=meeting-transcription-state-MNA2XROE.mjs.map
18
+ //# sourceMappingURL=meeting-transcription-state-DLFHQK72.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/meeting-transcription-state.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { create } from '@dxos/live-object';\n\nimport { TranscriptionCapabilities } from './capabilities';\n\nexport default () => {\n const state = create<TranscriptionCapabilities.MeetingTranscriptionState>({\n enabled: false,\n });\n\n return contributes(TranscriptionCapabilities.MeetingTranscriptionState, state);\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,cAAc;AAIvB,IAAA,sCAAe,MAAA;AACb,QAAMC,QAAQC,OAA4D;IACxEC,SAAS;EACX,CAAA;AAEA,SAAOC,YAAYC,0BAA0BC,2BAA2BL,KAAAA;AAC1E;",
6
+ "names": ["contributes", "create", "state", "create", "enabled", "contributes", "TranscriptionCapabilities", "MeetingTranscriptionState"]
7
+ }