@dxos/plugin-transcription 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc

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 (375) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs +54 -0
  4. package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs.map +7 -0
  5. package/dist/lib/neutral/TranscriptionPlugin.mjs +34 -0
  6. package/dist/lib/neutral/TranscriptionPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/TranscriptionPlugin.node.mjs +25 -0
  8. package/dist/lib/neutral/TranscriptionPlugin.node.mjs.map +7 -0
  9. package/dist/lib/neutral/TranscriptionPlugin.workerd.mjs +21 -0
  10. package/dist/lib/neutral/TranscriptionPlugin.workerd.mjs.map +7 -0
  11. package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs +15 -0
  12. package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs.map +7 -0
  13. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  14. package/dist/lib/neutral/capabilities/index.mjs +17 -0
  15. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  16. package/dist/lib/neutral/chunk-2O3ONPRZ.mjs +298 -0
  17. package/dist/lib/neutral/chunk-2O3ONPRZ.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-5FXU36PN.mjs +120 -0
  19. package/dist/lib/neutral/chunk-5FXU36PN.mjs.map +7 -0
  20. package/dist/lib/{browser/chunk-VBUIO677.mjs → neutral/chunk-GL4RS533.mjs} +2 -9
  21. package/dist/lib/neutral/chunk-GL4RS533.mjs.map +7 -0
  22. package/dist/lib/{browser/chunk-WH36ENNE.mjs → neutral/chunk-ILSA3DU7.mjs} +102 -133
  23. package/dist/lib/neutral/chunk-ILSA3DU7.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  25. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs +35 -0
  26. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-MLRJWAQH.mjs +179 -0
  28. package/dist/lib/neutral/chunk-MLRJWAQH.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-Y5EQAFFR.mjs +8 -0
  30. package/dist/lib/neutral/chunk-Y5EQAFFR.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs +30 -0
  32. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs.map +7 -0
  33. package/dist/lib/neutral/components/index.mjs +272 -0
  34. package/dist/lib/neutral/components/index.mjs.map +7 -0
  35. package/dist/lib/neutral/containers/index.mjs +9 -0
  36. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  37. package/dist/lib/neutral/create-RRWRIUSR.mjs +21 -0
  38. package/dist/lib/neutral/create-RRWRIUSR.mjs.map +7 -0
  39. package/dist/lib/neutral/hooks/index.mjs +19 -0
  40. package/dist/lib/neutral/index.mjs +44 -0
  41. package/dist/lib/neutral/meta.json +1 -0
  42. package/dist/lib/neutral/meta.mjs +8 -0
  43. package/dist/lib/neutral/meta.mjs.map +7 -0
  44. package/dist/lib/neutral/open-CVMX5KXZ.mjs +27 -0
  45. package/dist/lib/neutral/open-CVMX5KXZ.mjs.map +7 -0
  46. package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs +13 -0
  47. package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs.map +7 -0
  48. package/dist/lib/neutral/operations/index.mjs +8 -0
  49. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  50. package/dist/lib/neutral/plugin.mjs +16 -0
  51. package/dist/lib/neutral/plugin.mjs.map +7 -0
  52. package/dist/lib/neutral/react-surface-YMZRO242.mjs +26 -0
  53. package/dist/lib/neutral/react-surface-YMZRO242.mjs.map +7 -0
  54. package/dist/lib/neutral/summarize-LA7TRW7A.mjs +78 -0
  55. package/dist/lib/neutral/summarize-LA7TRW7A.mjs.map +7 -0
  56. package/dist/lib/neutral/text-content-F4ASMITB.mjs +30 -0
  57. package/dist/lib/neutral/text-content-F4ASMITB.mjs.map +7 -0
  58. package/dist/lib/{node-esm/transcriber-UGB7ECX6.mjs → neutral/transcriber-ABHATBVH.mjs} +20 -18
  59. package/dist/lib/neutral/transcriber-ABHATBVH.mjs.map +7 -0
  60. package/dist/lib/neutral/translations.mjs +24 -0
  61. package/dist/lib/neutral/translations.mjs.map +7 -0
  62. package/dist/lib/neutral/types/index.mjs +10 -0
  63. package/dist/lib/neutral/types/index.mjs.map +7 -0
  64. package/dist/types/src/TranscriptionPlugin.d.ts +3 -1
  65. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  66. package/dist/types/src/TranscriptionPlugin.node.d.ts +4 -0
  67. package/dist/types/src/TranscriptionPlugin.node.d.ts.map +1 -0
  68. package/dist/types/src/TranscriptionPlugin.test.d.ts +2 -0
  69. package/dist/types/src/TranscriptionPlugin.test.d.ts.map +1 -0
  70. package/dist/types/src/TranscriptionPlugin.workerd.d.ts +4 -0
  71. package/dist/types/src/TranscriptionPlugin.workerd.d.ts.map +1 -0
  72. package/dist/types/src/blueprints/index.d.ts +2 -0
  73. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  74. package/dist/types/src/blueprints/transcription-blueprint.d.ts +4 -0
  75. package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  77. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/index.d.ts +10 -5
  79. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  81. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  82. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  83. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/text-content.d.ts +8 -0
  85. package/dist/types/src/capabilities/text-content.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/transcriber.d.ts +4 -3
  87. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  88. package/dist/types/src/components/Oracle/Oracle.d.ts +24 -0
  89. package/dist/types/src/components/Oracle/Oracle.d.ts.map +1 -0
  90. package/dist/types/src/components/Oracle/Oracle.stories.d.ts +32 -0
  91. package/dist/types/src/components/Oracle/Oracle.stories.d.ts.map +1 -0
  92. package/dist/types/src/components/Oracle/index.d.ts +2 -0
  93. package/dist/types/src/components/Oracle/index.d.ts.map +1 -0
  94. package/dist/types/src/components/Transcription/Transcription.d.ts +13 -0
  95. package/dist/types/src/components/Transcription/Transcription.d.ts.map +1 -0
  96. package/dist/types/src/components/Transcription/Transcription.stories.d.ts +37 -0
  97. package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/Transcription/index.d.ts +2 -0
  99. package/dist/types/src/components/Transcription/index.d.ts.map +1 -0
  100. package/dist/types/src/components/Transcription/transcription-extension.d.ts +15 -0
  101. package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +1 -0
  102. package/dist/types/src/components/index.d.ts +2 -3
  103. package/dist/types/src/components/index.d.ts.map +1 -1
  104. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts +6 -0
  105. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts.map +1 -0
  106. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts +28 -0
  107. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts.map +1 -0
  108. package/dist/types/src/containers/TranscriptionArticle/index.d.ts +2 -0
  109. package/dist/types/src/containers/TranscriptionArticle/index.d.ts.map +1 -0
  110. package/dist/types/src/containers/index.d.ts +3 -0
  111. package/dist/types/src/containers/index.d.ts.map +1 -0
  112. package/dist/types/src/enrichment/conversation.test.d.ts +2 -0
  113. package/dist/types/src/enrichment/conversation.test.d.ts.map +1 -0
  114. package/dist/types/src/enrichment/operations.d.ts +200 -0
  115. package/dist/types/src/enrichment/operations.d.ts.map +1 -0
  116. package/dist/types/src/enrichment/parser.d.ts +26 -0
  117. package/dist/types/src/enrichment/parser.d.ts.map +1 -0
  118. package/dist/types/src/enrichment/stream-simulator.d.ts +38 -0
  119. package/dist/types/src/enrichment/stream-simulator.d.ts.map +1 -0
  120. package/dist/types/src/hooks/index.d.ts +2 -1
  121. package/dist/types/src/hooks/index.d.ts.map +1 -1
  122. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  123. package/dist/types/src/hooks/useAudioTrack.d.ts.map +1 -1
  124. package/dist/types/src/hooks/useFeedModelAdapter.d.ts +12 -0
  125. package/dist/types/src/hooks/useFeedModelAdapter.d.ts.map +1 -0
  126. package/dist/types/src/hooks/useTranscriber.d.ts +2 -2
  127. package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
  128. package/dist/types/src/hooks/useTranscriptionRecording.d.ts +12 -0
  129. package/dist/types/src/hooks/useTranscriptionRecording.d.ts.map +1 -0
  130. package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
  131. package/dist/types/src/index.d.ts +2 -3
  132. package/dist/types/src/index.d.ts.map +1 -1
  133. package/dist/types/src/meta.d.ts +2 -2
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/model/model.d.ts +2 -2
  136. package/dist/types/src/model/model.d.ts.map +1 -1
  137. package/dist/types/src/{segments-normalization → normalization}/index.d.ts +1 -1
  138. package/dist/types/src/normalization/index.d.ts.map +1 -0
  139. package/dist/types/src/{segments-normalization → normalization}/message-normalizer.d.ts +9 -7
  140. package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -0
  141. package/dist/types/src/normalization/normalization.d.ts +543 -0
  142. package/dist/types/src/normalization/normalization.d.ts.map +1 -0
  143. package/dist/types/src/normalization/normalization.test.d.ts.map +1 -0
  144. package/dist/types/src/normalization/utils.d.ts +3 -0
  145. package/dist/types/src/normalization/utils.d.ts.map +1 -0
  146. package/dist/types/src/operations/create.d.ts +5 -0
  147. package/dist/types/src/operations/create.d.ts.map +1 -0
  148. package/dist/types/src/operations/index.d.ts +3 -0
  149. package/dist/types/src/operations/index.d.ts.map +1 -0
  150. package/dist/types/src/operations/open.d.ts +5 -0
  151. package/dist/types/src/operations/open.d.ts.map +1 -0
  152. package/dist/types/src/operations/summarize.d.ts +8 -0
  153. package/dist/types/src/operations/summarize.d.ts.map +1 -0
  154. package/dist/types/src/plugin.d.ts +4 -0
  155. package/dist/types/src/plugin.d.ts.map +1 -0
  156. package/dist/types/src/stories/FileTranscription.stories.d.ts +20 -0
  157. package/dist/types/src/stories/FileTranscription.stories.d.ts.map +1 -0
  158. package/dist/types/src/{components/stories → stories}/KeyWordRecognition.stories.d.ts +2 -2
  159. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +1 -0
  160. package/dist/types/src/{components/stories/MicrophoneTranscription.stories.d.ts → stories/LiveTranscription.stories.d.ts} +7 -7
  161. package/dist/types/src/stories/LiveTranscription.stories.d.ts.map +1 -0
  162. package/dist/types/src/stories/TranscriptionStory.d.ts +21 -0
  163. package/dist/types/src/stories/TranscriptionStory.d.ts.map +1 -0
  164. package/dist/types/src/stories/common.d.ts +46 -0
  165. package/dist/types/src/stories/common.d.ts.map +1 -0
  166. package/dist/types/src/testing/testing.d.ts +13 -14
  167. package/dist/types/src/testing/testing.d.ts.map +1 -1
  168. package/dist/types/src/transcriber/index.d.ts +1 -1
  169. package/dist/types/src/transcriber/index.d.ts.map +1 -1
  170. package/dist/types/src/transcriber/media-stream-recorder.d.ts +2 -2
  171. package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
  172. package/dist/types/src/transcriber/transcriber.d.ts +61 -6
  173. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  174. package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
  175. package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
  176. package/dist/types/src/transcriber/transcription-manager.d.ts +14 -9
  177. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  178. package/dist/types/src/translations.d.ts +9 -8
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/types/TranscriptOperation.d.ts +917 -0
  181. package/dist/types/src/types/TranscriptOperation.d.ts.map +1 -0
  182. package/dist/types/src/types/TranscriptionCapabilities.d.ts +17 -0
  183. package/dist/types/src/types/TranscriptionCapabilities.d.ts.map +1 -0
  184. package/dist/types/src/types/index.d.ts +2 -3
  185. package/dist/types/src/types/index.d.ts.map +1 -1
  186. package/dist/types/src/util/array.d.ts.map +1 -1
  187. package/dist/types/src/util/get-time-str.d.ts.map +1 -1
  188. package/dist/types/src/util/index.d.ts +1 -0
  189. package/dist/types/src/util/index.d.ts.map +1 -1
  190. package/dist/types/src/util/monitor-audio-level.d.ts.map +1 -1
  191. package/dist/types/src/util/render-byline.d.ts +4 -0
  192. package/dist/types/src/util/render-byline.d.ts.map +1 -0
  193. package/dist/types/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +157 -82
  195. package/src/TranscriptionPlugin.node.ts +20 -0
  196. package/src/TranscriptionPlugin.test.ts +31 -0
  197. package/src/TranscriptionPlugin.tsx +20 -64
  198. package/src/TranscriptionPlugin.workerd.ts +18 -0
  199. package/src/blueprints/index.ts +5 -0
  200. package/src/blueprints/transcription-blueprint.ts +29 -0
  201. package/src/capabilities/blueprint-definition.ts +12 -24
  202. package/src/capabilities/index.ts +11 -7
  203. package/src/capabilities/operation-handler.ts +16 -0
  204. package/src/capabilities/react-surface.tsx +23 -14
  205. package/src/capabilities/text-content.ts +33 -0
  206. package/src/capabilities/transcriber.ts +53 -42
  207. package/src/components/Oracle/Oracle.stories.tsx +147 -0
  208. package/src/components/Oracle/Oracle.tsx +141 -0
  209. package/src/components/Oracle/index.ts +5 -0
  210. package/src/components/Transcription/Transcription.stories.tsx +213 -0
  211. package/src/components/Transcription/Transcription.tsx +58 -0
  212. package/src/components/{Transcript → Transcription}/index.ts +1 -1
  213. package/src/components/{Transcript/transcript-extension.ts → Transcription/transcription-extension.ts} +13 -9
  214. package/src/components/index.ts +2 -6
  215. package/src/containers/TranscriptionArticle/TranscriptionArticle.stories.tsx +61 -0
  216. package/src/containers/TranscriptionArticle/TranscriptionArticle.tsx +62 -0
  217. package/src/containers/TranscriptionArticle/index.ts +5 -0
  218. package/src/containers/index.ts +7 -0
  219. package/src/enrichment/conversation.test.ts +162 -0
  220. package/src/enrichment/conversation.txt +23 -0
  221. package/src/enrichment/operations.ts +268 -0
  222. package/src/enrichment/parser.ts +101 -0
  223. package/src/enrichment/stream-simulator.ts +125 -0
  224. package/src/hooks/index.ts +2 -1
  225. package/src/hooks/useFeedModelAdapter.ts +46 -0
  226. package/src/hooks/useTranscriber.ts +12 -4
  227. package/src/hooks/useTranscriptionRecording.ts +87 -0
  228. package/src/hooks/useVoiceInput.ts +2 -3
  229. package/src/index.ts +4 -5
  230. package/src/meta.ts +3 -3
  231. package/src/model/model.test.ts +20 -14
  232. package/src/model/model.ts +3 -3
  233. package/src/{segments-normalization → normalization}/message-normalizer.ts +37 -24
  234. package/src/{segments-normalization → normalization}/normalization.test.ts +8 -47
  235. package/src/normalization/normalization.ts +76 -0
  236. package/src/{segments-normalization → normalization}/utils.ts +2 -2
  237. package/src/operations/create.ts +24 -0
  238. package/src/operations/index.ts +11 -0
  239. package/src/operations/open.ts +28 -0
  240. package/src/operations/summarize.ts +101 -0
  241. package/src/plugin.ts +11 -0
  242. package/src/stories/FileTranscription.stories.tsx +143 -0
  243. package/src/{components/stories → stories}/KeyWordRecognition.stories.tsx +40 -40
  244. package/src/stories/LiveTranscription.stories.tsx +153 -0
  245. package/src/stories/TranscriptionStory.tsx +101 -0
  246. package/src/stories/common.ts +233 -0
  247. package/src/testing/testing.ts +49 -56
  248. package/src/transcriber/index.ts +1 -1
  249. package/src/transcriber/media-stream-recorder.ts +3 -3
  250. package/src/transcriber/transcriber.browser.test.ts +4 -5
  251. package/src/transcriber/transcriber.test.ts +104 -0
  252. package/src/transcriber/transcriber.ts +105 -60
  253. package/src/transcriber/transcription-manager.ts +33 -22
  254. package/src/translations.ts +10 -7
  255. package/src/types/TranscriptOperation.ts +103 -0
  256. package/src/types/TranscriptionCapabilities.ts +39 -0
  257. package/src/types/index.ts +2 -3
  258. package/src/util/index.ts +1 -0
  259. package/src/util/render-byline.ts +33 -0
  260. package/dist/lib/browser/TranscriptContainer-2GSL2XB5.mjs +0 -11
  261. package/dist/lib/browser/blueprint-definition-UAAJYVLZ.mjs +0 -150
  262. package/dist/lib/browser/blueprint-definition-UAAJYVLZ.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-3MKZ2MNQ.mjs +0 -16
  264. package/dist/lib/browser/chunk-3MKZ2MNQ.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-535OJKFO.mjs +0 -8
  266. package/dist/lib/browser/chunk-535OJKFO.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-7DR6HZEF.mjs +0 -732
  268. package/dist/lib/browser/chunk-7DR6HZEF.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-VBUIO677.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-W7WKZTM4.mjs +0 -63
  271. package/dist/lib/browser/chunk-W7WKZTM4.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-WH36ENNE.mjs.map +0 -7
  273. package/dist/lib/browser/index.mjs +0 -130
  274. package/dist/lib/browser/index.mjs.map +0 -7
  275. package/dist/lib/browser/intent-resolver-ZTKTEAQX.mjs +0 -25
  276. package/dist/lib/browser/intent-resolver-ZTKTEAQX.mjs.map +0 -7
  277. package/dist/lib/browser/meta.json +0 -1
  278. package/dist/lib/browser/react-surface-KA32A72I.mjs +0 -34
  279. package/dist/lib/browser/react-surface-KA32A72I.mjs.map +0 -7
  280. package/dist/lib/browser/transcriber-LWOLYQHC.mjs +0 -56
  281. package/dist/lib/browser/transcriber-LWOLYQHC.mjs.map +0 -7
  282. package/dist/lib/browser/types/index.mjs +0 -12
  283. package/dist/lib/node-esm/TranscriptContainer-GRLDCESB.mjs +0 -12
  284. package/dist/lib/node-esm/blueprint-definition-Z3LTZ3ID.mjs +0 -151
  285. package/dist/lib/node-esm/blueprint-definition-Z3LTZ3ID.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-K4AZOB5Y.mjs +0 -733
  287. package/dist/lib/node-esm/chunk-K4AZOB5Y.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-OLMSTF3M.mjs +0 -64
  289. package/dist/lib/node-esm/chunk-OLMSTF3M.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-Q6WD7L2J.mjs +0 -10
  291. package/dist/lib/node-esm/chunk-Q6WD7L2J.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-SWUVPFKR.mjs +0 -17
  293. package/dist/lib/node-esm/chunk-SWUVPFKR.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-YFN4FJFK.mjs +0 -467
  295. package/dist/lib/node-esm/chunk-YFN4FJFK.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-YVNQN2J6.mjs +0 -30
  297. package/dist/lib/node-esm/chunk-YVNQN2J6.mjs.map +0 -7
  298. package/dist/lib/node-esm/index.mjs +0 -131
  299. package/dist/lib/node-esm/index.mjs.map +0 -7
  300. package/dist/lib/node-esm/intent-resolver-55WH2GY6.mjs +0 -26
  301. package/dist/lib/node-esm/intent-resolver-55WH2GY6.mjs.map +0 -7
  302. package/dist/lib/node-esm/meta.json +0 -1
  303. package/dist/lib/node-esm/react-surface-GU7LW2JO.mjs +0 -35
  304. package/dist/lib/node-esm/react-surface-GU7LW2JO.mjs.map +0 -7
  305. package/dist/lib/node-esm/transcriber-UGB7ECX6.mjs.map +0 -7
  306. package/dist/lib/node-esm/types/index.mjs +0 -13
  307. package/dist/types/src/capabilities/capabilities.d.ts +0 -17
  308. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  309. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  310. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  311. package/dist/types/src/components/Transcript/Transcript.d.ts +0 -20
  312. package/dist/types/src/components/Transcript/Transcript.d.ts.map +0 -1
  313. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +0 -39
  314. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +0 -1
  315. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +0 -28
  316. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +0 -1
  317. package/dist/types/src/components/Transcript/index.d.ts +0 -2
  318. package/dist/types/src/components/Transcript/index.d.ts.map +0 -1
  319. package/dist/types/src/components/Transcript/transcript-extension.d.ts +0 -15
  320. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +0 -1
  321. package/dist/types/src/components/TranscriptContainer.d.ts +0 -9
  322. package/dist/types/src/components/TranscriptContainer.d.ts.map +0 -1
  323. package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -18
  324. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +0 -1
  325. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +0 -1
  326. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +0 -1
  327. package/dist/types/src/components/stories/TranscriptionStory.d.ts +0 -12
  328. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +0 -1
  329. package/dist/types/src/components/stories/useIsSpeaking.d.ts +0 -3
  330. package/dist/types/src/components/stories/useIsSpeaking.d.ts.map +0 -1
  331. package/dist/types/src/functions/index.d.ts +0 -3
  332. package/dist/types/src/functions/index.d.ts.map +0 -1
  333. package/dist/types/src/functions/open.d.ts +0 -7
  334. package/dist/types/src/functions/open.d.ts.map +0 -1
  335. package/dist/types/src/functions/summarize.d.ts +0 -11
  336. package/dist/types/src/functions/summarize.d.ts.map +0 -1
  337. package/dist/types/src/hooks/useQueueModelAdapter.d.ts +0 -8
  338. package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +0 -1
  339. package/dist/types/src/segments-normalization/index.d.ts.map +0 -1
  340. package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +0 -1
  341. package/dist/types/src/segments-normalization/normalization.d.ts +0 -476
  342. package/dist/types/src/segments-normalization/normalization.d.ts.map +0 -1
  343. package/dist/types/src/segments-normalization/normalization.test.d.ts.map +0 -1
  344. package/dist/types/src/segments-normalization/utils.d.ts +0 -3
  345. package/dist/types/src/segments-normalization/utils.d.ts.map +0 -1
  346. package/dist/types/src/types/Transcript.d.ts +0 -30
  347. package/dist/types/src/types/Transcript.d.ts.map +0 -1
  348. package/dist/types/src/types/TranscriptAction.d.ts +0 -23
  349. package/dist/types/src/types/TranscriptAction.d.ts.map +0 -1
  350. package/dist/types/src/types/types.d.ts +0 -5
  351. package/dist/types/src/types/types.d.ts.map +0 -1
  352. package/src/capabilities/capabilities.ts +0 -33
  353. package/src/capabilities/intent-resolver.ts +0 -18
  354. package/src/components/Transcript/Transcript.stories.tsx +0 -245
  355. package/src/components/Transcript/Transcript.tsx +0 -93
  356. package/src/components/Transcript/deprecated/OldTranscript.tsx +0 -260
  357. package/src/components/TranscriptContainer.tsx +0 -36
  358. package/src/components/stories/FileTranscription.stories.tsx +0 -256
  359. package/src/components/stories/MicrophoneTranscription.stories.tsx +0 -285
  360. package/src/components/stories/TranscriptionStory.tsx +0 -45
  361. package/src/components/stories/useIsSpeaking.tsx +0 -40
  362. package/src/functions/index.ts +0 -6
  363. package/src/functions/open.ts +0 -39
  364. package/src/functions/summarize.ts +0 -103
  365. package/src/hooks/useQueueModelAdapter.ts +0 -66
  366. package/src/segments-normalization/normalization.ts +0 -115
  367. package/src/types/Transcript.ts +0 -44
  368. package/src/types/TranscriptAction.ts +0 -24
  369. package/src/types/types.ts +0 -9
  370. package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  371. package/dist/lib/{browser/TranscriptContainer-2GSL2XB5.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  372. package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
  373. package/dist/lib/{node-esm/TranscriptContainer-GRLDCESB.mjs.map → neutral/index.mjs.map} +0 -0
  374. package/dist/types/src/{segments-normalization → normalization}/normalization.test.d.ts +0 -0
  375. package/src/{segments-normalization → normalization}/index.ts +1 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useAudioFile.ts", "../../../src/hooks/useAudioTrack.ts", "../../../src/hooks/useFeedModelAdapter.ts", "../../../src/hooks/useTranscriber.ts", "../../../src/hooks/useTranscriptionRecording.ts", "../../../src/hooks/useVoiceInput.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\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, constraints?: MediaTrackConstraints): UseAudioState => {\n const [{ audio, stream, track }, setStream] = useState<UseAudioState>({});\n useEffect(() => {\n const ctx = new Context();\n\n scheduleTask(ctx, async () => {\n // TODO(wittjosiah): Fetch to external url fails in headless storybook test.\n try {\n const response = await fetch(audioUrl);\n const blob = await response.blob();\n const objectUrl = URL.createObjectURL(blob);\n ctx.onDispose(() => {\n URL.revokeObjectURL(objectUrl);\n });\n\n const audio = new Audio();\n audio.src = objectUrl;\n\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 async () => {\n resolve();\n },\n { once: true },\n );\n audio.load();\n });\n\n const audioCtx = new AudioContext();\n\n // Resume AudioContext if it's suspended.\n if (audioCtx.state === 'suspended') {\n await audioCtx.resume();\n }\n\n const destination = audioCtx.createMediaStreamDestination();\n destination.channelCount = 1;\n\n const source = audioCtx.createMediaElementSource(audio);\n source.connect(destination);\n const track = destination.stream.getAudioTracks()[0];\n if (constraints) {\n await track.applyConstraints(constraints).catch((err) => log.catch(err));\n }\n\n // Also connect to speakers so audio is audible.\n setStream({\n audio,\n stream: destination.stream,\n track: destination.stream.getAudioTracks()[0],\n });\n } catch (err) {\n log.catch(err);\n }\n });\n\n return () => {\n void ctx.dispose();\n };\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, constraints?: MediaTrackConstraints): 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: constraints ?? 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 type { Obj } from '@dxos/echo';\n\nimport { type ChunkRenderer, SerializationModel } from '../model';\n\n/**\n * Feeds an array of objects (typically from `useQuery(db, Query.from(feed))`) into a\n * `SerializationModel`, appending each new tail item as the array grows.\n *\n * @param renderer - chunk renderer.\n * @param objects - current snapshot of feed items.\n * @param initialChunks - chunks to seed the model with on first render.\n */\nexport const useFeedModelAdapter = <T extends Obj.Unknown>(\n renderer: ChunkRenderer<T>,\n objects: readonly T[],\n initialChunks: T[] = [],\n): SerializationModel<T> => {\n const model = useMemo(() => new SerializationModel<T>(renderer, initialChunks), [renderer]);\n\n // Seed the model with the current snapshot on first render and whenever the\n // identity of `objects` changes (e.g. feed swapped).\n useEffect(() => {\n for (const chunk of objects) {\n model.appendChunk(chunk);\n }\n }, [model, objects]);\n\n // Append new tail items as the array grows.\n useEffect(() => {\n if (model.chunks.length === objects.length) {\n return;\n }\n const chunk = objects.at(-1);\n if (chunk) {\n model.appendChunk(chunk);\n }\n }, [model, objects.length]);\n\n return model;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework/ui';\n\nimport { TranscriptionCapabilities } from '#types';\n\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 recorderConfig,\n transcriberConfig,\n onSegments,\n transcribe,\n}: Partial<TranscriptionCapabilities.GetTranscriberProps>) => {\n const [getTranscriber] = useCapabilities(TranscriptionCapabilities.Transcriber);\n\n // Initialize audio transcription.\n const transcriber = useMemo<Transcriber | undefined>(() => {\n if (!getTranscriber || !audioStreamTrack || !onSegments) {\n return undefined;\n }\n\n return getTranscriber({\n audioStreamTrack,\n recorderConfig,\n transcriberConfig,\n onSegments,\n transcribe,\n });\n }, [getTranscriber, audioStreamTrack, recorderConfig, transcriberConfig, onSegments, transcribe]);\n\n useEffect(() => {\n return () => {\n void transcriber?.close();\n };\n }, [transcriber]);\n\n return transcriber;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { createFeedServiceLayer } from '@dxos/client/echo';\nimport { Feed, Obj } from '@dxos/echo';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Message, type Transcript } from '@dxos/types';\n\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\n\nexport type TranscriptionRecording = {\n recording: boolean;\n toggleRecording: () => void;\n};\n\n/**\n * Drives the recording lifecycle for a transcript: opens an audio track, feeds it through the\n * transcriber, and appends transcribed message batches to the transcript's feed. Returns the\n * recording flag and a toggle callback for the caller to wire to UI.\n */\nexport const useTranscriptionRecording = (transcript: Transcript.Transcript): TranscriptionRecording => {\n const space = getSpace(transcript);\n const identity = useIdentity();\n const feed = transcript.feed.target;\n\n const [recording, setRecording] = useState(false);\n const track = useAudioTrack(recording);\n\n // Append a transcribed message batch to the transcript's feed.\n const handleSegments = useCallback(\n async (blocks: Message.Message['blocks']) => {\n if (!space || !feed || blocks.length === 0) {\n return;\n }\n const sender = identity ? { identityDid: identity.did, name: identity.profile?.displayName } : {};\n const message = Obj.make(Message.Message, {\n sender,\n created: new Date().toISOString(),\n blocks,\n });\n const feedServiceLayer = createFeedServiceLayer(space.queues);\n await Feed.append(feed, [message]).pipe(Effect.provide(feedServiceLayer), runAndForwardErrors);\n },\n [space, feed, identity],\n );\n\n // Drive the transcriber lifecycle off the recording flag + audio track.\n const transcriber = useTranscriber({ audioStreamTrack: track, onSegments: handleSegments });\n useEffect(() => {\n if (!transcriber) {\n return;\n }\n let cancelled = false;\n // If `open()` rejects (e.g. mic permission denied, device init failure) we must\n // clear `recording` — otherwise the toolbar button reports \"stop\" forever while\n // nothing is actually being captured.\n void transcriber.open().then(\n () => {\n if (!cancelled && recording) {\n transcriber.startChunksRecording();\n }\n },\n (err) => {\n if (!cancelled) {\n log.catch(err);\n setRecording(false);\n }\n },\n );\n return () => {\n cancelled = true;\n transcriber.stopChunksRecording();\n };\n }, [transcriber, recording]);\n\n const toggleRecording = useCallback(() => setRecording((value) => !value), []);\n\n return { recording, toggleRecording };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useState } 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 { type TranscriberProps } from '../transcriber';\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\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<TranscriberProps['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"],
5
+ "mappings": "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",
6
+ "names": ["useEffect", "useState", "scheduleTask", "Context", "log", "useAudioFile", "objectUrl", "createObjectURL", "ctx", "onDispose", "URL", "revokeObjectURL", "audio", "Audio", "Promise", "resolve", "addEventListener", "err", "reject", "once", "audioCtx", "state", "destination", "source", "createMediaElementSource", "connect", "track", "constraints", "applyConstraints", "catch", "setStream", "stream", "audioUrl", "useEffect", "useState", "useAudioTrack", "active", "constraints", "track", "setTrack", "stop", "undefined", "initAudio", "audio", "Audio", "srcObject", "navigator", "mediaDevices", "getUserMedia", "getAudioTracks", "useEffect", "useMemo", "useFeedModelAdapter", "renderer", "objects", "initialChunks", "model", "useMemo", "SerializationModel", "useEffect", "chunk", "appendChunk", "chunks", "length", "at", "useEffect", "useMemo", "useCapabilities", "TranscriptionCapabilities", "useTranscriber", "audioStreamTrack", "recorderConfig", "transcriberConfig", "onSegments", "transcribe", "getTranscriber", "Transcriber", "transcriber", "undefined", "close", "Effect", "useCallback", "useEffect", "useState", "createFeedServiceLayer", "Feed", "Obj", "runAndForwardErrors", "log", "getSpace", "useIdentity", "Message", "__dxlog_file", "identity", "useIdentity", "feed", "transcript", "target", "recording", "setRecording", "track", "useAudioTrack", "useState", "handleSegments", "useCallback", "name", "message", "Obj", "Message", "sender", "created", "Date", "toISOString", "blocks", "pipe", "Effect", "provide", "feedServiceLayer", "space", "onSegments", "useEffect", "cancelled", "transcriber", "startChunksRecording", "err", "log", "toggleRecording", "useCallback", "useEffect", "useState", "scheduleMicroTask", "Context", "log", "useSoundEffect", "__dxlog_file", "soundStop", "useSoundEffect", "handleSegments", "useCallback", "segments", "str", "trim", "onUpdate", "text", "transcriber", "useTranscriber", "audioStreamTrack", "track", "onSegments", "useEffect", "scheduleMicroTask", "active", "log", "setRecording", "soundStart", "startChunksRecording", "stopChunksRecording", "close"]
7
+ }
@@ -0,0 +1,120 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/types/TranscriptionCapabilities.ts
6
+ var TranscriptionCapabilities_exports = {};
7
+ __export(TranscriptionCapabilities_exports, {
8
+ Transcriber: () => Transcriber,
9
+ TranscriptionManager: () => TranscriptionManager
10
+ });
11
+ import { Capability } from "@dxos/app-framework";
12
+ import { meta } from "#meta";
13
+ var Transcriber = Capability.make(`${meta.id}.capability.transcriber`);
14
+ var TranscriptionManager = Capability.make(`${meta.id}.capability.transcription-manager`);
15
+
16
+ // src/types/TranscriptOperation.ts
17
+ var TranscriptOperation_exports = {};
18
+ __export(TranscriptOperation_exports, {
19
+ Create: () => Create,
20
+ MessageWithRangeId: () => MessageWithRangeId,
21
+ Open: () => Open,
22
+ SentenceNormalization: () => SentenceNormalization,
23
+ SentenceNormalizationInput: () => SentenceNormalizationInput,
24
+ SentenceNormalizationOutput: () => SentenceNormalizationOutput,
25
+ Summarize: () => Summarize
26
+ });
27
+ import * as Schema from "effect/Schema";
28
+ import { AiService } from "@dxos/ai";
29
+ import { SpaceSchema } from "@dxos/client/echo";
30
+ import { Operation } from "@dxos/compute";
31
+ import { Database, Feed, Ref } from "@dxos/echo";
32
+ import { Message, Transcript } from "@dxos/types";
33
+ import { meta as meta2 } from "#meta";
34
+ var TRANSCRIPT_OPERATION = `${meta2.id}.operation`;
35
+ var Create = Operation.make({
36
+ meta: {
37
+ key: `${TRANSCRIPT_OPERATION}.create`,
38
+ name: "Create Transcript"
39
+ },
40
+ input: Schema.Struct({
41
+ name: Schema.optional(Schema.String),
42
+ space: SpaceSchema
43
+ }),
44
+ output: Schema.Struct({
45
+ object: Transcript.Transcript
46
+ })
47
+ });
48
+ var MessageWithRangeId = Schema.extend(Message.Message, Schema.Struct({
49
+ rangeId: Schema.optional(Schema.Array(Schema.String)).annotations({
50
+ description: "The IDs of the messages that contain the sentences."
51
+ })
52
+ }));
53
+ var Open = Operation.make({
54
+ meta: {
55
+ key: "org.dxos.function.transcription.open",
56
+ name: "Open",
57
+ description: "Opens and reads the contents of a transcription object."
58
+ },
59
+ input: Schema.Struct({
60
+ transcript: Ref.Ref(Transcript.Transcript).annotations({
61
+ description: "The ID of the transcription object."
62
+ })
63
+ }),
64
+ output: Schema.Struct({
65
+ content: Schema.String
66
+ }),
67
+ services: [
68
+ Database.Service,
69
+ Feed.FeedService
70
+ ]
71
+ });
72
+ var Summarize = Operation.make({
73
+ meta: {
74
+ key: "org.dxos.function.transcription.summarize",
75
+ name: "Summarize",
76
+ description: "Summarize a transcript of a meeting."
77
+ },
78
+ input: Schema.Struct({
79
+ transcript: Schema.String.annotations({
80
+ description: "The transcript of the meeting."
81
+ }),
82
+ notes: Schema.optional(Schema.String).annotations({
83
+ description: "Additional notes from the participants."
84
+ })
85
+ }),
86
+ output: Schema.Struct({
87
+ summary: Schema.String.annotations({
88
+ description: "The summary of the transcript."
89
+ })
90
+ }),
91
+ services: [
92
+ AiService.AiService
93
+ ]
94
+ });
95
+ var SentenceNormalizationInput = Schema.Struct({
96
+ messages: Schema.Array(MessageWithRangeId).annotations({
97
+ description: "Messages to normalize into sentences."
98
+ })
99
+ });
100
+ var SentenceNormalizationOutput = Schema.Struct({
101
+ sentences: Schema.Array(MessageWithRangeId.pipe(Schema.mutable)).pipe(Schema.mutable).annotations({
102
+ description: "The sentences of the transcript."
103
+ })
104
+ });
105
+ var SentenceNormalization = Operation.make({
106
+ meta: {
107
+ key: "org.dxos.function.transcription.sentence-normalization",
108
+ name: "Sentence Normalization",
109
+ description: "Post process of transcription for sentence normalization"
110
+ },
111
+ input: SentenceNormalizationInput,
112
+ output: SentenceNormalizationOutput,
113
+ services: []
114
+ });
115
+
116
+ export {
117
+ TranscriptionCapabilities_exports,
118
+ TranscriptOperation_exports
119
+ };
120
+ //# sourceMappingURL=chunk-5FXU36PN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/TranscriptionCapabilities.ts", "../../../src/types/TranscriptOperation.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\n\nimport {\n type MediaStreamRecorderProps,\n type Transcriber as TranscriberType,\n type TranscriberProps,\n type TranscriptMessageEnricher,\n type TranscriptionManager as TranscriptionManagerType,\n} from '../transcriber';\n\nexport type GetTranscriberProps = {\n audioStreamTrack: MediaStreamTrack;\n recorderConfig?: Partial<MediaStreamRecorderProps['config']>;\n transcriberConfig?: Partial<TranscriberProps['config']>;\n onSegments: TranscriberProps['onSegments'];\n transcribe?: TranscriberProps['transcribe'];\n};\n\nexport type GetTranscriber = (props: GetTranscriberProps) => TranscriberType;\n\nexport type GetTranscriptionManagerProps = {\n messageEnricher?: TranscriptMessageEnricher;\n};\n\nexport type GetTranscriptionManager = (props: GetTranscriptionManagerProps) => TranscriptionManagerType;\n\nexport const Transcriber = Capability.make<GetTranscriber>(`${meta.id}.capability.transcriber`);\n\nexport const TranscriptionManager = Capability.make<GetTranscriptionManager>(\n `${meta.id}.capability.transcription-manager`,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { AiService } from '@dxos/ai';\nimport { SpaceSchema } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Database, Feed, Ref } from '@dxos/echo';\nimport { Message, Transcript } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nconst TRANSCRIPT_OPERATION = `${meta.id}.operation`;\n\nexport const Create = Operation.make({\n meta: { key: `${TRANSCRIPT_OPERATION}.create`, name: 'Create Transcript' },\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n space: SpaceSchema,\n }),\n output: Schema.Struct({\n object: Transcript.Transcript,\n }),\n});\n\nexport const MessageWithRangeId = Schema.extend(\n Message.Message,\n Schema.Struct({\n rangeId: Schema.optional(Schema.Array(Schema.String)).annotations({\n description: 'The IDs of the messages that contain the sentences.',\n }),\n }),\n);\n\nexport type MessageWithRangeIdType = Schema.Schema.Type<typeof MessageWithRangeId>;\n\nexport const Open = Operation.make({\n meta: {\n key: 'org.dxos.function.transcription.open',\n name: 'Open',\n description: 'Opens and reads the contents of a transcription object.',\n },\n input: Schema.Struct({\n transcript: Ref.Ref(Transcript.Transcript).annotations({\n description: 'The ID of the transcription object.',\n }),\n }),\n output: Schema.Struct({\n content: Schema.String,\n }),\n services: [Database.Service, Feed.FeedService],\n});\n\nexport const Summarize = Operation.make({\n meta: {\n key: 'org.dxos.function.transcription.summarize',\n name: 'Summarize',\n description: 'Summarize a transcript of a meeting.',\n },\n input: Schema.Struct({\n transcript: Schema.String.annotations({\n description: 'The transcript of the meeting.',\n }),\n notes: Schema.optional(Schema.String).annotations({\n description: 'Additional notes from the participants.',\n }),\n }),\n output: Schema.Struct({\n summary: Schema.String.annotations({\n description: 'The summary of the transcript.',\n }),\n }),\n services: [AiService.AiService],\n});\n\nexport const SentenceNormalizationInput = Schema.Struct({\n messages: Schema.Array(MessageWithRangeId).annotations({\n description: 'Messages to normalize into sentences.',\n }),\n});\n\nexport type SentenceNormalizationInputType = Schema.Schema.Type<typeof SentenceNormalizationInput>;\n\nexport const SentenceNormalizationOutput = Schema.Struct({\n sentences: Schema.Array(MessageWithRangeId.pipe(Schema.mutable)).pipe(Schema.mutable).annotations({\n description: 'The sentences of the transcript.',\n }),\n});\n\nexport const SentenceNormalization = Operation.make({\n meta: {\n key: 'org.dxos.function.transcription.sentence-normalization',\n name: 'Sentence Normalization',\n description: 'Post process of transcription for sentence normalization',\n },\n input: SentenceNormalizationInput,\n output: SentenceNormalizationOutput,\n services: [],\n});\n"],
5
+ "mappings": ";;;;;AAAA;;;;;AAMA,SAASA,kBAAkB;AAE3B,SAASC,YAAY;AA0Bd,IAAMC,cAAcF,WAAWG,KAAqB,GAAGF,KAAKG,EAAE,yBAAyB;AAEvF,IAAMC,uBAAuBL,WAAWG,KAC7C,GAAGF,KAAKG,EAAE,mCAAmC;;;ACrC/C;;;;;;;;;;AAMA,YAAYE,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,mBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,MAAMC,WAAW;AACpC,SAASC,SAASC,kBAAkB;AAEpC,SAASC,QAAAA,aAAY;AAErB,IAAMC,uBAAuB,GAAGD,MAAKE,EAAE;AAEhC,IAAMC,SAAST,UAAUU,KAAK;EACnCJ,MAAM;IAAEK,KAAK,GAAGJ,oBAAAA;IAA+BK,MAAM;EAAoB;EACzEC,OAAcC,cAAO;IACnBF,MAAaG,gBAAgBC,aAAM;IACnCC,OAAOlB;EACT,CAAA;EACAmB,QAAeJ,cAAO;IACpBK,QAAQd,WAAWA;EACrB,CAAA;AACF,CAAA;AAEO,IAAMe,qBAA4BC,cACvCjB,QAAQA,SACDU,cAAO;EACZQ,SAAgBP,gBAAgBQ,aAAaP,aAAM,CAAA,EAAGQ,YAAY;IAChEC,aAAa;EACf,CAAA;AACF,CAAA,CAAA;AAKK,IAAMC,OAAO1B,UAAUU,KAAK;EACjCJ,MAAM;IACJK,KAAK;IACLC,MAAM;IACNa,aAAa;EACf;EACAZ,OAAcC,cAAO;IACnBa,YAAYxB,IAAIA,IAAIE,WAAWA,UAAU,EAAEmB,YAAY;MACrDC,aAAa;IACf,CAAA;EACF,CAAA;EACAP,QAAeJ,cAAO;IACpBc,SAAgBZ;EAClB,CAAA;EACAa,UAAU;IAAC5B,SAAS6B;IAAS5B,KAAK6B;;AACpC,CAAA;AAEO,IAAMC,YAAYhC,UAAUU,KAAK;EACtCJ,MAAM;IACJK,KAAK;IACLC,MAAM;IACNa,aAAa;EACf;EACAZ,OAAcC,cAAO;IACnBa,YAAmBX,cAAOQ,YAAY;MACpCC,aAAa;IACf,CAAA;IACAQ,OAAclB,gBAAgBC,aAAM,EAAEQ,YAAY;MAChDC,aAAa;IACf,CAAA;EACF,CAAA;EACAP,QAAeJ,cAAO;IACpBoB,SAAgBlB,cAAOQ,YAAY;MACjCC,aAAa;IACf,CAAA;EACF,CAAA;EACAI,UAAU;IAAC/B,UAAUA;;AACvB,CAAA;AAEO,IAAMqC,6BAAoCrB,cAAO;EACtDsB,UAAiBb,aAAMH,kBAAAA,EAAoBI,YAAY;IACrDC,aAAa;EACf,CAAA;AACF,CAAA;AAIO,IAAMY,8BAAqCvB,cAAO;EACvDwB,WAAkBf,aAAMH,mBAAmBmB,KAAYC,cAAO,CAAA,EAAGD,KAAYC,cAAO,EAAEhB,YAAY;IAChGC,aAAa;EACf,CAAA;AACF,CAAA;AAEO,IAAMgB,wBAAwBzC,UAAUU,KAAK;EAClDJ,MAAM;IACJK,KAAK;IACLC,MAAM;IACNa,aAAa;EACf;EACAZ,OAAOsB;EACPjB,QAAQmB;EACRR,UAAU,CAAA;AACZ,CAAA;",
6
+ "names": ["Capability", "meta", "Transcriber", "make", "id", "TranscriptionManager", "Schema", "AiService", "SpaceSchema", "Operation", "Database", "Feed", "Ref", "Message", "Transcript", "meta", "TRANSCRIPT_OPERATION", "id", "Create", "make", "key", "name", "input", "Struct", "optional", "String", "space", "output", "object", "MessageWithRangeId", "extend", "rangeId", "Array", "annotations", "description", "Open", "transcript", "content", "services", "Service", "FeedService", "Summarize", "notes", "summary", "SentenceNormalizationInput", "messages", "SentenceNormalizationOutput", "sentences", "pipe", "mutable", "SentenceNormalization"]
7
+ }
@@ -1,13 +1,7 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
1
  // src/meta.ts
8
2
  import { trim } from "@dxos/util";
9
3
  var meta = {
10
- id: "dxos.org/plugin/transcription",
4
+ id: "org.dxos.plugin.transcription",
11
5
  name: "Transcription",
12
6
  description: trim`
13
7
  Real-time voice-to-text transcription service for capturing spoken content.
@@ -23,7 +17,6 @@ var meta = {
23
17
  };
24
18
 
25
19
  export {
26
- __export,
27
20
  meta
28
21
  };
29
- //# sourceMappingURL=chunk-VBUIO677.mjs.map
22
+ //# sourceMappingURL=chunk-GL4RS533.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.transcription',\n name: 'Transcription',\n description: trim`\n Real-time voice-to-text transcription service for capturing spoken content.\n Convert audio input into searchable text that integrates seamlessly with notes and documents.\n `,\n icon: 'ph--microphone--regular',\n iconHue: 'sky',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-transcription',\n tags: ['labs'],\n screenshots: [],\n};\n"],
5
+ "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaJ;;;;EAIbK,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa,CAAA;AACf;",
6
+ "names": ["trim", "meta", "id", "name", "description", "icon", "iconHue", "source", "tags", "screenshots"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
- TRANSCRIPTION_URL
3
- } from "./chunk-W7WKZTM4.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,13 +9,13 @@ 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
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts";
12
13
  function _ts_decorate(decorators, target, key, desc) {
13
14
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
15
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
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;
16
17
  return c > 3 && r && Object.defineProperty(target, key, r), r;
17
18
  }
18
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts";
19
19
  var initializingPromise;
20
20
  var initializeExtendableMediaRecorder = async () => {
21
21
  const { connect } = await import("extendable-media-recorder-wav-encoder");
@@ -51,12 +51,7 @@ var MediaStreamRecorder = class {
51
51
  async start() {
52
52
  await (initializingPromise ??= initializeExtendableMediaRecorder()).catch((err) => log.info("initializeExtendableMediaRecorder", {
53
53
  err
54
- }, {
55
- F: __dxlog_file,
56
- L: 69,
57
- S: this,
58
- C: (f, a) => f(...a)
59
- }));
54
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 48, S: this }));
60
55
  if (!this._mediaRecorder) {
61
56
  const stream = new MediaStream([
62
57
  this._mediaStreamTrack
@@ -68,15 +63,7 @@ var MediaStreamRecorder = class {
68
63
  if (this._mediaRecorder.state === "recording") {
69
64
  return;
70
65
  }
71
- invariant(this._onChunk, "MediaStreamRecorder: onChunk is not set", {
72
- F: __dxlog_file,
73
- L: 80,
74
- S: this,
75
- A: [
76
- "this._onChunk",
77
- "'MediaStreamRecorder: onChunk is not set'"
78
- ]
79
- });
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'"] });
80
67
  this._mediaRecorder.ondataavailable = (event) => this._ondataavailable(event);
81
68
  this._mediaRecorder.start(this._config.interval);
82
69
  }
@@ -103,12 +90,7 @@ var MediaStreamRecorder = class {
103
90
  ...uint8Array
104
91
  ]));
105
92
  } else {
106
- log.warn("MediaStreamRecorder: no header", void 0, {
107
- F: __dxlog_file,
108
- L: 111,
109
- S: this,
110
- C: (f, a) => f(...a)
111
- });
93
+ log.warn("MediaStreamRecorder: no header", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 90, S: this });
112
94
  return;
113
95
  }
114
96
  this._onChunk({
@@ -130,73 +112,48 @@ import { DeferredTask, Trigger } from "@dxos/async";
130
112
  import { LifecycleState, Resource } from "@dxos/context";
131
113
  import { log as log2 } from "@dxos/log";
132
114
  import { trace as trace2 } from "@dxos/tracing";
133
-
134
- // src/util/array.ts
135
- var mergeFloat64Arrays = (arrays) => {
136
- const newArray = new Float64Array(arrays.reduce((acc, array) => array.length + acc, 0));
137
- let offset = 0;
138
- for (const array of arrays) {
139
- newArray.set(array, offset);
140
- offset += array.length;
141
- }
142
- return newArray;
143
- };
144
-
145
- // src/transcriber/transcriber.ts
115
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/transcriber.ts";
146
116
  function _ts_decorate2(decorators, target, key, desc) {
147
117
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
148
118
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
149
119
  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;
150
120
  return c > 3 && r && Object.defineProperty(target, key, r), r;
151
121
  }
152
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/transcriber.ts";
122
+ var DEFAULT_TRANSCRIPTION_URL = "https://calls-service.dxos.workers.dev";
153
123
  var Transcriber = class extends Resource {
154
124
  _audioChunks = [];
155
- _lastUsedTimestamp = 0;
125
+ _lastTimestamp = 0;
156
126
  _openTrigger = new Trigger({
157
127
  autoReset: true
158
128
  });
159
129
  _config;
160
130
  _recorder;
161
131
  _onSegments;
132
+ _transcribeFn;
162
133
  _recording = false;
163
134
  _transcribeTask = void 0;
164
- constructor({ config, recorder, onSegments }) {
135
+ constructor({ config, recorder, onSegments, transcribe }) {
165
136
  super();
166
137
  this._config = config;
167
138
  this._recorder = recorder;
168
139
  this._onSegments = onSegments;
140
+ this._transcribeFn = transcribe;
169
141
  }
170
142
  async _open(ctx) {
171
- log2.info("opening", void 0, {
172
- F: __dxlog_file2,
173
- L: 102,
174
- S: this,
175
- C: (f, a) => f(...a)
176
- });
143
+ log2.info("opening", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 43, S: this });
177
144
  this._recorder.setOnChunk((chunk) => this._saveAudioChunk(chunk));
178
145
  await this._recorder.start();
179
146
  this._transcribeTask = new DeferredTask(ctx, async () => this._transcribe());
180
147
  this._openTrigger.wake();
181
148
  }
182
149
  async _close() {
183
- log2.info("closing", void 0, {
184
- F: __dxlog_file2,
185
- L: 110,
186
- S: this,
187
- C: (f, a) => f(...a)
188
- });
150
+ log2.info("closing", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 50, S: this });
189
151
  this._recording = false;
190
152
  this._transcribeTask = void 0;
191
153
  await this._recorder.stop();
192
154
  }
193
155
  startChunksRecording() {
194
- log2.info("starting", void 0, {
195
- F: __dxlog_file2,
196
- L: 117,
197
- S: this,
198
- C: (f, a) => f(...a)
199
- });
156
+ log2.info("starting", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 56, S: this });
200
157
  if (this._lifecycleState !== LifecycleState.OPEN) {
201
158
  return;
202
159
  }
@@ -208,22 +165,12 @@ var Transcriber = class extends Resource {
208
165
  }
209
166
  this._recording = false;
210
167
  this._transcribeTask?.schedule();
211
- log2.info("stopped", void 0, {
212
- F: __dxlog_file2,
213
- L: 132,
214
- S: this,
215
- C: (f, a) => f(...a)
216
- });
168
+ log2.info("stopped", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 68, S: this });
217
169
  }
218
170
  _saveAudioChunk(chunk) {
219
171
  log2("saving audio chunk", {
220
172
  chunk
221
- }, {
222
- F: __dxlog_file2,
223
- L: 136,
224
- S: this,
225
- C: (f, a) => f(...a)
226
- });
173
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 71, S: this });
227
174
  this._audioChunks.push(chunk);
228
175
  if (!this._recording && (!this._transcribeTask || !this._transcribeTask.scheduled) && this._audioChunks.length >= this._config.prefixBufferChunksAmount) {
229
176
  this._audioChunks = this._dropOldChunks();
@@ -234,12 +181,7 @@ var Transcriber = class extends Resource {
234
181
  async _transcribe() {
235
182
  log2("transcribing", {
236
183
  chunks: this._audioChunks.length
237
- }, {
238
- F: __dxlog_file2,
239
- L: 152,
240
- S: this,
241
- C: (f, a) => f(...a)
242
- });
184
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 83, S: this });
243
185
  const chunks = this._audioChunks;
244
186
  this._audioChunks = this._dropOldChunks();
245
187
  if (chunks.length === 0) {
@@ -266,54 +208,41 @@ var Transcriber = class extends Resource {
266
208
  }
267
209
  async _fetchTranscription(audio) {
268
210
  if (audio.length === 0) {
269
- this._audioChunks = [];
270
211
  throw new Error("No audio to send for transcribing");
271
212
  }
272
- const response = await fetch(`${TRANSCRIPTION_URL}/transcribe`, {
273
- method: "POST",
274
- body: JSON.stringify({
275
- audio
276
- }),
277
- headers: {
278
- "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 ?? DEFAULT_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}`);
279
229
  }
280
- });
281
- if (!response.ok) {
282
- this._audioChunks = [];
283
- 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");
284
234
  }
285
- const { segments } = await response.json();
286
235
  log2.info("transcription response", {
287
- segments: segments.length,
288
- string: segments.map((segments2) => segments2.text).join(" ")
289
- }, {
290
- F: __dxlog_file2,
291
- L: 216,
292
- S: this,
293
- C: (f, a) => f(...a)
294
- });
236
+ segments: segments.length
237
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 137, S: this });
295
238
  return segments;
296
239
  }
297
240
  _alignSegments(segments, originalChunks) {
298
- const zeroTimestamp = originalChunks.at(0).timestamp;
299
- const filteredSegments = segments.filter((segment) => zeroTimestamp + segment.end * 1e3 >= this._lastUsedTimestamp).map((segment) => {
300
- const words = segment.words.filter((word) => zeroTimestamp + word.start * 1e3 >= this._lastUsedTimestamp);
301
- return {
302
- ...segment,
303
- words,
304
- text: words.map((word) => word.word).join(""),
305
- start: words.at(0)?.start ?? segment.end
306
- };
307
- }).filter((segment) => segment.words.length > 0);
308
- if (filteredSegments.length === 0) {
309
- return [];
241
+ const result = alignWhisperSegments(segments, originalChunks, this._lastTimestamp);
242
+ if (result.lastTimestamp !== void 0) {
243
+ this._lastTimestamp = result.lastTimestamp;
310
244
  }
311
- this._lastUsedTimestamp = zeroTimestamp + filteredSegments.at(-1).end * 1e3;
312
- return filteredSegments.map((segment) => ({
313
- _tag: "transcript",
314
- started: new Date(zeroTimestamp + segment.start * 1e3).toISOString(),
315
- text: segment.text.trim()
316
- }));
245
+ return result.transcripts;
317
246
  }
318
247
  };
319
248
  _ts_decorate2([
@@ -326,13 +255,46 @@ _ts_decorate2([
326
255
  showInBrowserTimeline: true
327
256
  })
328
257
  ], Transcriber.prototype, "_fetchTranscription", null);
258
+ var alignWhisperSegments = (segments, originalChunks, lastTimestamp) => {
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 >= lastTimestamp).map((segment) => {
266
+ const words = segment.words.filter((word) => zeroTimestamp + word.start * 1e3 >= lastTimestamp);
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
+ lastTimestamp: zeroTimestamp + filteredSegments.at(-1).end * 1e3,
281
+ transcripts: filteredSegments.map((segment) => ({
282
+ _tag: "transcript",
283
+ started: new Date(zeroTimestamp + segment.start * 1e3).toISOString(),
284
+ text: segment.text.trim()
285
+ }))
286
+ };
287
+ };
329
288
 
330
289
  // src/transcriber/transcription-manager.ts
331
- import { signal } from "@preact/signals-core";
290
+ import { Atom } from "@effect-atom/atom-react";
291
+ import * as Effect from "effect/Effect";
332
292
  import { synchronized as synchronized2 } from "@dxos/async";
293
+ import { createFeedServiceLayer } from "@dxos/client/echo";
333
294
  import { Resource as Resource2 } from "@dxos/context";
334
- import { Obj } from "@dxos/echo";
335
- import { DataType } from "@dxos/schema";
295
+ import { Feed, Obj } from "@dxos/echo";
296
+ import { runAndForwardErrors } from "@dxos/effect";
297
+ import { Message } from "@dxos/types";
336
298
  function _ts_decorate3(decorators, target, key, desc) {
337
299
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
338
300
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -345,23 +307,29 @@ var TRANSCRIBE_AFTER_CHUNKS_AMOUNT = 50;
345
307
  var TranscriptionManager = class extends Resource2 {
346
308
  _edgeClient;
347
309
  _messageEnricher;
310
+ _registry;
348
311
  _audioStreamTrack = void 0;
349
312
  _identityDid = void 0;
350
313
  _mediaRecorder = void 0;
351
314
  _transcriber = void 0;
352
- _queue = void 0;
353
- _enabled = signal(false);
315
+ _feed = void 0;
316
+ _feedServiceLayer = void 0;
317
+ _enabledAtom = Atom.make(false);
354
318
  constructor(options) {
355
319
  super();
356
320
  this._edgeClient = options.edgeClient;
357
321
  this._messageEnricher = options.messageEnricher;
322
+ this._registry = options.registry;
358
323
  }
359
- /** @reactive */
360
324
  get enabled() {
361
- return this._enabled.value;
325
+ return this._enabledAtom;
326
+ }
327
+ getEnabled() {
328
+ return this._registry.get(this._enabledAtom);
362
329
  }
363
- setQueue(queue) {
364
- this._queue = queue;
330
+ setFeed(space, feed) {
331
+ this._feed = feed;
332
+ this._feedServiceLayer = createFeedServiceLayer(space.queues);
365
333
  return this;
366
334
  }
367
335
  setIdentityDid(did) {
@@ -371,7 +339,7 @@ var TranscriptionManager = class extends Resource2 {
371
339
  return this;
372
340
  }
373
341
  setRecording(recording) {
374
- if (!this.isOpen || !this._enabled.value) {
342
+ if (!this.isOpen || !this.getEnabled()) {
375
343
  return this;
376
344
  }
377
345
  if (recording) {
@@ -382,10 +350,10 @@ var TranscriptionManager = class extends Resource2 {
382
350
  return this;
383
351
  }
384
352
  async setEnabled(enabled) {
385
- if (this._enabled.value === enabled) {
353
+ if (this.getEnabled() === enabled) {
386
354
  return;
387
355
  }
388
- this._enabled.value = enabled ?? false;
356
+ this._registry.set(this._enabledAtom, enabled ?? false);
389
357
  if (enabled) {
390
358
  await this._maybeRestartTranscriber();
391
359
  } else {
@@ -406,7 +374,7 @@ var TranscriptionManager = class extends Resource2 {
406
374
  await this._stopTranscriber();
407
375
  }
408
376
  async _maybeRestartTranscriber() {
409
- if (!this._audioStreamTrack || !this._enabled.value || !this.isOpen) {
377
+ if (!this._audioStreamTrack || !this.getEnabled() || !this.isOpen) {
410
378
  return;
411
379
  }
412
380
  let needReinit = false;
@@ -436,10 +404,10 @@ var TranscriptionManager = class extends Resource2 {
436
404
  await this._transcriber?.close();
437
405
  }
438
406
  async _onSegments(segments) {
439
- if (!this.isOpen || !this._queue) {
407
+ if (!this.isOpen || !this._feed || !this._feedServiceLayer) {
440
408
  return;
441
409
  }
442
- let block = Obj.make(DataType.Message, {
410
+ let block = Obj.make(Message.Message, {
443
411
  created: (/* @__PURE__ */ new Date()).toISOString(),
444
412
  blocks: segments,
445
413
  sender: {
@@ -449,9 +417,9 @@ var TranscriptionManager = class extends Resource2 {
449
417
  if (this._messageEnricher) {
450
418
  block = await this._messageEnricher(block);
451
419
  }
452
- await this._queue.append([
420
+ await Feed.append(this._feed, [
453
421
  block
454
- ]);
422
+ ]).pipe(Effect.provide(this._feedServiceLayer), runAndForwardErrors);
455
423
  }
456
424
  };
457
425
  _ts_decorate3([
@@ -461,6 +429,7 @@ _ts_decorate3([
461
429
  export {
462
430
  MediaStreamRecorder,
463
431
  Transcriber,
432
+ alignWhisperSegments,
464
433
  TranscriptionManager
465
434
  };
466
- //# sourceMappingURL=chunk-WH36ENNE.mjs.map
435
+ //# sourceMappingURL=chunk-ILSA3DU7.mjs.map