@dxos/plugin-transcription 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29

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 (331) hide show
  1. package/dist/lib/neutral/TranscriptionContainer-XNGXNGPX.mjs +35 -0
  2. package/dist/lib/neutral/TranscriptionContainer-XNGXNGPX.mjs.map +7 -0
  3. package/dist/lib/neutral/TranscriptionPlugin.mjs +34 -0
  4. package/dist/lib/neutral/TranscriptionPlugin.mjs.map +7 -0
  5. package/dist/lib/neutral/TranscriptionPlugin.node.mjs +25 -0
  6. package/dist/lib/neutral/TranscriptionPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs +15 -0
  8. package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs.map +7 -0
  9. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  10. package/dist/lib/neutral/capabilities/index.mjs +17 -0
  11. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  12. package/dist/lib/neutral/chunk-GL4RS533.mjs +22 -0
  13. package/dist/lib/neutral/chunk-GL4RS533.mjs.map +7 -0
  14. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  15. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs +35 -0
  16. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs.map +7 -0
  17. package/dist/lib/{browser/chunk-BA64VLLR.mjs → neutral/chunk-LS3R7EQI.mjs} +129 -185
  18. package/dist/lib/neutral/chunk-LS3R7EQI.mjs.map +7 -0
  19. package/dist/lib/neutral/chunk-MLRJWAQH.mjs +179 -0
  20. package/dist/lib/neutral/chunk-MLRJWAQH.mjs.map +7 -0
  21. package/dist/lib/neutral/chunk-NNR3EYR2.mjs +124 -0
  22. package/dist/lib/neutral/chunk-NNR3EYR2.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-NQQK7UZQ.mjs +244 -0
  24. package/dist/lib/neutral/chunk-NQQK7UZQ.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-WVEZMGBT.mjs +8 -0
  26. package/dist/lib/neutral/chunk-WVEZMGBT.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs +30 -0
  28. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs.map +7 -0
  29. package/dist/lib/neutral/components/index.mjs +207 -0
  30. package/dist/lib/neutral/components/index.mjs.map +7 -0
  31. package/dist/lib/neutral/containers/index.mjs +9 -0
  32. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  33. package/dist/lib/neutral/create-2D6S4IMQ.mjs +21 -0
  34. package/dist/lib/neutral/create-2D6S4IMQ.mjs.map +7 -0
  35. package/dist/lib/neutral/hooks/index.mjs +17 -0
  36. package/dist/lib/neutral/index.mjs +44 -0
  37. package/dist/lib/neutral/meta.json +1 -0
  38. package/dist/lib/neutral/meta.mjs +8 -0
  39. package/dist/lib/neutral/meta.mjs.map +7 -0
  40. package/dist/lib/neutral/open-2QB6IIET.mjs +27 -0
  41. package/dist/lib/neutral/open-2QB6IIET.mjs.map +7 -0
  42. package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs +13 -0
  43. package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs.map +7 -0
  44. package/dist/lib/neutral/operations/index.mjs +8 -0
  45. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  46. package/dist/lib/neutral/plugin.mjs +16 -0
  47. package/dist/lib/neutral/plugin.mjs.map +7 -0
  48. package/dist/lib/neutral/react-surface-QF4MUMWG.mjs +26 -0
  49. package/dist/lib/neutral/react-surface-QF4MUMWG.mjs.map +7 -0
  50. package/dist/lib/neutral/summarize-CJPVKWYZ.mjs +78 -0
  51. package/dist/lib/neutral/summarize-CJPVKWYZ.mjs.map +7 -0
  52. package/dist/lib/neutral/text-content-LHSUG2D2.mjs +30 -0
  53. package/dist/lib/neutral/text-content-LHSUG2D2.mjs.map +7 -0
  54. package/dist/lib/{node-esm/transcriber-QPS55YP2.mjs → neutral/transcriber-M3R6HPTZ.mjs} +20 -18
  55. package/dist/lib/neutral/transcriber-M3R6HPTZ.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +22 -0
  57. package/dist/lib/neutral/translations.mjs.map +7 -0
  58. package/dist/lib/neutral/types/index.mjs +12 -0
  59. package/dist/lib/neutral/types/index.mjs.map +7 -0
  60. package/dist/types/src/TranscriptionPlugin.d.ts +3 -1
  61. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  62. package/dist/types/src/TranscriptionPlugin.node.d.ts +4 -0
  63. package/dist/types/src/TranscriptionPlugin.node.d.ts.map +1 -0
  64. package/dist/types/src/TranscriptionPlugin.test.d.ts +2 -0
  65. package/dist/types/src/TranscriptionPlugin.test.d.ts.map +1 -0
  66. package/dist/types/src/blueprints/index.d.ts +2 -0
  67. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  68. package/dist/types/src/blueprints/transcription-blueprint.d.ts +4 -0
  69. package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  71. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/index.d.ts +10 -5
  73. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  75. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  77. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/text-content.d.ts +8 -0
  79. package/dist/types/src/capabilities/text-content.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/transcriber.d.ts +4 -3
  81. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  82. package/dist/types/src/components/Transcription/Transcription.d.ts +18 -0
  83. package/dist/types/src/components/Transcription/Transcription.d.ts.map +1 -0
  84. package/dist/types/src/components/Transcription/Transcription.stories.d.ts +40 -0
  85. package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/Transcription/index.d.ts +2 -0
  87. package/dist/types/src/components/Transcription/index.d.ts.map +1 -0
  88. package/dist/types/src/components/Transcription/transcription-extension.d.ts +15 -0
  89. package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +1 -0
  90. package/dist/types/src/components/index.d.ts +1 -3
  91. package/dist/types/src/components/index.d.ts.map +1 -1
  92. package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts +6 -0
  93. package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts.map +1 -0
  94. package/dist/types/src/containers/TranscriptionContainer/index.d.ts +2 -0
  95. package/dist/types/src/containers/TranscriptionContainer/index.d.ts.map +1 -0
  96. package/dist/types/src/containers/index.d.ts +3 -0
  97. package/dist/types/src/containers/index.d.ts.map +1 -0
  98. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  99. package/dist/types/src/hooks/useAudioTrack.d.ts.map +1 -1
  100. package/dist/types/src/hooks/useQueueModelAdapter.d.ts +1 -1
  101. package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +1 -1
  102. package/dist/types/src/hooks/useTranscriber.d.ts +2 -2
  103. package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
  104. package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
  105. package/dist/types/src/index.d.ts +2 -3
  106. package/dist/types/src/index.d.ts.map +1 -1
  107. package/dist/types/src/meta.d.ts +2 -3
  108. package/dist/types/src/meta.d.ts.map +1 -1
  109. package/dist/types/src/model/model.d.ts +2 -2
  110. package/dist/types/src/model/model.d.ts.map +1 -1
  111. package/dist/types/src/{segments-normalization → normalization}/index.d.ts +1 -1
  112. package/dist/types/src/normalization/index.d.ts.map +1 -0
  113. package/dist/types/src/{segments-normalization → normalization}/message-normalizer.d.ts +5 -5
  114. package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -0
  115. package/dist/types/src/normalization/normalization.d.ts +543 -0
  116. package/dist/types/src/normalization/normalization.d.ts.map +1 -0
  117. package/dist/types/src/normalization/normalization.test.d.ts.map +1 -0
  118. package/dist/types/src/normalization/utils.d.ts +3 -0
  119. package/dist/types/src/normalization/utils.d.ts.map +1 -0
  120. package/dist/types/src/operations/create.d.ts +5 -0
  121. package/dist/types/src/operations/create.d.ts.map +1 -0
  122. package/dist/types/src/operations/index.d.ts +3 -0
  123. package/dist/types/src/operations/index.d.ts.map +1 -0
  124. package/dist/types/src/operations/open.d.ts +5 -0
  125. package/dist/types/src/operations/open.d.ts.map +1 -0
  126. package/dist/types/src/operations/summarize.d.ts +8 -0
  127. package/dist/types/src/operations/summarize.d.ts.map +1 -0
  128. package/dist/types/src/plugin.d.ts +4 -0
  129. package/dist/types/src/plugin.d.ts.map +1 -0
  130. package/dist/types/src/{components/stories → stories}/FileTranscription.stories.d.ts +3 -4
  131. package/dist/types/src/stories/FileTranscription.stories.d.ts.map +1 -0
  132. package/dist/types/src/{components/stories → stories}/KeyWordRecognition.stories.d.ts +2 -3
  133. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +1 -0
  134. package/dist/types/src/{components/stories → stories}/MicrophoneTranscription.stories.d.ts +5 -6
  135. package/dist/types/src/stories/MicrophoneTranscription.stories.d.ts.map +1 -0
  136. package/dist/types/src/stories/TranscriptionStory.d.ts +23 -0
  137. package/dist/types/src/stories/TranscriptionStory.d.ts.map +1 -0
  138. package/dist/types/src/stories/useIsSpeaking.d.ts.map +1 -0
  139. package/dist/types/src/testing/testing.d.ts +10 -10
  140. package/dist/types/src/testing/testing.d.ts.map +1 -1
  141. package/dist/types/src/transcriber/index.d.ts +1 -1
  142. package/dist/types/src/transcriber/index.d.ts.map +1 -1
  143. package/dist/types/src/transcriber/media-stream-recorder.d.ts +2 -2
  144. package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
  145. package/dist/types/src/transcriber/transcriber.d.ts +60 -5
  146. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  147. package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
  148. package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
  149. package/dist/types/src/transcriber/transcription-manager.d.ts +9 -6
  150. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  151. package/dist/types/src/translations.d.ts +7 -8
  152. package/dist/types/src/translations.d.ts.map +1 -1
  153. package/dist/types/src/types/TranscriptOperation.d.ts +917 -0
  154. package/dist/types/src/types/TranscriptOperation.d.ts.map +1 -0
  155. package/dist/types/src/types/TranscriptionCapabilities.d.ts +17 -0
  156. package/dist/types/src/types/TranscriptionCapabilities.d.ts.map +1 -0
  157. package/dist/types/src/types/{types.d.ts → defs.d.ts} +1 -1
  158. package/dist/types/src/types/defs.d.ts.map +1 -0
  159. package/dist/types/src/types/index.d.ts +3 -3
  160. package/dist/types/src/types/index.d.ts.map +1 -1
  161. package/dist/types/src/util/array.d.ts.map +1 -1
  162. package/dist/types/src/util/get-time-str.d.ts.map +1 -1
  163. package/dist/types/src/util/index.d.ts +1 -0
  164. package/dist/types/src/util/index.d.ts.map +1 -1
  165. package/dist/types/src/util/monitor-audio-level.d.ts.map +1 -1
  166. package/dist/types/src/util/render-byline.d.ts +4 -0
  167. package/dist/types/src/util/render-byline.d.ts.map +1 -0
  168. package/dist/types/tsconfig.tsbuildinfo +1 -1
  169. package/package.json +148 -82
  170. package/src/TranscriptionPlugin.node.ts +20 -0
  171. package/src/TranscriptionPlugin.test.ts +31 -0
  172. package/src/TranscriptionPlugin.tsx +22 -66
  173. package/src/blueprints/index.ts +5 -0
  174. package/src/blueprints/transcription-blueprint.ts +29 -0
  175. package/src/capabilities/blueprint-definition.ts +12 -24
  176. package/src/capabilities/index.ts +11 -7
  177. package/src/capabilities/operation-handler.ts +16 -0
  178. package/src/capabilities/react-surface.tsx +23 -14
  179. package/src/capabilities/text-content.ts +33 -0
  180. package/src/capabilities/transcriber.ts +53 -42
  181. package/src/components/{Transcript/Transcript.stories.tsx → Transcription/Transcription.stories.tsx} +62 -59
  182. package/src/components/Transcription/Transcription.tsx +64 -0
  183. package/src/components/{Transcript → Transcription}/index.ts +1 -1
  184. package/src/components/{Transcript/transcript-extension.ts → Transcription/transcription-extension.ts} +13 -9
  185. package/src/components/index.ts +1 -6
  186. package/src/containers/TranscriptionContainer/TranscriptionContainer.tsx +35 -0
  187. package/src/containers/TranscriptionContainer/index.ts +5 -0
  188. package/src/containers/index.ts +7 -0
  189. package/src/hooks/useAudioFile.ts +50 -45
  190. package/src/hooks/useQueueModelAdapter.ts +1 -1
  191. package/src/hooks/useTranscriber.ts +12 -4
  192. package/src/hooks/useVoiceInput.ts +2 -3
  193. package/src/index.ts +4 -5
  194. package/src/meta.ts +9 -6
  195. package/src/model/model.test.ts +20 -14
  196. package/src/model/model.ts +3 -3
  197. package/src/{segments-normalization → normalization}/message-normalizer.ts +19 -18
  198. package/src/{segments-normalization → normalization}/normalization.test.ts +7 -12
  199. package/src/normalization/normalization.ts +76 -0
  200. package/src/{segments-normalization → normalization}/utils.ts +2 -2
  201. package/src/operations/create.ts +24 -0
  202. package/src/operations/index.ts +11 -0
  203. package/src/operations/open.ts +28 -0
  204. package/src/operations/summarize.ts +101 -0
  205. package/src/plugin.ts +11 -0
  206. package/src/{components/stories → stories}/FileTranscription.stories.tsx +56 -43
  207. package/src/{components/stories → stories}/KeyWordRecognition.stories.tsx +36 -36
  208. package/src/{components/stories → stories}/MicrophoneTranscription.stories.tsx +60 -81
  209. package/src/stories/TranscriptionStory.tsx +93 -0
  210. package/src/testing/testing.ts +37 -37
  211. package/src/transcriber/index.ts +1 -1
  212. package/src/transcriber/media-stream-recorder.ts +3 -3
  213. package/src/transcriber/transcriber.browser.test.ts +4 -5
  214. package/src/transcriber/transcriber.test.ts +104 -0
  215. package/src/transcriber/transcriber.ts +99 -58
  216. package/src/transcriber/transcription-manager.ts +21 -15
  217. package/src/translations.ts +7 -7
  218. package/src/types/TranscriptOperation.ts +103 -0
  219. package/src/types/TranscriptionCapabilities.ts +39 -0
  220. package/src/types/index.ts +4 -3
  221. package/src/util/index.ts +1 -0
  222. package/src/util/render-byline.ts +33 -0
  223. package/dist/lib/browser/TranscriptContainer-4RBK74JP.mjs +0 -11
  224. package/dist/lib/browser/blueprint-definition-TJABB43G.mjs +0 -142
  225. package/dist/lib/browser/blueprint-definition-TJABB43G.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-3X7HP44M.mjs +0 -26
  227. package/dist/lib/browser/chunk-3X7HP44M.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-AGZYQGSP.mjs +0 -8
  229. package/dist/lib/browser/chunk-AGZYQGSP.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-BA64VLLR.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-HXVGV7T6.mjs +0 -63
  232. package/dist/lib/browser/chunk-HXVGV7T6.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-TNEQFHIU.mjs +0 -16
  234. package/dist/lib/browser/chunk-TNEQFHIU.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-VVXRHJCH.mjs +0 -746
  236. package/dist/lib/browser/chunk-VVXRHJCH.mjs.map +0 -7
  237. package/dist/lib/browser/index.mjs +0 -131
  238. package/dist/lib/browser/index.mjs.map +0 -7
  239. package/dist/lib/browser/intent-resolver-T3EGLS3L.mjs +0 -25
  240. package/dist/lib/browser/intent-resolver-T3EGLS3L.mjs.map +0 -7
  241. package/dist/lib/browser/meta.json +0 -1
  242. package/dist/lib/browser/react-surface-4Y3YISAD.mjs +0 -34
  243. package/dist/lib/browser/react-surface-4Y3YISAD.mjs.map +0 -7
  244. package/dist/lib/browser/transcriber-JOOAQVYV.mjs +0 -56
  245. package/dist/lib/browser/transcriber-JOOAQVYV.mjs.map +0 -7
  246. package/dist/lib/browser/types/index.mjs +0 -12
  247. package/dist/lib/node-esm/TranscriptContainer-EGAAYVOP.mjs +0 -12
  248. package/dist/lib/node-esm/blueprint-definition-R4UF7YJZ.mjs +0 -143
  249. package/dist/lib/node-esm/blueprint-definition-R4UF7YJZ.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-3QAIZGMW.mjs +0 -17
  251. package/dist/lib/node-esm/chunk-3QAIZGMW.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-CF5Z6FAB.mjs +0 -10
  253. package/dist/lib/node-esm/chunk-CF5Z6FAB.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-J5GQ3KGX.mjs +0 -487
  255. package/dist/lib/node-esm/chunk-J5GQ3KGX.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-QARUDLHN.mjs +0 -27
  257. package/dist/lib/node-esm/chunk-QARUDLHN.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-SFQNMFHX.mjs +0 -747
  259. package/dist/lib/node-esm/chunk-SFQNMFHX.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-W72HVQMD.mjs +0 -64
  261. package/dist/lib/node-esm/chunk-W72HVQMD.mjs.map +0 -7
  262. package/dist/lib/node-esm/index.mjs +0 -132
  263. package/dist/lib/node-esm/index.mjs.map +0 -7
  264. package/dist/lib/node-esm/intent-resolver-VDHCUAIO.mjs +0 -26
  265. package/dist/lib/node-esm/intent-resolver-VDHCUAIO.mjs.map +0 -7
  266. package/dist/lib/node-esm/meta.json +0 -1
  267. package/dist/lib/node-esm/react-surface-ZIXDGJAN.mjs +0 -35
  268. package/dist/lib/node-esm/react-surface-ZIXDGJAN.mjs.map +0 -7
  269. package/dist/lib/node-esm/transcriber-QPS55YP2.mjs.map +0 -7
  270. package/dist/lib/node-esm/types/index.mjs +0 -13
  271. package/dist/types/src/capabilities/capabilities.d.ts +0 -17
  272. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  273. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  274. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  275. package/dist/types/src/components/Transcript/Transcript.d.ts +0 -20
  276. package/dist/types/src/components/Transcript/Transcript.d.ts.map +0 -1
  277. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +0 -39
  278. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +0 -1
  279. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +0 -28
  280. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +0 -1
  281. package/dist/types/src/components/Transcript/index.d.ts +0 -2
  282. package/dist/types/src/components/Transcript/index.d.ts.map +0 -1
  283. package/dist/types/src/components/Transcript/transcript-extension.d.ts +0 -15
  284. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +0 -1
  285. package/dist/types/src/components/TranscriptContainer.d.ts +0 -9
  286. package/dist/types/src/components/TranscriptContainer.d.ts.map +0 -1
  287. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +0 -1
  288. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +0 -1
  289. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +0 -1
  290. package/dist/types/src/components/stories/TranscriptionStory.d.ts +0 -12
  291. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +0 -1
  292. package/dist/types/src/components/stories/useIsSpeaking.d.ts.map +0 -1
  293. package/dist/types/src/functions/index.d.ts +0 -3
  294. package/dist/types/src/functions/index.d.ts.map +0 -1
  295. package/dist/types/src/functions/open.d.ts +0 -7
  296. package/dist/types/src/functions/open.d.ts.map +0 -1
  297. package/dist/types/src/functions/summarize.d.ts +0 -11
  298. package/dist/types/src/functions/summarize.d.ts.map +0 -1
  299. package/dist/types/src/segments-normalization/index.d.ts.map +0 -1
  300. package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +0 -1
  301. package/dist/types/src/segments-normalization/normalization.d.ts +0 -461
  302. package/dist/types/src/segments-normalization/normalization.d.ts.map +0 -1
  303. package/dist/types/src/segments-normalization/normalization.test.d.ts.map +0 -1
  304. package/dist/types/src/segments-normalization/utils.d.ts +0 -3
  305. package/dist/types/src/segments-normalization/utils.d.ts.map +0 -1
  306. package/dist/types/src/types/Transcript.d.ts +0 -30
  307. package/dist/types/src/types/Transcript.d.ts.map +0 -1
  308. package/dist/types/src/types/TranscriptAction.d.ts +0 -23
  309. package/dist/types/src/types/TranscriptAction.d.ts.map +0 -1
  310. package/dist/types/src/types/types.d.ts.map +0 -1
  311. package/src/capabilities/capabilities.ts +0 -33
  312. package/src/capabilities/intent-resolver.ts +0 -18
  313. package/src/components/Transcript/Transcript.tsx +0 -93
  314. package/src/components/Transcript/deprecated/OldTranscript.tsx +0 -260
  315. package/src/components/TranscriptContainer.tsx +0 -36
  316. package/src/components/stories/TranscriptionStory.tsx +0 -45
  317. package/src/functions/index.ts +0 -6
  318. package/src/functions/open.ts +0 -37
  319. package/src/functions/summarize.ts +0 -97
  320. package/src/segments-normalization/normalization.ts +0 -115
  321. package/src/types/Transcript.ts +0 -44
  322. package/src/types/TranscriptAction.ts +0 -24
  323. package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  324. package/dist/lib/{browser/TranscriptContainer-4RBK74JP.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  325. package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
  326. package/dist/lib/{node-esm/TranscriptContainer-EGAAYVOP.mjs.map → neutral/index.mjs.map} +0 -0
  327. package/dist/types/src/{segments-normalization → normalization}/normalization.test.d.ts +0 -0
  328. package/dist/types/src/{components/stories → stories}/useIsSpeaking.d.ts +0 -0
  329. package/src/{segments-normalization → normalization}/index.ts +1 -1
  330. /package/src/{components/stories → stories}/useIsSpeaking.tsx +0 -0
  331. /package/src/types/{types.ts → defs.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
- TRANSCRIPTION_URL
3
- } from "./chunk-HXVGV7T6.mjs";
2
+ mergeFloat64Arrays
3
+ } from "./chunk-KAEXRX3Y.mjs";
4
4
 
5
5
  // src/transcriber/media-stream-recorder.ts
6
6
  import { MediaRecorder, register } from "extendable-media-recorder";
@@ -9,32 +9,31 @@ import { synchronized } from "@dxos/async";
9
9
  import { invariant } from "@dxos/invariant";
10
10
  import { log } from "@dxos/log";
11
11
  import { trace } from "@dxos/tracing";
12
- function _define_property(obj, key, value) {
13
- if (key in obj) {
14
- Object.defineProperty(obj, key, {
15
- value,
16
- enumerable: true,
17
- configurable: true,
18
- writable: true
19
- });
20
- } else {
21
- obj[key] = value;
22
- }
23
- return obj;
24
- }
12
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts";
25
13
  function _ts_decorate(decorators, target, key, desc) {
26
14
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
15
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28
16
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
29
17
  return c > 3 && r && Object.defineProperty(target, key, r), r;
30
18
  }
31
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts";
32
19
  var initializingPromise;
33
20
  var initializeExtendableMediaRecorder = async () => {
34
21
  const { connect } = await import("extendable-media-recorder-wav-encoder");
35
22
  await register(await connect());
36
23
  };
37
24
  var MediaStreamRecorder = class {
25
+ _mediaStreamTrack;
26
+ /**
27
+ * Default MediaRecorder implementation do not support wav encoding.
28
+ */
29
+ _config;
30
+ _mediaRecorder = void 0;
31
+ _header = void 0;
32
+ _onChunk;
33
+ constructor({ mediaStreamTrack, config }) {
34
+ this._mediaStreamTrack = mediaStreamTrack;
35
+ this._config = config;
36
+ }
38
37
  get wavConfig() {
39
38
  const settings = this._mediaStreamTrack.getSettings();
40
39
  return {
@@ -50,14 +49,9 @@ var MediaStreamRecorder = class {
50
49
  this._onChunk = onChunk;
51
50
  }
52
51
  async start() {
53
- await (initializingPromise ?? (initializingPromise = initializeExtendableMediaRecorder())).catch((err) => log.info("initializeExtendableMediaRecorder", {
52
+ await (initializingPromise ??= initializeExtendableMediaRecorder()).catch((err) => log.info("initializeExtendableMediaRecorder", {
54
53
  err
55
- }, {
56
- F: __dxlog_file,
57
- L: 69,
58
- S: this,
59
- C: (f, a) => f(...a)
60
- }));
54
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 48, S: this }));
61
55
  if (!this._mediaRecorder) {
62
56
  const stream = new MediaStream([
63
57
  this._mediaStreamTrack
@@ -69,15 +63,7 @@ var MediaStreamRecorder = class {
69
63
  if (this._mediaRecorder.state === "recording") {
70
64
  return;
71
65
  }
72
- invariant(this._onChunk, "MediaStreamRecorder: onChunk is not set", {
73
- F: __dxlog_file,
74
- L: 80,
75
- S: this,
76
- A: [
77
- "this._onChunk",
78
- "'MediaStreamRecorder: onChunk is not set'"
79
- ]
80
- });
66
+ invariant(this._onChunk, "MediaStreamRecorder: onChunk is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 62, S: this, A: ["this._onChunk", "'MediaStreamRecorder: onChunk is not set'"] });
81
67
  this._mediaRecorder.ondataavailable = (event) => this._ondataavailable(event);
82
68
  this._mediaRecorder.start(this._config.interval);
83
69
  }
@@ -104,12 +90,7 @@ var MediaStreamRecorder = class {
104
90
  ...uint8Array
105
91
  ]));
106
92
  } else {
107
- log.warn("MediaStreamRecorder: no header", void 0, {
108
- F: __dxlog_file,
109
- L: 111,
110
- S: this,
111
- C: (f, a) => f(...a)
112
- });
93
+ log.warn("MediaStreamRecorder: no header", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 90, S: this });
113
94
  return;
114
95
  }
115
96
  this._onChunk({
@@ -117,15 +98,6 @@ var MediaStreamRecorder = class {
117
98
  data: wav.getSamples()
118
99
  });
119
100
  }
120
- constructor({ mediaStreamTrack, config }) {
121
- _define_property(this, "_mediaStreamTrack", void 0);
122
- _define_property(this, "_config", void 0);
123
- _define_property(this, "_mediaRecorder", void 0);
124
- _define_property(this, "_header", void 0);
125
- _define_property(this, "_onChunk", void 0);
126
- this._mediaStreamTrack = mediaStreamTrack;
127
- this._config = config;
128
- }
129
101
  };
130
102
  _ts_decorate([
131
103
  synchronized
@@ -140,70 +112,48 @@ import { DeferredTask, Trigger } from "@dxos/async";
140
112
  import { LifecycleState, Resource } from "@dxos/context";
141
113
  import { log as log2 } from "@dxos/log";
142
114
  import { trace as trace2 } from "@dxos/tracing";
143
-
144
- // src/util/array.ts
145
- var mergeFloat64Arrays = (arrays) => {
146
- const newArray = new Float64Array(arrays.reduce((acc, array) => array.length + acc, 0));
147
- let offset = 0;
148
- for (const array of arrays) {
149
- newArray.set(array, offset);
150
- offset += array.length;
151
- }
152
- return newArray;
153
- };
154
-
155
- // src/transcriber/transcriber.ts
156
- function _define_property2(obj, key, value) {
157
- if (key in obj) {
158
- Object.defineProperty(obj, key, {
159
- value,
160
- enumerable: true,
161
- configurable: true,
162
- writable: true
163
- });
164
- } else {
165
- obj[key] = value;
166
- }
167
- return obj;
168
- }
115
+ import { TRANSCRIPTION_URL } from "#types";
116
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/transcriber.ts";
169
117
  function _ts_decorate2(decorators, target, key, desc) {
170
118
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
171
119
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
172
120
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
173
121
  return c > 3 && r && Object.defineProperty(target, key, r), r;
174
122
  }
175
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/transcriber.ts";
176
123
  var Transcriber = class extends Resource {
124
+ _audioChunks = [];
125
+ _lastUsedTimestamp = 0;
126
+ _openTrigger = new Trigger({
127
+ autoReset: true
128
+ });
129
+ _config;
130
+ _recorder;
131
+ _onSegments;
132
+ _transcribeFn;
133
+ _recording = false;
134
+ _transcribeTask = void 0;
135
+ constructor({ config, recorder, onSegments, transcribe }) {
136
+ super();
137
+ this._config = config;
138
+ this._recorder = recorder;
139
+ this._onSegments = onSegments;
140
+ this._transcribeFn = transcribe;
141
+ }
177
142
  async _open(ctx) {
178
- log2.info("opening", void 0, {
179
- F: __dxlog_file2,
180
- L: 102,
181
- S: this,
182
- C: (f, a) => f(...a)
183
- });
143
+ log2.info("opening", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 41, S: this });
184
144
  this._recorder.setOnChunk((chunk) => this._saveAudioChunk(chunk));
185
145
  await this._recorder.start();
186
146
  this._transcribeTask = new DeferredTask(ctx, async () => this._transcribe());
187
147
  this._openTrigger.wake();
188
148
  }
189
149
  async _close() {
190
- log2.info("closing", void 0, {
191
- F: __dxlog_file2,
192
- L: 110,
193
- S: this,
194
- C: (f, a) => f(...a)
195
- });
150
+ log2.info("closing", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 48, S: this });
196
151
  this._recording = false;
197
152
  this._transcribeTask = void 0;
198
153
  await this._recorder.stop();
199
154
  }
200
155
  startChunksRecording() {
201
- log2.info("starting", void 0, {
202
- F: __dxlog_file2,
203
- L: 117,
204
- S: this,
205
- C: (f, a) => f(...a)
206
- });
156
+ log2.info("starting", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 54, S: this });
207
157
  if (this._lifecycleState !== LifecycleState.OPEN) {
208
158
  return;
209
159
  }
@@ -215,22 +165,12 @@ var Transcriber = class extends Resource {
215
165
  }
216
166
  this._recording = false;
217
167
  this._transcribeTask?.schedule();
218
- log2.info("stopped", void 0, {
219
- F: __dxlog_file2,
220
- L: 132,
221
- S: this,
222
- C: (f, a) => f(...a)
223
- });
168
+ log2.info("stopped", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 66, S: this });
224
169
  }
225
170
  _saveAudioChunk(chunk) {
226
171
  log2("saving audio chunk", {
227
172
  chunk
228
- }, {
229
- F: __dxlog_file2,
230
- L: 136,
231
- S: this,
232
- C: (f, a) => f(...a)
233
- });
173
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 69, S: this });
234
174
  this._audioChunks.push(chunk);
235
175
  if (!this._recording && (!this._transcribeTask || !this._transcribeTask.scheduled) && this._audioChunks.length >= this._config.prefixBufferChunksAmount) {
236
176
  this._audioChunks = this._dropOldChunks();
@@ -241,12 +181,7 @@ var Transcriber = class extends Resource {
241
181
  async _transcribe() {
242
182
  log2("transcribing", {
243
183
  chunks: this._audioChunks.length
244
- }, {
245
- F: __dxlog_file2,
246
- L: 152,
247
- S: this,
248
- C: (f, a) => f(...a)
249
- });
184
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 81, S: this });
250
185
  const chunks = this._audioChunks;
251
186
  this._audioChunks = this._dropOldChunks();
252
187
  if (chunks.length === 0) {
@@ -273,62 +208,41 @@ var Transcriber = class extends Resource {
273
208
  }
274
209
  async _fetchTranscription(audio) {
275
210
  if (audio.length === 0) {
276
- this._audioChunks = [];
277
211
  throw new Error("No audio to send for transcribing");
278
212
  }
279
- const response = await fetch(`${TRANSCRIPTION_URL}/transcribe`, {
280
- method: "POST",
281
- body: JSON.stringify({
282
- audio
283
- }),
284
- headers: {
285
- "Content-Type": "application/json"
213
+ let segments;
214
+ if (this._transcribeFn) {
215
+ segments = await this._transcribeFn(audio);
216
+ } else {
217
+ const endpoint = this._config.endpoint ?? TRANSCRIPTION_URL;
218
+ const response = await fetch(`${endpoint}/transcribe`, {
219
+ method: "POST",
220
+ body: JSON.stringify({
221
+ audio
222
+ }),
223
+ headers: {
224
+ "Content-Type": "application/json"
225
+ }
226
+ });
227
+ if (!response.ok) {
228
+ throw new Error(`Transcription failed: ${response.statusText}`);
286
229
  }
287
- });
288
- if (!response.ok) {
289
- this._audioChunks = [];
290
- throw new Error(`Transcription failed: ${response.statusText}`);
230
+ ({ segments } = await response.json());
231
+ }
232
+ if (!Array.isArray(segments)) {
233
+ throw new Error("Transcription response payload is invalid");
291
234
  }
292
- const { segments } = await response.json();
293
235
  log2.info("transcription response", {
294
- segments: segments.length,
295
- string: segments.map((segments2) => segments2.text).join(" ")
296
- }, {
297
- F: __dxlog_file2,
298
- L: 216,
299
- S: this,
300
- C: (f, a) => f(...a)
301
- });
236
+ segments: segments.length
237
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 134, S: this });
302
238
  return segments;
303
239
  }
304
240
  _alignSegments(segments, originalChunks) {
305
- const zeroTimestamp = originalChunks.at(0).timestamp;
306
- const filteredSegments = segments.filter((segment) => zeroTimestamp + segment.end * 1e3 >= this._lastUsedTimestamp).map((segment) => {
307
- const words = segment.words.filter((word) => zeroTimestamp + word.start * 1e3 >= this._lastUsedTimestamp);
308
- return {
309
- ...segment,
310
- words,
311
- text: words.map((word) => word.word).join(""),
312
- start: words.at(0)?.start ?? segment.end
313
- };
314
- }).filter((segment) => segment.words.length > 0);
315
- if (filteredSegments.length === 0) {
316
- return [];
241
+ const result = alignWhisperSegments(segments, originalChunks, this._lastUsedTimestamp);
242
+ if (result.lastUsedTimestamp !== void 0) {
243
+ this._lastUsedTimestamp = result.lastUsedTimestamp;
317
244
  }
318
- this._lastUsedTimestamp = zeroTimestamp + filteredSegments.at(-1).end * 1e3;
319
- return filteredSegments.map((segment) => ({
320
- _tag: "transcript",
321
- started: new Date(zeroTimestamp + segment.start * 1e3).toISOString(),
322
- text: segment.text.trim()
323
- }));
324
- }
325
- constructor({ config, recorder, onSegments }) {
326
- super(), _define_property2(this, "_audioChunks", []), _define_property2(this, "_lastUsedTimestamp", 0), _define_property2(this, "_openTrigger", new Trigger({
327
- autoReset: true
328
- })), _define_property2(this, "_config", void 0), _define_property2(this, "_recorder", void 0), _define_property2(this, "_onSegments", void 0), _define_property2(this, "_recording", false), _define_property2(this, "_transcribeTask", void 0);
329
- this._config = config;
330
- this._recorder = recorder;
331
- this._onSegments = onSegments;
245
+ return result.transcripts;
332
246
  }
333
247
  };
334
248
  _ts_decorate2([
@@ -341,26 +255,43 @@ _ts_decorate2([
341
255
  showInBrowserTimeline: true
342
256
  })
343
257
  ], Transcriber.prototype, "_fetchTranscription", null);
258
+ var alignWhisperSegments = (segments, originalChunks, lastUsedTimestamp) => {
259
+ if (originalChunks.length === 0) {
260
+ return {
261
+ transcripts: []
262
+ };
263
+ }
264
+ const zeroTimestamp = originalChunks[0].timestamp;
265
+ const filteredSegments = segments.filter((segment) => zeroTimestamp + segment.end * 1e3 >= lastUsedTimestamp).map((segment) => {
266
+ const words = segment.words.filter((word) => zeroTimestamp + word.start * 1e3 >= lastUsedTimestamp);
267
+ return {
268
+ ...segment,
269
+ words,
270
+ text: words.map((word) => word.word).join(""),
271
+ start: words.at(0)?.start ?? segment.end
272
+ };
273
+ }).filter((segment) => segment.words.length > 0);
274
+ if (filteredSegments.length === 0) {
275
+ return {
276
+ transcripts: []
277
+ };
278
+ }
279
+ return {
280
+ transcripts: filteredSegments.map((segment) => ({
281
+ _tag: "transcript",
282
+ started: new Date(zeroTimestamp + segment.start * 1e3).toISOString(),
283
+ text: segment.text.trim()
284
+ })),
285
+ lastUsedTimestamp: zeroTimestamp + filteredSegments.at(-1).end * 1e3
286
+ };
287
+ };
344
288
 
345
289
  // src/transcriber/transcription-manager.ts
346
- import { signal } from "@preact/signals-core";
290
+ import { Atom } from "@effect-atom/atom-react";
347
291
  import { synchronized as synchronized2 } from "@dxos/async";
348
292
  import { Resource as Resource2 } from "@dxos/context";
349
293
  import { Obj } from "@dxos/echo";
350
- import { DataType } from "@dxos/schema";
351
- function _define_property3(obj, key, value) {
352
- if (key in obj) {
353
- Object.defineProperty(obj, key, {
354
- value,
355
- enumerable: true,
356
- configurable: true,
357
- writable: true
358
- });
359
- } else {
360
- obj[key] = value;
361
- }
362
- return obj;
363
- }
294
+ import { Message } from "@dxos/types";
364
295
  function _ts_decorate3(decorators, target, key, desc) {
365
296
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
366
297
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -371,9 +302,26 @@ var RECORD_INTERVAL = 200;
371
302
  var PREFIXED_CHUNKS_AMOUNT = 10;
372
303
  var TRANSCRIBE_AFTER_CHUNKS_AMOUNT = 50;
373
304
  var TranscriptionManager = class extends Resource2 {
374
- /** @reactive */
305
+ _edgeClient;
306
+ _messageEnricher;
307
+ _registry;
308
+ _audioStreamTrack = void 0;
309
+ _identityDid = void 0;
310
+ _mediaRecorder = void 0;
311
+ _transcriber = void 0;
312
+ _queue = void 0;
313
+ _enabledAtom = Atom.make(false);
314
+ constructor(options) {
315
+ super();
316
+ this._edgeClient = options.edgeClient;
317
+ this._messageEnricher = options.messageEnricher;
318
+ this._registry = options.registry;
319
+ }
375
320
  get enabled() {
376
- return this._enabled.value;
321
+ return this._enabledAtom;
322
+ }
323
+ getEnabled() {
324
+ return this._registry.get(this._enabledAtom);
377
325
  }
378
326
  setQueue(queue) {
379
327
  this._queue = queue;
@@ -386,7 +334,7 @@ var TranscriptionManager = class extends Resource2 {
386
334
  return this;
387
335
  }
388
336
  setRecording(recording) {
389
- if (!this.isOpen || !this._enabled.value) {
337
+ if (!this.isOpen || !this.getEnabled()) {
390
338
  return this;
391
339
  }
392
340
  if (recording) {
@@ -397,10 +345,10 @@ var TranscriptionManager = class extends Resource2 {
397
345
  return this;
398
346
  }
399
347
  async setEnabled(enabled) {
400
- if (this._enabled.value === enabled) {
348
+ if (this.getEnabled() === enabled) {
401
349
  return;
402
350
  }
403
- this._enabled.value = enabled ?? false;
351
+ this._registry.set(this._enabledAtom, enabled ?? false);
404
352
  if (enabled) {
405
353
  await this._maybeRestartTranscriber();
406
354
  } else {
@@ -421,7 +369,7 @@ var TranscriptionManager = class extends Resource2 {
421
369
  await this._stopTranscriber();
422
370
  }
423
371
  async _maybeRestartTranscriber() {
424
- if (!this._audioStreamTrack || !this._enabled.value || !this.isOpen) {
372
+ if (!this._audioStreamTrack || !this.getEnabled() || !this.isOpen) {
425
373
  return;
426
374
  }
427
375
  let needReinit = false;
@@ -454,7 +402,7 @@ var TranscriptionManager = class extends Resource2 {
454
402
  if (!this.isOpen || !this._queue) {
455
403
  return;
456
404
  }
457
- let block = Obj.make(DataType.Message, {
405
+ let block = Obj.make(Message.Message, {
458
406
  created: (/* @__PURE__ */ new Date()).toISOString(),
459
407
  blocks: segments,
460
408
  sender: {
@@ -468,11 +416,6 @@ var TranscriptionManager = class extends Resource2 {
468
416
  block
469
417
  ]);
470
418
  }
471
- constructor(options) {
472
- super(), _define_property3(this, "_edgeClient", void 0), _define_property3(this, "_messageEnricher", void 0), _define_property3(this, "_audioStreamTrack", void 0), _define_property3(this, "_identityDid", void 0), _define_property3(this, "_mediaRecorder", void 0), _define_property3(this, "_transcriber", void 0), _define_property3(this, "_queue", void 0), _define_property3(this, "_enabled", signal(false));
473
- this._edgeClient = options.edgeClient;
474
- this._messageEnricher = options.messageEnricher;
475
- }
476
419
  };
477
420
  _ts_decorate3([
478
421
  synchronized2
@@ -481,6 +424,7 @@ _ts_decorate3([
481
424
  export {
482
425
  MediaStreamRecorder,
483
426
  Transcriber,
427
+ alignWhisperSegments,
484
428
  TranscriptionManager
485
429
  };
486
- //# sourceMappingURL=chunk-BA64VLLR.mjs.map
430
+ //# sourceMappingURL=chunk-LS3R7EQI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transcriber/media-stream-recorder.ts", "../../../src/transcriber/transcriber.ts", "../../../src/transcriber/transcription-manager.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type IBlobEvent, type IMediaRecorder, MediaRecorder, register } from 'extendable-media-recorder';\nimport { WaveFile } from 'wavefile';\n\nimport { synchronized } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { trace } from '@dxos/tracing';\n\nimport { type AudioChunk, type AudioRecorder, type WavConfig } from './audio-recorder';\n\nlet initializingPromise: Promise<void> | undefined;\n\nconst initializeExtendableMediaRecorder = async () => {\n const { connect } = await import('extendable-media-recorder-wav-encoder');\n await register(await connect());\n};\n\nexport type MediaStreamRecorderProps = {\n mediaStreamTrack: MediaStreamTrack;\n config: {\n interval: number;\n };\n};\n\n/**\n * Recorder that uses the MediaContext API and AudioNode API to record audio.\n *\n * It records MediaStream using https://www.npmjs.com/package/extendable-media-recorder.\n */\n@trace.resource()\nexport class MediaStreamRecorder implements AudioRecorder {\n private readonly _mediaStreamTrack: MediaStreamTrack;\n /**\n * Default MediaRecorder implementation do not support wav encoding.\n */\n private readonly _config: MediaStreamRecorderProps['config'];\n private _mediaRecorder?: IMediaRecorder = undefined;\n private _header?: Uint8Array = undefined;\n private _onChunk?: (chunk: AudioChunk) => void;\n\n constructor({ mediaStreamTrack, config }: MediaStreamRecorderProps) {\n this._mediaStreamTrack = mediaStreamTrack;\n this._config = config;\n }\n\n get wavConfig(): WavConfig {\n const settings = this._mediaStreamTrack.getSettings();\n return {\n channels: settings.channelCount ?? 1,\n sampleRate: settings.sampleRate ?? 16000,\n bitDepthCode: settings.sampleSize ? String(settings.sampleSize) : '16',\n };\n }\n\n get mediaStreamTrack() {\n return this._mediaStreamTrack;\n }\n\n setOnChunk(onChunk: (chunk: AudioChunk) => void): void {\n this._onChunk = onChunk;\n }\n\n async start(): Promise<void> {\n await (initializingPromise ??= initializeExtendableMediaRecorder()).catch((err) =>\n log.info('initializeExtendableMediaRecorder', { err }),\n );\n\n if (!this._mediaRecorder) {\n const stream = new MediaStream([this._mediaStreamTrack]);\n this._mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/wav' });\n }\n\n if (this._mediaRecorder.state === 'recording') {\n return;\n }\n invariant(this._onChunk, 'MediaStreamRecorder: onChunk is not set');\n this._mediaRecorder.ondataavailable = (event) => this._ondataavailable(event);\n this._mediaRecorder.start(this._config.interval);\n }\n\n async stop(): Promise<void> {\n if (this._mediaRecorder?.state !== 'recording') {\n return;\n }\n this._mediaRecorder.stop();\n }\n\n @synchronized\n private async _ondataavailable(event: IBlobEvent): Promise<void> {\n const blob = event.data;\n const uint8Array = new Uint8Array(await blob.arrayBuffer());\n\n // First chunk from the MediaRecorder has a header.\n const isHeader =\n uint8Array[0] === 0x52 && // R\n uint8Array[1] === 0x49 && // I\n uint8Array[2] === 0x46 && // F\n uint8Array[3] === 0x46; // F\n let wav: WaveFile;\n\n if (isHeader) {\n wav = new WaveFile(uint8Array);\n this._header = uint8Array.slice(0, 44);\n } else if (this._header) {\n wav = new WaveFile(new Uint8Array([...this._header, ...uint8Array]));\n } else {\n log.warn('MediaStreamRecorder: no header');\n return;\n }\n\n this._onChunk!({\n timestamp: Date.now(),\n data: wav.getSamples(),\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WaveFile } from 'wavefile';\n\nimport { DeferredTask, Trigger } from '@dxos/async';\nimport { type Context, LifecycleState, Resource } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { trace } from '@dxos/tracing';\nimport { type ContentBlock } from '@dxos/types';\n\nimport { TRANSCRIPTION_URL } from '#types';\n\nimport { mergeFloat64Arrays } from '../util';\nimport { type AudioChunk, type AudioRecorder } from './audio-recorder';\n\nexport type WhisperWord = {\n word: string;\n\n /**\n * Time in seconds from the start of the audio.\n */\n start: number;\n\n /**\n * Time in seconds from the start of the audio.\n */\n end: number;\n};\n\nexport type WhisperSegment = {\n text: string;\n\n /**\n * Time in seconds from the start of the audio.\n */\n start: number;\n\n /**\n * Time in seconds from the start of the audio.\n */\n end: number;\n\n /**\n * Probability of no speech in the segment.\n */\n no_speech_prob: number;\n\n words: WhisperWord[];\n};\n\nexport type TranscribeConfig = {\n /**\n * Number of chunks to transcribe automatically after.\n */\n transcribeAfterChunksAmount: number;\n\n /**\n * Number of chunks to save before the user starts speaking.\n * This is needed to catch the beginning of the user's speech.\n */\n prefixBufferChunksAmount: number;\n\n /**\n * Override the transcription endpoint base URL.\n * Defaults to the DXOS calls service.\n */\n endpoint?: string;\n};\n\n/**\n * Function that converts a base64-encoded WAV payload into Whisper segments.\n * Allows callers to swap in alternative providers or mock the transport.\n */\nexport type TranscribeFn = (audio: string) => Promise<WhisperSegment[]>;\n\nexport type TranscriberProps = {\n config: TranscribeConfig;\n recorder: AudioRecorder;\n /**\n * Callback to handle the transcribed segments, after all segment transformers are applied.\n * @param segments - The transcribed segments.\n */\n onSegments: (segments: ContentBlock.Transcript[]) => Promise<void>;\n /**\n * Optional override of the transcription transport. When provided, supersedes `config.endpoint`.\n */\n transcribe?: TranscribeFn;\n};\n\n/**\n * Handles transcription of audio chunks.\n * If user is not speaking, the last `minChunksAmount` chunks are saved and transcribed.\n * If user is speaking, the chunks are added to the buffer until the user is done talking.\n */\nexport class Transcriber extends Resource {\n private _audioChunks: AudioChunk[] = [];\n private _lastUsedTimestamp = 0;\n\n private readonly _openTrigger = new Trigger({ autoReset: true });\n\n private readonly _config: TranscribeConfig;\n private readonly _recorder: AudioRecorder;\n private readonly _onSegments: TranscriberProps['onSegments'];\n private readonly _transcribeFn?: TranscribeFn;\n\n private _recording = false;\n private _transcribeTask?: DeferredTask = undefined;\n\n constructor({ config, recorder, onSegments, transcribe }: TranscriberProps) {\n super();\n this._config = config;\n this._recorder = recorder;\n this._onSegments = onSegments;\n this._transcribeFn = transcribe;\n }\n\n protected override async _open(ctx: Context): Promise<void> {\n log.info('opening');\n this._recorder.setOnChunk((chunk) => this._saveAudioChunk(chunk));\n await this._recorder.start();\n this._transcribeTask = new DeferredTask(ctx, async () => this._transcribe());\n this._openTrigger.wake();\n }\n\n protected override async _close(): Promise<void> {\n log.info('closing');\n this._recording = false;\n this._transcribeTask = undefined;\n await this._recorder.stop();\n }\n\n startChunksRecording(): void {\n log.info('starting');\n if (this._lifecycleState !== LifecycleState.OPEN) {\n return;\n }\n\n this._recording = true;\n }\n\n stopChunksRecording(): void {\n if (this._lifecycleState !== LifecycleState.OPEN || !this._recording) {\n return;\n }\n\n this._recording = false;\n this._transcribeTask?.schedule();\n log.info('stopped');\n }\n\n private _saveAudioChunk(chunk: AudioChunk): void {\n log('saving audio chunk', { chunk });\n this._audioChunks.push(chunk);\n\n // Clean the buffer if the user is not speaking and the transcription task is not scheduled.\n if (\n !this._recording &&\n (!this._transcribeTask || !this._transcribeTask.scheduled) &&\n this._audioChunks.length >= this._config.prefixBufferChunksAmount\n ) {\n this._audioChunks = this._dropOldChunks();\n } else if (this._audioChunks.length >= this._config.transcribeAfterChunksAmount && this._recording) {\n this._transcribeTask?.schedule();\n }\n }\n\n private async _transcribe(): Promise<void> {\n log('transcribing', { chunks: this._audioChunks.length });\n const chunks = this._audioChunks;\n this._audioChunks = this._dropOldChunks();\n if (chunks.length === 0) {\n return;\n }\n\n const audio = await this._mergeAudioChunks(chunks);\n const segments = await this._fetchTranscription(audio);\n if (!Array.isArray(segments) || segments.length === 0) {\n return;\n }\n\n const alignedSegments = this._alignSegments(segments, chunks);\n if (alignedSegments.length > 0) {\n await this._onSegments(alignedSegments);\n }\n }\n\n private _dropOldChunks(): AudioChunk[] {\n return this._config.prefixBufferChunksAmount > 0\n ? this._audioChunks.slice(-this._config.prefixBufferChunksAmount)\n : [];\n }\n\n @trace.span({ showInBrowserTimeline: true })\n private async _mergeAudioChunks(chunks: AudioChunk[]): Promise<string> {\n const file = new WaveFile();\n const wavConfig = this._recorder.wavConfig;\n\n file.fromScratch(\n wavConfig.channels,\n wavConfig.sampleRate,\n wavConfig.bitDepthCode,\n mergeFloat64Arrays(chunks.map(({ data }) => data)),\n );\n\n return file.toBase64();\n }\n\n @trace.span({ showInBrowserTimeline: true })\n private async _fetchTranscription(audio: string): Promise<WhisperSegment[]> {\n if (audio.length === 0) {\n throw new Error('No audio to send for transcribing');\n }\n\n let segments: unknown;\n if (this._transcribeFn) {\n segments = await this._transcribeFn(audio);\n } else {\n const endpoint = this._config.endpoint ?? TRANSCRIPTION_URL;\n const response = await fetch(`${endpoint}/transcribe`, {\n method: 'POST',\n body: JSON.stringify({ audio }),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Transcription failed: ${response.statusText}`);\n }\n\n ({ segments } = (await response.json()) as { segments?: unknown });\n }\n\n if (!Array.isArray(segments)) {\n throw new Error('Transcription response payload is invalid');\n }\n\n log.info('transcription response', { segments: segments.length });\n\n return segments as WhisperSegment[];\n }\n\n private _alignSegments(segments: WhisperSegment[], originalChunks: AudioChunk[]): ContentBlock.Transcript[] {\n const result = alignWhisperSegments(segments, originalChunks, this._lastUsedTimestamp);\n if (result.lastUsedTimestamp !== undefined) {\n this._lastUsedTimestamp = result.lastUsedTimestamp;\n }\n return result.transcripts;\n }\n}\n\n/**\n * Pure helper that filters and absolute-timestamps Whisper segments against a chunk timeline.\n * Exported for testing.\n *\n * @param segments - Raw segments returned by the Whisper service for `originalChunks`.\n * @param originalChunks - Chunks fed into the transcription request (used for the zero timestamp).\n * @param lastUsedTimestamp - Most recent absolute timestamp already emitted; segments whose end\n * falls strictly before this point are deduped out, as are individual words whose start does.\n */\nexport const alignWhisperSegments = (\n segments: WhisperSegment[],\n originalChunks: AudioChunk[],\n lastUsedTimestamp: number,\n): { transcripts: ContentBlock.Transcript[]; lastUsedTimestamp?: number } => {\n if (originalChunks.length === 0) {\n return { transcripts: [] };\n }\n\n const zeroTimestamp = originalChunks[0].timestamp;\n\n const filteredSegments = segments\n .filter((segment) => zeroTimestamp + segment.end * 1_000 >= lastUsedTimestamp)\n .map((segment) => {\n const words = segment.words.filter((word) => zeroTimestamp + word.start * 1_000 >= lastUsedTimestamp);\n return {\n ...segment,\n words,\n text: words.map((word) => word.word).join(''),\n start: words.at(0)?.start ?? segment.end,\n };\n })\n .filter((segment) => segment.words.length > 0);\n\n if (filteredSegments.length === 0) {\n return { transcripts: [] };\n }\n\n return {\n transcripts: filteredSegments.map((segment) => ({\n _tag: 'transcript',\n started: new Date(zeroTimestamp + segment.start * 1_000).toISOString(),\n text: segment.text.trim(),\n })),\n lastUsedTimestamp: zeroTimestamp + filteredSegments.at(-1)!.end * 1_000,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom-react';\n\nimport { synchronized } from '@dxos/async';\nimport { Resource } from '@dxos/context';\nimport { Obj } from '@dxos/echo';\nimport { type Queue } from '@dxos/echo-db';\nimport { type EdgeHttpClient } from '@dxos/react-edge-client';\nimport { type ContentBlock, Message } from '@dxos/types';\n\nimport { MediaStreamRecorder } from './media-stream-recorder';\nimport { Transcriber } from './transcriber';\n\n/**\n * Length of the chunk in ms.\n */\nconst RECORD_INTERVAL = 200;\n\n/**\n * Number of chunks to save before the user starts speaking.\n */\nconst PREFIXED_CHUNKS_AMOUNT = 10;\n\n/**\n * Number of chunks to transcribe automatically after.\n * Combined should be mess than 25MB or whisper would fail.\n */\nconst TRANSCRIBE_AFTER_CHUNKS_AMOUNT = 50;\n\nexport type TranscriptMessageEnricher = (message: Message.Message) => Promise<Message.Message>;\n\nexport type TranscriptionManagerOptions = {\n edgeClient: EdgeHttpClient;\n registry: Registry.Registry;\n\n /**\n * Enrich the message before it is written to the transcription queue.\n */\n messageEnricher?: TranscriptMessageEnricher;\n};\n\n/**\n * Manages transcription state for a meeting.\n */\nexport class TranscriptionManager extends Resource {\n private readonly _edgeClient: EdgeHttpClient;\n private readonly _messageEnricher?: TranscriptMessageEnricher;\n private readonly _registry: Registry.Registry;\n private _audioStreamTrack?: MediaStreamTrack = undefined;\n private _identityDid?: string = undefined;\n private _mediaRecorder?: MediaStreamRecorder = undefined;\n private _transcriber?: Transcriber = undefined;\n private _queue?: Queue<Message.Message> = undefined;\n private _enabledAtom = Atom.make(false);\n\n constructor(options: TranscriptionManagerOptions) {\n super();\n this._edgeClient = options.edgeClient;\n this._messageEnricher = options.messageEnricher;\n this._registry = options.registry;\n }\n\n get enabled(): Atom.Atom<boolean> {\n return this._enabledAtom;\n }\n\n getEnabled(): boolean {\n return this._registry.get(this._enabledAtom);\n }\n\n setQueue(queue: Queue<Message.Message>): this {\n this._queue = queue;\n return this;\n }\n\n setIdentityDid(did: string): this {\n if (this._identityDid !== did) {\n this._identityDid = did;\n }\n return this;\n }\n\n setRecording(recording?: boolean): this {\n if (!this.isOpen || !this.getEnabled()) {\n return this;\n }\n\n if (recording) {\n this._transcriber?.startChunksRecording();\n } else {\n this._transcriber?.stopChunksRecording();\n }\n return this;\n }\n\n async setEnabled(enabled: boolean): Promise<void> {\n if (this.getEnabled() === enabled) {\n return;\n }\n\n this._registry.set(this._enabledAtom, enabled ?? false);\n if (enabled) {\n await this._maybeRestartTranscriber();\n } else {\n await this._stopTranscriber();\n }\n }\n\n @synchronized\n async setAudioTrack(track?: MediaStreamTrack): Promise<void> {\n if (this._audioStreamTrack === track) {\n return;\n }\n\n this._audioStreamTrack = track;\n await this._maybeRestartTranscriber();\n }\n\n protected override async _open(): Promise<void> {\n await this._maybeRestartTranscriber();\n }\n\n protected override async _close(): Promise<void> {\n await this._stopTranscriber();\n }\n\n private async _maybeRestartTranscriber(): Promise<void> {\n if (!this._audioStreamTrack || !this.getEnabled() || !this.isOpen) {\n return;\n }\n\n // Reinitialize transcriber if queue or media stream track has changed.\n let needReinit = false;\n if (this._audioStreamTrack !== this._mediaRecorder?.mediaStreamTrack) {\n this._mediaRecorder = new MediaStreamRecorder({\n mediaStreamTrack: this._audioStreamTrack,\n config: { interval: RECORD_INTERVAL },\n });\n needReinit = true;\n }\n if (needReinit) {\n await this._transcriber?.close();\n this._transcriber = new Transcriber({\n config: {\n transcribeAfterChunksAmount: TRANSCRIBE_AFTER_CHUNKS_AMOUNT,\n prefixBufferChunksAmount: PREFIXED_CHUNKS_AMOUNT,\n },\n recorder: this._mediaRecorder,\n onSegments: (segments) => this._onSegments(segments),\n });\n\n await this._transcriber?.open();\n }\n }\n\n private async _stopTranscriber(): Promise<void> {\n await this._transcriber?.close();\n }\n\n private async _onSegments(segments: ContentBlock.Transcript[]): Promise<void> {\n if (!this.isOpen || !this._queue) {\n return;\n }\n\n let block = Obj.make(Message.Message, {\n created: new Date().toISOString(),\n blocks: segments,\n sender: { identityDid: this._identityDid },\n });\n\n if (this._messageEnricher) {\n block = await this._messageEnricher(block);\n }\n\n await this._queue.append([block]);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["WaveFile", "synchronized", "invariant", "log", "trace", "initializingPromise", "register", "connect", "_mediaStreamTrack", "_mediaRecorder", "_header", "undefined", "_onChunk", "mediaStreamTrack", "_config", "config", "settings", "channels", "sampleRate", "bitDepthCode", "setOnChunk", "onChunk", "err", "stream", "MediaStream", "mimeType", "ondataavailable", "_ondataavailable", "event", "start", "interval", "data", "uint8Array", "wav", "isHeader", "slice", "timestamp", "getSamples", "resource", "DeferredTask", "Trigger", "LifecycleState", "log", "trace", "TRANSCRIPTION_URL", "mergeFloat64Arrays", "__dxlog_file", "_audioChunks", "_lastUsedTimestamp", "_openTrigger", "Trigger", "_config", "_recorder", "_onSegments", "_transcribeFn", "_recording", "_transcribeTask", "config", "log", "setOnChunk", "chunk", "_saveAudioChunk", "DeferredTask", "stop", "startChunksRecording", "_lifecycleState", "LifecycleState", "stopChunksRecording", "info", "_dropOldChunks", "length", "schedule", "chunks", "segments", "_fetchTranscription", "audio", "Array", "isArray", "alignedSegments", "WaveFile", "wavConfig", "file", "fromScratch", "channels", "toBase64", "response", "method", "body", "JSON", "headers", "Error", "_alignSegments", "result", "alignWhisperSegments", "lastUsedTimestamp", "undefined", "span", "showInBrowserTimeline", "originalChunks", "transcripts", "filteredSegments", "filter", "segment", "word", "zeroTimestamp", "start", "words", "text", "_tag", "started", "Atom", "synchronized", "Resource", "Obj", "Message", "RECORD_INTERVAL", "PREFIXED_CHUNKS_AMOUNT", "TRANSCRIBE_AFTER_CHUNKS_AMOUNT", "TranscriptionManager", "Resource", "_edgeClient", "_messageEnricher", "_registry", "_audioStreamTrack", "undefined", "_identityDid", "_mediaRecorder", "_transcriber", "_queue", "_enabledAtom", "Atom", "make", "options", "edgeClient", "messageEnricher", "registry", "enabled", "getEnabled", "get", "setQueue", "queue", "setIdentityDid", "did", "setRecording", "recording", "isOpen", "startChunksRecording", "stopChunksRecording", "setEnabled", "set", "_maybeRestartTranscriber", "_stopTranscriber", "setAudioTrack", "track", "_open", "_close", "needReinit", "mediaStreamTrack", "MediaStreamRecorder", "config", "interval", "close", "Transcriber", "transcribeAfterChunksAmount", "prefixBufferChunksAmount", "recorder", "onSegments", "segments", "_onSegments", "open", "block", "Obj", "Message", "created", "Date", "toISOString", "blocks", "sender", "identityDid", "append"]
7
+ }