@dxos/plugin-transcription 0.8.4-main.2e9d522 → 0.8.4-main.5ea62a8

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 (159) hide show
  1. package/dist/lib/browser/TranscriptContainer-OX7OOODC.mjs +11 -0
  2. package/dist/lib/browser/blueprint-definition-QQSGTX5F.mjs +142 -0
  3. package/dist/lib/browser/blueprint-definition-QQSGTX5F.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-4FJIYH7T.mjs → chunk-26XDG6GQ.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-5WH45KBY.mjs → chunk-3X7HP44M.mjs} +8 -1
  6. package/dist/lib/browser/{chunk-5WH45KBY.mjs.map → chunk-3X7HP44M.mjs.map} +1 -1
  7. package/dist/lib/browser/{chunk-5KPYIC3N.mjs → chunk-5I4BMOGE.mjs} +422 -402
  8. package/dist/lib/browser/chunk-5I4BMOGE.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-FFEPEPCU.mjs → chunk-BA64VLLR.mjs} +85 -94
  10. package/dist/lib/browser/chunk-BA64VLLR.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-HXVGV7T6.mjs +63 -0
  12. package/dist/lib/browser/chunk-HXVGV7T6.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-U6QBOGTN.mjs → chunk-TNEQFHIU.mjs} +2 -2
  14. package/dist/lib/browser/{chunk-U6QBOGTN.mjs.map → chunk-TNEQFHIU.mjs.map} +1 -1
  15. package/dist/lib/browser/index.mjs +18 -12
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/intent-resolver-T3EGLS3L.mjs +25 -0
  18. package/dist/lib/browser/intent-resolver-T3EGLS3L.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-E5D5AE3F.mjs → react-surface-QYX74JNG.mjs} +8 -8
  21. package/dist/lib/browser/react-surface-QYX74JNG.mjs.map +7 -0
  22. package/dist/lib/browser/{transcriber-PXT4QBFY.mjs → transcriber-JOOAQVYV.mjs} +5 -5
  23. package/dist/lib/browser/transcriber-JOOAQVYV.mjs.map +7 -0
  24. package/dist/lib/browser/types/index.mjs +6 -8
  25. package/dist/lib/node-esm/{TranscriptContainer-VBAOM5DG.mjs → TranscriptContainer-BUWK63SI.mjs} +4 -4
  26. package/dist/lib/node-esm/blueprint-definition-4PLCTH5Q.mjs +143 -0
  27. package/dist/lib/node-esm/blueprint-definition-4PLCTH5Q.mjs.map +7 -0
  28. package/dist/lib/node-esm/{chunk-RHF2ALML.mjs → chunk-3QAIZGMW.mjs} +2 -2
  29. package/dist/lib/node-esm/{chunk-RHF2ALML.mjs.map → chunk-3QAIZGMW.mjs.map} +1 -1
  30. package/dist/lib/node-esm/{chunk-TJKAO7VR.mjs → chunk-DT3AOC3E.mjs} +422 -402
  31. package/dist/lib/node-esm/chunk-DT3AOC3E.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-HT3W7LDP.mjs → chunk-J5GQ3KGX.mjs} +85 -94
  33. package/dist/lib/node-esm/chunk-J5GQ3KGX.mjs.map +7 -0
  34. package/dist/lib/node-esm/{chunk-Y2B4HWSS.mjs → chunk-NWD757KH.mjs} +2 -2
  35. package/dist/lib/node-esm/{chunk-XMUCZBP3.mjs → chunk-QARUDLHN.mjs} +7 -1
  36. package/dist/lib/node-esm/{chunk-XMUCZBP3.mjs.map → chunk-QARUDLHN.mjs.map} +1 -1
  37. package/dist/lib/node-esm/chunk-W72HVQMD.mjs +64 -0
  38. package/dist/lib/node-esm/chunk-W72HVQMD.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +18 -12
  40. package/dist/lib/node-esm/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/intent-resolver-VDHCUAIO.mjs +26 -0
  42. package/dist/lib/node-esm/intent-resolver-VDHCUAIO.mjs.map +7 -0
  43. package/dist/lib/node-esm/meta.json +1 -1
  44. package/dist/lib/node-esm/{react-surface-QRDJOHN5.mjs → react-surface-TM7XOQBR.mjs} +8 -8
  45. package/dist/lib/node-esm/react-surface-TM7XOQBR.mjs.map +7 -0
  46. package/dist/lib/node-esm/{transcriber-YUTEVANE.mjs → transcriber-QPS55YP2.mjs} +5 -5
  47. package/dist/lib/node-esm/transcriber-QPS55YP2.mjs.map +7 -0
  48. package/dist/lib/node-esm/types/index.mjs +6 -8
  49. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  50. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  51. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  52. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  53. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/index.d.ts +3 -2
  55. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  57. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  59. package/dist/types/src/capabilities/transcriber.d.ts +1 -1
  60. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  61. package/dist/types/src/components/Transcript/Transcript.d.ts +4 -4
  62. package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
  63. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +32 -15
  64. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +2 -2
  66. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +1 -1
  67. package/dist/types/src/components/TranscriptContainer.d.ts +2 -2
  68. package/dist/types/src/components/TranscriptContainer.d.ts.map +1 -1
  69. package/dist/types/src/components/stories/FileTranscription.stories.d.ts +5 -2
  70. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts +10 -5
  72. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +1 -1
  73. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +7 -4
  74. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +1 -1
  75. package/dist/types/src/components/stories/TranscriptionStory.d.ts +1 -0
  76. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +1 -1
  77. package/dist/types/src/functions/index.d.ts +3 -0
  78. package/dist/types/src/functions/index.d.ts.map +1 -0
  79. package/dist/types/src/functions/open.d.ts +7 -0
  80. package/dist/types/src/functions/open.d.ts.map +1 -0
  81. package/dist/types/src/functions/summarize.d.ts +11 -0
  82. package/dist/types/src/functions/summarize.d.ts.map +1 -0
  83. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  84. package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
  85. package/dist/types/src/segments-normalization/normalization.d.ts +366 -321
  86. package/dist/types/src/segments-normalization/normalization.d.ts.map +1 -1
  87. package/dist/types/src/testing/testing.d.ts +1 -1
  88. package/dist/types/src/testing/testing.d.ts.map +1 -1
  89. package/dist/types/src/transcriber/media-stream-recorder.d.ts +1 -1
  90. package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
  91. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  92. package/dist/types/src/transcriber/transcription-manager.d.ts +3 -7
  93. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  94. package/dist/types/src/types/Transcript.d.ts +30 -0
  95. package/dist/types/src/types/Transcript.d.ts.map +1 -0
  96. package/dist/types/src/types/TranscriptAction.d.ts +23 -0
  97. package/dist/types/src/types/TranscriptAction.d.ts.map +1 -0
  98. package/dist/types/src/types/index.d.ts +2 -1
  99. package/dist/types/src/types/index.d.ts.map +1 -1
  100. package/dist/types/src/types/types.d.ts +0 -26
  101. package/dist/types/src/types/types.d.ts.map +1 -1
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +55 -53
  104. package/src/TranscriptionPlugin.tsx +10 -5
  105. package/src/capabilities/blueprint-definition.ts +31 -0
  106. package/src/capabilities/capabilities.ts +3 -3
  107. package/src/capabilities/index.ts +1 -0
  108. package/src/capabilities/intent-resolver.ts +5 -11
  109. package/src/capabilities/react-surface.tsx +2 -2
  110. package/src/capabilities/transcriber.ts +3 -2
  111. package/src/components/Transcript/Transcript.stories.tsx +12 -13
  112. package/src/components/Transcript/Transcript.tsx +8 -7
  113. package/src/components/Transcript/deprecated/OldTranscript.tsx +4 -4
  114. package/src/components/TranscriptContainer.tsx +5 -4
  115. package/src/components/stories/FileTranscription.stories.tsx +22 -12
  116. package/src/components/stories/KeyWordRecognition.stories.tsx +12 -6
  117. package/src/components/stories/MicrophoneTranscription.stories.tsx +10 -9
  118. package/src/components/stories/TranscriptionStory.tsx +9 -5
  119. package/src/functions/index.ts +6 -0
  120. package/src/functions/open.ts +37 -0
  121. package/src/functions/summarize.ts +97 -0
  122. package/src/hooks/useAudioFile.ts +1 -10
  123. package/src/hooks/useVoiceInput.ts +3 -2
  124. package/src/model/model.test.ts +1 -1
  125. package/src/segments-normalization/message-normalizer.ts +1 -1
  126. package/src/segments-normalization/normalization.test.ts +4 -4
  127. package/src/segments-normalization/normalization.ts +37 -36
  128. package/src/testing/testing.ts +3 -3
  129. package/src/transcriber/media-stream-recorder.ts +1 -1
  130. package/src/transcriber/transcriber.browser.test.ts +2 -1
  131. package/src/transcriber/transcriber.ts +2 -1
  132. package/src/transcriber/transcription-manager.ts +17 -38
  133. package/src/types/{schema.ts → Transcript.ts} +11 -8
  134. package/src/types/TranscriptAction.ts +24 -0
  135. package/src/types/index.ts +2 -1
  136. package/src/types/types.ts +0 -23
  137. package/dist/lib/browser/TranscriptContainer-6WCKCXQ6.mjs +0 -11
  138. package/dist/lib/browser/chunk-5KPYIC3N.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-FFEPEPCU.mjs.map +0 -7
  140. package/dist/lib/browser/chunk-R7INNNUQ.mjs +0 -55
  141. package/dist/lib/browser/chunk-R7INNNUQ.mjs.map +0 -7
  142. package/dist/lib/browser/intent-resolver-3O33MMP5.mjs +0 -30
  143. package/dist/lib/browser/intent-resolver-3O33MMP5.mjs.map +0 -7
  144. package/dist/lib/browser/react-surface-E5D5AE3F.mjs.map +0 -7
  145. package/dist/lib/browser/transcriber-PXT4QBFY.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-HT3W7LDP.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-TJKAO7VR.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-U65ZWK3L.mjs +0 -56
  149. package/dist/lib/node-esm/chunk-U65ZWK3L.mjs.map +0 -7
  150. package/dist/lib/node-esm/intent-resolver-YMN5SXNC.mjs +0 -31
  151. package/dist/lib/node-esm/intent-resolver-YMN5SXNC.mjs.map +0 -7
  152. package/dist/lib/node-esm/react-surface-QRDJOHN5.mjs.map +0 -7
  153. package/dist/lib/node-esm/transcriber-YUTEVANE.mjs.map +0 -7
  154. package/dist/types/src/types/schema.d.ts +0 -41
  155. package/dist/types/src/types/schema.d.ts.map +0 -1
  156. /package/dist/lib/browser/{TranscriptContainer-6WCKCXQ6.mjs.map → TranscriptContainer-OX7OOODC.mjs.map} +0 -0
  157. /package/dist/lib/browser/{chunk-4FJIYH7T.mjs.map → chunk-26XDG6GQ.mjs.map} +0 -0
  158. /package/dist/lib/node-esm/{TranscriptContainer-VBAOM5DG.mjs.map → TranscriptContainer-BUWK63SI.mjs.map} +0 -0
  159. /package/dist/lib/node-esm/{chunk-Y2B4HWSS.mjs.map → chunk-NWD757KH.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-transcription",
3
- "version": "0.8.4-main.2e9d522",
3
+ "version": "0.8.4-main.5ea62a8",
4
4
  "description": "Voice transcription.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -9,11 +9,13 @@
9
9
  "type": "module",
10
10
  "exports": {
11
11
  ".": {
12
+ "source": "./src/index.ts",
12
13
  "types": "./dist/types/src/index.d.ts",
13
14
  "browser": "./dist/lib/browser/index.mjs",
14
15
  "node": "./dist/lib/node-esm/index.mjs"
15
16
  },
16
17
  "./types": {
18
+ "source": "./src/types/index.ts",
17
19
  "types": "./dist/types/src/types/index.d.ts",
18
20
  "browser": "./dist/lib/browser/types/index.mjs",
19
21
  "node": "./dist/lib/node-esm/types/index.mjs"
@@ -44,64 +46,64 @@
44
46
  "react-router-dom": "^6.4.0",
45
47
  "react-use": "^17.5.1",
46
48
  "wavefile": "^11.0.0",
47
- "@dxos/ai": "0.8.4-main.2e9d522",
48
- "@dxos/app-framework": "0.8.4-main.2e9d522",
49
- "@dxos/assistant": "0.8.4-main.2e9d522",
50
- "@dxos/async": "0.8.4-main.2e9d522",
51
- "@dxos/blueprints": "0.8.4-main.2e9d522",
52
- "@dxos/client": "0.8.4-main.2e9d522",
53
- "@dxos/codec-protobuf": "0.8.4-main.2e9d522",
54
- "@dxos/context": "0.8.4-main.2e9d522",
55
- "@dxos/display-name": "0.8.4-main.2e9d522",
56
- "@dxos/echo": "0.8.4-main.2e9d522",
57
- "@dxos/debug": "0.8.4-main.2e9d522",
58
- "@dxos/echo-db": "0.8.4-main.2e9d522",
59
- "@dxos/echo-schema": "0.8.4-main.2e9d522",
60
- "@dxos/functions": "0.8.4-main.2e9d522",
61
- "@dxos/invariant": "0.8.4-main.2e9d522",
62
- "@dxos/keys": "0.8.4-main.2e9d522",
63
- "@dxos/live-object": "0.8.4-main.2e9d522",
64
- "@dxos/local-storage": "0.8.4-main.2e9d522",
65
- "@dxos/log": "0.8.4-main.2e9d522",
66
- "@dxos/plugin-client": "0.8.4-main.2e9d522",
67
- "@dxos/plugin-deck": "0.8.4-main.2e9d522",
68
- "@dxos/plugin-graph": "0.8.4-main.2e9d522",
69
- "@dxos/plugin-markdown": "0.8.4-main.2e9d522",
70
- "@dxos/plugin-space": "0.8.4-main.2e9d522",
71
- "@dxos/plugin-thread": "0.8.4-main.2e9d522",
72
- "@dxos/protocols": "0.8.4-main.2e9d522",
73
- "@dxos/react-client": "0.8.4-main.2e9d522",
74
- "@dxos/react-ui-attention": "0.8.4-main.2e9d522",
75
- "@dxos/react-edge-client": "0.8.4-main.2e9d522",
76
- "@dxos/react-ui-components": "0.8.4-main.2e9d522",
77
- "@dxos/react-ui-editor": "0.8.4-main.2e9d522",
78
- "@dxos/react-ui-form": "0.8.4-main.2e9d522",
79
- "@dxos/react-ui-sfx": "0.8.4-main.2e9d522",
80
- "@dxos/react-ui-grid": "0.8.4-main.2e9d522",
81
- "@dxos/react-ui-stack": "0.8.4-main.2e9d522",
82
- "@dxos/schema": "0.8.4-main.2e9d522",
83
- "@dxos/tracing": "0.8.4-main.2e9d522",
84
- "@dxos/util": "0.8.4-main.2e9d522"
49
+ "@dxos/ai": "0.8.4-main.5ea62a8",
50
+ "@dxos/app-framework": "0.8.4-main.5ea62a8",
51
+ "@dxos/assistant": "0.8.4-main.5ea62a8",
52
+ "@dxos/client": "0.8.4-main.5ea62a8",
53
+ "@dxos/codec-protobuf": "0.8.4-main.5ea62a8",
54
+ "@dxos/blueprints": "0.8.4-main.5ea62a8",
55
+ "@dxos/context": "0.8.4-main.5ea62a8",
56
+ "@dxos/debug": "0.8.4-main.5ea62a8",
57
+ "@dxos/display-name": "0.8.4-main.5ea62a8",
58
+ "@dxos/async": "0.8.4-main.5ea62a8",
59
+ "@dxos/echo-schema": "0.8.4-main.5ea62a8",
60
+ "@dxos/echo-db": "0.8.4-main.5ea62a8",
61
+ "@dxos/echo": "0.8.4-main.5ea62a8",
62
+ "@dxos/functions": "0.8.4-main.5ea62a8",
63
+ "@dxos/keys": "0.8.4-main.5ea62a8",
64
+ "@dxos/live-object": "0.8.4-main.5ea62a8",
65
+ "@dxos/local-storage": "0.8.4-main.5ea62a8",
66
+ "@dxos/invariant": "0.8.4-main.5ea62a8",
67
+ "@dxos/plugin-deck": "0.8.4-main.5ea62a8",
68
+ "@dxos/plugin-graph": "0.8.4-main.5ea62a8",
69
+ "@dxos/plugin-markdown": "0.8.4-main.5ea62a8",
70
+ "@dxos/plugin-space": "0.8.4-main.5ea62a8",
71
+ "@dxos/plugin-thread": "0.8.4-main.5ea62a8",
72
+ "@dxos/plugin-client": "0.8.4-main.5ea62a8",
73
+ "@dxos/log": "0.8.4-main.5ea62a8",
74
+ "@dxos/protocols": "0.8.4-main.5ea62a8",
75
+ "@dxos/react-client": "0.8.4-main.5ea62a8",
76
+ "@dxos/react-edge-client": "0.8.4-main.5ea62a8",
77
+ "@dxos/react-ui-attention": "0.8.4-main.5ea62a8",
78
+ "@dxos/react-ui-components": "0.8.4-main.5ea62a8",
79
+ "@dxos/react-ui-editor": "0.8.4-main.5ea62a8",
80
+ "@dxos/react-ui-form": "0.8.4-main.5ea62a8",
81
+ "@dxos/react-ui-sfx": "0.8.4-main.5ea62a8",
82
+ "@dxos/react-ui-stack": "0.8.4-main.5ea62a8",
83
+ "@dxos/schema": "0.8.4-main.5ea62a8",
84
+ "@dxos/react-ui-grid": "0.8.4-main.5ea62a8",
85
+ "@dxos/tracing": "0.8.4-main.5ea62a8",
86
+ "@dxos/util": "0.8.4-main.5ea62a8"
85
87
  },
86
88
  "devDependencies": {
87
89
  "@effect-rx/rx-react": "0.38.0",
88
- "@effect/platform": "0.89.0",
90
+ "@effect/platform": "0.90.2",
89
91
  "@types/dom-speech-recognition": "^0.0.6",
90
92
  "@types/react": "~18.2.0",
91
- "effect": "3.17.0",
93
+ "effect": "3.17.7",
92
94
  "react": "~18.2.0",
93
95
  "react-dom": "~18.2.0",
94
96
  "tailwindcss": "~3.4.1",
95
- "@dxos/plugin-preview": "0.8.4-main.2e9d522",
96
- "@dxos/plugin-storybook-layout": "0.8.4-main.2e9d522",
97
- "@dxos/plugin-theme": "0.8.4-main.2e9d522",
98
- "@dxos/random": "0.8.4-main.2e9d522",
99
- "@dxos/react-ui": "0.8.4-main.2e9d522",
100
- "@dxos/react-ui-form": "0.8.4-main.2e9d522",
101
- "@dxos/react-ui-syntax-highlighter": "0.8.4-main.2e9d522",
102
- "@dxos/react-ui-theme": "0.8.4-main.2e9d522",
103
- "@dxos/storybook-utils": "0.8.4-main.2e9d522",
104
- "@dxos/test-utils": "0.8.4-main.2e9d522"
97
+ "@dxos/plugin-preview": "0.8.4-main.5ea62a8",
98
+ "@dxos/plugin-theme": "0.8.4-main.5ea62a8",
99
+ "@dxos/random": "0.8.4-main.5ea62a8",
100
+ "@dxos/plugin-storybook-layout": "0.8.4-main.5ea62a8",
101
+ "@dxos/react-ui-form": "0.8.4-main.5ea62a8",
102
+ "@dxos/storybook-utils": "0.8.4-main.5ea62a8",
103
+ "@dxos/test-utils": "0.8.4-main.5ea62a8",
104
+ "@dxos/react-ui-theme": "0.8.4-main.5ea62a8",
105
+ "@dxos/react-ui": "0.8.4-main.5ea62a8",
106
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.5ea62a8"
105
107
  },
106
108
  "peerDependencies": {
107
109
  "@effect-rx/rx-react": "^0.34.1",
@@ -109,8 +111,8 @@
109
111
  "effect": "^3.13.3",
110
112
  "react": "~18.2.0",
111
113
  "react-dom": "~18.2.0",
112
- "@dxos/react-ui": "0.8.4-main.2e9d522",
113
- "@dxos/react-ui-theme": "0.8.4-main.2e9d522"
114
+ "@dxos/react-ui": "0.8.4-main.5ea62a8",
115
+ "@dxos/react-ui-theme": "0.8.4-main.5ea62a8"
114
116
  },
115
117
  "publishConfig": {
116
118
  "access": "public"
@@ -8,11 +8,11 @@ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
8
8
  import { getSpace } from '@dxos/react-client/echo';
9
9
  import { DataType } from '@dxos/schema';
10
10
 
11
- import { IntentResolver, ReactSurface, Transcriber } from './capabilities';
11
+ import { BlueprintDefinition, IntentResolver, ReactSurface, Transcriber } from './capabilities';
12
12
  import { renderMarkdown } from './components';
13
13
  import { meta } from './meta';
14
14
  import { translations } from './translations';
15
- import { TranscriptType } from './types';
15
+ import { Transcript } from './types';
16
16
 
17
17
  export const TranscriptionPlugin = () =>
18
18
  definePlugin(meta, [
@@ -26,11 +26,11 @@ export const TranscriptionPlugin = () =>
26
26
  activatesOn: Events.SetupMetadata,
27
27
  activate: (context) =>
28
28
  contributes(Capabilities.Metadata, {
29
- id: TranscriptType.typename,
29
+ id: Transcript.Transcript.typename,
30
30
  metadata: {
31
31
  icon: 'ph--subtitles--regular',
32
32
  // TODO(wittjosiah): Factor out. Artifact? Separate capability?
33
- getTextContent: async (transcript: TranscriptType) => {
33
+ getTextContent: async (transcript: Transcript.Transcript) => {
34
34
  const space = getSpace(transcript);
35
35
  const members = space?.members.get().map((member) => member.identity) ?? [];
36
36
  const queue = space?.queues.get<DataType.Message>(transcript.queue.dxn);
@@ -47,7 +47,7 @@ export const TranscriptionPlugin = () =>
47
47
  defineModule({
48
48
  id: `${meta.id}/module/schema`,
49
49
  activatesOn: ClientEvents.SetupSchema,
50
- activate: () => [contributes(ClientCapabilities.Schema, [TranscriptType])],
50
+ activate: () => [contributes(ClientCapabilities.Schema, [Transcript.Transcript])],
51
51
  }),
52
52
  defineModule({
53
53
  id: `${meta.id}/module/react-surface`,
@@ -64,4 +64,9 @@ export const TranscriptionPlugin = () =>
64
64
  activatesOn: Events.SetupAppGraph,
65
65
  activate: Transcriber,
66
66
  }),
67
+ defineModule({
68
+ id: `${meta.id}/module/blueprint`,
69
+ activatesOn: Events.SetupArtifactDefinition,
70
+ activate: BlueprintDefinition,
71
+ }),
67
72
  ]);
@@ -0,0 +1,31 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, contributes } from '@dxos/app-framework';
6
+ import { Blueprint, Template } from '@dxos/blueprints';
7
+ import { type FunctionDefinition } from '@dxos/functions';
8
+ import { trim } from '@dxos/util';
9
+
10
+ import { open, summarize } from '../functions';
11
+
12
+ const functions: FunctionDefinition[] = [open, summarize];
13
+
14
+ export default () => {
15
+ return [
16
+ contributes(Capabilities.Functions, functions),
17
+ contributes(
18
+ Capabilities.BlueprintDefinition,
19
+ Blueprint.make({
20
+ key: 'dxos.org/blueprint/transcription',
21
+ name: 'Transcription',
22
+ tools: Blueprint.toolDefinitions({ functions }),
23
+ instructions: Template.make({
24
+ source: trim`
25
+ You can open and summarize a meeting transcript.
26
+ `,
27
+ }),
28
+ }),
29
+ ),
30
+ ];
31
+ };
@@ -6,11 +6,11 @@ import { defineCapability } from '@dxos/app-framework';
6
6
 
7
7
  import { TRANSCRIPTION_PLUGIN } from '../meta';
8
8
  import {
9
- type TranscriberParams,
9
+ type MediaStreamRecorderParams,
10
10
  type Transcriber,
11
- type TranscriptionManager,
11
+ type TranscriberParams,
12
12
  type TranscriptMessageEnricher,
13
- type MediaStreamRecorderParams,
13
+ type TranscriptionManager,
14
14
  } from '../transcriber';
15
15
 
16
16
  export namespace TranscriptionCapabilities {
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { lazy } from '@dxos/app-framework';
6
6
 
7
+ export const BlueprintDefinition = lazy(() => import('./blueprint-definition'));
7
8
  export const IntentResolver = lazy(() => import('./intent-resolver'));
8
9
  export const ReactSurface = lazy(() => import('./react-surface'));
9
10
  export const Transcriber = lazy(() => import('./transcriber'));
@@ -2,22 +2,16 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, createResolver, type PluginContext } from '@dxos/app-framework';
6
- import { type Key, Obj, Ref } from '@dxos/echo';
7
- import { createQueueDXN } from '@dxos/echo-schema';
5
+ import { Capabilities, type PluginContext, contributes, createResolver } from '@dxos/app-framework';
8
6
 
9
- import { TranscriptionAction, TranscriptType } from '../types';
7
+ import { Transcript, TranscriptAction } from '../types';
10
8
 
11
9
  export default (context: PluginContext) =>
12
10
  contributes(Capabilities.IntentResolver, [
13
11
  createResolver({
14
- intent: TranscriptionAction.Create,
15
- resolve: ({ name, spaceId }) => {
16
- const transcript = Obj.make(TranscriptType, {
17
- // TODO(dmaretskyi): Use space.queues.create() instead.
18
- queue: Ref.fromDXN(createQueueDXN(spaceId as Key.SpaceId)),
19
- });
20
-
12
+ intent: TranscriptAction.Create,
13
+ resolve: ({ name, space }) => {
14
+ const transcript = Transcript.makeTranscript(space.queues.create().dxn);
21
15
  return { data: { object: transcript } };
22
16
  },
23
17
  }),
@@ -9,14 +9,14 @@ import { Obj } from '@dxos/echo';
9
9
 
10
10
  import { TranscriptionContainer } from '../components';
11
11
  import { meta } from '../meta';
12
- import { TranscriptType } from '../types';
12
+ import { Transcript } from '../types';
13
13
 
14
14
  export default () =>
15
15
  contributes(Capabilities.ReactSurface, [
16
16
  createSurface({
17
17
  id: `${meta.id}/article/transcript`,
18
18
  role: ['article', 'section'],
19
- filter: (data): data is { subject: TranscriptType } => Obj.instanceOf(TranscriptType, data.subject),
19
+ filter: (data): data is { subject: Transcript.Transcript } => Obj.instanceOf(Transcript.Transcript, data.subject),
20
20
  component: ({ data, role }) => <TranscriptionContainer transcript={data.subject} role={role} />,
21
21
  }),
22
22
  ]);
@@ -2,12 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { type PluginContext, contributes } from '@dxos/app-framework';
6
6
  import { ClientCapabilities } from '@dxos/plugin-client';
7
7
 
8
- import { TranscriptionCapabilities } from './capabilities';
9
8
  import { MediaStreamRecorder, Transcriber, TranscriptionManager } from '../transcriber';
10
9
 
10
+ import { TranscriptionCapabilities } from './capabilities';
11
+
11
12
  // TODO(burdon): Move to config?
12
13
 
13
14
  /**
@@ -24,7 +24,6 @@ import { DataType } from '@dxos/schema';
24
24
  import { Testing } from '@dxos/schema/testing';
25
25
  import { withLayout } from '@dxos/storybook-utils';
26
26
 
27
- import { renderMarkdown, Transcript, type TranscriptProps } from './Transcript';
28
27
  import { useQueueModelAdapter } from '../../hooks';
29
28
  import { SerializationModel } from '../../model';
30
29
  import {
@@ -35,13 +34,15 @@ import {
35
34
  } from '../../testing';
36
35
  import { translations } from '../../translations';
37
36
 
37
+ import { TranscriptView, type TranscriptViewProps, renderMarkdown } from './Transcript';
38
+
38
39
  faker.seed(1);
39
40
 
40
41
  /**
41
42
  * Story wrapper with test controls.
42
43
  */
43
44
  const TranscriptContainer: FC<
44
- TranscriptProps & {
45
+ TranscriptViewProps & {
45
46
  running: boolean;
46
47
  onRunningChange: (running: boolean) => void;
47
48
  onReset?: () => void;
@@ -49,7 +50,7 @@ const TranscriptContainer: FC<
49
50
  > = ({ space, model, running, onRunningChange, onReset }) => {
50
51
  return (
51
52
  <div className='grid grid-rows-[1fr_40px] grow divide-y divide-separator'>
52
- <Transcript space={space} model={model} />
53
+ <TranscriptView space={space} model={model} />
53
54
  <div className='grid grid-cols-[1fr_16rem] overflow-hidden'>
54
55
  <div className='flex items-center'>
55
56
  <SyntaxHighlighter language='json' className='text-sm'>
@@ -69,7 +70,7 @@ const TranscriptContainer: FC<
69
70
  );
70
71
  };
71
72
 
72
- type StoryProps = { messages?: DataType.Message[] } & Pick<TranscriptProps, 'ignoreAttention' | 'attendableId'>;
73
+ type StoryProps = { messages?: DataType.Message[] } & Pick<TranscriptViewProps, 'ignoreAttention' | 'attendableId'>;
73
74
 
74
75
  /**
75
76
  * Basic story mutates array of messages.
@@ -178,7 +179,7 @@ const QueueStoryWrapper = () => {
178
179
  return <QueueStory key={key} queueId={queueId} onReset={handleReset} />;
179
180
  };
180
181
 
181
- const meta: Meta<typeof QueueStory> = {
182
+ const meta = {
182
183
  title: 'plugins/plugin-transcription/Transcript',
183
184
  decorators: [
184
185
  withPluginManager({
@@ -187,7 +188,7 @@ const meta: Meta<typeof QueueStory> = {
187
188
  StorybookLayoutPlugin(),
188
189
  ClientPlugin({
189
190
  types: [TestItem, Testing.DocumentType, DataType.Person, DataType.Organization],
190
- onClientInitialized: async (_, client) => {
191
+ onClientInitialized: async ({ client }) => {
191
192
  await client.halo.createIdentity();
192
193
  },
193
194
  }),
@@ -202,13 +203,11 @@ const meta: Meta<typeof QueueStory> = {
202
203
  parameters: {
203
204
  translations,
204
205
  },
205
- };
206
+ } satisfies Meta;
206
207
 
207
208
  export default meta;
208
209
 
209
- type Story = StoryObj<typeof QueueStory>;
210
-
211
- export const Default: Story = {
210
+ export const Default: StoryObj<typeof BasicStory> = {
212
211
  render: BasicStory,
213
212
  args: {
214
213
  ignoreAttention: true,
@@ -217,7 +216,7 @@ export const Default: Story = {
217
216
  },
218
217
  };
219
218
 
220
- export const Empty: Story = {
219
+ export const Empty: StoryObj<typeof BasicStory> = {
221
220
  render: BasicStory,
222
221
  args: {
223
222
  ignoreAttention: true,
@@ -225,7 +224,7 @@ export const Empty: Story = {
225
224
  },
226
225
  };
227
226
 
228
- export const WithQueue: Story = {
227
+ export const WithQueue: StoryObj<typeof QueueStoryWrapper> = {
229
228
  render: QueueStoryWrapper,
230
229
  args: {
231
230
  ignoreAttention: true,
@@ -233,7 +232,7 @@ export const WithQueue: Story = {
233
232
  },
234
233
  };
235
234
 
236
- export const WithEntityExtractionQueue: Story = {
235
+ export const WithEntityExtractionQueue: StoryObj<typeof EntityExtractionQueueStory> = {
237
236
  render: EntityExtractionQueueStory,
238
237
  args: {
239
238
  ignoreAttention: true,
@@ -21,9 +21,10 @@ import { mx } from '@dxos/react-ui-theme';
21
21
  import { type DataType } from '@dxos/schema';
22
22
  import { isNotFalsy } from '@dxos/util';
23
23
 
24
- import { transcript } from './transcript-extension';
25
24
  import { type SerializationModel } from '../../model';
26
- import { type TranscriptType } from '../../types';
25
+ import { type Transcript } from '../../types';
26
+
27
+ import { transcript } from './transcript-extension';
27
28
 
28
29
  export const renderMarkdown =
29
30
  (identities: Identity[]) =>
@@ -50,8 +51,8 @@ export const renderMarkdown =
50
51
  ];
51
52
  };
52
53
 
53
- export type TranscriptProps = ThemedClassName<{
54
- transcript?: TranscriptType;
54
+ export type TranscriptViewProps = ThemedClassName<{
55
+ transcript?: Transcript.Transcript;
55
56
  space?: Space;
56
57
  model: SerializationModel<DataType.Message>;
57
58
  // TODO(wittjosiah): Move to container.
@@ -62,19 +63,19 @@ export type TranscriptProps = ThemedClassName<{
62
63
  /**
63
64
  * Transcript component implemented using the editor.
64
65
  */
65
- export const Transcript = ({
66
+ export const TranscriptView = ({
66
67
  classNames,
67
68
  transcript: object,
68
69
  space,
69
70
  model,
70
71
  attendableId,
71
72
  ignoreAttention,
72
- }: TranscriptProps) => {
73
+ }: TranscriptViewProps) => {
73
74
  const { themeMode } = useThemeContext();
74
75
  const { parentRef } = useTextEditor(() => {
75
76
  return {
76
77
  extensions: [
77
- createBasicExtensions({ readOnly: true, lineWrapping: true }),
78
+ createBasicExtensions({ readOnly: true, lineWrapping: true, search: true }),
78
79
  createMarkdownExtensions({ themeMode }),
79
80
  createThemeExtensions({ themeMode }),
80
81
  decorateMarkdown(),
@@ -5,16 +5,16 @@
5
5
  import { intervalToDuration } from 'date-fns/intervalToDuration';
6
6
  import { Schema } from 'effect';
7
7
  import { yieldOrContinue } from 'main-thread-scheduling';
8
- import React, { type FC, useCallback, useEffect, useMemo, useRef, useState, type WheelEvent } from 'react';
8
+ import React, { type FC, type WheelEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
9
  import { type OnResizeCallback, useResizeDetector } from 'react-resize-detector';
10
10
 
11
11
  import { Type } from '@dxos/echo';
12
12
  import { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';
13
13
  import { useAttention } from '@dxos/react-ui-attention';
14
14
  import {
15
+ type DxGridAxisMeta,
15
16
  type DxGridCellValue,
16
17
  type DxGridElement,
17
- type DxGridAxisMeta,
18
18
  type DxGridPlaneCells,
19
19
  Grid,
20
20
  toPlaneCellIndex,
@@ -115,7 +115,7 @@ const measureRows = async (
115
115
  return result;
116
116
  };
117
117
 
118
- export type TranscriptProps = ThemedClassName<{
118
+ export type TranscriptViewProps = ThemedClassName<{
119
119
  blocks?: TranscriptBlock[];
120
120
  attendableId?: string;
121
121
  ignoreAttention?: boolean;
@@ -124,7 +124,7 @@ export type TranscriptProps = ThemedClassName<{
124
124
  /**
125
125
  * @@deprecated
126
126
  */
127
- export const Transcript: FC<TranscriptProps> = ({ classNames, blocks, attendableId, ignoreAttention }) => {
127
+ export const Transcript: FC<TranscriptViewProps> = ({ classNames, blocks, attendableId, ignoreAttention }) => {
128
128
  const { t } = useTranslation(TRANSCRIPTION_PLUGIN);
129
129
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
130
130
  const [rows, setRows] = useState<DxGridAxisMeta | undefined>(undefined);
@@ -9,13 +9,14 @@ import { useMembers, useQueue } from '@dxos/react-client/echo';
9
9
  import { StackItem } from '@dxos/react-ui-stack';
10
10
  import { type DataType } from '@dxos/schema';
11
11
 
12
- import { Transcript, renderMarkdown } from './Transcript';
13
12
  import { useQueueModelAdapter } from '../hooks';
14
- import { type TranscriptType } from '../types';
13
+ import { type Transcript } from '../types';
14
+
15
+ import { TranscriptView, renderMarkdown } from './Transcript';
15
16
 
16
17
  export type TranscriptionContainerProps = {
17
18
  role: string;
18
- transcript: TranscriptType;
19
+ transcript: Transcript.Transcript;
19
20
  };
20
21
 
21
22
  export const TranscriptionContainer = ({ transcript }: TranscriptionContainerProps) => {
@@ -27,7 +28,7 @@ export const TranscriptionContainer = ({ transcript }: TranscriptionContainerPro
27
28
 
28
29
  return (
29
30
  <StackItem.Content classNames='container-max-width pli-2'>
30
- <Transcript attendableId={attendableId} space={space} model={model} transcript={transcript} />
31
+ <TranscriptView attendableId={attendableId} space={space} model={model} transcript={transcript} />
31
32
  </StackItem.Content>
32
33
  );
33
34
  };
@@ -23,18 +23,19 @@ import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
23
23
  import { ThemePlugin } from '@dxos/plugin-theme';
24
24
  import { defaultTx } from '@dxos/react-ui-theme';
25
25
  import { DataType } from '@dxos/schema';
26
- import { seedTestData, Testing } from '@dxos/schema/testing';
26
+ import { Testing, seedTestData } from '@dxos/schema/testing';
27
27
  import { withLayout, withTheme } from '@dxos/storybook-utils';
28
28
 
29
- import { TranscriptionStory } from './TranscriptionStory';
30
- import { useIsSpeaking } from './useIsSpeaking';
31
- import { TranscriptionPlugin } from '../../TranscriptionPlugin';
32
29
  import { useAudioFile, useQueueModelAdapter, useTranscriber } from '../../hooks';
33
- import { getActorId, MessageNormalizer } from '../../segments-normalization';
30
+ import { MessageNormalizer, getActorId } from '../../segments-normalization';
34
31
  import { TestItem } from '../../testing';
35
32
  import { type MediaStreamRecorderParams, type TranscriberParams } from '../../transcriber';
33
+ import { TranscriptionPlugin } from '../../TranscriptionPlugin';
36
34
  import { renderMarkdown } from '../Transcript';
37
35
 
36
+ import { TranscriptionStory } from './TranscriptionStory';
37
+ import { useIsSpeaking } from './useIsSpeaking';
38
+
38
39
  const AudioFile = ({
39
40
  detectSpeaking,
40
41
  audioUrl,
@@ -67,7 +68,6 @@ const AudioFile = ({
67
68
 
68
69
  useEffect(() => {
69
70
  if (!audio) {
70
- log.warn('no audio');
71
71
  return;
72
72
  }
73
73
 
@@ -146,10 +146,10 @@ const AudioFile = ({
146
146
  }, [normalizer]);
147
147
 
148
148
  const manageChunkRecording = () => {
149
- if (running && isSpeaking) {
149
+ if (running && isSpeaking && transcriber) {
150
150
  log.info('starting transcription');
151
151
  transcriber?.startChunksRecording();
152
- } else if (!isSpeaking || !running) {
152
+ } else if ((!isSpeaking || !running) && transcriber) {
153
153
  log.info('stopping transcription');
154
154
  transcriber?.stopChunksRecording();
155
155
  }
@@ -175,10 +175,18 @@ const AudioFile = ({
175
175
  manageChunkRecording();
176
176
  }, [isSpeaking, stream]);
177
177
 
178
- return <TranscriptionStory model={model} running={running} onRunningChange={setRunning} audioRef={ref} />;
178
+ return (
179
+ <TranscriptionStory
180
+ disabled={!stream}
181
+ model={model}
182
+ running={running}
183
+ onRunningChange={setRunning}
184
+ audioRef={ref}
185
+ />
186
+ );
179
187
  };
180
188
 
181
- const meta: Meta<typeof AudioFile> = {
189
+ const meta = {
182
190
  title: 'plugins/plugin-transcription/FileTranscription',
183
191
  decorators: [
184
192
  withPluginManager({
@@ -187,7 +195,7 @@ const meta: Meta<typeof AudioFile> = {
187
195
  StorybookLayoutPlugin(),
188
196
  ClientPlugin({
189
197
  types: [TestItem, DataType.Person, DataType.Organization, Testing.DocumentType],
190
- onClientInitialized: async (_, client) => {
198
+ onClientInitialized: async ({ client }) => {
191
199
  await client.halo.createIdentity();
192
200
  await client.spaces.waitUntilReady();
193
201
  await client.spaces.default.waitUntilReady();
@@ -205,10 +213,12 @@ const meta: Meta<typeof AudioFile> = {
205
213
  withTheme,
206
214
  withLayout({ fullscreen: true, classNames: 'justify-center' }),
207
215
  ],
208
- };
216
+ } satisfies Meta;
209
217
 
210
218
  export default meta;
211
219
 
220
+ type Story = StoryObj<typeof meta>;
221
+
212
222
  const TRANSCRIBER_CONFIG = {
213
223
  transcribeAfterChunksAmount: 100,
214
224
  prefixBufferChunksAmount: 50,