@dxos/plugin-transcription 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (139) hide show
  1. package/dist/lib/browser/TranscriptContainer-EKSP5DQ6.mjs +11 -0
  2. package/dist/lib/browser/{blueprint-definition-QQSGTX5F.mjs → blueprint-definition-WBWHO4OH.mjs} +24 -16
  3. package/dist/lib/browser/blueprint-definition-WBWHO4OH.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-TNEQFHIU.mjs → chunk-3MKZ2MNQ.mjs} +5 -5
  5. package/dist/lib/browser/chunk-3MKZ2MNQ.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-5I4BMOGE.mjs → chunk-EHT3TE6U.mjs} +129 -174
  7. package/dist/lib/browser/chunk-EHT3TE6U.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-26XDG6GQ.mjs → chunk-OCI42DWB.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-BA64VLLR.mjs → chunk-PVU4XCKI.mjs} +46 -66
  10. package/dist/lib/browser/chunk-PVU4XCKI.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-3X7HP44M.mjs → chunk-VBUIO677.mjs} +8 -5
  12. package/dist/lib/browser/chunk-VBUIO677.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-HXVGV7T6.mjs → chunk-W7WKZTM4.mjs} +4 -4
  14. package/dist/lib/browser/chunk-W7WKZTM4.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +13 -14
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-T3EGLS3L.mjs → intent-resolver-ZTKTEAQX.mjs} +5 -5
  18. package/dist/lib/browser/{intent-resolver-T3EGLS3L.mjs.map → intent-resolver-ZTKTEAQX.mjs.map} +1 -1
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-QYX74JNG.mjs → react-surface-NARMYO2O.mjs} +8 -8
  21. package/dist/lib/browser/{react-surface-QYX74JNG.mjs.map → react-surface-NARMYO2O.mjs.map} +1 -1
  22. package/dist/lib/browser/{transcriber-JOOAQVYV.mjs → transcriber-E2KAOXPS.mjs} +7 -7
  23. package/dist/lib/browser/{transcriber-JOOAQVYV.mjs.map → transcriber-E2KAOXPS.mjs.map} +1 -1
  24. package/dist/lib/browser/types/index.mjs +2 -2
  25. package/dist/lib/node-esm/{TranscriptContainer-BUWK63SI.mjs → TranscriptContainer-WU3EDQR3.mjs} +4 -4
  26. package/dist/lib/node-esm/{blueprint-definition-4PLCTH5Q.mjs → blueprint-definition-WUHZFRWZ.mjs} +24 -16
  27. package/dist/lib/node-esm/blueprint-definition-WUHZFRWZ.mjs.map +7 -0
  28. package/dist/lib/node-esm/{chunk-DT3AOC3E.mjs → chunk-7XASA7DX.mjs} +129 -174
  29. package/dist/lib/node-esm/chunk-7XASA7DX.mjs.map +7 -0
  30. package/dist/lib/node-esm/{chunk-W72HVQMD.mjs → chunk-OLMSTF3M.mjs} +4 -4
  31. package/dist/lib/node-esm/chunk-OLMSTF3M.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-3QAIZGMW.mjs → chunk-SWUVPFKR.mjs} +5 -5
  33. package/dist/lib/node-esm/chunk-SWUVPFKR.mjs.map +7 -0
  34. package/dist/lib/node-esm/{chunk-J5GQ3KGX.mjs → chunk-UVOYXXDJ.mjs} +46 -66
  35. package/dist/lib/node-esm/chunk-UVOYXXDJ.mjs.map +7 -0
  36. package/dist/lib/node-esm/{chunk-NWD757KH.mjs → chunk-X5BKN32O.mjs} +2 -2
  37. package/dist/lib/node-esm/{chunk-QARUDLHN.mjs → chunk-YVNQN2J6.mjs} +8 -5
  38. package/dist/lib/node-esm/chunk-YVNQN2J6.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +13 -14
  40. package/dist/lib/node-esm/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/{intent-resolver-VDHCUAIO.mjs → intent-resolver-55WH2GY6.mjs} +5 -5
  42. package/dist/lib/node-esm/{intent-resolver-VDHCUAIO.mjs.map → intent-resolver-55WH2GY6.mjs.map} +1 -1
  43. package/dist/lib/node-esm/meta.json +1 -1
  44. package/dist/lib/node-esm/{react-surface-TM7XOQBR.mjs → react-surface-5MQA3IUS.mjs} +8 -8
  45. package/dist/lib/node-esm/{react-surface-TM7XOQBR.mjs.map → react-surface-5MQA3IUS.mjs.map} +1 -1
  46. package/dist/lib/node-esm/{transcriber-QPS55YP2.mjs → transcriber-ZPJM4U2W.mjs} +7 -7
  47. package/dist/lib/node-esm/{transcriber-QPS55YP2.mjs.map → transcriber-ZPJM4U2W.mjs.map} +1 -1
  48. package/dist/lib/node-esm/types/index.mjs +2 -2
  49. package/dist/types/src/TranscriptionPlugin.d.ts +1 -1
  50. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/blueprint-definition.d.ts +1 -1
  52. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  53. package/dist/types/src/components/Transcript/Transcript.d.ts +5 -5
  54. package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
  55. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +3 -5
  56. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
  57. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +1 -1
  58. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +1 -1
  59. package/dist/types/src/components/Transcript/transcript-extension.d.ts +3 -7
  60. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +1 -1
  61. package/dist/types/src/components/TranscriptContainer.d.ts.map +1 -1
  62. package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -2
  63. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +1 -1
  64. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts +0 -1
  65. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +0 -2
  67. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/stories/TranscriptionStory.d.ts +3 -3
  69. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +1 -1
  70. package/dist/types/src/functions/open.d.ts +1 -1
  71. package/dist/types/src/functions/open.d.ts.map +1 -1
  72. package/dist/types/src/functions/summarize.d.ts +1 -1
  73. package/dist/types/src/functions/summarize.d.ts.map +1 -1
  74. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  75. package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
  76. package/dist/types/src/meta.d.ts +0 -1
  77. package/dist/types/src/meta.d.ts.map +1 -1
  78. package/dist/types/src/segments-normalization/message-normalizer.d.ts +3 -3
  79. package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +1 -1
  80. package/dist/types/src/segments-normalization/normalization.d.ts +32 -17
  81. package/dist/types/src/segments-normalization/normalization.d.ts.map +1 -1
  82. package/dist/types/src/segments-normalization/utils.d.ts +2 -2
  83. package/dist/types/src/segments-normalization/utils.d.ts.map +1 -1
  84. package/dist/types/src/testing/testing.d.ts +6 -6
  85. package/dist/types/src/testing/testing.d.ts.map +1 -1
  86. package/dist/types/src/transcriber/transcriber.d.ts +2 -2
  87. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  88. package/dist/types/src/transcriber/transcription-manager.d.ts +3 -3
  89. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  90. package/dist/types/src/types/Transcript.d.ts +3 -3
  91. package/dist/types/src/types/Transcript.d.ts.map +1 -1
  92. package/dist/types/src/types/TranscriptAction.d.ts +1 -1
  93. package/dist/types/src/types/TranscriptAction.d.ts.map +1 -1
  94. package/dist/types/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +64 -63
  96. package/src/TranscriptionPlugin.tsx +57 -57
  97. package/src/capabilities/capabilities.ts +3 -3
  98. package/src/components/Transcript/Transcript.stories.tsx +28 -24
  99. package/src/components/Transcript/Transcript.tsx +20 -27
  100. package/src/components/Transcript/deprecated/OldTranscript.tsx +5 -5
  101. package/src/components/Transcript/transcript-extension.ts +11 -44
  102. package/src/components/TranscriptContainer.tsx +8 -7
  103. package/src/components/stories/FileTranscription.stories.tsx +33 -31
  104. package/src/components/stories/KeyWordRecognition.stories.tsx +4 -6
  105. package/src/components/stories/MicrophoneTranscription.stories.tsx +40 -37
  106. package/src/components/stories/TranscriptionStory.tsx +8 -9
  107. package/src/functions/open.ts +8 -6
  108. package/src/functions/summarize.ts +10 -4
  109. package/src/hooks/useAudioFile.ts +50 -45
  110. package/src/hooks/useTranscriber.ts +7 -2
  111. package/src/meta.ts +7 -4
  112. package/src/model/model.test.ts +11 -11
  113. package/src/segments-normalization/message-normalizer.ts +6 -6
  114. package/src/segments-normalization/normalization.test.ts +6 -6
  115. package/src/segments-normalization/normalization.ts +7 -7
  116. package/src/segments-normalization/utils.ts +2 -2
  117. package/src/testing/testing.ts +25 -20
  118. package/src/transcriber/transcriber.browser.test.ts +3 -3
  119. package/src/transcriber/transcriber.ts +3 -3
  120. package/src/transcriber/transcription-manager.ts +6 -6
  121. package/src/types/Transcript.ts +1 -1
  122. package/src/types/TranscriptAction.ts +1 -1
  123. package/dist/lib/browser/TranscriptContainer-OX7OOODC.mjs +0 -11
  124. package/dist/lib/browser/blueprint-definition-QQSGTX5F.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-3X7HP44M.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-5I4BMOGE.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-BA64VLLR.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-HXVGV7T6.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-TNEQFHIU.mjs.map +0 -7
  130. package/dist/lib/node-esm/blueprint-definition-4PLCTH5Q.mjs.map +0 -7
  131. package/dist/lib/node-esm/chunk-3QAIZGMW.mjs.map +0 -7
  132. package/dist/lib/node-esm/chunk-DT3AOC3E.mjs.map +0 -7
  133. package/dist/lib/node-esm/chunk-J5GQ3KGX.mjs.map +0 -7
  134. package/dist/lib/node-esm/chunk-QARUDLHN.mjs.map +0 -7
  135. package/dist/lib/node-esm/chunk-W72HVQMD.mjs.map +0 -7
  136. /package/dist/lib/browser/{TranscriptContainer-OX7OOODC.mjs.map → TranscriptContainer-EKSP5DQ6.mjs.map} +0 -0
  137. /package/dist/lib/browser/{chunk-26XDG6GQ.mjs.map → chunk-OCI42DWB.mjs.map} +0 -0
  138. /package/dist/lib/node-esm/{TranscriptContainer-BUWK63SI.mjs.map → TranscriptContainer-WU3EDQR3.mjs.map} +0 -0
  139. /package/dist/lib/node-esm/{chunk-NWD757KH.mjs.map → chunk-X5BKN32O.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.5ea62a8",
3
+ "version": "0.8.4-main.72ec0f3",
4
4
  "description": "Voice transcription.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -34,10 +34,10 @@
34
34
  "src"
35
35
  ],
36
36
  "dependencies": {
37
- "@codemirror/state": "^6.4.1",
38
- "@codemirror/view": "^6.34.1",
37
+ "@codemirror/state": "^6.5.2",
38
+ "@codemirror/view": "^6.38.4",
39
39
  "@preact-signals/safe-react": "^0.9.0",
40
- "@preact/signals-core": "^1.9.0",
40
+ "@preact/signals-core": "^1.12.1",
41
41
  "date-fns": "^3.3.1",
42
42
  "extendable-media-recorder": "^9.2.19",
43
43
  "extendable-media-recorder-wav-encoder": "^7.0.123",
@@ -46,73 +46,74 @@
46
46
  "react-router-dom": "^6.4.0",
47
47
  "react-use": "^17.5.1",
48
48
  "wavefile": "^11.0.0",
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"
49
+ "@dxos/ai": "0.8.4-main.72ec0f3",
50
+ "@dxos/app-framework": "0.8.4-main.72ec0f3",
51
+ "@dxos/async": "0.8.4-main.72ec0f3",
52
+ "@dxos/client": "0.8.4-main.72ec0f3",
53
+ "@dxos/blueprints": "0.8.4-main.72ec0f3",
54
+ "@dxos/context": "0.8.4-main.72ec0f3",
55
+ "@dxos/codec-protobuf": "0.8.4-main.72ec0f3",
56
+ "@dxos/debug": "0.8.4-main.72ec0f3",
57
+ "@dxos/display-name": "0.8.4-main.72ec0f3",
58
+ "@dxos/echo-db": "0.8.4-main.72ec0f3",
59
+ "@dxos/functions": "0.8.4-main.72ec0f3",
60
+ "@dxos/functions-runtime": "0.8.4-main.72ec0f3",
61
+ "@dxos/echo": "0.8.4-main.72ec0f3",
62
+ "@dxos/invariant": "0.8.4-main.72ec0f3",
63
+ "@dxos/keys": "0.8.4-main.72ec0f3",
64
+ "@dxos/assistant": "0.8.4-main.72ec0f3",
65
+ "@dxos/local-storage": "0.8.4-main.72ec0f3",
66
+ "@dxos/log": "0.8.4-main.72ec0f3",
67
+ "@dxos/plugin-client": "0.8.4-main.72ec0f3",
68
+ "@dxos/plugin-deck": "0.8.4-main.72ec0f3",
69
+ "@dxos/plugin-markdown": "0.8.4-main.72ec0f3",
70
+ "@dxos/plugin-graph": "0.8.4-main.72ec0f3",
71
+ "@dxos/plugin-thread": "0.8.4-main.72ec0f3",
72
+ "@dxos/protocols": "0.8.4-main.72ec0f3",
73
+ "@dxos/react-edge-client": "0.8.4-main.72ec0f3",
74
+ "@dxos/live-object": "0.8.4-main.72ec0f3",
75
+ "@dxos/react-client": "0.8.4-main.72ec0f3",
76
+ "@dxos/plugin-space": "0.8.4-main.72ec0f3",
77
+ "@dxos/react-ui-attention": "0.8.4-main.72ec0f3",
78
+ "@dxos/react-ui-components": "0.8.4-main.72ec0f3",
79
+ "@dxos/react-ui-editor": "0.8.4-main.72ec0f3",
80
+ "@dxos/react-ui-form": "0.8.4-main.72ec0f3",
81
+ "@dxos/react-ui-grid": "0.8.4-main.72ec0f3",
82
+ "@dxos/react-ui-sfx": "0.8.4-main.72ec0f3",
83
+ "@dxos/react-ui-stack": "0.8.4-main.72ec0f3",
84
+ "@dxos/tracing": "0.8.4-main.72ec0f3",
85
+ "@dxos/types": "0.8.4-main.72ec0f3",
86
+ "@dxos/util": "0.8.4-main.72ec0f3",
87
+ "@dxos/schema": "0.8.4-main.72ec0f3"
87
88
  },
88
89
  "devDependencies": {
89
- "@effect-rx/rx-react": "0.38.0",
90
- "@effect/platform": "0.90.2",
90
+ "@effect-atom/atom-react": "^0.3.4",
91
+ "@effect/platform": "0.92.1",
91
92
  "@types/dom-speech-recognition": "^0.0.6",
92
- "@types/react": "~18.2.0",
93
- "effect": "3.17.7",
94
- "react": "~18.2.0",
95
- "react-dom": "~18.2.0",
93
+ "@types/react": "~19.2.2",
94
+ "effect": "3.18.3",
95
+ "react": "~19.2.0",
96
+ "react-dom": "~19.2.0",
96
97
  "tailwindcss": "~3.4.1",
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"
98
+ "@dxos/plugin-preview": "0.8.4-main.72ec0f3",
99
+ "@dxos/random": "0.8.4-main.72ec0f3",
100
+ "@dxos/react-ui": "0.8.4-main.72ec0f3",
101
+ "@dxos/react-ui-form": "0.8.4-main.72ec0f3",
102
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.72ec0f3",
103
+ "@dxos/react-ui-theme": "0.8.4-main.72ec0f3",
104
+ "@dxos/storybook-utils": "0.8.4-main.72ec0f3",
105
+ "@dxos/test-utils": "0.8.4-main.72ec0f3",
106
+ "@dxos/plugin-storybook-layout": "0.8.4-main.72ec0f3",
107
+ "@dxos/plugin-theme": "0.8.4-main.72ec0f3"
107
108
  },
108
109
  "peerDependencies": {
109
- "@effect-rx/rx-react": "^0.34.1",
110
+ "@effect-atom/atom-react": "^0.3.4",
110
111
  "@effect/platform": "^0.80.12",
111
112
  "effect": "^3.13.3",
112
- "react": "~18.2.0",
113
- "react-dom": "~18.2.0",
114
- "@dxos/react-ui": "0.8.4-main.5ea62a8",
115
- "@dxos/react-ui-theme": "0.8.4-main.5ea62a8"
113
+ "react": "^19.0.0",
114
+ "react-dom": "^19.0.0",
115
+ "@dxos/react-ui-theme": "0.8.4-main.72ec0f3",
116
+ "@dxos/react-ui": "0.8.4-main.72ec0f3"
116
117
  },
117
118
  "publishConfig": {
118
119
  "access": "public"
@@ -6,67 +6,67 @@ import { Capabilities, Events, contributes, defineModule, definePlugin } from '@
6
6
  import { Obj } from '@dxos/echo';
7
7
  import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
8
8
  import { getSpace } from '@dxos/react-client/echo';
9
- import { DataType } from '@dxos/schema';
9
+ import { Message } from '@dxos/types';
10
10
 
11
11
  import { BlueprintDefinition, IntentResolver, ReactSurface, Transcriber } from './capabilities';
12
- import { renderMarkdown } from './components';
12
+ import { renderByline } from './components';
13
13
  import { meta } from './meta';
14
14
  import { translations } from './translations';
15
15
  import { Transcript } from './types';
16
16
 
17
- export const TranscriptionPlugin = () =>
18
- definePlugin(meta, [
19
- defineModule({
20
- id: `${meta.id}/module/translations`,
21
- activatesOn: Events.SetupTranslations,
22
- activate: () => contributes(Capabilities.Translations, translations),
23
- }),
24
- defineModule({
25
- id: `${meta.id}/module/metadata`,
26
- activatesOn: Events.SetupMetadata,
27
- activate: (context) =>
28
- contributes(Capabilities.Metadata, {
29
- id: Transcript.Transcript.typename,
30
- metadata: {
31
- icon: 'ph--subtitles--regular',
32
- // TODO(wittjosiah): Factor out. Artifact? Separate capability?
33
- getTextContent: async (transcript: Transcript.Transcript) => {
34
- const space = getSpace(transcript);
35
- const members = space?.members.get().map((member) => member.identity) ?? [];
36
- const queue = space?.queues.get<DataType.Message>(transcript.queue.dxn);
37
- await queue?.refresh();
38
- const content = queue?.objects
39
- .filter((message) => Obj.instanceOf(DataType.Message, message))
40
- .flatMap((message, index) => renderMarkdown(members)(message, index))
41
- .join('\n\n');
42
- return content;
43
- },
17
+ export const TranscriptionPlugin = definePlugin(meta, () => [
18
+ defineModule({
19
+ id: `${meta.id}/module/translations`,
20
+ activatesOn: Events.SetupTranslations,
21
+ activate: () => contributes(Capabilities.Translations, translations),
22
+ }),
23
+ defineModule({
24
+ id: `${meta.id}/module/metadata`,
25
+ activatesOn: Events.SetupMetadata,
26
+ activate: () =>
27
+ contributes(Capabilities.Metadata, {
28
+ id: Transcript.Transcript.typename,
29
+ metadata: {
30
+ icon: 'ph--subtitles--regular',
31
+ iconHue: 'sky',
32
+ // TODO(wittjosiah): Factor out. Artifact? Separate capability?
33
+ getTextContent: async (transcript: Transcript.Transcript) => {
34
+ const space = getSpace(transcript);
35
+ const members = space?.members.get().map((member) => member.identity) ?? [];
36
+ const queue = space?.queues.get<Message.Message>(transcript.queue.dxn);
37
+ await queue?.refresh();
38
+ const content = queue?.objects
39
+ .filter((message) => Obj.instanceOf(Message.Message, message))
40
+ .flatMap((message, index) => renderByline(members)(message, index))
41
+ .join('\n\n');
42
+ return content;
44
43
  },
45
- }),
46
- }),
47
- defineModule({
48
- id: `${meta.id}/module/schema`,
49
- activatesOn: ClientEvents.SetupSchema,
50
- activate: () => [contributes(ClientCapabilities.Schema, [Transcript.Transcript])],
51
- }),
52
- defineModule({
53
- id: `${meta.id}/module/react-surface`,
54
- activatesOn: Events.SetupReactSurface,
55
- activate: ReactSurface,
56
- }),
57
- defineModule({
58
- id: `${meta.id}/module/intent-resolver`,
59
- activatesOn: Events.SetupIntentResolver,
60
- activate: IntentResolver,
61
- }),
62
- defineModule({
63
- id: `${meta.id}/module/transcription`,
64
- activatesOn: Events.SetupAppGraph,
65
- activate: Transcriber,
66
- }),
67
- defineModule({
68
- id: `${meta.id}/module/blueprint`,
69
- activatesOn: Events.SetupArtifactDefinition,
70
- activate: BlueprintDefinition,
71
- }),
72
- ]);
44
+ },
45
+ }),
46
+ }),
47
+ defineModule({
48
+ id: `${meta.id}/module/schema`,
49
+ activatesOn: ClientEvents.SetupSchema,
50
+ activate: () => [contributes(ClientCapabilities.Schema, [Transcript.Transcript])],
51
+ }),
52
+ defineModule({
53
+ id: `${meta.id}/module/react-surface`,
54
+ activatesOn: Events.SetupReactSurface,
55
+ activate: ReactSurface,
56
+ }),
57
+ defineModule({
58
+ id: `${meta.id}/module/intent-resolver`,
59
+ activatesOn: Events.SetupIntentResolver,
60
+ activate: IntentResolver,
61
+ }),
62
+ defineModule({
63
+ id: `${meta.id}/module/transcription`,
64
+ activatesOn: Events.SetupAppGraph,
65
+ activate: Transcriber,
66
+ }),
67
+ defineModule({
68
+ id: `${meta.id}/module/blueprint`,
69
+ activatesOn: Events.SetupArtifactDefinition,
70
+ activate: BlueprintDefinition,
71
+ }),
72
+ ]);
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { defineCapability } from '@dxos/app-framework';
6
6
 
7
- import { TRANSCRIPTION_PLUGIN } from '../meta';
7
+ import { meta } from '../meta';
8
8
  import {
9
9
  type MediaStreamRecorderParams,
10
10
  type Transcriber,
@@ -21,13 +21,13 @@ export namespace TranscriptionCapabilities {
21
21
  onSegments: TranscriberParams['onSegments'];
22
22
  };
23
23
  export type GetTranscriber = (props: GetTranscriberProps) => Transcriber;
24
- export const Transcriber = defineCapability<GetTranscriber>(`${TRANSCRIPTION_PLUGIN}/capability/transcriber`);
24
+ export const Transcriber = defineCapability<GetTranscriber>(`${meta.id}/capability/transcriber`);
25
25
 
26
26
  export type GetTranscriptionManagerProps = {
27
27
  messageEnricher?: TranscriptMessageEnricher;
28
28
  };
29
29
  export type GetTranscriptionManager = (props: GetTranscriptionManagerProps) => TranscriptionManager;
30
30
  export const TranscriptionManager = defineCapability<GetTranscriptionManager>(
31
- `${TRANSCRIPTION_PLUGIN}/capability/transcription-manager`,
31
+ `${meta.id}/capability/transcription-manager`,
32
32
  );
33
33
  }
@@ -2,8 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { type FC, useEffect, useMemo, useState } from 'react';
9
7
 
@@ -18,11 +16,11 @@ import { ThemePlugin } from '@dxos/plugin-theme';
18
16
  import { faker } from '@dxos/random';
19
17
  import { useMembers, useSpace } from '@dxos/react-client/echo';
20
18
  import { IconButton, Toolbar } from '@dxos/react-ui';
19
+ import { withTheme } from '@dxos/react-ui/testing';
21
20
  import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
22
21
  import { defaultTx } from '@dxos/react-ui-theme';
23
- import { DataType } from '@dxos/schema';
24
22
  import { Testing } from '@dxos/schema/testing';
25
- import { withLayout } from '@dxos/storybook-utils';
23
+ import { type Message, Organization, Person } from '@dxos/types';
26
24
 
27
25
  import { useQueueModelAdapter } from '../../hooks';
28
26
  import { SerializationModel } from '../../model';
@@ -34,7 +32,7 @@ import {
34
32
  } from '../../testing';
35
33
  import { translations } from '../../translations';
36
34
 
37
- import { TranscriptView, type TranscriptViewProps, renderMarkdown } from './Transcript';
35
+ import { TranscriptView, type TranscriptViewProps, renderByline } from './Transcript';
38
36
 
39
37
  faker.seed(1);
40
38
 
@@ -70,7 +68,7 @@ const TranscriptContainer: FC<
70
68
  );
71
69
  };
72
70
 
73
- type StoryProps = { messages?: DataType.Message[] } & Pick<TranscriptViewProps, 'ignoreAttention' | 'attendableId'>;
71
+ type StoryProps = { messages?: Message.Message[] } & Pick<TranscriptViewProps, 'ignoreAttention' | 'attendableId'>;
74
72
 
75
73
  /**
76
74
  * Basic story mutates array of messages.
@@ -79,11 +77,11 @@ const BasicStory = ({ messages: initialMessages = [], ...props }: StoryProps) =>
79
77
  const [reset, setReset] = useState({});
80
78
  const builder = useMemo(() => new MessageBuilder(), []);
81
79
  const model = useMemo(
82
- () => new SerializationModel<DataType.Message>(renderMarkdown([]), initialMessages),
80
+ () => new SerializationModel<Message.Message>(renderByline([]), initialMessages),
83
81
  [initialMessages, reset],
84
82
  );
85
83
  const [running, setRunning] = useState(true);
86
- const [currentMessage, setCurrentMessage] = useState<DataType.Message | null>(null);
84
+ const [currentMessage, setCurrentMessage] = useState<Message.Message | null>(null);
87
85
  useEffect(() => {
88
86
  if (!running) {
89
87
  return;
@@ -141,7 +139,7 @@ const QueueStory = ({
141
139
  const space = useSpace();
142
140
  const members = useMembers(space?.key).map((member) => member.identity);
143
141
  const queue = useTestTranscriptionQueue(space, queueId, running, 2_000);
144
- const model = useQueueModelAdapter(renderMarkdown(members), queue, initialMessages);
142
+ const model = useQueueModelAdapter(renderByline(members), queue, initialMessages);
145
143
 
146
144
  return (
147
145
  <TranscriptContainer
@@ -161,7 +159,7 @@ const EntityExtractionQueueStory = () => {
161
159
  const space = useSpace();
162
160
  const members = useMembers(space?.key).map((member) => member.identity);
163
161
  const queue = useTestTranscriptionQueueWithEntityExtraction(space, undefined, running, 2_000);
164
- const model = useQueueModelAdapter(renderMarkdown(members), queue, []);
162
+ const model = useQueueModelAdapter(renderByline(members), queue, []);
165
163
 
166
164
  return <TranscriptContainer space={space} model={model} running={running} onRunningChange={setRunning} />;
167
165
  };
@@ -182,25 +180,28 @@ const QueueStoryWrapper = () => {
182
180
  const meta = {
183
181
  title: 'plugins/plugin-transcription/Transcript',
184
182
  decorators: [
183
+ withTheme,
185
184
  withPluginManager({
186
185
  plugins: [
187
- ThemePlugin({ tx: defaultTx }),
188
- StorybookLayoutPlugin(),
189
186
  ClientPlugin({
190
- types: [TestItem, Testing.DocumentType, DataType.Person, DataType.Organization],
187
+ types: [TestItem, Testing.DocumentType, Person.Person, Organization.Organization],
191
188
  onClientInitialized: async ({ client }) => {
192
189
  await client.halo.createIdentity();
193
190
  },
194
191
  }),
195
- PreviewPlugin(),
196
- SpacePlugin(),
197
- SettingsPlugin(),
192
+ SpacePlugin({}),
198
193
  IntentPlugin(),
194
+ SettingsPlugin(),
195
+
196
+ // UI
197
+ PreviewPlugin(),
198
+ ThemePlugin({ tx: defaultTx }),
199
+ StorybookLayoutPlugin({}),
199
200
  ],
200
201
  }),
201
- withLayout({ fullscreen: true }),
202
202
  ],
203
203
  parameters: {
204
+ layout: 'fullscreen',
204
205
  translations,
205
206
  },
206
207
  } satisfies Meta;
@@ -232,10 +233,13 @@ export const WithQueue: StoryObj<typeof QueueStoryWrapper> = {
232
233
  },
233
234
  };
234
235
 
235
- export const WithEntityExtractionQueue: StoryObj<typeof EntityExtractionQueueStory> = {
236
- render: EntityExtractionQueueStory,
237
- args: {
238
- ignoreAttention: true,
239
- attendableId: 'story',
240
- },
241
- };
236
+ // NOTE: We are running out of free quota on hugging face entity extraction.
237
+ // TODO(mykola): Fix AI service in entity extraction function.
238
+ // TODO(mykola): Fix hugging face quota issues.
239
+ // export const WithEntityExtractionQueue: StoryObj<typeof EntityExtractionQueueStory> = {
240
+ // render: EntityExtractionQueueStory,
241
+ // args: {
242
+ // ignoreAttention: true,
243
+ // attendableId: 'story',
244
+ // },
245
+ // };
@@ -6,29 +6,30 @@ import React from 'react';
6
6
 
7
7
  import { type Space } from '@dxos/react-client/echo';
8
8
  import { type Identity } from '@dxos/react-client/halo';
9
- import { IconButton, type ThemedClassName, useThemeContext } from '@dxos/react-ui';
9
+ import { type ThemedClassName, useThemeContext } from '@dxos/react-ui';
10
10
  import {
11
+ autoScroll,
11
12
  createBasicExtensions,
12
13
  createMarkdownExtensions,
13
- createRenderer,
14
14
  createThemeExtensions,
15
15
  decorateMarkdown,
16
- editorWidth,
16
+ editorSlots,
17
17
  preview,
18
18
  useTextEditor,
19
19
  } from '@dxos/react-ui-editor';
20
20
  import { mx } from '@dxos/react-ui-theme';
21
- import { type DataType } from '@dxos/schema';
22
- import { isNotFalsy } from '@dxos/util';
21
+ import { type Message } from '@dxos/types';
22
+ import { isTruthy } from '@dxos/util';
23
23
 
24
24
  import { type SerializationModel } from '../../model';
25
25
  import { type Transcript } from '../../types';
26
26
 
27
27
  import { transcript } from './transcript-extension';
28
28
 
29
- export const renderMarkdown =
29
+ // TODO(thure): Move this?
30
+ export const renderByline =
30
31
  (identities: Identity[]) =>
31
- (message: DataType.Message, index: number, debug = false): string[] => {
32
+ (message: Message.Message, index: number, debug = false): string[] => {
32
33
  if (message.sender.role === 'assistant') {
33
34
  // Start/stop block.
34
35
  return [message.blocks.find((block) => block._tag === 'transcript')?.text ?? '', ''];
@@ -45,6 +46,7 @@ export const renderMarkdown =
45
46
  message.sender.identityDid;
46
47
  const blocks = message.blocks.filter((block) => block._tag === 'transcript');
47
48
  return [
49
+ // TODO(thure): Use an XML tag with the bits needed here.
48
50
  `###### ${name}` + (debug ? ` [${index}]:${message.id}` : ''),
49
51
  blocks.map((block) => block.text.trim()).join(' '),
50
52
  '',
@@ -52,10 +54,10 @@ export const renderMarkdown =
52
54
  };
53
55
 
54
56
  export type TranscriptViewProps = ThemedClassName<{
55
- transcript?: Transcript.Transcript;
56
57
  space?: Space;
57
- model: SerializationModel<DataType.Message>;
58
- // TODO(wittjosiah): Move to container.
58
+ transcript?: Transcript.Transcript;
59
+ model: SerializationModel<Message.Message>;
60
+ // TODO(burdon): Are these still in use?
59
61
  attendableId?: string;
60
62
  ignoreAttention?: boolean;
61
63
  }>;
@@ -63,39 +65,30 @@ export type TranscriptViewProps = ThemedClassName<{
63
65
  /**
64
66
  * Transcript component implemented using the editor.
65
67
  */
66
- export const TranscriptView = ({
67
- classNames,
68
- transcript: object,
69
- space,
70
- model,
71
- attendableId,
72
- ignoreAttention,
73
- }: TranscriptViewProps) => {
68
+ export const TranscriptView = ({ classNames, space, transcript: object, model }: TranscriptViewProps) => {
74
69
  const { themeMode } = useThemeContext();
75
70
  const { parentRef } = useTextEditor(() => {
76
71
  return {
77
72
  extensions: [
78
73
  createBasicExtensions({ readOnly: true, lineWrapping: true, search: true }),
79
- createMarkdownExtensions({ themeMode }),
80
- createThemeExtensions({ themeMode }),
74
+ createMarkdownExtensions(),
75
+ createThemeExtensions({ themeMode, slots: editorSlots }),
81
76
  decorateMarkdown(),
82
- space && preview(),
77
+ preview(),
83
78
  transcript({
84
79
  model,
85
80
  started: object?.started ? new Date(object.started) : undefined,
86
- renderButton: createRenderer(({ onClick }) => (
87
- <IconButton icon='ph--arrow-line-down--regular' iconOnly label='Scroll to bottom' onClick={onClick} />
88
- )),
89
81
  }),
90
- ].filter(isNotFalsy),
82
+ autoScroll(),
83
+ ].filter(isTruthy),
91
84
  };
92
85
  }, [space, model]);
93
86
 
94
87
  return (
95
88
  <div
96
89
  ref={parentRef}
97
- className={mx('flex grow overflow-hidden', editorWidth, classNames)}
98
- data-popover-collision-boundary={true}
90
+ className={mx('flex grow overflow-hidden container-max-width', classNames)}
91
+ data-popover-collision-boundary={true /* TODO(thure): Make this a constant and document it. */}
99
92
  />
100
93
  );
101
94
  };
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { intervalToDuration } from 'date-fns/intervalToDuration';
6
- import { Schema } from 'effect';
6
+ import * as Schema from 'effect/Schema';
7
7
  import { yieldOrContinue } from 'main-thread-scheduling';
8
8
  import React, { type FC, type WheelEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
9
  import { type OnResizeCallback, useResizeDetector } from 'react-resize-detector';
@@ -21,7 +21,7 @@ import {
21
21
  } from '@dxos/react-ui-grid';
22
22
  import { mx } from '@dxos/react-ui-theme';
23
23
 
24
- import { TRANSCRIPTION_PLUGIN } from '../../../meta';
24
+ import { meta } from '../../../meta';
25
25
 
26
26
  /**
27
27
  * Transcription fragment.
@@ -125,7 +125,7 @@ export type TranscriptViewProps = ThemedClassName<{
125
125
  * @@deprecated
126
126
  */
127
127
  export const Transcript: FC<TranscriptViewProps> = ({ classNames, blocks, attendableId, ignoreAttention }) => {
128
- const { t } = useTranslation(TRANSCRIPTION_PLUGIN);
128
+ const { t } = useTranslation(meta.id);
129
129
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
130
130
  const [rows, setRows] = useState<DxGridAxisMeta | undefined>(undefined);
131
131
  const [columns, setColumns] = useState<DxGridAxisMeta | undefined>(undefined);
@@ -144,7 +144,7 @@ export const Transcript: FC<TranscriptViewProps> = ({ classNames, blocks, attend
144
144
  [hasAttention, ignoreAttention],
145
145
  );
146
146
 
147
- const abortControllerRef = useRef<AbortController>();
147
+ const abortControllerRef = useRef<AbortController>(null);
148
148
 
149
149
  const handleResize = useCallback(
150
150
  async ({ entry }: { entry: { target: HTMLDivElement } | null }) => {
@@ -242,7 +242,7 @@ export const Transcript: FC<TranscriptViewProps> = ({ classNames, blocks, attend
242
242
  ref={setDxGrid}
243
243
  />
244
244
  </Grid.Root>
245
- <div role='none' {...{ inert: '' }} aria-hidden className={measureClasses} ref={measureRef} />
245
+ <div role='none' {...{ inert: true }} aria-hidden className={measureClasses} ref={measureRef} />
246
246
  <IconButton
247
247
  icon='ph--arrow-line-down--regular'
248
248
  iconOnly