@dxos/plugin-transcription 0.9.0 → 0.9.1-staging.ee54ba693a

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 (324) hide show
  1. package/PLUGIN.mdl +25 -5
  2. package/dist/lib/neutral/{TranscriptionArticle-L6XANBH5.mjs → TranscriptionArticle-FEWCWG4A.mjs} +4 -7
  3. package/dist/lib/neutral/TranscriptionArticle-FEWCWG4A.mjs.map +7 -0
  4. package/dist/lib/neutral/TranscriptionPlugin.mjs +29 -6
  5. package/dist/lib/neutral/TranscriptionPlugin.mjs.map +4 -4
  6. package/dist/lib/neutral/TranscriptionPlugin.node.mjs +3 -3
  7. package/dist/lib/neutral/TranscriptionPlugin.node.mjs.map +3 -3
  8. package/dist/lib/neutral/app-graph-builder-GQRMI22E.mjs +48 -0
  9. package/dist/lib/neutral/app-graph-builder-GQRMI22E.mjs.map +7 -0
  10. package/dist/lib/neutral/capabilities/index.mjs +19 -5
  11. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  12. package/dist/lib/neutral/chunk-5BVHY75B.mjs +54 -0
  13. package/dist/lib/neutral/chunk-5BVHY75B.mjs.map +7 -0
  14. package/dist/lib/neutral/chunk-HNXSU7HJ.mjs +8 -0
  15. package/dist/lib/neutral/{chunk-KXJZEYS7.mjs.map → chunk-HNXSU7HJ.mjs.map} +2 -2
  16. package/dist/lib/neutral/chunk-KOXLGGSL.mjs +30 -0
  17. package/dist/lib/neutral/chunk-KOXLGGSL.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-MDV7NBFJ.mjs +182 -0
  19. package/dist/lib/neutral/chunk-MDV7NBFJ.mjs.map +7 -0
  20. package/dist/lib/neutral/components/index.mjs +114 -258
  21. package/dist/lib/neutral/components/index.mjs.map +4 -4
  22. package/dist/lib/neutral/containers/index.mjs +1 -1
  23. package/dist/lib/neutral/{create-RVR7VC33.mjs → create-HNHGCKZ4.mjs} +2 -2
  24. package/dist/lib/neutral/enrich-message-DSJU4TXC.mjs +24 -0
  25. package/dist/lib/neutral/enrich-message-DSJU4TXC.mjs.map +7 -0
  26. package/dist/lib/neutral/entity-lookup-PCDW7NC4.mjs +25 -0
  27. package/dist/lib/neutral/entity-lookup-PCDW7NC4.mjs.map +7 -0
  28. package/dist/lib/neutral/hooks/index.mjs +93 -15
  29. package/dist/lib/neutral/hooks/index.mjs.map +4 -4
  30. package/dist/lib/neutral/index.mjs +8 -32
  31. package/dist/lib/neutral/markdown-extension-CCDXXY7E.mjs +16 -0
  32. package/dist/lib/neutral/markdown-extension-CCDXXY7E.mjs.map +7 -0
  33. package/dist/lib/neutral/meta.json +1 -1
  34. package/dist/lib/neutral/meta.mjs +1 -1
  35. package/dist/lib/neutral/{open-A5KXKRH4.mjs → open-SNMZXXYO.mjs} +4 -6
  36. package/dist/lib/neutral/open-SNMZXXYO.mjs.map +7 -0
  37. package/dist/lib/neutral/operations/index.mjs +1 -1
  38. package/dist/lib/neutral/pipeline-status-XMWMAUJY.mjs +17 -0
  39. package/dist/lib/neutral/pipeline-status-XMWMAUJY.mjs.map +7 -0
  40. package/dist/lib/neutral/plugin.mjs +2 -2
  41. package/dist/lib/neutral/recording-session-IADO7ATU.mjs +15 -0
  42. package/dist/lib/neutral/recording-session-IADO7ATU.mjs.map +7 -0
  43. package/dist/lib/neutral/settings-7KE4MABW.mjs +31 -0
  44. package/dist/lib/neutral/settings-7KE4MABW.mjs.map +7 -0
  45. package/dist/lib/neutral/skill-definition-DXNK324V.mjs +15 -0
  46. package/dist/lib/neutral/skill-definition-DXNK324V.mjs.map +7 -0
  47. package/dist/lib/neutral/skills/index.mjs +8 -0
  48. package/dist/lib/neutral/{summarize-5XPPMVTE.mjs → summarize-LBUZTOTH.mjs} +4 -4
  49. package/dist/lib/neutral/summarize-LBUZTOTH.mjs.map +7 -0
  50. package/dist/lib/neutral/{text-content-KBB37HSM.mjs → text-content-NOWR642C.mjs} +9 -9
  51. package/dist/lib/neutral/text-content-NOWR642C.mjs.map +7 -0
  52. package/dist/lib/neutral/transcriber-6XZHUUHK.mjs +174 -0
  53. package/dist/lib/neutral/transcriber-6XZHUUHK.mjs.map +7 -0
  54. package/dist/lib/neutral/transcription-driver-DN6ELQXZ.mjs +207 -0
  55. package/dist/lib/neutral/transcription-driver-DN6ELQXZ.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +8 -1
  57. package/dist/lib/neutral/translations.mjs.map +3 -3
  58. package/dist/lib/neutral/types/index.mjs +3 -1
  59. package/dist/types/dx.config.d.ts +28 -0
  60. package/dist/types/dx.config.d.ts.map +1 -0
  61. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/app-graph-builder.d.ts +5 -0
  63. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  64. package/dist/types/src/capabilities/entity-lookup.d.ts +10 -0
  65. package/dist/types/src/capabilities/entity-lookup.d.ts.map +1 -0
  66. package/dist/types/src/capabilities/index.d.ts +11 -8
  67. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/markdown-extension.d.ts +5 -0
  69. package/dist/types/src/capabilities/markdown-extension.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/pipeline-status.d.ts +9 -0
  71. package/dist/types/src/capabilities/pipeline-status.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  73. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/recording-session.d.ts +5 -0
  75. package/dist/types/src/capabilities/recording-session.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/settings.d.ts +5 -0
  77. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  79. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/text-content.d.ts +1 -4
  81. package/dist/types/src/capabilities/transcriber.d.ts +4 -3
  82. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/transcription-driver.d.ts +5 -0
  84. package/dist/types/src/capabilities/transcription-driver.d.ts.map +1 -0
  85. package/dist/types/src/components/Mic/Mic.d.ts +12 -0
  86. package/dist/types/src/components/Mic/Mic.d.ts.map +1 -0
  87. package/dist/types/src/components/{Oracle/Oracle.stories.d.ts → Mic/Mic.stories.d.ts} +9 -7
  88. package/dist/types/src/components/Mic/Mic.stories.d.ts.map +1 -0
  89. package/dist/types/src/components/Mic/index.d.ts +2 -0
  90. package/dist/types/src/components/Mic/index.d.ts.map +1 -0
  91. package/dist/types/src/components/index.d.ts +1 -2
  92. package/dist/types/src/components/index.d.ts.map +1 -1
  93. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts.map +1 -1
  94. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts +7 -0
  95. package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts.map +1 -1
  96. package/dist/types/src/hooks/index.d.ts +0 -5
  97. package/dist/types/src/hooks/index.d.ts.map +1 -1
  98. package/dist/types/src/hooks/useTranscriptionRecording.d.ts.map +1 -1
  99. package/dist/types/src/index.d.ts +1 -3
  100. package/dist/types/src/index.d.ts.map +1 -1
  101. package/dist/types/src/meta.d.ts +32 -2
  102. package/dist/types/src/meta.d.ts.map +1 -1
  103. package/dist/types/src/normalization/message-normalizer.d.ts +2 -2
  104. package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -1
  105. package/dist/types/src/normalization/normalization.d.ts +98 -733
  106. package/dist/types/src/normalization/normalization.d.ts.map +1 -1
  107. package/dist/types/src/operations/enrich-message.d.ts +9 -0
  108. package/dist/types/src/operations/enrich-message.d.ts.map +1 -0
  109. package/dist/types/src/operations/index.d.ts.map +1 -1
  110. package/dist/types/src/operations/open.d.ts.map +1 -1
  111. package/dist/types/src/operations/summarize.d.ts.map +1 -1
  112. package/dist/types/src/skills/index.d.ts +2 -0
  113. package/dist/types/src/skills/index.d.ts.map +1 -0
  114. package/dist/types/src/skills/transcription-skill.d.ts +4 -0
  115. package/dist/types/src/skills/transcription-skill.d.ts.map +1 -0
  116. package/dist/types/src/stories/Keyword.stories.d.ts +51 -0
  117. package/dist/types/src/stories/Keyword.stories.d.ts.map +1 -0
  118. package/dist/types/src/stories/Pipeline.stories.d.ts +60 -0
  119. package/dist/types/src/stories/Pipeline.stories.d.ts.map +1 -0
  120. package/dist/types/src/stories/Transcription.stories.d.ts +23 -0
  121. package/dist/types/src/stories/Transcription.stories.d.ts.map +1 -0
  122. package/dist/types/src/testing/decorators.d.ts +21 -0
  123. package/dist/types/src/testing/decorators.d.ts.map +1 -0
  124. package/dist/types/src/testing/index.d.ts +1 -0
  125. package/dist/types/src/testing/index.d.ts.map +1 -1
  126. package/dist/types/src/testing/testing.d.ts +3 -13
  127. package/dist/types/src/testing/testing.d.ts.map +1 -1
  128. package/dist/types/src/{transcriber/transcription-manager.d.ts → transcription-manager.d.ts} +6 -5
  129. package/dist/types/src/transcription-manager.d.ts.map +1 -0
  130. package/dist/types/src/translations.d.ts +7 -0
  131. package/dist/types/src/translations.d.ts.map +1 -1
  132. package/dist/types/src/types/Settings.d.ts +13 -0
  133. package/dist/types/src/types/Settings.d.ts.map +1 -0
  134. package/dist/types/src/types/TranscriptOperation.d.ts +114 -1564
  135. package/dist/types/src/types/TranscriptOperation.d.ts.map +1 -1
  136. package/dist/types/src/types/TranscriptionCapabilities.d.ts +52 -11
  137. package/dist/types/src/types/TranscriptionCapabilities.d.ts.map +1 -1
  138. package/dist/types/src/types/index.d.ts +1 -0
  139. package/dist/types/src/types/index.d.ts.map +1 -1
  140. package/dist/types/src/util/index.d.ts +0 -3
  141. package/dist/types/src/util/index.d.ts.map +1 -1
  142. package/dist/types/tsconfig.tsbuildinfo +1 -1
  143. package/dx.config.ts +42 -0
  144. package/package.json +69 -69
  145. package/src/TranscriptionPlugin.node.ts +2 -2
  146. package/src/TranscriptionPlugin.test.ts +2 -2
  147. package/src/TranscriptionPlugin.tsx +40 -3
  148. package/src/capabilities/app-graph-builder.tsx +49 -0
  149. package/src/capabilities/entity-lookup.ts +32 -0
  150. package/src/capabilities/index.ts +8 -7
  151. package/src/capabilities/markdown-extension.ts +17 -0
  152. package/src/capabilities/pipeline-status.ts +23 -0
  153. package/src/capabilities/recording-session.ts +17 -0
  154. package/src/capabilities/settings.ts +34 -0
  155. package/src/capabilities/skill-definition.ts +15 -0
  156. package/src/capabilities/text-content.ts +10 -7
  157. package/src/capabilities/transcriber.ts +5 -48
  158. package/src/capabilities/transcription-driver.tsx +263 -0
  159. package/src/components/Mic/Mic.stories.tsx +66 -0
  160. package/src/components/Mic/Mic.tsx +136 -0
  161. package/src/components/Mic/index.ts +5 -0
  162. package/src/components/index.ts +1 -2
  163. package/src/containers/TranscriptionArticle/TranscriptionArticle.stories.tsx +4 -0
  164. package/src/containers/TranscriptionArticle/TranscriptionArticle.tsx +5 -6
  165. package/src/hooks/index.ts +0 -5
  166. package/src/hooks/useTranscriptionRecording.ts +27 -9
  167. package/src/index.ts +1 -5
  168. package/src/meta.ts +2 -35
  169. package/src/normalization/message-normalizer.ts +3 -3
  170. package/src/normalization/normalization.ts +3 -0
  171. package/src/operations/enrich-message.ts +27 -0
  172. package/src/operations/index.ts +1 -0
  173. package/src/operations/open.ts +2 -2
  174. package/src/operations/summarize.ts +2 -2
  175. package/src/skills/index.ts +5 -0
  176. package/src/skills/transcription-skill.ts +29 -0
  177. package/src/stories/Keyword.stories.tsx +98 -0
  178. package/src/stories/Pipeline.stories.tsx +361 -0
  179. package/src/stories/Transcription.stories.tsx +178 -0
  180. package/src/testing/decorators.ts +78 -0
  181. package/src/testing/index.ts +1 -0
  182. package/src/testing/testing.ts +14 -134
  183. package/src/{transcriber/transcription-manager.ts → transcription-manager.ts} +13 -12
  184. package/src/translations.ts +9 -1
  185. package/src/types/Settings.ts +59 -0
  186. package/src/types/TranscriptOperation.ts +22 -4
  187. package/src/types/TranscriptionCapabilities.ts +61 -20
  188. package/src/types/index.ts +1 -0
  189. package/src/util/index.ts +0 -3
  190. package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs.map +0 -7
  191. package/dist/lib/neutral/blueprint-definition-DA4QFRYJ.mjs +0 -15
  192. package/dist/lib/neutral/blueprint-definition-DA4QFRYJ.mjs.map +0 -7
  193. package/dist/lib/neutral/blueprints/index.mjs +0 -8
  194. package/dist/lib/neutral/chunk-FHNI26QW.mjs +0 -45
  195. package/dist/lib/neutral/chunk-FHNI26QW.mjs.map +0 -7
  196. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs +0 -35
  197. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs.map +0 -7
  198. package/dist/lib/neutral/chunk-KMT3BMMQ.mjs +0 -124
  199. package/dist/lib/neutral/chunk-KMT3BMMQ.mjs.map +0 -7
  200. package/dist/lib/neutral/chunk-KXJZEYS7.mjs +0 -8
  201. package/dist/lib/neutral/chunk-MLRJWAQH.mjs +0 -179
  202. package/dist/lib/neutral/chunk-MLRJWAQH.mjs.map +0 -7
  203. package/dist/lib/neutral/chunk-TO77KAQK.mjs +0 -298
  204. package/dist/lib/neutral/chunk-TO77KAQK.mjs.map +0 -7
  205. package/dist/lib/neutral/chunk-TX3NQISZ.mjs +0 -435
  206. package/dist/lib/neutral/chunk-TX3NQISZ.mjs.map +0 -7
  207. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs +0 -30
  208. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs.map +0 -7
  209. package/dist/lib/neutral/open-A5KXKRH4.mjs.map +0 -7
  210. package/dist/lib/neutral/summarize-5XPPMVTE.mjs.map +0 -7
  211. package/dist/lib/neutral/text-content-KBB37HSM.mjs.map +0 -7
  212. package/dist/lib/neutral/transcriber-OGSF3XO5.mjs +0 -59
  213. package/dist/lib/neutral/transcriber-OGSF3XO5.mjs.map +0 -7
  214. package/dist/types/src/blueprints/index.d.ts +0 -2
  215. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  216. package/dist/types/src/blueprints/transcription-blueprint.d.ts +0 -4
  217. package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +0 -1
  218. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  219. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  220. package/dist/types/src/components/Oracle/Oracle.d.ts +0 -24
  221. package/dist/types/src/components/Oracle/Oracle.d.ts.map +0 -1
  222. package/dist/types/src/components/Oracle/Oracle.stories.d.ts.map +0 -1
  223. package/dist/types/src/components/Oracle/index.d.ts +0 -2
  224. package/dist/types/src/components/Oracle/index.d.ts.map +0 -1
  225. package/dist/types/src/components/Transcription/Transcription.d.ts +0 -11
  226. package/dist/types/src/components/Transcription/Transcription.d.ts.map +0 -1
  227. package/dist/types/src/components/Transcription/Transcription.stories.d.ts +0 -37
  228. package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +0 -1
  229. package/dist/types/src/components/Transcription/index.d.ts +0 -2
  230. package/dist/types/src/components/Transcription/index.d.ts.map +0 -1
  231. package/dist/types/src/components/Transcription/transcription-extension.d.ts +0 -15
  232. package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +0 -1
  233. package/dist/types/src/enrichment/conversation.test.d.ts +0 -2
  234. package/dist/types/src/enrichment/conversation.test.d.ts.map +0 -1
  235. package/dist/types/src/enrichment/operations.d.ts +0 -200
  236. package/dist/types/src/enrichment/operations.d.ts.map +0 -1
  237. package/dist/types/src/enrichment/parser.d.ts +0 -26
  238. package/dist/types/src/enrichment/parser.d.ts.map +0 -1
  239. package/dist/types/src/enrichment/stream-simulator.d.ts +0 -38
  240. package/dist/types/src/enrichment/stream-simulator.d.ts.map +0 -1
  241. package/dist/types/src/hooks/useAudioFile.d.ts +0 -7
  242. package/dist/types/src/hooks/useAudioFile.d.ts.map +0 -1
  243. package/dist/types/src/hooks/useAudioTrack.d.ts +0 -5
  244. package/dist/types/src/hooks/useAudioTrack.d.ts.map +0 -1
  245. package/dist/types/src/hooks/useFeedModelAdapter.d.ts +0 -12
  246. package/dist/types/src/hooks/useFeedModelAdapter.d.ts.map +0 -1
  247. package/dist/types/src/hooks/useTranscriber.d.ts +0 -7
  248. package/dist/types/src/hooks/useTranscriber.d.ts.map +0 -1
  249. package/dist/types/src/hooks/useVoiceInput.d.ts +0 -11
  250. package/dist/types/src/hooks/useVoiceInput.d.ts.map +0 -1
  251. package/dist/types/src/model/index.d.ts +0 -2
  252. package/dist/types/src/model/index.d.ts.map +0 -1
  253. package/dist/types/src/model/model.d.ts +0 -68
  254. package/dist/types/src/model/model.d.ts.map +0 -1
  255. package/dist/types/src/model/model.test.d.ts +0 -2
  256. package/dist/types/src/model/model.test.d.ts.map +0 -1
  257. package/dist/types/src/stories/FileTranscription.stories.d.ts +0 -20
  258. package/dist/types/src/stories/FileTranscription.stories.d.ts.map +0 -1
  259. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts +0 -14
  260. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +0 -1
  261. package/dist/types/src/stories/LiveTranscription.stories.d.ts +0 -20
  262. package/dist/types/src/stories/LiveTranscription.stories.d.ts.map +0 -1
  263. package/dist/types/src/stories/TranscriptionStory.d.ts +0 -21
  264. package/dist/types/src/stories/TranscriptionStory.d.ts.map +0 -1
  265. package/dist/types/src/stories/common.d.ts +0 -248
  266. package/dist/types/src/stories/common.d.ts.map +0 -1
  267. package/dist/types/src/transcriber/audio-recorder.d.ts +0 -47
  268. package/dist/types/src/transcriber/audio-recorder.d.ts.map +0 -1
  269. package/dist/types/src/transcriber/index.d.ts +0 -5
  270. package/dist/types/src/transcriber/index.d.ts.map +0 -1
  271. package/dist/types/src/transcriber/media-stream-recorder.d.ts +0 -30
  272. package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +0 -1
  273. package/dist/types/src/transcriber/transcriber.browser.test.d.ts +0 -2
  274. package/dist/types/src/transcriber/transcriber.browser.test.d.ts.map +0 -1
  275. package/dist/types/src/transcriber/transcriber.d.ts +0 -105
  276. package/dist/types/src/transcriber/transcriber.d.ts.map +0 -1
  277. package/dist/types/src/transcriber/transcriber.test.d.ts +0 -2
  278. package/dist/types/src/transcriber/transcriber.test.d.ts.map +0 -1
  279. package/dist/types/src/transcriber/transcription-manager.d.ts.map +0 -1
  280. package/dist/types/src/util/array.d.ts +0 -2
  281. package/dist/types/src/util/array.d.ts.map +0 -1
  282. package/dist/types/src/util/monitor-audio-level.d.ts +0 -6
  283. package/dist/types/src/util/monitor-audio-level.d.ts.map +0 -1
  284. package/dist/types/src/util/render-byline.d.ts +0 -4
  285. package/dist/types/src/util/render-byline.d.ts.map +0 -1
  286. package/src/blueprints/index.ts +0 -5
  287. package/src/blueprints/transcription-blueprint.ts +0 -29
  288. package/src/capabilities/blueprint-definition.ts +0 -19
  289. package/src/components/Oracle/Oracle.stories.tsx +0 -147
  290. package/src/components/Oracle/Oracle.tsx +0 -142
  291. package/src/components/Oracle/index.ts +0 -5
  292. package/src/components/Transcription/Transcription.stories.tsx +0 -213
  293. package/src/components/Transcription/Transcription.tsx +0 -55
  294. package/src/components/Transcription/index.ts +0 -5
  295. package/src/components/Transcription/transcription-extension.ts +0 -203
  296. package/src/enrichment/conversation.test.ts +0 -162
  297. package/src/enrichment/conversation.txt +0 -23
  298. package/src/enrichment/operations.ts +0 -271
  299. package/src/enrichment/parser.ts +0 -101
  300. package/src/enrichment/stream-simulator.ts +0 -125
  301. package/src/hooks/useAudioFile.ts +0 -88
  302. package/src/hooks/useAudioTrack.ts +0 -35
  303. package/src/hooks/useFeedModelAdapter.ts +0 -46
  304. package/src/hooks/useTranscriber.ts +0 -47
  305. package/src/hooks/useVoiceInput.ts +0 -66
  306. package/src/model/index.ts +0 -5
  307. package/src/model/model.test.ts +0 -175
  308. package/src/model/model.ts +0 -229
  309. package/src/stories/FileTranscription.stories.tsx +0 -143
  310. package/src/stories/KeyWordRecognition.stories.tsx +0 -132
  311. package/src/stories/LiveTranscription.stories.tsx +0 -153
  312. package/src/stories/TranscriptionStory.tsx +0 -101
  313. package/src/stories/common.ts +0 -233
  314. package/src/transcriber/audio-recorder.ts +0 -56
  315. package/src/transcriber/index.ts +0 -8
  316. package/src/transcriber/media-stream-recorder.ts +0 -120
  317. package/src/transcriber/transcriber.browser.test.ts +0 -230
  318. package/src/transcriber/transcriber.test.ts +0 -104
  319. package/src/transcriber/transcriber.ts +0 -303
  320. package/src/util/array.ts +0 -14
  321. package/src/util/monitor-audio-level.ts +0 -58
  322. package/src/util/render-byline.ts +0 -33
  323. /package/dist/lib/neutral/{create-RVR7VC33.mjs.map → create-HNHGCKZ4.mjs.map} +0 -0
  324. /package/dist/lib/neutral/{blueprints → skills}/index.mjs.map +0 -0
package/dx.config.ts ADDED
@@ -0,0 +1,42 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Config2 } from '@dxos/app-framework/config';
6
+ import { trim } from '@dxos/util';
7
+
8
+ export default Config2.make({
9
+ plugin: {
10
+ key: 'org.dxos.plugin.transcription',
11
+ name: 'Transcription',
12
+ author: 'DXOS',
13
+ description: trim`
14
+ Real-time voice-to-text transcription for DXOS Composer.
15
+ Captures microphone audio in short PCM chunks, batches them into WAV payloads, and streams
16
+ the results to a Whisper-compatible speech-recognition endpoint.
17
+ Transcribed segments are timestamped, deduplicated across chunk boundaries, and persisted
18
+ as Message objects in an ECHO Feed so that every participant in a shared space sees the
19
+ live transcript without any manual sync step.
20
+
21
+ Each recording session is represented as a Transcript object linked to its Feed.
22
+ The read-only editor renders messages with speaker bylines and wall-clock timestamps,
23
+ supporting markdown decoration and document preview.
24
+ An optional message enricher pipeline lets plugins annotate messages before they are
25
+ committed — for example, to attach speaker identity from a calls service.
26
+
27
+ The plugin ships two skill-compatible operations: Open (loads and formats a transcript
28
+ for reading by an AI assistant) and Summarize (sends the transcript text to an LLM and
29
+ returns a structured Markdown summary with key points, verbatim quotes, and actionable
30
+ tasks extracted from the conversation).
31
+
32
+ A sentence-normalization pass merges raw word-level tokens from the recognizer into
33
+ grammatically complete sentences, improving readability of the stored transcript without
34
+ altering the underlying audio timeline.
35
+ `,
36
+ source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-transcription',
37
+ icon: { key: 'ph--microphone--regular', hue: 'sky' },
38
+ spec: 'PLUGIN.mdl',
39
+ tags: ['labs'],
40
+ screenshots: [],
41
+ },
42
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-transcription",
3
- "version": "0.9.0",
3
+ "version": "0.9.1-staging.ee54ba693a",
4
4
  "description": "Voice transcription.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -12,10 +12,10 @@
12
12
  "author": "DXOS.org",
13
13
  "type": "module",
14
14
  "imports": {
15
- "#blueprints": {
16
- "source": "./src/blueprints/index.ts",
17
- "types": "./dist/types/src/blueprints/index.d.ts",
18
- "default": "./dist/lib/neutral/blueprints/index.mjs"
15
+ "#skills": {
16
+ "source": "./src/skills/index.ts",
17
+ "types": "./dist/types/src/skills/index.d.ts",
18
+ "default": "./dist/lib/neutral/skills/index.mjs"
19
19
  },
20
20
  "#capabilities": {
21
21
  "source": "./src/capabilities/index.ts",
@@ -77,21 +77,16 @@
77
77
  "default": "./dist/lib/neutral/index.mjs"
78
78
  },
79
79
  "./assets/PLUGIN.mdl": "./PLUGIN.mdl",
80
- "./blueprints": {
81
- "source": "./src/blueprints/index.ts",
82
- "types": "./dist/types/src/blueprints/index.d.ts",
83
- "default": "./dist/lib/neutral/blueprints/index.mjs"
80
+ "./skills": {
81
+ "source": "./src/skills/index.ts",
82
+ "types": "./dist/types/src/skills/index.d.ts",
83
+ "default": "./dist/lib/neutral/skills/index.mjs"
84
84
  },
85
85
  "./components": {
86
86
  "source": "./src/components/index.ts",
87
87
  "types": "./dist/types/src/components/index.d.ts",
88
88
  "default": "./dist/lib/neutral/components/index.mjs"
89
89
  },
90
- "./hooks": {
91
- "source": "./src/hooks/index.ts",
92
- "types": "./dist/types/src/hooks/index.d.ts",
93
- "default": "./dist/lib/neutral/hooks/index.mjs"
94
- },
95
90
  "./plugin": {
96
91
  "source": "./src/plugin.ts",
97
92
  "types": "./dist/types/src/plugin.d.ts",
@@ -111,76 +106,81 @@
111
106
  "types": "dist/types/src/index.d.ts",
112
107
  "files": [
113
108
  "dist",
109
+ "dx.config.ts",
114
110
  "src",
115
111
  "PLUGIN.mdl"
116
112
  ],
117
113
  "dependencies": {
118
114
  "@codemirror/state": "^6.6.0",
119
- "@codemirror/view": "^6.43.0",
115
+ "@effect-atom/atom-react": "^0.5.0",
120
116
  "@radix-ui/react-primitive": "2.0.2",
121
117
  "@radix-ui/react-slot": "1.1.2",
122
- "date-fns": "^3.6.0",
123
- "extendable-media-recorder": "^9.2.19",
124
- "extendable-media-recorder-wav-encoder": "^7.0.123",
125
- "wavefile": "^11.0.0",
126
- "@dxos/ai": "0.9.0",
127
- "@dxos/app-toolkit": "0.9.0",
128
- "@dxos/app-framework": "0.9.0",
129
- "@dxos/async": "0.9.0",
130
- "@dxos/assistant": "0.9.0",
131
- "@dxos/client": "0.9.0",
132
- "@dxos/compute": "0.9.0",
133
- "@dxos/effect": "0.9.0",
134
- "@dxos/echo": "0.9.0",
135
- "@dxos/functions-runtime": "0.9.0",
136
- "@dxos/invariant": "0.9.0",
137
- "@dxos/log": "0.9.0",
138
- "@dxos/plugin-client": "0.9.0",
139
- "@dxos/keys": "0.9.0",
140
- "@dxos/plugin-calls": "0.9.0",
141
- "@dxos/react-edge-client": "0.9.0",
142
- "@dxos/react-client": "0.9.0",
143
- "@dxos/react-ui-audio": "0.9.0",
144
- "@dxos/react-ui-components": "0.9.0",
145
- "@dxos/react-ui-graph": "0.9.0",
146
- "@dxos/react-ui-editor": "0.9.0",
147
- "@dxos/context": "0.9.0",
148
- "@dxos/react-ui-menu": "0.9.0",
149
- "@dxos/tracing": "0.9.0",
150
- "@dxos/types": "0.9.0",
151
- "@dxos/schema": "0.9.0",
152
- "@dxos/ui-types": "0.9.0",
153
- "@dxos/ui-editor": "0.9.0",
154
- "@dxos/util": "0.9.0"
118
+ "effect": "3.21.4",
119
+ "@dxos/ai": "0.9.1-staging.ee54ba693a",
120
+ "@dxos/app-framework": "0.9.1-staging.ee54ba693a",
121
+ "@dxos/async": "0.9.1-staging.ee54ba693a",
122
+ "@dxos/assistant": "0.9.1-staging.ee54ba693a",
123
+ "@dxos/client": "0.9.1-staging.ee54ba693a",
124
+ "@dxos/app-toolkit": "0.9.1-staging.ee54ba693a",
125
+ "@dxos/compute": "0.9.1-staging.ee54ba693a",
126
+ "@dxos/config": "0.9.1-staging.ee54ba693a",
127
+ "@dxos/echo-doc": "0.9.1-staging.ee54ba693a",
128
+ "@dxos/context": "0.9.1-staging.ee54ba693a",
129
+ "@dxos/effect": "0.9.1-staging.ee54ba693a",
130
+ "@dxos/echo": "0.9.1-staging.ee54ba693a",
131
+ "@dxos/invariant": "0.9.1-staging.ee54ba693a",
132
+ "@dxos/log": "0.9.1-staging.ee54ba693a",
133
+ "@dxos/functions-runtime": "0.9.1-staging.ee54ba693a",
134
+ "@dxos/plugin-graph": "0.9.1-staging.ee54ba693a",
135
+ "@dxos/plugin-client": "0.9.1-staging.ee54ba693a",
136
+ "@dxos/react-edge-client": "0.9.1-staging.ee54ba693a",
137
+ "@dxos/react-client": "0.9.1-staging.ee54ba693a",
138
+ "@dxos/react-ui-components": "0.9.1-staging.ee54ba693a",
139
+ "@dxos/plugin-markdown": "0.9.1-staging.ee54ba693a",
140
+ "@dxos/react-ui-editor": "0.9.1-staging.ee54ba693a",
141
+ "@dxos/react-ui-audio": "0.9.1-staging.ee54ba693a",
142
+ "@dxos/react-ui-graph": "0.9.1-staging.ee54ba693a",
143
+ "@dxos/react-ui-menu": "0.9.1-staging.ee54ba693a",
144
+ "@dxos/react-ui-transcription": "0.9.1-staging.ee54ba693a",
145
+ "@dxos/keys": "0.9.1-staging.ee54ba693a",
146
+ "@dxos/tracing": "0.9.1-staging.ee54ba693a",
147
+ "@dxos/transcription-pipeline": "0.9.1-staging.ee54ba693a",
148
+ "@dxos/types": "0.9.1-staging.ee54ba693a",
149
+ "@dxos/ui-editor": "0.9.1-staging.ee54ba693a",
150
+ "@dxos/util": "0.9.1-staging.ee54ba693a",
151
+ "@dxos/schema": "0.9.1-staging.ee54ba693a"
155
152
  },
156
153
  "devDependencies": {
157
154
  "@effect-atom/atom-react": "^0.5.0",
158
- "@effect/platform": "0.96.1",
155
+ "@effect/platform": "0.96.2",
159
156
  "@types/dom-speech-recognition": "^0.0.6",
160
- "@types/react": "~19.2.7",
161
- "effect": "3.21.3",
162
- "react": "~19.2.3",
163
- "react-dom": "~19.2.3",
157
+ "@types/react": "~19.2.17",
158
+ "effect": "3.21.4",
159
+ "react": "~19.2.7",
160
+ "react-dom": "~19.2.7",
164
161
  "tailwindcss": "^4.3.0",
165
- "@dxos/plugin-preview": "0.9.0",
166
- "@dxos/plugin-testing": "0.9.0",
167
- "@dxos/random": "0.9.0",
168
- "@dxos/plugin-theme": "0.9.0",
169
- "@dxos/react-ui": "0.9.0",
170
- "@dxos/react-ui-form": "0.9.0",
171
- "@dxos/react-ui-syntax-highlighter": "0.9.0",
172
- "@dxos/storybook-utils": "0.9.0",
173
- "@dxos/ui-theme": "0.9.0",
174
- "@dxos/test-utils": "0.9.0"
162
+ "@dxos/plugin-space": "0.9.1-staging.ee54ba693a",
163
+ "@dxos/plugin-preview": "0.9.1-staging.ee54ba693a",
164
+ "@dxos/plugin-testing": "0.9.1-staging.ee54ba693a",
165
+ "@dxos/plugin-theme": "0.9.1-staging.ee54ba693a",
166
+ "@dxos/random": "0.9.1-staging.ee54ba693a",
167
+ "@dxos/react-ui-attention": "0.9.1-staging.ee54ba693a",
168
+ "@dxos/react-ui-list": "0.9.1-staging.ee54ba693a",
169
+ "@dxos/react-ui-syntax-highlighter": "0.9.1-staging.ee54ba693a",
170
+ "@dxos/react-ui": "0.9.1-staging.ee54ba693a",
171
+ "@dxos/react-ui-form": "0.9.1-staging.ee54ba693a",
172
+ "@dxos/storybook-utils": "0.9.1-staging.ee54ba693a",
173
+ "@dxos/test-utils": "0.9.1-staging.ee54ba693a",
174
+ "@dxos/ui-theme": "0.9.1-staging.ee54ba693a"
175
175
  },
176
176
  "peerDependencies": {
177
177
  "@effect-atom/atom-react": "^0.5.0",
178
- "@effect/platform": "0.96.1",
179
- "effect": "3.21.3",
180
- "react": "~19.2.3",
181
- "react-dom": "~19.2.3",
182
- "@dxos/ui-theme": "0.9.0",
183
- "@dxos/react-ui": "0.9.0"
178
+ "@effect/platform": "0.96.2",
179
+ "effect": "3.21.4",
180
+ "react": "~19.2.7",
181
+ "react-dom": "~19.2.7",
182
+ "@dxos/ui-theme": "0.9.1-staging.ee54ba693a",
183
+ "@dxos/react-ui": "0.9.1-staging.ee54ba693a"
184
184
  },
185
185
  "publishConfig": {
186
186
  "access": "public"
@@ -6,11 +6,11 @@ import { Plugin } from '@dxos/app-framework';
6
6
  import { AppPlugin } from '@dxos/app-toolkit';
7
7
  import { Transcript } from '@dxos/types';
8
8
 
9
- import { BlueprintDefinition, OperationHandler, TextContent } from '#capabilities';
9
+ import { OperationHandler, SkillDefinition, TextContent } from '#capabilities';
10
10
  import { meta } from '#meta';
11
11
 
12
12
  export const TranscriptionPlugin = Plugin.define(meta).pipe(
13
- AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),
13
+ AppPlugin.addSkillDefinitionModule({ activate: SkillDefinition }),
14
14
  AppPlugin.addTextContentModule({ activate: TextContent }),
15
15
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
16
16
  AppPlugin.addSchemaModule({ schema: [Transcript.Transcript] }),
@@ -11,7 +11,7 @@ import { createComposerTestApp } from '@dxos/plugin-testing/harness';
11
11
  import { meta } from '#meta';
12
12
  import { TranscriptionPlugin } from '#plugin';
13
13
 
14
- const moduleId = (name: string) => `${meta.id}.module.${name}`;
14
+ const moduleId = (name: string) => `${meta.profile.key}.module.${name}`;
15
15
 
16
16
  describe('TranscriptionPlugin', () => {
17
17
  test('modules activate on the expected events', async ({ expect }) => {
@@ -26,6 +26,6 @@ describe('TranscriptionPlugin', () => {
26
26
 
27
27
  // SetupArtifactDefinition is fired by AssistantPlugin, which can't be included here due to a workspace cycle.
28
28
  await harness.fire(AppActivationEvents.SetupArtifactDefinition);
29
- expect(harness.manager.getActive()).toContain(moduleId('BlueprintDefinition'));
29
+ expect(harness.manager.getActive()).toContain(moduleId('SkillDefinition'));
30
30
  });
31
31
  });
@@ -4,9 +4,23 @@
4
4
 
5
5
  import { Plugin } from '@dxos/app-framework';
6
6
  import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
7
+ import { MarkdownEvents } from '@dxos/plugin-markdown';
7
8
  import { Transcript } from '@dxos/types';
8
9
 
9
- import { BlueprintDefinition, OperationHandler, ReactSurface, TextContent, Transcriber } from '#capabilities';
10
+ import {
11
+ AppGraphBuilder,
12
+ EntityLookup,
13
+ MarkdownExtension,
14
+ OperationHandler,
15
+ PipelineStatus,
16
+ ReactSurface,
17
+ RecordingSession,
18
+ SkillDefinition,
19
+ TextContent,
20
+ Transcriber,
21
+ TranscriptionDriver,
22
+ TranscriptionSettings,
23
+ } from '#capabilities';
10
24
  import { meta } from '#meta';
11
25
  import { translations } from '#translations';
12
26
 
@@ -14,19 +28,42 @@ import { translations } from '#translations';
14
28
  import pluginSpec from '../PLUGIN.mdl?raw';
15
29
 
16
30
  export const TranscriptionPlugin = Plugin.define(meta).pipe(
17
- AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),
31
+ AppPlugin.addSkillDefinitionModule({ activate: SkillDefinition }),
18
32
  AppPlugin.addTextContentModule({ activate: TextContent }),
19
33
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
20
34
  AppPlugin.addSchemaModule({ schema: [Transcript.Transcript] }),
21
35
  AppPlugin.addSurfaceModule({ activate: ReactSurface }),
22
36
  AppPlugin.addTranslationsModule({ translations }),
37
+ AppPlugin.addSettingsModule({ activate: TranscriptionSettings }),
38
+ AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),
39
+ AppPlugin.addReactContextModule({ activate: TranscriptionDriver }),
23
40
  Plugin.addModule({
24
41
  id: 'transcription',
25
42
  activatesOn: AppActivationEvents.SetupAppGraph,
26
43
  activate: Transcriber,
27
44
  }),
45
+ Plugin.addModule({
46
+ id: 'entity-lookup',
47
+ activatesOn: AppActivationEvents.SetupAppGraph,
48
+ activate: EntityLookup,
49
+ }),
50
+ Plugin.addModule({
51
+ id: 'recording-session',
52
+ activatesOn: AppActivationEvents.SetupSettings,
53
+ activate: RecordingSession,
54
+ }),
55
+ Plugin.addModule({
56
+ id: 'pipeline-status',
57
+ activatesOn: AppActivationEvents.SetupSettings,
58
+ activate: PipelineStatus,
59
+ }),
60
+ Plugin.addModule({
61
+ id: 'markdown',
62
+ activatesOn: MarkdownEvents.SetupExtensions,
63
+ activate: MarkdownExtension,
64
+ }),
28
65
  AppPlugin.addPluginAssetModule({
29
- asset: { pluginId: meta.id, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },
66
+ asset: { pluginId: meta.profile.key, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },
30
67
  }),
31
68
  Plugin.make,
32
69
  );
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import React from 'react';
7
+
8
+ import { Capability } from '@dxos/app-framework';
9
+ import { AppCapabilities } from '@dxos/app-toolkit';
10
+ import { GraphBuilder, Node, NodeMatcher } from '@dxos/plugin-graph';
11
+ import { Markdown } from '@dxos/plugin-markdown/types';
12
+
13
+ import { Mic } from '#components';
14
+ import { meta } from '#meta';
15
+
16
+ const whenMarkdownDocument = NodeMatcher.whenAll(
17
+ NodeMatcher.whenEchoObjectMatches,
18
+ NodeMatcher.whenEchoTypeMatches(Markdown.Document),
19
+ );
20
+
21
+ export default Capability.makeModule(
22
+ Effect.fnUntraced(function* () {
23
+ const extensions = yield* GraphBuilder.createExtension({
24
+ id: 'transcriptionToolbar',
25
+ match: (node, get) => whenMarkdownDocument(node, get),
26
+ // The control owns recording state, mode, device selection, and entity-extraction —
27
+ // interactions the action model cannot express (press-and-hold, an embedded dropdown, a
28
+ // live device list) — so it renders via the custom toolbar variant rather than a plain
29
+ // toggle action. The node is static (state lives in the control), keeping the toolbar's
30
+ // action atom stable across recording changes.
31
+ actions: (matched) =>
32
+ Effect.succeed([
33
+ Node.makeAction({
34
+ id: 'transcription',
35
+ data: () => Effect.void,
36
+ properties: {
37
+ label: ['start-recording.label', { ns: meta.profile.key }],
38
+ icon: 'ph--microphone--regular',
39
+ disposition: 'toolbar',
40
+ variant: 'custom',
41
+ render: () => <Mic docId={matched.id} />,
42
+ },
43
+ }),
44
+ ]),
45
+ });
46
+
47
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
48
+ }),
49
+ );
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppSpace } from '@dxos/app-toolkit';
9
+ import { ClientCapabilities } from '@dxos/plugin-client';
10
+ import { type EntityLookup, makeDatabaseLookup } from '@dxos/transcription-pipeline';
11
+
12
+ import { TranscriptionCapabilities } from '#types';
13
+
14
+ /**
15
+ * Contributes an {@link EntityLookup} backed by the personal space's full-text index. Resolved lazily
16
+ * per call so it reflects the current space. Consumers (e.g. the live-transcription driver) depend on
17
+ * this function rather than the database — swap the backend (vector, space-aware, remote) here.
18
+ */
19
+ export default Capability.makeModule(
20
+ Effect.fnUntraced(function* () {
21
+ const capabilities = yield* Capability.Service;
22
+ const lookup: EntityLookup = async (noun, context) => {
23
+ const client = capabilities.get(ClientCapabilities.Client);
24
+ const space = AppSpace.getPersonalSpace(client);
25
+ if (!space) {
26
+ return [];
27
+ }
28
+ return makeDatabaseLookup(space.db)(noun, context);
29
+ };
30
+ return Capability.contributes(TranscriptionCapabilities.EntityLookup, lookup);
31
+ }),
32
+ );
@@ -3,15 +3,15 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
- import { type AppCapabilities } from '@dxos/app-toolkit';
7
6
  import type { OperationHandlerSet } from '@dxos/compute';
8
7
 
9
- // The contributed capability type references Blueprint types from @dxos/compute, so the lazy
10
- // wrapper needs an explicit annotation to keep the inferred type portable (TS2883).
11
- export const BlueprintDefinition: Capability.LazyCapability<
12
- void,
13
- Capability.Capability<typeof AppCapabilities.BlueprintDefinition>[]
14
- > = Capability.lazy('BlueprintDefinition', () => import('./blueprint-definition'));
8
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
9
+ export const EntityLookup = Capability.lazy('EntityLookup', () => import('./entity-lookup'));
10
+ export const MarkdownExtension = Capability.lazy('MarkdownExtension', () => import('./markdown-extension'));
11
+ export const PipelineStatus = Capability.lazy('PipelineStatus', () => import('./pipeline-status'));
12
+ export const RecordingSession = Capability.lazy('RecordingSession', () => import('./recording-session'));
13
+ export const TranscriptionDriver = Capability.lazy('TranscriptionDriver', () => import('./transcription-driver'));
14
+ export const SkillDefinition = Capability.lazy('SkillDefinition', () => import('./skill-definition'));
15
15
  export const TextContent = Capability.lazy('TextContent', () => import('./text-content'));
16
16
  export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
17
17
  'OperationHandler',
@@ -19,3 +19,4 @@ export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHan
19
19
  );
20
20
  export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
21
21
  export const Transcriber = Capability.lazy('Transcriber', () => import('./transcriber'));
22
+ export const TranscriptionSettings = Capability.lazy('TranscriptionSettings', () => import('./settings'));
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { MarkdownCapabilities } from '@dxos/plugin-markdown/types';
9
+ import { pendingText } from '@dxos/ui-editor';
10
+
11
+ export default Capability.makeModule(
12
+ Effect.fnUntraced(function* () {
13
+ // Every Markdown editor receives the pending-text extension so the transcription driver can
14
+ // inject live text into it (the driver resolves the editor via `MarkdownCapabilities.EditorViews`).
15
+ return Capability.contributes(MarkdownCapabilities.ExtensionProvider, [() => pendingText()]);
16
+ }),
17
+ );
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { Atom } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Capability } from '@dxos/app-framework';
9
+
10
+ import { TranscriptionCapabilities } from '#types';
11
+
12
+ /**
13
+ * Observable live-transcription lifecycle phase, written by the driver and read by UI (toolbar
14
+ * spinner, testbench telemetry) so the mic + pipeline state can be reflected in real time.
15
+ */
16
+ export default Capability.makeModule(
17
+ Effect.fnUntraced(function* () {
18
+ const statusAtom = Atom.make<{ phase: TranscriptionCapabilities.PipelinePhase }>({ phase: 'idle' }).pipe(
19
+ Atom.keepAlive,
20
+ );
21
+ return Capability.contributes(TranscriptionCapabilities.PipelineStatus, statusAtom);
22
+ }),
23
+ );
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { Atom } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Capability } from '@dxos/app-framework';
9
+
10
+ import { TranscriptionCapabilities } from '#types';
11
+
12
+ export default Capability.makeModule(
13
+ Effect.fnUntraced(function* () {
14
+ const sessionAtom = Atom.make<TranscriptionCapabilities.RecordingSession | null>(null).pipe(Atom.keepAlive);
15
+ return Capability.contributes(TranscriptionCapabilities.RecordingSession, sessionAtom);
16
+ }),
17
+ );
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+ import { createKvsStore } from '@dxos/effect';
10
+
11
+ import { meta } from '#meta';
12
+ import { Settings, TranscriptionCapabilities } from '#types';
13
+
14
+ export default Capability.makeModule(() =>
15
+ Effect.sync(() => {
16
+ const settingsAtom = createKvsStore({
17
+ key: meta.profile.key,
18
+ schema: Settings.Settings,
19
+ defaultValue: () => ({
20
+ entityExtraction: true,
21
+ recordMode: 'toggle' as const,
22
+ }),
23
+ });
24
+
25
+ return [
26
+ Capability.contributes(TranscriptionCapabilities.Settings, settingsAtom),
27
+ Capability.contributes(AppCapabilities.Settings, {
28
+ prefix: meta.profile.key,
29
+ schema: Settings.Settings,
30
+ atom: settingsAtom,
31
+ }),
32
+ ];
33
+ }),
34
+ );
@@ -0,0 +1,15 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+
10
+ import { TranscriptionSkill } from '#skills';
11
+
12
+ const skillDefinition = () =>
13
+ Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, TranscriptionSkill)]);
14
+
15
+ export default skillDefinition;
@@ -6,12 +6,11 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
8
  import { AppCapabilities } from '@dxos/app-toolkit';
9
- import { Feed, Obj, Type } from '@dxos/echo';
9
+ import { Feed, Filter, Obj, Query, Scope, Type } from '@dxos/echo';
10
10
  import { getSpace } from '@dxos/react-client/echo';
11
+ import { renderByline } from '@dxos/react-ui-transcription';
11
12
  import { Message, Transcript } from '@dxos/types';
12
13
 
13
- import { renderByline } from '../util';
14
-
15
14
  export default Capability.makeModule(
16
15
  Effect.fnUntraced(function* () {
17
16
  return Capability.contributes(AppCapabilities.TextContent, {
@@ -20,10 +19,14 @@ export default Capability.makeModule(
20
19
  const space = getSpace(transcript);
21
20
  const members = space?.members.get().map((member) => member.identity) ?? [];
22
21
  const feed = await transcript.feed.load();
23
- const feedDXN = Feed.getQueueUri(feed);
24
- const queue = feedDXN ? space?.queues.get<Message.Message>(feedDXN) : undefined;
25
- await queue?.refresh();
26
- return queue?.objects
22
+ const feedDXN = feed ? Feed.getQueueUri(feed) : undefined;
23
+ if (!space || !feedDXN) {
24
+ return undefined;
25
+ }
26
+ const messages = await space.db
27
+ .query(Query.select(Filter.type(Message.Message)).from(Scope.feed(feedDXN)))
28
+ .run();
29
+ return messages
27
30
  .filter((message) => Obj.instanceOf(Message.Message, message))
28
31
  .flatMap((message, index) => renderByline(members)(message, index))
29
32
  .join('\n\n');