@dxos/plugin-transcription 0.8.3 → 0.8.4-main.1c7ec43d41

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 (330) hide show
  1. package/dist/lib/browser/blueprints/index.mjs +31 -0
  2. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-3L623EVL.mjs +17 -0
  4. package/dist/lib/browser/chunk-3L623EVL.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  6. package/dist/lib/browser/chunk-KAEXRX3Y.mjs +35 -0
  7. package/dist/lib/browser/chunk-KAEXRX3Y.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-L4HW35L6.mjs +111 -0
  9. package/dist/lib/browser/chunk-L4HW35L6.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-MLRJWAQH.mjs +179 -0
  11. package/dist/lib/browser/chunk-MLRJWAQH.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-NQQK7UZQ.mjs +244 -0
  13. package/dist/lib/browser/chunk-NQQK7UZQ.mjs.map +7 -0
  14. package/dist/lib/browser/components/index.mjs +207 -0
  15. package/dist/lib/browser/components/index.mjs.map +7 -0
  16. package/dist/lib/browser/create-ULR5DPJZ.mjs +21 -0
  17. package/dist/lib/browser/create-ULR5DPJZ.mjs.map +7 -0
  18. package/dist/lib/browser/hooks/index.mjs +17 -0
  19. package/dist/lib/browser/index.mjs +442 -94
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/open-SFMPLZVW.mjs +27 -0
  23. package/dist/lib/browser/open-SFMPLZVW.mjs.map +7 -0
  24. package/dist/lib/browser/operations/index.mjs +13 -0
  25. package/dist/lib/browser/operations/index.mjs.map +7 -0
  26. package/dist/lib/browser/summarize-BDFX4APN.mjs +78 -0
  27. package/dist/lib/browser/summarize-BDFX4APN.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +4 -8
  29. package/dist/lib/node-esm/blueprints/index.mjs +32 -0
  30. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-7UIZWCD4.mjs +112 -0
  32. package/dist/lib/node-esm/chunk-7UIZWCD4.mjs.map +7 -0
  33. package/dist/lib/node-esm/chunk-C3AE2NYJ.mjs +181 -0
  34. package/dist/lib/node-esm/chunk-C3AE2NYJ.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  36. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  37. package/dist/lib/node-esm/chunk-KO3IOD2O.mjs +19 -0
  38. package/dist/lib/node-esm/chunk-KO3IOD2O.mjs.map +7 -0
  39. package/dist/lib/node-esm/chunk-MQK4R6GT.mjs +245 -0
  40. package/dist/lib/node-esm/chunk-MQK4R6GT.mjs.map +7 -0
  41. package/dist/lib/node-esm/chunk-O533NBMK.mjs +37 -0
  42. package/dist/lib/node-esm/chunk-O533NBMK.mjs.map +7 -0
  43. package/dist/lib/node-esm/components/index.mjs +208 -0
  44. package/dist/lib/node-esm/components/index.mjs.map +7 -0
  45. package/dist/lib/node-esm/create-A5QHNWRF.mjs +22 -0
  46. package/dist/lib/node-esm/create-A5QHNWRF.mjs.map +7 -0
  47. package/dist/lib/node-esm/hooks/index.mjs +18 -0
  48. package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
  49. package/dist/lib/node-esm/index.mjs +442 -94
  50. package/dist/lib/node-esm/index.mjs.map +4 -4
  51. package/dist/lib/node-esm/meta.json +1 -1
  52. package/dist/lib/node-esm/open-OI24QNTO.mjs +28 -0
  53. package/dist/lib/node-esm/open-OI24QNTO.mjs.map +7 -0
  54. package/dist/lib/node-esm/operations/index.mjs +14 -0
  55. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  56. package/dist/lib/node-esm/summarize-3UNN24I2.mjs +79 -0
  57. package/dist/lib/node-esm/summarize-3UNN24I2.mjs.map +7 -0
  58. package/dist/lib/node-esm/types/index.mjs +4 -8
  59. package/dist/types/src/TranscriptionPlugin.d.ts +3 -1
  60. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  61. package/dist/types/src/TranscriptionPlugin.node.d.ts +4 -0
  62. package/dist/types/src/TranscriptionPlugin.node.d.ts.map +1 -0
  63. package/dist/types/src/TranscriptionPlugin.test.d.ts +2 -0
  64. package/dist/types/src/TranscriptionPlugin.test.d.ts.map +1 -0
  65. package/dist/types/src/blueprints/index.d.ts +2 -0
  66. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  67. package/dist/types/src/blueprints/transcription-blueprint.d.ts +4 -0
  68. package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  70. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/index.d.ts +10 -4
  72. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  74. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  76. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/text-content.d.ts +8 -0
  78. package/dist/types/src/capabilities/text-content.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/transcriber.d.ts +4 -3
  80. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  81. package/dist/types/src/components/Transcription/Transcription.d.ts +18 -0
  82. package/dist/types/src/components/Transcription/Transcription.d.ts.map +1 -0
  83. package/dist/types/src/components/Transcription/Transcription.stories.d.ts +40 -0
  84. package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/Transcription/index.d.ts +2 -0
  86. package/dist/types/src/components/Transcription/index.d.ts.map +1 -0
  87. package/dist/types/src/components/Transcription/transcription-extension.d.ts +15 -0
  88. package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +1 -0
  89. package/dist/types/src/components/index.d.ts +1 -6
  90. package/dist/types/src/components/index.d.ts.map +1 -1
  91. package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts +6 -0
  92. package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts.map +1 -0
  93. package/dist/types/src/containers/TranscriptionContainer/index.d.ts +2 -0
  94. package/dist/types/src/containers/TranscriptionContainer/index.d.ts.map +1 -0
  95. package/dist/types/src/containers/index.d.ts +3 -0
  96. package/dist/types/src/containers/index.d.ts.map +1 -0
  97. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  98. package/dist/types/src/hooks/useAudioTrack.d.ts.map +1 -1
  99. package/dist/types/src/hooks/useQueueModelAdapter.d.ts +1 -1
  100. package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +1 -1
  101. package/dist/types/src/hooks/useTranscriber.d.ts +2 -2
  102. package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
  103. package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
  104. package/dist/types/src/index.d.ts +4 -4
  105. package/dist/types/src/index.d.ts.map +1 -1
  106. package/dist/types/src/meta.d.ts +2 -3
  107. package/dist/types/src/meta.d.ts.map +1 -1
  108. package/dist/types/src/model/model.d.ts +2 -2
  109. package/dist/types/src/model/model.d.ts.map +1 -1
  110. package/dist/types/src/{segments-normalization → normalization}/index.d.ts +1 -1
  111. package/dist/types/src/normalization/index.d.ts.map +1 -0
  112. package/dist/types/src/{segments-normalization → normalization}/message-normalizer.d.ts +5 -5
  113. package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -0
  114. package/dist/types/src/normalization/normalization.d.ts +364 -0
  115. package/dist/types/src/normalization/normalization.d.ts.map +1 -0
  116. package/dist/types/src/normalization/normalization.test.d.ts.map +1 -0
  117. package/dist/types/src/normalization/utils.d.ts +3 -0
  118. package/dist/types/src/normalization/utils.d.ts.map +1 -0
  119. package/dist/types/src/operations/create.d.ts +5 -0
  120. package/dist/types/src/operations/create.d.ts.map +1 -0
  121. package/dist/types/src/operations/definitions.d.ts +917 -0
  122. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  123. package/dist/types/src/operations/index.d.ts +4 -0
  124. package/dist/types/src/operations/index.d.ts.map +1 -0
  125. package/dist/types/src/operations/open.d.ts +5 -0
  126. package/dist/types/src/operations/open.d.ts.map +1 -0
  127. package/dist/types/src/operations/summarize.d.ts +8 -0
  128. package/dist/types/src/operations/summarize.d.ts.map +1 -0
  129. package/dist/types/src/stories/FileTranscription.stories.d.ts +18 -0
  130. package/dist/types/src/stories/FileTranscription.stories.d.ts.map +1 -0
  131. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts +14 -0
  132. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +1 -0
  133. package/dist/types/src/stories/MicrophoneTranscription.stories.d.ts +20 -0
  134. package/dist/types/src/stories/MicrophoneTranscription.stories.d.ts.map +1 -0
  135. package/dist/types/src/stories/TranscriptionStory.d.ts +23 -0
  136. package/dist/types/src/stories/TranscriptionStory.d.ts.map +1 -0
  137. package/dist/types/src/stories/useIsSpeaking.d.ts.map +1 -0
  138. package/dist/types/src/testing/testing.d.ts +10 -10
  139. package/dist/types/src/testing/testing.d.ts.map +1 -1
  140. package/dist/types/src/transcriber/media-stream-recorder.d.ts +3 -3
  141. package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
  142. package/dist/types/src/transcriber/transcriber.d.ts +60 -5
  143. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  144. package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
  145. package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
  146. package/dist/types/src/transcriber/transcription-manager.d.ts +12 -13
  147. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  148. package/dist/types/src/translations.d.ts +10 -11
  149. package/dist/types/src/translations.d.ts.map +1 -1
  150. package/dist/types/src/types/capabilities.d.ts +19 -0
  151. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  152. package/dist/types/src/types/defs.d.ts +5 -0
  153. package/dist/types/src/types/defs.d.ts.map +1 -0
  154. package/dist/types/src/types/index.d.ts +2 -2
  155. package/dist/types/src/types/index.d.ts.map +1 -1
  156. package/dist/types/src/util/array.d.ts.map +1 -1
  157. package/dist/types/src/util/get-time-str.d.ts.map +1 -1
  158. package/dist/types/src/util/index.d.ts +1 -0
  159. package/dist/types/src/util/index.d.ts.map +1 -1
  160. package/dist/types/src/util/monitor-audio-level.d.ts.map +1 -1
  161. package/dist/types/src/util/render-byline.d.ts +4 -0
  162. package/dist/types/src/util/render-byline.d.ts.map +1 -0
  163. package/dist/types/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +127 -82
  165. package/src/TranscriptionPlugin.node.ts +20 -0
  166. package/src/TranscriptionPlugin.test.ts +31 -0
  167. package/src/TranscriptionPlugin.tsx +22 -61
  168. package/src/blueprints/index.ts +5 -0
  169. package/src/blueprints/transcription-blueprint.ts +29 -0
  170. package/src/capabilities/blueprint-definition.ts +19 -0
  171. package/src/capabilities/index.ts +11 -6
  172. package/src/capabilities/operation-handler.ts +16 -0
  173. package/src/capabilities/react-surface.tsx +23 -14
  174. package/src/capabilities/text-content.ts +33 -0
  175. package/src/capabilities/transcriber.ts +54 -42
  176. package/src/components/{Transcript/Transcript.stories.tsx → Transcription/Transcription.stories.tsx} +78 -73
  177. package/src/components/Transcription/Transcription.tsx +64 -0
  178. package/src/components/{Transcript → Transcription}/index.ts +1 -1
  179. package/src/components/{Transcript/transcript-extension.ts → Transcription/transcription-extension.ts} +15 -48
  180. package/src/components/index.ts +1 -6
  181. package/src/containers/TranscriptionContainer/TranscriptionContainer.tsx +35 -0
  182. package/src/containers/TranscriptionContainer/index.ts +5 -0
  183. package/src/containers/index.ts +7 -0
  184. package/src/hooks/useAudioFile.ts +49 -53
  185. package/src/hooks/useQueueModelAdapter.ts +1 -1
  186. package/src/hooks/useTranscriber.ts +15 -7
  187. package/src/hooks/useVoiceInput.ts +3 -3
  188. package/src/index.ts +10 -5
  189. package/src/meta.ts +9 -6
  190. package/src/model/model.test.ts +27 -21
  191. package/src/model/model.ts +3 -3
  192. package/src/{segments-normalization → normalization}/message-normalizer.ts +20 -19
  193. package/src/{segments-normalization → normalization}/normalization.test.ts +26 -33
  194. package/src/normalization/normalization.ts +77 -0
  195. package/src/{segments-normalization → normalization}/utils.ts +2 -2
  196. package/src/operations/create.ts +24 -0
  197. package/src/operations/definitions.ts +101 -0
  198. package/src/operations/index.ts +13 -0
  199. package/src/operations/open.ts +28 -0
  200. package/src/operations/summarize.ts +101 -0
  201. package/src/{components/stories → stories}/FileTranscription.stories.tsx +99 -72
  202. package/src/{components/stories → stories}/KeyWordRecognition.stories.tsx +46 -40
  203. package/src/{components/stories → stories}/MicrophoneTranscription.stories.tsx +85 -101
  204. package/src/stories/TranscriptionStory.tsx +93 -0
  205. package/src/testing/testing.ts +41 -41
  206. package/src/transcriber/media-stream-recorder.ts +4 -4
  207. package/src/transcriber/transcriber.browser.test.ts +5 -5
  208. package/src/transcriber/transcriber.test.ts +104 -0
  209. package/src/transcriber/transcriber.ts +101 -62
  210. package/src/transcriber/transcription-manager.ts +37 -52
  211. package/src/translations.ts +12 -10
  212. package/src/types/capabilities.ts +39 -0
  213. package/src/types/defs.ts +9 -0
  214. package/src/types/index.ts +2 -2
  215. package/src/util/index.ts +1 -0
  216. package/src/util/render-byline.ts +33 -0
  217. package/dist/lib/browser/TranscriptContainer-H3AZQ4CQ.mjs +0 -11
  218. package/dist/lib/browser/chunk-53AXUEIQ.mjs +0 -764
  219. package/dist/lib/browser/chunk-53AXUEIQ.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-GOF7MJNV.mjs +0 -19
  221. package/dist/lib/browser/chunk-GOF7MJNV.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-IQ5ZRMHZ.mjs +0 -495
  223. package/dist/lib/browser/chunk-IQ5ZRMHZ.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-OSISJM2F.mjs +0 -55
  225. package/dist/lib/browser/chunk-OSISJM2F.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-UDCCT32F.mjs +0 -8
  227. package/dist/lib/browser/chunk-UDCCT32F.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-W2KNYJD6.mjs +0 -16
  229. package/dist/lib/browser/chunk-W2KNYJD6.mjs.map +0 -7
  230. package/dist/lib/browser/intent-resolver-BGADCHVM.mjs +0 -30
  231. package/dist/lib/browser/intent-resolver-BGADCHVM.mjs.map +0 -7
  232. package/dist/lib/browser/react-surface-HMJS5FSS.mjs +0 -34
  233. package/dist/lib/browser/react-surface-HMJS5FSS.mjs.map +0 -7
  234. package/dist/lib/browser/transcriber-OYPLZFG5.mjs +0 -56
  235. package/dist/lib/browser/transcriber-OYPLZFG5.mjs.map +0 -7
  236. package/dist/lib/node/TranscriptContainer-KIG3GMAB.cjs +0 -32
  237. package/dist/lib/node/TranscriptContainer-KIG3GMAB.cjs.map +0 -7
  238. package/dist/lib/node/chunk-3PYT3BDM.cjs +0 -40
  239. package/dist/lib/node/chunk-3PYT3BDM.cjs.map +0 -7
  240. package/dist/lib/node/chunk-6LW5RA3K.cjs +0 -75
  241. package/dist/lib/node/chunk-6LW5RA3K.cjs.map +0 -7
  242. package/dist/lib/node/chunk-AFUZI63A.cjs +0 -42
  243. package/dist/lib/node/chunk-AFUZI63A.cjs.map +0 -7
  244. package/dist/lib/node/chunk-CVUN3UO7.cjs +0 -778
  245. package/dist/lib/node/chunk-CVUN3UO7.cjs.map +0 -7
  246. package/dist/lib/node/chunk-FKDJNJ57.cjs +0 -35
  247. package/dist/lib/node/chunk-FKDJNJ57.cjs.map +0 -7
  248. package/dist/lib/node/chunk-ZFAUMZXE.cjs +0 -518
  249. package/dist/lib/node/chunk-ZFAUMZXE.cjs.map +0 -7
  250. package/dist/lib/node/index.cjs +0 -133
  251. package/dist/lib/node/index.cjs.map +0 -7
  252. package/dist/lib/node/intent-resolver-LL3TTI4H.cjs +0 -45
  253. package/dist/lib/node/intent-resolver-LL3TTI4H.cjs.map +0 -7
  254. package/dist/lib/node/meta.json +0 -1
  255. package/dist/lib/node/react-surface-N25TBBG4.cjs +0 -56
  256. package/dist/lib/node/react-surface-N25TBBG4.cjs.map +0 -7
  257. package/dist/lib/node/transcriber-6J4FVFSZ.cjs +0 -68
  258. package/dist/lib/node/transcriber-6J4FVFSZ.cjs.map +0 -7
  259. package/dist/lib/node/types/index.cjs +0 -36
  260. package/dist/lib/node/types/index.cjs.map +0 -7
  261. package/dist/lib/node-esm/TranscriptContainer-G75LDEO5.mjs +0 -12
  262. package/dist/lib/node-esm/chunk-56QHOX4A.mjs +0 -765
  263. package/dist/lib/node-esm/chunk-56QHOX4A.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-FH75X4JC.mjs +0 -56
  265. package/dist/lib/node-esm/chunk-FH75X4JC.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-MFJO7EKD.mjs +0 -10
  267. package/dist/lib/node-esm/chunk-MFJO7EKD.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-MFJPEIVB.mjs +0 -17
  269. package/dist/lib/node-esm/chunk-MFJPEIVB.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-PRL64SRU.mjs +0 -496
  271. package/dist/lib/node-esm/chunk-PRL64SRU.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-TXMDLLBR.mjs +0 -21
  273. package/dist/lib/node-esm/chunk-TXMDLLBR.mjs.map +0 -7
  274. package/dist/lib/node-esm/intent-resolver-5LVCYSJS.mjs +0 -31
  275. package/dist/lib/node-esm/intent-resolver-5LVCYSJS.mjs.map +0 -7
  276. package/dist/lib/node-esm/react-surface-JGQSYGRR.mjs +0 -35
  277. package/dist/lib/node-esm/react-surface-JGQSYGRR.mjs.map +0 -7
  278. package/dist/lib/node-esm/transcriber-TVG2MBBN.mjs +0 -57
  279. package/dist/lib/node-esm/transcriber-TVG2MBBN.mjs.map +0 -7
  280. package/dist/types/src/capabilities/capabilities.d.ts +0 -17
  281. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  282. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  283. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  284. package/dist/types/src/components/Transcript/Transcript.d.ts +0 -20
  285. package/dist/types/src/components/Transcript/Transcript.d.ts.map +0 -1
  286. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +0 -24
  287. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +0 -1
  288. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +0 -28
  289. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +0 -1
  290. package/dist/types/src/components/Transcript/index.d.ts +0 -2
  291. package/dist/types/src/components/Transcript/index.d.ts.map +0 -1
  292. package/dist/types/src/components/Transcript/transcript-extension.d.ts +0 -19
  293. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +0 -1
  294. package/dist/types/src/components/TranscriptContainer.d.ts +0 -8
  295. package/dist/types/src/components/TranscriptContainer.d.ts.map +0 -1
  296. package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -17
  297. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +0 -1
  298. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts +0 -10
  299. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +0 -1
  300. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +0 -19
  301. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +0 -1
  302. package/dist/types/src/components/stories/TranscriptionStory.d.ts +0 -11
  303. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +0 -1
  304. package/dist/types/src/components/stories/useIsSpeaking.d.ts.map +0 -1
  305. package/dist/types/src/segments-normalization/index.d.ts.map +0 -1
  306. package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +0 -1
  307. package/dist/types/src/segments-normalization/normalization.d.ts +0 -329
  308. package/dist/types/src/segments-normalization/normalization.d.ts.map +0 -1
  309. package/dist/types/src/segments-normalization/normalization.test.d.ts.map +0 -1
  310. package/dist/types/src/segments-normalization/utils.d.ts +0 -3
  311. package/dist/types/src/segments-normalization/utils.d.ts.map +0 -1
  312. package/dist/types/src/types/schema.d.ts +0 -41
  313. package/dist/types/src/types/schema.d.ts.map +0 -1
  314. package/dist/types/src/types/types.d.ts +0 -31
  315. package/dist/types/src/types/types.d.ts.map +0 -1
  316. package/src/capabilities/capabilities.ts +0 -33
  317. package/src/capabilities/intent-resolver.ts +0 -24
  318. package/src/components/Transcript/Transcript.tsx +0 -100
  319. package/src/components/Transcript/deprecated/OldTranscript.tsx +0 -260
  320. package/src/components/TranscriptContainer.tsx +0 -30
  321. package/src/components/stories/TranscriptionStory.tsx +0 -41
  322. package/src/segments-normalization/normalization.ts +0 -105
  323. package/src/types/schema.ts +0 -41
  324. package/src/types/types.ts +0 -32
  325. package/dist/lib/browser/{TranscriptContainer-H3AZQ4CQ.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  326. package/dist/lib/{node-esm/TranscriptContainer-G75LDEO5.mjs.map → browser/hooks/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
@@ -2,22 +2,24 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj, type Meta } from '@storybook/react';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useEffect, useMemo, useState } from 'react';
9
7
 
10
8
  import { log } from '@dxos/log';
11
- import { Toolbar } from '@dxos/react-ui';
12
- import { mx } from '@dxos/react-ui-theme';
13
- import { withLayout, withTheme } from '@dxos/storybook-utils';
9
+ import { Panel, Toolbar } from '@dxos/react-ui';
10
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
+ import { mx } from '@dxos/ui-theme';
14
12
 
15
13
  type Word = {
16
14
  text: string;
17
15
  matched: boolean;
18
16
  };
19
17
 
20
- const SpeechRecognition = ({ keywords }: { keywords: string[] }) => {
18
+ type DefaultStoryProps = {
19
+ keywords: string[];
20
+ };
21
+
22
+ const DefaultStory = ({ keywords }: DefaultStoryProps) => {
21
23
  const [running, setRunning] = useState(false);
22
24
  const [matchingWords, setMatchingWords] = useState<Word[]>(keywords.map((word) => ({ text: word, matched: false })));
23
25
 
@@ -84,45 +86,49 @@ const SpeechRecognition = ({ keywords }: { keywords: string[] }) => {
84
86
  }, [running, recognition]);
85
87
 
86
88
  return (
87
- <div className={mx('flex flex-col gap-2 w-[30rem]')}>
88
- <Toolbar.Root>
89
- <Toolbar.IconButton
90
- iconOnly
91
- icon={running ? 'ph--pause--regular' : 'ph--play--regular'}
92
- label={running ? 'Pause' : 'Play'}
93
- onClick={() => setRunning((running) => !running)}
94
- />
95
- </Toolbar.Root>
96
-
97
- <div className='flex flex-wrap'>
98
- {matchingWords.map((word, index) => (
99
- <span
100
- key={index}
101
- className={mx(
102
- 'px-3 py-1 m-2 rounded border',
103
- word.matched ? 'bg-red-200 text-red-800 border-red-300' : 'bg-gray-200 text-gray-600 border-gray-300',
104
- )}
105
- >
106
- {word.text}
107
- </span>
108
- ))}
109
- </div>
110
-
111
- <span>{transcript || (running ? 'Listening...' : 'Click play to start speech recognition')}</span>
112
- </div>
89
+ <Panel.Root>
90
+ <Panel.Toolbar asChild>
91
+ <Toolbar.Root>
92
+ <Toolbar.IconButton
93
+ iconOnly
94
+ icon={running ? 'ph--pause--regular' : 'ph--play--regular'}
95
+ label={running ? 'Pause' : 'Play'}
96
+ onClick={() => setRunning((running) => !running)}
97
+ />
98
+ </Toolbar.Root>
99
+ </Panel.Toolbar>
100
+
101
+ <Panel.Content>
102
+ <div className='p-4 grid grid-cols-[repeat(auto-fill,minmax(6rem,1fr))] gap-2'>
103
+ {matchingWords.map((word, index) => (
104
+ <span
105
+ key={index}
106
+ className={mx(
107
+ 'grid place-items-center p-2 aspect-square rounded-sm border border-separator',
108
+ word.matched && 'border-red-300',
109
+ )}
110
+ >
111
+ {word.text}
112
+ </span>
113
+ ))}
114
+ </div>
115
+ </Panel.Content>
116
+ </Panel.Root>
113
117
  );
114
118
  };
115
119
 
116
- const meta: Meta<typeof SpeechRecognition> = {
117
- title: 'plugins/plugin-transcription/KeyWordDetection',
118
- decorators: [withTheme, withLayout({ fullscreen: true, classNames: 'justify-center' })],
119
- };
120
+ const meta = {
121
+ title: 'plugins/plugin-transcription/components/KeyWordDetection',
122
+ render: DefaultStory,
123
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
124
+ } satisfies Meta<typeof DefaultStory>;
120
125
 
121
126
  export default meta;
122
127
 
123
- export const SpeechRecognitionAPI: StoryObj<typeof SpeechRecognition> = {
124
- render: SpeechRecognition,
128
+ type Story = StoryObj<typeof meta>;
129
+
130
+ export const SpeechRecognitionAPI: Story = {
125
131
  args: {
126
- keywords: ['kai', 'computer', 'hello'],
132
+ keywords: ['kai', 'computer', 'hello', 'dxos'],
127
133
  },
128
134
  };
@@ -2,46 +2,42 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type Meta, type StoryObj } from '@storybook/react';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
8
7
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
9
8
 
10
- import { EdgeAiServiceClient } from '@dxos/ai';
11
- import { AI_SERVICE_ENDPOINT } from '@dxos/ai/testing';
12
- import { Events, IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
13
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { AppActivationEvents } from '@dxos/app-toolkit/events';
14
11
  import {
15
- extractionAnthropicFn,
16
12
  type ExtractionFunction,
17
- extractionNerFn,
18
- processTranscriptMessage,
13
+ extractionAnthropicFunction,
14
+ extractionNerFunction,
19
15
  getNer,
20
- } from '@dxos/assistant';
21
- import { Filter, Obj, type Type } from '@dxos/echo';
16
+ processTranscriptMessage,
17
+ } from '@dxos/assistant/extraction';
18
+ import { Filter, type Obj } from '@dxos/echo';
22
19
  import { MemoryQueue } from '@dxos/echo-db';
23
- import { createQueueDXN } from '@dxos/echo-schema';
24
- import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
20
+ import { createQueueDXN } from '@dxos/echo/internal';
25
21
  import { invariant } from '@dxos/invariant';
26
22
  import { log } from '@dxos/log';
27
23
  import { ClientPlugin } from '@dxos/plugin-client';
24
+ import { initializeIdentity } from '@dxos/plugin-client/testing';
28
25
  import { PreviewPlugin } from '@dxos/plugin-preview';
29
- import { SpacePlugin } from '@dxos/plugin-space';
30
- import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
31
- import { ThemePlugin } from '@dxos/plugin-theme';
32
- import { IndexKind, useSpace } from '@dxos/react-client/echo';
33
- import { defaultTx } from '@dxos/react-ui-theme';
34
- import { DataType } from '@dxos/schema';
35
- import { seedTestData, Testing } from '@dxos/schema/testing';
36
- import { withLayout, withTheme } from '@dxos/storybook-utils';
26
+ import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
27
+ import { IndexKind, useSpaces } from '@dxos/react-client/echo';
28
+ import { withLayout } from '@dxos/react-ui/testing';
29
+ import { TestSchema } from '@dxos/schema/testing';
30
+ import { Message, Organization, Person } from '@dxos/types';
31
+ import { seedTestData } from '@dxos/types/testing';
37
32
 
33
+ import { useAudioTrack, useQueueModelAdapter, useTranscriber } from '#hooks';
34
+ import { TestItem } from '#testing';
35
+
36
+ import { type MediaStreamRecorderProps, type TranscriberProps } from '../transcriber';
37
+ import { TranscriptionPlugin } from '../TranscriptionPlugin';
38
+ import { renderByline } from '../util';
38
39
  import { TranscriptionStory } from './TranscriptionStory';
39
40
  import { useIsSpeaking } from './useIsSpeaking';
40
- import { TranscriptionPlugin } from '../../TranscriptionPlugin';
41
- import { useAudioTrack, useQueueModelAdapter, useTranscriber } from '../../hooks';
42
- import { TestItem } from '../../testing';
43
- import { type MediaStreamRecorderParams, type TranscriberParams } from '../../transcriber';
44
- import { renderMarkdown } from '../Transcript';
45
41
 
46
42
  const TRANSCRIBER_CONFIG = {
47
43
  transcribeAfterChunksAmount: 50,
@@ -52,10 +48,10 @@ const RECORDER_CONFIG = {
52
48
  interval: 200,
53
49
  };
54
50
 
55
- type StoryProps = {
51
+ type DefaultStoryProps = {
56
52
  detectSpeaking?: boolean;
57
- transcriberConfig: TranscriberParams['config'];
58
- recorderConfig: MediaStreamRecorderParams['config'];
53
+ transcriberConfig: TranscriberProps['config'];
54
+ recorderConfig: MediaStreamRecorderProps['config'];
59
55
  audioConstraints?: MediaTrackConstraints;
60
56
  entityExtraction: 'none' | 'ner' | 'llm';
61
57
  };
@@ -66,7 +62,7 @@ const DefaultStory = ({
66
62
  transcriberConfig,
67
63
  recorderConfig,
68
64
  audioConstraints,
69
- }: StoryProps) => {
65
+ }: DefaultStoryProps) => {
70
66
  const [running, setRunning] = useState(false);
71
67
 
72
68
  // Audio.
@@ -78,9 +74,9 @@ const DefaultStory = ({
78
74
  // Queue.
79
75
  // TODO(dmaretskyi): Use space.queues.create() instead.
80
76
  const queueDxn = useMemo(() => createQueueDXN(), []);
81
- const queue = useMemo(() => new MemoryQueue<DataType.Message>(queueDxn), [queueDxn]);
82
- const model = useQueueModelAdapter(renderMarkdown([]), queue);
83
- const space = useSpace();
77
+ const queue = useMemo(() => new MemoryQueue<Message.Message>(queueDxn), [queueDxn]);
78
+ const model = useQueueModelAdapter(renderByline([]), queue);
79
+ const [space] = useSpaces();
84
80
 
85
81
  useEffect(() => {
86
82
  if (!space) {
@@ -89,49 +85,39 @@ const DefaultStory = ({
89
85
  }, [space]);
90
86
 
91
87
  // Entity extraction.
92
- const { extractionFunction, executor, objects } = useMemo(() => {
88
+ const { extractionFunction, objects } = useMemo(() => {
93
89
  if (!space) {
94
90
  log.warn('no space');
95
91
  return {};
96
92
  }
97
93
 
98
- let executor: FunctionExecutor | undefined;
99
94
  let extractionFunction: ExtractionFunction | undefined;
100
- let objects: Promise<Type.Expando[]> | undefined;
95
+ let objects: Promise<Obj.Unknown[]> | undefined;
101
96
 
102
97
  if (entityExtraction === 'ner') {
103
98
  // Init model loading. Takes time.
104
99
  void getNer();
105
- extractionFunction = extractionNerFn;
100
+ extractionFunction = extractionNerFunction;
106
101
  } else if (entityExtraction === 'llm') {
107
- extractionFunction = extractionAnthropicFn;
102
+ extractionFunction = extractionAnthropicFunction;
108
103
  objects = space.db
109
104
  .query(
110
105
  Filter.or(
111
- Filter.type(DataType.Person),
112
- Filter.type(DataType.Organization),
113
- Filter.type(Testing.DocumentType),
106
+ Filter.type(Person.Person),
107
+ Filter.type(Organization.Organization),
108
+ Filter.type(TestSchema.DocumentType),
114
109
  ),
115
110
  )
116
- .run()
117
- .then((result) => result.objects);
118
- }
119
- if (entityExtraction !== 'none') {
120
- const AiService = new EdgeAiServiceClient({
121
- endpoint: AI_SERVICE_ENDPOINT.REMOTE,
122
- });
123
- executor = new FunctionExecutor(
124
- new ServiceContainer().setServices({ ai: { client: AiService }, database: { db: space!.db } }),
125
- );
111
+ .run();
126
112
  }
127
113
 
128
- return { extractionFunction, executor, objects };
114
+ return { extractionFunction, objects };
129
115
  }, [entityExtraction, space]);
130
116
 
131
117
  // Transcriber.
132
- const handleSegments = useCallback<TranscriberParams['onSegments']>(
118
+ const handleSegments = useCallback<TranscriberProps['onSegments']>(
133
119
  async (blocks) => {
134
- const message = Obj.make(DataType.Message, {
120
+ const message = Message.make({
135
121
  sender: { name: 'You' },
136
122
  created: new Date().toISOString(),
137
123
  blocks,
@@ -143,9 +129,7 @@ const DefaultStory = ({
143
129
 
144
130
  if (entityExtraction !== 'none') {
145
131
  invariant(extractionFunction, 'extractionFunction is required');
146
- invariant(executor, 'executor is required');
147
132
  const result = await processTranscriptMessage({
148
- executor,
149
133
  function: extractionFunction,
150
134
  input: {
151
135
  message,
@@ -190,52 +174,50 @@ const DefaultStory = ({
190
174
  return <TranscriptionStory model={model} running={running} onRunningChange={setRunning} />;
191
175
  };
192
176
 
193
- const meta: Meta<typeof DefaultStory> = {
194
- title: 'plugins/plugin-transcription/MicrophoneTranscription',
177
+ const meta = {
178
+ title: 'plugins/plugin-transcription/components/MicrophoneTranscription',
195
179
  render: DefaultStory,
196
180
  decorators: [
181
+ withLayout({ layout: 'column' }),
197
182
  withPluginManager({
198
183
  plugins: [
199
- ThemePlugin({ tx: defaultTx }),
200
- StorybookLayoutPlugin(),
184
+ ...corePlugins(),
185
+ StorybookPlugin({}),
201
186
  ClientPlugin({
202
- types: [TestItem, DataType.Person, DataType.Organization, Testing.DocumentType],
203
- onClientInitialized: async (_, client) => {
204
- await client.halo.createIdentity();
205
- await client.spaces.waitUntilReady();
206
- await client.spaces.default.waitUntilReady();
207
- // TODO(mykola): Make API easier to use.
208
- // TODO(mykola): Delete after enabling vector indexing by default.
209
- // Enable vector indexing.
210
- await client.services.services.QueryService!.setConfig({
211
- enabled: true,
212
- indexes: [
213
- //
214
- { kind: IndexKind.Kind.SCHEMA_MATCH },
215
- { kind: IndexKind.Kind.GRAPH },
216
- { kind: IndexKind.Kind.VECTOR },
217
- ],
218
- });
219
- await client.services.services.QueryService!.reindex();
220
- await seedTestData(client.spaces.default);
221
- },
187
+ types: [TestItem, Person.Person, Organization.Organization, TestSchema.DocumentType],
188
+ onClientInitialized: ({ client }) =>
189
+ Effect.gen(function* () {
190
+ const { personalSpace } = yield* initializeIdentity(client);
191
+ // TODO(mykola): Make API easier to use.
192
+ // TODO(mykola): Delete after enabling vector indexing by default.
193
+ // Enable vector indexing.
194
+ yield* Effect.promise(() =>
195
+ client.services.services.QueryService!.setConfig({
196
+ enabled: true,
197
+ indexes: [
198
+ //
199
+ { kind: IndexKind.Kind.SCHEMA_MATCH },
200
+ { kind: IndexKind.Kind.GRAPH },
201
+ { kind: IndexKind.Kind.VECTOR },
202
+ ],
203
+ }),
204
+ );
205
+ yield* Effect.promise(() => client.services.services.QueryService!.reindex());
206
+ yield* Effect.promise(() => seedTestData(personalSpace));
207
+ }),
222
208
  }),
223
- SpacePlugin(),
224
- SettingsPlugin(),
209
+
225
210
  PreviewPlugin(),
226
- IntentPlugin(),
227
211
  TranscriptionPlugin(),
228
212
  ],
229
- fireEvents: [Events.SetupAppGraph],
213
+ fireEvents: [AppActivationEvents.SetupAppGraph],
230
214
  }),
231
- withTheme,
232
- withLayout({ fullscreen: true, classNames: 'justify-center' }),
233
215
  ],
234
- };
216
+ } satisfies Meta<typeof DefaultStory>;
235
217
 
236
218
  export default meta;
237
219
 
238
- type Story = StoryObj<typeof DefaultStory>;
220
+ type Story = StoryObj<typeof meta>;
239
221
 
240
222
  export const Default: Story = {
241
223
  args: {
@@ -251,19 +233,21 @@ export const Default: Story = {
251
233
  },
252
234
  };
253
235
 
254
- export const EntityExtraction: Story = {
255
- args: {
256
- detectSpeaking: true,
257
- entityExtraction: 'ner',
258
- transcriberConfig: TRANSCRIBER_CONFIG,
259
- recorderConfig: RECORDER_CONFIG,
260
- audioConstraints: {
261
- echoCancellation: true,
262
- noiseSuppression: true,
263
- autoGainControl: true,
264
- },
265
- },
266
- };
236
+ // NOTE: We are running out of free quota on hugging face entity extraction.
237
+ // TODO(mykola): Fix hugging face quota issues.
238
+ // export const EntityExtraction: Story = {
239
+ // args: {
240
+ // detectSpeaking: true,
241
+ // entityExtraction: 'ner',
242
+ // transcriberConfig: TRANSCRIBER_CONFIG,
243
+ // recorderConfig: RECORDER_CONFIG,
244
+ // audioConstraints: {
245
+ // echoCancellation: true,
246
+ // noiseSuppression: true,
247
+ // autoGainControl: true,
248
+ // },
249
+ // },
250
+ // };
267
251
 
268
252
  export const SpeechDetection: Story = {
269
253
  args: {
@@ -0,0 +1,93 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import React, {
8
+ type ChangeEvent,
9
+ type Dispatch,
10
+ type FC,
11
+ type ReactNode,
12
+ type RefObject,
13
+ type SetStateAction,
14
+ useRef,
15
+ } from 'react';
16
+
17
+ import { IconButton, ScrollContainer, Toolbar } from '@dxos/react-ui';
18
+ import { type Message } from '@dxos/types';
19
+
20
+ import { Transcription } from '../components';
21
+ import { type SerializationModel } from '../model';
22
+
23
+ /**
24
+ * Story wrapper that renders a transcript with playback controls, an optional audio file
25
+ * upload affordance, and a toolbar slot for additional controls.
26
+ *
27
+ * @param onUpload - Callback fired when the user picks a local audio file via the upload button.
28
+ * @param uploadAccept - HTML `accept` filter for the hidden file input. Defaults to `audio/*`.
29
+ * @param toolbarSlot - Extra content rendered after the upload button inside the toolbar.
30
+ */
31
+ export const TranscriptionStory: FC<{
32
+ model: SerializationModel<Message.Message>;
33
+ disabled?: boolean;
34
+ running: boolean;
35
+ onRunningChange: Dispatch<SetStateAction<boolean>>;
36
+ audioRef?: RefObject<HTMLAudioElement | null>;
37
+ onUpload?: (file: File) => void;
38
+ uploadAccept?: string;
39
+ toolbarSlot?: ReactNode;
40
+ }> = ({ model, running, onRunningChange, audioRef, disabled, onUpload, uploadAccept = 'audio/*', toolbarSlot }) => {
41
+ const fileInputRef = useRef<HTMLInputElement>(null);
42
+
43
+ const handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {
44
+ const file = event.target.files?.[0];
45
+ if (file && onUpload) {
46
+ onUpload(file);
47
+ }
48
+ // Reset so the same file can be re-selected.
49
+ event.target.value = '';
50
+ };
51
+
52
+ return (
53
+ <>
54
+ {audioRef && <audio ref={audioRef} autoPlay />}
55
+ <Toolbar.Root>
56
+ <IconButton
57
+ iconOnly
58
+ disabled={disabled}
59
+ icon={running ? 'ph--pause--regular' : 'ph--play--regular'}
60
+ label={running ? 'Pause' : 'Play'}
61
+ onClick={() => onRunningChange((running) => !running)}
62
+ />
63
+ {onUpload && (
64
+ <>
65
+ <input
66
+ ref={fileInputRef}
67
+ type='file'
68
+ accept={uploadAccept}
69
+ disabled={disabled}
70
+ className='hidden'
71
+ onChange={handleFileChange}
72
+ />
73
+ <IconButton
74
+ iconOnly
75
+ disabled={disabled}
76
+ icon='ph--upload--regular'
77
+ label='Upload audio'
78
+ onClick={() => fileInputRef.current?.click()}
79
+ />
80
+ </>
81
+ )}
82
+ {toolbarSlot}
83
+ </Toolbar.Root>
84
+ <ScrollContainer.Root pin>
85
+ <ScrollContainer.Content>
86
+ <ScrollContainer.Viewport>
87
+ <Transcription model={model} />
88
+ </ScrollContainer.Viewport>
89
+ </ScrollContainer.Content>
90
+ </ScrollContainer.Root>
91
+ </>
92
+ );
93
+ };