@dxos/plugin-transcription 0.8.1-main.ba2dec9 → 0.8.1-staging.5be625a

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-N4KQHMY4.mjs → TranscriptContainer-TJXP6ICP.mjs} +3 -3
  2. package/dist/lib/browser/app-graph-builder-ZIIDYMHP.mjs +39 -0
  3. package/dist/lib/browser/app-graph-builder-ZIIDYMHP.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-BDVUIRBP.mjs → chunk-3NWYXRZS.mjs} +2 -2
  5. package/dist/lib/browser/chunk-MD4NQO6W.mjs +252 -0
  6. package/dist/lib/browser/chunk-MD4NQO6W.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-N3VKF2J3.mjs +415 -0
  8. package/dist/lib/browser/chunk-N3VKF2J3.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-YEVVZZTC.mjs +19 -0
  10. package/dist/lib/browser/chunk-YEVVZZTC.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-QIHUPVQD.mjs → chunk-YRW4MNRE.mjs} +23 -24
  12. package/dist/lib/browser/chunk-YRW4MNRE.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +56 -327
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/intent-resolver-AC6LFBE4.mjs +73 -0
  16. package/dist/lib/browser/intent-resolver-AC6LFBE4.mjs.map +7 -0
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/{react-surface-UPTZBHVB.mjs → react-surface-OM2EECBI.mjs} +15 -8
  19. package/dist/lib/{node-esm/react-surface-2WJQ67LB.mjs.map → browser/react-surface-OM2EECBI.mjs.map} +2 -2
  20. package/dist/lib/browser/types/index.mjs +2 -1
  21. package/dist/lib/node/{TranscriptContainer-4BWXOVML.cjs → TranscriptContainer-KNTN76RZ.cjs} +8 -8
  22. package/dist/lib/node/{TranscriptContainer-4BWXOVML.cjs.map → TranscriptContainer-KNTN76RZ.cjs.map} +2 -2
  23. package/dist/lib/node/app-graph-builder-CJSNQYJZ.cjs +52 -0
  24. package/dist/lib/node/app-graph-builder-CJSNQYJZ.cjs.map +7 -0
  25. package/dist/lib/node/chunk-EKSRBQX7.cjs +437 -0
  26. package/dist/lib/node/chunk-EKSRBQX7.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-I35KHI2G.cjs → chunk-I6CUIAQH.cjs} +5 -5
  28. package/dist/lib/node/{app-graph-builder-YFBX3OTP.cjs → chunk-LEHTJHKP.cjs} +23 -7
  29. package/dist/lib/node/chunk-LEHTJHKP.cjs.map +7 -0
  30. package/dist/lib/node/chunk-T4W4AKGM.cjs +279 -0
  31. package/dist/lib/node/chunk-T4W4AKGM.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-UIHEGU6Q.cjs → chunk-ZAE2IOZC.cjs} +25 -27
  33. package/dist/lib/node/chunk-ZAE2IOZC.cjs.map +7 -0
  34. package/dist/lib/node/index.cjs +78 -344
  35. package/dist/lib/node/index.cjs.map +4 -4
  36. package/dist/lib/node/intent-resolver-ZSQ2MHJJ.cjs +84 -0
  37. package/dist/lib/node/intent-resolver-ZSQ2MHJJ.cjs.map +7 -0
  38. package/dist/lib/node/meta.json +1 -1
  39. package/dist/lib/node/{react-surface-NCKXB7EQ.cjs → react-surface-ZENSCF6S.cjs} +18 -12
  40. package/dist/lib/node/{react-surface-NCKXB7EQ.cjs.map → react-surface-ZENSCF6S.cjs.map} +2 -2
  41. package/dist/lib/node/types/index.cjs +8 -7
  42. package/dist/lib/node/types/index.cjs.map +2 -2
  43. package/dist/lib/node-esm/{TranscriptContainer-6IKRASR6.mjs → TranscriptContainer-MOWZQSEO.mjs} +3 -3
  44. package/dist/lib/node-esm/app-graph-builder-ARTLU4U5.mjs +40 -0
  45. package/dist/lib/node-esm/app-graph-builder-ARTLU4U5.mjs.map +7 -0
  46. package/dist/lib/node-esm/chunk-4A6BWPRB.mjs +253 -0
  47. package/dist/lib/node-esm/chunk-4A6BWPRB.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-KEG3ME4O.mjs → chunk-DLXORY7Y.mjs} +22 -24
  49. package/dist/lib/node-esm/chunk-DLXORY7Y.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-2CPKXRN6.mjs → chunk-NFPDIQYG.mjs} +2 -2
  51. package/dist/lib/node-esm/chunk-SB5TLXBU.mjs +21 -0
  52. package/dist/lib/node-esm/chunk-SB5TLXBU.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-SWV74BYU.mjs +416 -0
  54. package/dist/lib/node-esm/chunk-SWV74BYU.mjs.map +7 -0
  55. package/dist/lib/node-esm/index.mjs +56 -327
  56. package/dist/lib/node-esm/index.mjs.map +4 -4
  57. package/dist/lib/node-esm/intent-resolver-XU4BLUSF.mjs +74 -0
  58. package/dist/lib/node-esm/intent-resolver-XU4BLUSF.mjs.map +7 -0
  59. package/dist/lib/node-esm/meta.json +1 -1
  60. package/dist/lib/node-esm/{react-surface-2WJQ67LB.mjs → react-surface-5CBEXLXJ.mjs} +15 -8
  61. package/dist/lib/{browser/react-surface-UPTZBHVB.mjs.map → node-esm/react-surface-5CBEXLXJ.mjs.map} +2 -2
  62. package/dist/lib/node-esm/types/index.mjs +2 -1
  63. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -0
  65. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  67. package/dist/types/src/components/Transcript/Transcript.d.ts +2 -0
  68. package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
  69. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
  70. package/dist/types/src/components/TranscriptContainer.d.ts +1 -0
  71. package/dist/types/src/components/TranscriptContainer.d.ts.map +1 -1
  72. package/dist/types/src/components/index.d.ts +1 -0
  73. package/dist/types/src/components/index.d.ts.map +1 -1
  74. package/dist/types/src/components/transcription.stories.d.ts +1 -1
  75. package/dist/types/src/components/transcription.stories.d.ts.map +1 -1
  76. package/dist/types/src/meta.d.ts +2 -9
  77. package/dist/types/src/meta.d.ts.map +1 -1
  78. package/dist/types/src/transcriber/index.d.ts +1 -0
  79. package/dist/types/src/transcriber/index.d.ts.map +1 -1
  80. package/dist/types/src/transcriber/summarize.d.ts +5 -0
  81. package/dist/types/src/transcriber/summarize.d.ts.map +1 -0
  82. package/dist/types/src/transcription-manager.d.ts +3 -0
  83. package/dist/types/src/transcription-manager.d.ts.map +1 -1
  84. package/dist/types/src/translations.d.ts +5 -6
  85. package/dist/types/src/translations.d.ts.map +1 -1
  86. package/dist/types/src/types/schema.d.ts +9 -15
  87. package/dist/types/src/types/schema.d.ts.map +1 -1
  88. package/dist/types/src/types/types.d.ts +13 -6
  89. package/dist/types/src/types/types.d.ts.map +1 -1
  90. package/dist/types/src/util/random-queue-dxn.d.ts +2 -2
  91. package/dist/types/src/util/random-queue-dxn.d.ts.map +1 -1
  92. package/package.json +39 -36
  93. package/src/TranscriptionPlugin.tsx +1 -2
  94. package/src/capabilities/app-graph-builder.ts +25 -2
  95. package/src/capabilities/intent-resolver.ts +24 -2
  96. package/src/capabilities/react-surface.tsx +2 -2
  97. package/src/components/Transcript/Transcript.stories.tsx +46 -27
  98. package/src/components/Transcript/Transcript.tsx +205 -49
  99. package/src/components/TranscriptContainer.tsx +12 -143
  100. package/src/components/transcription.stories.tsx +11 -13
  101. package/src/meta.ts +2 -2
  102. package/src/transcriber/index.ts +1 -0
  103. package/src/transcriber/summarize.ts +77 -0
  104. package/src/transcription-manager.ts +11 -1
  105. package/src/translations.ts +2 -2
  106. package/src/types/schema.ts +5 -3
  107. package/src/types/types.ts +12 -2
  108. package/src/util/random-queue-dxn.ts +2 -2
  109. package/dist/lib/browser/app-graph-builder-ZSSJIFY7.mjs +0 -7
  110. package/dist/lib/browser/app-graph-builder-ZSSJIFY7.mjs.map +0 -7
  111. package/dist/lib/browser/chunk-GHTRJTEB.mjs +0 -35
  112. package/dist/lib/browser/chunk-GHTRJTEB.mjs.map +0 -7
  113. package/dist/lib/browser/chunk-QIHUPVQD.mjs.map +0 -7
  114. package/dist/lib/browser/chunk-YX447BJ4.mjs +0 -241
  115. package/dist/lib/browser/chunk-YX447BJ4.mjs.map +0 -7
  116. package/dist/lib/browser/intent-resolver-RW6DEJC2.mjs +0 -32
  117. package/dist/lib/browser/intent-resolver-RW6DEJC2.mjs.map +0 -7
  118. package/dist/lib/node/app-graph-builder-YFBX3OTP.cjs.map +0 -7
  119. package/dist/lib/node/chunk-ANSWGFMS.cjs +0 -267
  120. package/dist/lib/node/chunk-ANSWGFMS.cjs.map +0 -7
  121. package/dist/lib/node/chunk-HDRXDMK2.cjs +0 -55
  122. package/dist/lib/node/chunk-HDRXDMK2.cjs.map +0 -7
  123. package/dist/lib/node/chunk-UIHEGU6Q.cjs.map +0 -7
  124. package/dist/lib/node/intent-resolver-KLBZ25XJ.cjs +0 -44
  125. package/dist/lib/node/intent-resolver-KLBZ25XJ.cjs.map +0 -7
  126. package/dist/lib/node-esm/app-graph-builder-77GQG6UF.mjs +0 -9
  127. package/dist/lib/node-esm/app-graph-builder-77GQG6UF.mjs.map +0 -7
  128. package/dist/lib/node-esm/chunk-KEG3ME4O.mjs.map +0 -7
  129. package/dist/lib/node-esm/chunk-LORUIVS4.mjs +0 -37
  130. package/dist/lib/node-esm/chunk-LORUIVS4.mjs.map +0 -7
  131. package/dist/lib/node-esm/chunk-ZMK2QLW2.mjs +0 -242
  132. package/dist/lib/node-esm/chunk-ZMK2QLW2.mjs.map +0 -7
  133. package/dist/lib/node-esm/intent-resolver-4FMISUPW.mjs +0 -33
  134. package/dist/lib/node-esm/intent-resolver-4FMISUPW.mjs.map +0 -7
  135. /package/dist/lib/browser/{TranscriptContainer-N4KQHMY4.mjs.map → TranscriptContainer-TJXP6ICP.mjs.map} +0 -0
  136. /package/dist/lib/browser/{chunk-BDVUIRBP.mjs.map → chunk-3NWYXRZS.mjs.map} +0 -0
  137. /package/dist/lib/node/{chunk-I35KHI2G.cjs.map → chunk-I6CUIAQH.cjs.map} +0 -0
  138. /package/dist/lib/node-esm/{TranscriptContainer-6IKRASR6.mjs.map → TranscriptContainer-MOWZQSEO.mjs.map} +0 -0
  139. /package/dist/lib/node-esm/{chunk-2CPKXRN6.mjs.map → chunk-NFPDIQYG.mjs.map} +0 -0
@@ -30,64 +30,55 @@ var node_exports = {};
30
30
  __export(node_exports, {
31
31
  AppGraphBuilder: () => AppGraphBuilder,
32
32
  IntentResolver: () => IntentResolver,
33
- MediaStreamRecorder: () => MediaStreamRecorder,
33
+ MediaStreamRecorder: () => import_chunk_EKSRBQX7.MediaStreamRecorder,
34
34
  ReactSurface: () => ReactSurface,
35
- TRANSCRIPTION_PLUGIN: () => import_chunk_UIHEGU6Q.TRANSCRIPTION_PLUGIN,
36
- Transcriber: () => Transcriber,
37
- Transcript: () => import_chunk_ANSWGFMS.Transcript,
38
- TranscriptContainer: () => import_chunk_I35KHI2G.TranscriptContainer,
35
+ TRANSCRIPTION_PLUGIN: () => import_chunk_LEHTJHKP.TRANSCRIPTION_PLUGIN,
36
+ Transcriber: () => import_chunk_EKSRBQX7.Transcriber,
37
+ Transcript: () => import_chunk_T4W4AKGM.Transcript,
38
+ TranscriptContainer: () => import_chunk_I6CUIAQH.TranscriptContainer,
39
39
  TranscriptionCapabilities: () => TranscriptionCapabilities,
40
- TranscriptionContainer: () => import_chunk_ANSWGFMS.TranscriptionContainer,
40
+ TranscriptionContainer: () => import_chunk_T4W4AKGM.TranscriptionContainer,
41
41
  TranscriptionManager: () => TranscriptionManager,
42
42
  TranscriptionPlugin: () => TranscriptionPlugin,
43
- meta: () => import_chunk_UIHEGU6Q.meta,
43
+ meta: () => import_chunk_LEHTJHKP.meta,
44
+ summarizeTranscript: () => import_chunk_EKSRBQX7.summarizeTranscript,
44
45
  useAudioFile: () => useAudioFile,
45
46
  useAudioTrack: () => useAudioTrack,
46
47
  useTranscriber: () => useTranscriber,
47
48
  useVoiceInput: () => useVoiceInput
48
49
  });
49
50
  module.exports = __toCommonJS(node_exports);
50
- var import_chunk_HDRXDMK2 = require("./chunk-HDRXDMK2.cjs");
51
- var import_chunk_I35KHI2G = require("./chunk-I35KHI2G.cjs");
52
- var import_chunk_ANSWGFMS = require("./chunk-ANSWGFMS.cjs");
53
- var import_chunk_UIHEGU6Q = require("./chunk-UIHEGU6Q.cjs");
51
+ var import_chunk_EKSRBQX7 = require("./chunk-EKSRBQX7.cjs");
52
+ var import_chunk_I6CUIAQH = require("./chunk-I6CUIAQH.cjs");
53
+ var import_chunk_ZAE2IOZC = require("./chunk-ZAE2IOZC.cjs");
54
+ var import_chunk_T4W4AKGM = require("./chunk-T4W4AKGM.cjs");
55
+ var import_chunk_LEHTJHKP = require("./chunk-LEHTJHKP.cjs");
54
56
  var import_app_framework = require("@dxos/app-framework");
55
57
  var import_app_framework2 = require("@dxos/app-framework");
56
58
  var import_react = require("react");
57
59
  var import_log = require("@dxos/log");
58
60
  var import_react2 = require("react");
59
61
  var import_react3 = require("react");
60
- var import_extendable_media_recorder = require("extendable-media-recorder");
61
- var import_wavefile = require("wavefile");
62
+ var import_react4 = require("react");
62
63
  var import_async = require("@dxos/async");
63
- var import_invariant = require("@dxos/invariant");
64
+ var import_context = require("@dxos/context");
64
65
  var import_log2 = require("@dxos/log");
65
- var import_tracing = require("@dxos/tracing");
66
- var import_wavefile2 = require("wavefile");
66
+ var import_react_ui_sfx = require("@dxos/react-ui-sfx");
67
67
  var import_async2 = require("@dxos/async");
68
- var import_context = require("@dxos/context");
69
- var import_log3 = require("@dxos/log");
70
- var import_tracing2 = require("@dxos/tracing");
71
- var import_react4 = require("react");
72
- var import_async3 = require("@dxos/async");
73
68
  var import_context2 = require("@dxos/context");
74
- var import_log4 = require("@dxos/log");
75
- var import_react_ui_sfx = require("@dxos/react-ui-sfx");
76
- var import_async4 = require("@dxos/async");
77
- var import_context3 = require("@dxos/context");
78
69
  var import_echo_db = require("@dxos/echo-db");
79
70
  var import_echo_schema = require("@dxos/echo-schema");
80
- var import_invariant2 = require("@dxos/invariant");
71
+ var import_invariant = require("@dxos/invariant");
81
72
  var import_keys = require("@dxos/keys");
82
73
  var import_app_framework3 = require("@dxos/app-framework");
83
74
  var import_plugin_client = require("@dxos/plugin-client");
84
75
  var TranscriptionCapabilities;
85
76
  (function(TranscriptionCapabilities2) {
86
- TranscriptionCapabilities2.Transcription = (0, import_app_framework2.defineCapability)(`${import_chunk_UIHEGU6Q.TRANSCRIPTION_PLUGIN}/capability/transcription`);
77
+ TranscriptionCapabilities2.Transcription = (0, import_app_framework2.defineCapability)(`${import_chunk_LEHTJHKP.TRANSCRIPTION_PLUGIN}/capability/transcription`);
87
78
  })(TranscriptionCapabilities || (TranscriptionCapabilities = {}));
88
- var AppGraphBuilder = (0, import_app_framework.lazy)(() => import("./app-graph-builder-YFBX3OTP.cjs"));
89
- var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-KLBZ25XJ.cjs"));
90
- var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-NCKXB7EQ.cjs"));
79
+ var AppGraphBuilder = (0, import_app_framework.lazy)(() => import("./app-graph-builder-CJSNQYJZ.cjs"));
80
+ var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-ZSQ2MHJJ.cjs"));
81
+ var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-ZENSCF6S.cjs"));
91
82
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/hooks/useAudioFile.ts";
92
83
  var useAudioFile = (audioUrl) => {
93
84
  const [{ audio, stream, track }, setStream] = (0, import_react.useState)({});
@@ -171,269 +162,6 @@ var useAudioTrack = (active) => {
171
162
  ]);
172
163
  return track;
173
164
  };
174
- function _ts_decorate(decorators, target, key, desc) {
175
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
176
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
177
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
178
- return c > 3 && r && Object.defineProperty(target, key, r), r;
179
- }
180
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/transcriber/media-stream-recorder.ts";
181
- var initializingPromise;
182
- var initializeExtendableMediaRecorder = async () => {
183
- const { connect } = await import("extendable-media-recorder-wav-encoder");
184
- await (0, import_extendable_media_recorder.register)(await connect());
185
- };
186
- var MediaStreamRecorder = class {
187
- constructor({ mediaStreamTrack, interval }) {
188
- this._mediaRecorder = void 0;
189
- this._header = void 0;
190
- this._mediaStreamTrack = mediaStreamTrack;
191
- this._interval = interval;
192
- }
193
- get wavConfig() {
194
- const settings = this._mediaStreamTrack.getSettings();
195
- return {
196
- channels: settings.channelCount ?? 1,
197
- sampleRate: settings.sampleRate ?? 16e3,
198
- bitDepthCode: settings.sampleSize ? String(settings.sampleSize) : "16"
199
- };
200
- }
201
- get mediaStreamTrack() {
202
- return this._mediaStreamTrack;
203
- }
204
- setOnChunk(onChunk) {
205
- this._onChunk = onChunk;
206
- }
207
- async start() {
208
- await (initializingPromise ??= initializeExtendableMediaRecorder()).catch((err) => import_log2.log.info("initializeExtendableMediaRecorder", {
209
- err
210
- }, {
211
- F: __dxlog_file2,
212
- L: 62,
213
- S: this,
214
- C: (f, a) => f(...a)
215
- }));
216
- if (!this._mediaRecorder) {
217
- const stream = new MediaStream([
218
- this._mediaStreamTrack
219
- ]);
220
- this._mediaRecorder = new import_extendable_media_recorder.MediaRecorder(stream, {
221
- mimeType: "audio/wav"
222
- });
223
- }
224
- if (this._mediaRecorder.state === "recording") {
225
- return;
226
- }
227
- (0, import_invariant.invariant)(this._onChunk, "MediaStreamRecorder: onChunk is not set", {
228
- F: __dxlog_file2,
229
- L: 73,
230
- S: this,
231
- A: [
232
- "this._onChunk",
233
- "'MediaStreamRecorder: onChunk is not set'"
234
- ]
235
- });
236
- this._mediaRecorder.ondataavailable = (event) => this._ondataavailable(event);
237
- this._mediaRecorder.start(this._interval);
238
- }
239
- async stop() {
240
- if (this._mediaRecorder?.state !== "recording") {
241
- return;
242
- }
243
- this._mediaRecorder.stop();
244
- }
245
- async _ondataavailable(event) {
246
- const blob = event.data;
247
- const uint8Array = new Uint8Array(await blob.arrayBuffer());
248
- const isHeader = uint8Array[0] === 82 && // R
249
- uint8Array[1] === 73 && // I
250
- uint8Array[2] === 70 && // F
251
- uint8Array[3] === 70;
252
- let wav;
253
- if (isHeader) {
254
- wav = new import_wavefile.WaveFile(uint8Array);
255
- this._header = uint8Array.slice(0, 44);
256
- } else if (this._header) {
257
- wav = new import_wavefile.WaveFile(new Uint8Array([
258
- ...this._header,
259
- ...uint8Array
260
- ]));
261
- } else {
262
- import_log2.log.warn("MediaStreamRecorder: no header", void 0, {
263
- F: __dxlog_file2,
264
- L: 104,
265
- S: this,
266
- C: (f, a) => f(...a)
267
- });
268
- return;
269
- }
270
- this._onChunk({
271
- timestamp: Date.now(),
272
- data: wav.getSamples()
273
- });
274
- }
275
- };
276
- _ts_decorate([
277
- import_async.synchronized
278
- ], MediaStreamRecorder.prototype, "_ondataavailable", null);
279
- MediaStreamRecorder = _ts_decorate([
280
- import_tracing.trace.resource()
281
- ], MediaStreamRecorder);
282
- function _ts_decorate2(decorators, target, key, desc) {
283
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
284
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
285
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
286
- return c > 3 && r && Object.defineProperty(target, key, r), r;
287
- }
288
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/transcriber/transcriber.ts";
289
- var Transcriber = class extends import_context.Resource {
290
- constructor({ config, recorder, onSegments }) {
291
- super();
292
- this._audioChunks = [];
293
- this._lastUsedTimestamp = 0;
294
- this._openTrigger = new import_async2.Trigger({
295
- autoReset: true
296
- });
297
- this._recording = false;
298
- this._transcribeTask = void 0;
299
- this._config = config;
300
- this._recorder = recorder;
301
- this._onSegments = onSegments;
302
- }
303
- async _open(ctx) {
304
- this._recorder.setOnChunk((chunk) => this._saveAudioChunk(chunk));
305
- await this._recorder.start();
306
- this._transcribeTask = new import_async2.DeferredTask(ctx, async () => this._transcribe());
307
- this._openTrigger.wake();
308
- }
309
- async _close() {
310
- this._recording = false;
311
- this._transcribeTask = void 0;
312
- await this._recorder.stop();
313
- }
314
- startChunksRecording() {
315
- if (this._lifecycleState !== import_context.LifecycleState.OPEN) {
316
- return;
317
- }
318
- this._recording = true;
319
- }
320
- stopChunksRecording() {
321
- if (this._lifecycleState !== import_context.LifecycleState.OPEN || !this._recording) {
322
- return;
323
- }
324
- this._recording = false;
325
- this._transcribeTask?.schedule();
326
- }
327
- _saveAudioChunk(chunk) {
328
- (0, import_log3.log)("saving audio chunk", {
329
- chunk
330
- }, {
331
- F: __dxlog_file3,
332
- L: 124,
333
- S: this,
334
- C: (f, a) => f(...a)
335
- });
336
- this._audioChunks.push(chunk);
337
- if (!this._recording && (!this._transcribeTask || !this._transcribeTask.scheduled) && this._audioChunks.length >= this._config.prefixBufferChunksAmount) {
338
- this._audioChunks = this._dropOldChunks();
339
- } else if (this._audioChunks.length >= this._config.transcribeAfterChunksAmount && this._recording) {
340
- this._transcribeTask?.schedule();
341
- }
342
- }
343
- async _transcribe() {
344
- (0, import_log3.log)("transcribing", {
345
- chunks: this._audioChunks.length
346
- }, {
347
- F: __dxlog_file3,
348
- L: 140,
349
- S: this,
350
- C: (f, a) => f(...a)
351
- });
352
- const chunks = this._audioChunks;
353
- this._audioChunks = this._dropOldChunks();
354
- if (chunks.length === 0) {
355
- return;
356
- }
357
- const audio = await this._mergeAudioChunks(chunks);
358
- const segments = await this._fetchTranscription(audio);
359
- if (!Array.isArray(segments) || segments.length === 0) {
360
- return;
361
- }
362
- const alignedSegments = this._alignSegments(segments, chunks);
363
- if (alignedSegments.length > 0) {
364
- await this._onSegments(alignedSegments);
365
- }
366
- }
367
- _dropOldChunks() {
368
- return this._config.prefixBufferChunksAmount > 0 ? this._audioChunks.slice(-this._config.prefixBufferChunksAmount) : [];
369
- }
370
- async _mergeAudioChunks(chunks) {
371
- const file = new import_wavefile2.WaveFile();
372
- const wavConfig = this._recorder.wavConfig;
373
- file.fromScratch(wavConfig.channels, wavConfig.sampleRate, wavConfig.bitDepthCode, (0, import_chunk_HDRXDMK2.mergeFloat64Arrays)(chunks.map(({ data }) => data)));
374
- return file.toBase64();
375
- }
376
- async _fetchTranscription(audio) {
377
- if (audio.length === 0) {
378
- this._audioChunks = [];
379
- throw new Error("No audio to send for transcribing");
380
- }
381
- const response = await fetch(`${import_chunk_UIHEGU6Q.TRANSCRIPTION_URL}/transcribe`, {
382
- method: "POST",
383
- body: JSON.stringify({
384
- audio
385
- }),
386
- headers: {
387
- "Content-Type": "application/json"
388
- }
389
- });
390
- if (!response.ok) {
391
- this._audioChunks = [];
392
- throw new Error("Failed to transcribe");
393
- }
394
- const { segments } = await response.json();
395
- import_log3.log.info("transcription response", {
396
- segments,
397
- string: segments.map((segments2) => segments2.text).join(" ")
398
- }, {
399
- F: __dxlog_file3,
400
- L: 206,
401
- S: this,
402
- C: (f, a) => f(...a)
403
- });
404
- return segments;
405
- }
406
- _alignSegments(segments, originalChunks) {
407
- const zeroTimestamp = originalChunks.at(0).timestamp;
408
- const filteredSegments = segments.filter((segment) => zeroTimestamp + segment.end * 1e3 >= this._lastUsedTimestamp).map((segment) => {
409
- const words = segment.words.filter((word) => zeroTimestamp + word.start * 1e3 >= this._lastUsedTimestamp);
410
- return {
411
- ...segment,
412
- words,
413
- text: words.map((word) => word.word).join(""),
414
- start: words.at(0)?.start ?? segment.end
415
- };
416
- }).filter((segment) => segment.words.length > 0);
417
- if (filteredSegments.length === 0) {
418
- return [];
419
- }
420
- this._lastUsedTimestamp = zeroTimestamp + filteredSegments.at(-1).end * 1e3;
421
- return filteredSegments.map((segment) => ({
422
- started: new Date(zeroTimestamp + segment.start * 1e3),
423
- text: segment.text
424
- }));
425
- }
426
- };
427
- _ts_decorate2([
428
- import_tracing2.trace.span({
429
- showInBrowserTimeline: true
430
- })
431
- ], Transcriber.prototype, "_mergeAudioChunks", null);
432
- _ts_decorate2([
433
- import_tracing2.trace.span({
434
- showInBrowserTimeline: true
435
- })
436
- ], Transcriber.prototype, "_fetchTranscription", null);
437
165
  var RECORD_INTERVAL = 200;
438
166
  var PREFIXED_CHUNKS_AMOUNT = 10;
439
167
  var TRANSCRIBE_AFTER_CHUNKS_AMOUNT = 50;
@@ -442,12 +170,12 @@ var useTranscriber = ({ audioStreamTrack, onSegments }) => {
442
170
  if (!onSegments || !audioStreamTrack) {
443
171
  return void 0;
444
172
  }
445
- return new Transcriber({
173
+ return new import_chunk_EKSRBQX7.Transcriber({
446
174
  config: {
447
175
  transcribeAfterChunksAmount: TRANSCRIBE_AFTER_CHUNKS_AMOUNT,
448
176
  prefixBufferChunksAmount: PREFIXED_CHUNKS_AMOUNT
449
177
  },
450
- recorder: new MediaStreamRecorder({
178
+ recorder: new import_chunk_EKSRBQX7.MediaStreamRecorder({
451
179
  mediaStreamTrack: audioStreamTrack,
452
180
  interval: RECORD_INTERVAL
453
181
  }),
@@ -466,7 +194,7 @@ var useTranscriber = ({ audioStreamTrack, onSegments }) => {
466
194
  ]);
467
195
  return transcriber;
468
196
  };
469
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/hooks/useVoiceInput.ts";
197
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/hooks/useVoiceInput.ts";
470
198
  var useVoiceInput = ({ active, onUpdate }) => {
471
199
  const soundStart = (0, import_react_ui_sfx.useSoundEffect)("StartRecording");
472
200
  const soundStop = (0, import_react_ui_sfx.useSoundEffect)("StopRecording");
@@ -481,15 +209,15 @@ var useVoiceInput = ({ active, onUpdate }) => {
481
209
  onSegments: handleSegments
482
210
  });
483
211
  (0, import_react4.useEffect)(() => {
484
- const ctx = new import_context2.Context(void 0, {
485
- F: __dxlog_file4,
212
+ const ctx = new import_context.Context(void 0, {
213
+ F: __dxlog_file2,
486
214
  L: 43
487
215
  });
488
- (0, import_async3.scheduleMicroTask)(ctx, async () => {
216
+ (0, import_async.scheduleMicroTask)(ctx, async () => {
489
217
  if (active && transcriber) {
490
218
  await transcriber.open();
491
- import_log4.log.info("starting...", void 0, {
492
- F: __dxlog_file4,
219
+ import_log2.log.info("starting...", void 0, {
220
+ F: __dxlog_file2,
493
221
  L: 47,
494
222
  S: void 0,
495
223
  C: (f, a) => f(...a)
@@ -500,8 +228,8 @@ var useVoiceInput = ({ active, onUpdate }) => {
500
228
  } else if (!active && transcriber?.isOpen) {
501
229
  transcriber?.stopChunksRecording();
502
230
  await transcriber?.close();
503
- import_log4.log.info("stopped", void 0, {
504
- F: __dxlog_file4,
231
+ import_log2.log.info("stopped", void 0, {
232
+ F: __dxlog_file2,
505
233
  L: 54,
506
234
  S: void 0,
507
235
  C: (f, a) => f(...a)
@@ -521,21 +249,22 @@ var useVoiceInput = ({ active, onUpdate }) => {
521
249
  recording
522
250
  };
523
251
  };
524
- function _ts_decorate3(decorators, target, key, desc) {
252
+ function _ts_decorate(decorators, target, key, desc) {
525
253
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
526
254
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
527
255
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
528
256
  return c > 3 && r && Object.defineProperty(target, key, r), r;
529
257
  }
530
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/transcription-manager.ts";
258
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-transcription/src/transcription-manager.ts";
531
259
  var RECORD_INTERVAL2 = 200;
532
260
  var PREFIXED_CHUNKS_AMOUNT2 = 10;
533
261
  var TRANSCRIBE_AFTER_CHUNKS_AMOUNT2 = 50;
534
- var TranscriptionManager = class extends import_context3.Resource {
262
+ var TranscriptionManager = class extends import_context2.Resource {
535
263
  constructor(edgeClient) {
536
264
  super();
537
265
  this._audioStreamTrack = void 0;
538
266
  this._name = void 0;
267
+ this._hue = void 0;
539
268
  this._mediaRecorder = void 0;
540
269
  this._transcriber = void 0;
541
270
  this._enabled = false;
@@ -592,9 +321,9 @@ var TranscriptionManager = class extends import_context3.Resource {
592
321
  if (this._queue === queue) {
593
322
  return;
594
323
  }
595
- (0, import_invariant2.invariant)(queue instanceof import_echo_db.QueueImpl, void 0, {
596
- F: __dxlog_file5,
597
- L: 110,
324
+ (0, import_invariant.invariant)(queue instanceof import_echo_db.QueueImpl, void 0, {
325
+ F: __dxlog_file3,
326
+ L: 112,
598
327
  S: this,
599
328
  A: [
600
329
  "queue instanceof QueueImpl",
@@ -614,6 +343,12 @@ var TranscriptionManager = class extends import_context3.Resource {
614
343
  }
615
344
  this._name = name;
616
345
  }
346
+ setHue(hue) {
347
+ if (this._hue === hue) {
348
+ return;
349
+ }
350
+ this._hue = hue;
351
+ }
617
352
  async _toggleTranscriber() {
618
353
  await this._maybeReinitTranscriber();
619
354
  if (this._enabled) {
@@ -628,7 +363,7 @@ var TranscriptionManager = class extends import_context3.Resource {
628
363
  }
629
364
  let needReinit = false;
630
365
  if (this._audioStreamTrack !== this._mediaRecorder?.mediaStreamTrack) {
631
- this._mediaRecorder = new MediaStreamRecorder({
366
+ this._mediaRecorder = new import_chunk_EKSRBQX7.MediaStreamRecorder({
632
367
  mediaStreamTrack: this._audioStreamTrack,
633
368
  interval: RECORD_INTERVAL2
634
369
  });
@@ -636,7 +371,7 @@ var TranscriptionManager = class extends import_context3.Resource {
636
371
  }
637
372
  if (needReinit) {
638
373
  await this._transcriber?.close();
639
- this._transcriber = new Transcriber({
374
+ this._transcriber = new import_chunk_EKSRBQX7.Transcriber({
640
375
  config: {
641
376
  transcribeAfterChunksAmount: TRANSCRIBE_AFTER_CHUNKS_AMOUNT2,
642
377
  prefixBufferChunksAmount: PREFIXED_CHUNKS_AMOUNT2
@@ -650,8 +385,9 @@ var TranscriptionManager = class extends import_context3.Resource {
650
385
  if (!this.isOpen || !this._queue) {
651
386
  return;
652
387
  }
653
- const block = (0, import_echo_schema.createStatic)(import_chunk_UIHEGU6Q.TranscriptBlock, {
654
- author: this._name,
388
+ const block = (0, import_echo_schema.createStatic)(import_chunk_ZAE2IOZC.TranscriptBlock, {
389
+ authorName: this._name,
390
+ authorHue: this._hue,
655
391
  segments
656
392
  });
657
393
  this._queue.append([
@@ -659,28 +395,32 @@ var TranscriptionManager = class extends import_context3.Resource {
659
395
  ]);
660
396
  }
661
397
  };
662
- _ts_decorate3([
663
- import_async4.synchronized
398
+ _ts_decorate([
399
+ import_async2.synchronized
664
400
  ], TranscriptionManager.prototype, "setRecording", null);
665
- _ts_decorate3([
666
- import_async4.synchronized
401
+ _ts_decorate([
402
+ import_async2.synchronized
667
403
  ], TranscriptionManager.prototype, "setEnabled", null);
668
- _ts_decorate3([
669
- import_async4.synchronized
404
+ _ts_decorate([
405
+ import_async2.synchronized
670
406
  ], TranscriptionManager.prototype, "setAudioTrack", null);
671
- _ts_decorate3([
672
- import_async4.synchronized
407
+ _ts_decorate([
408
+ import_async2.synchronized
673
409
  ], TranscriptionManager.prototype, "setQueue", null);
674
- _ts_decorate3([
675
- import_async4.synchronized
410
+ _ts_decorate([
411
+ import_async2.synchronized
676
412
  ], TranscriptionManager.prototype, "setName", null);
413
+ _ts_decorate([
414
+ import_async2.synchronized
415
+ ], TranscriptionManager.prototype, "setHue", null);
677
416
  var translations_default = [
678
417
  {
679
418
  "en-US": {
680
- [import_chunk_UIHEGU6Q.TranscriptType.typename]: {
681
- "typename label": "Transcript"
419
+ [import_chunk_ZAE2IOZC.TranscriptType.typename]: {
420
+ "typename label": "Transcript",
421
+ "object name placeholder": "New transcript"
682
422
  },
683
- [import_chunk_UIHEGU6Q.TRANSCRIPTION_PLUGIN]: {
423
+ [import_chunk_LEHTJHKP.TRANSCRIPTION_PLUGIN]: {
684
424
  "plugin name": "Transcription",
685
425
  "calls label": "Transcript",
686
426
  "calls panel label": "Transcription",
@@ -688,60 +428,53 @@ var translations_default = [
688
428
  "delete calls label": "Delete",
689
429
  "delete button": "Delete",
690
430
  "bookmark button": "Bookmark",
691
- "summary button": "Create summary",
692
- "summarizing label": "Summarizing..."
431
+ "scroll to end label": "Scroll to latest"
693
432
  }
694
433
  }
695
434
  }
696
435
  ];
697
- var TranscriptionPlugin = () => (0, import_app_framework3.definePlugin)(import_chunk_UIHEGU6Q.meta, [
436
+ var TranscriptionPlugin = () => (0, import_app_framework3.definePlugin)(import_chunk_LEHTJHKP.meta, [
698
437
  (0, import_app_framework3.defineModule)({
699
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/translations`,
438
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/translations`,
700
439
  activatesOn: import_app_framework3.Events.SetupTranslations,
701
440
  activate: () => (0, import_app_framework3.contributes)(import_app_framework3.Capabilities.Translations, translations_default)
702
441
  }),
703
442
  (0, import_app_framework3.defineModule)({
704
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/transcription`,
443
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/transcription`,
705
444
  activatesOn: import_app_framework3.Events.Startup,
706
445
  activate: () => (0, import_app_framework3.contributes)(TranscriptionCapabilities.Transcription, null)
707
446
  }),
708
447
  (0, import_app_framework3.defineModule)({
709
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/metadata`,
448
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/metadata`,
710
449
  activatesOn: import_app_framework3.Events.SetupMetadata,
711
450
  activate: () => (0, import_app_framework3.contributes)(import_app_framework3.Capabilities.Metadata, {
712
- id: import_chunk_UIHEGU6Q.TranscriptType.typename,
451
+ id: import_chunk_ZAE2IOZC.TranscriptType.typename,
713
452
  metadata: {
714
- placeholder: [
715
- "transcript title placeholder",
716
- {
717
- ns: import_chunk_UIHEGU6Q.TRANSCRIPTION_PLUGIN
718
- }
719
- ],
720
453
  icon: "ph--subtitles--regular"
721
454
  }
722
455
  })
723
456
  }),
724
457
  (0, import_app_framework3.defineModule)({
725
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/schema`,
458
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/schema`,
726
459
  activatesOn: import_plugin_client.ClientEvents.SetupSchema,
727
460
  activate: () => [
728
461
  (0, import_app_framework3.contributes)(import_plugin_client.ClientCapabilities.Schema, [
729
- import_chunk_UIHEGU6Q.TranscriptType
462
+ import_chunk_ZAE2IOZC.TranscriptType
730
463
  ])
731
464
  ]
732
465
  }),
733
466
  (0, import_app_framework3.defineModule)({
734
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/react-surface`,
467
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/react-surface`,
735
468
  activatesOn: import_app_framework3.Events.SetupReactSurface,
736
469
  activate: ReactSurface
737
470
  }),
738
471
  (0, import_app_framework3.defineModule)({
739
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/intent-resolver`,
472
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/intent-resolver`,
740
473
  activatesOn: import_app_framework3.Events.SetupIntentResolver,
741
474
  activate: IntentResolver
742
475
  }),
743
476
  (0, import_app_framework3.defineModule)({
744
- id: `${import_chunk_UIHEGU6Q.meta.id}/module/app-graph-builder`,
477
+ id: `${import_chunk_LEHTJHKP.meta.id}/module/app-graph-builder`,
745
478
  activatesOn: import_app_framework3.Events.SetupAppGraph,
746
479
  activate: AppGraphBuilder
747
480
  })
@@ -761,6 +494,7 @@ var TranscriptionPlugin = () => (0, import_app_framework3.definePlugin)(import_c
761
494
  TranscriptionManager,
762
495
  TranscriptionPlugin,
763
496
  meta,
497
+ summarizeTranscript,
764
498
  useAudioFile,
765
499
  useAudioTrack,
766
500
  useTranscriber,