@dxos/plugin-transcription 0.8.4-main.28f8d3d → 0.8.4-main.406dc2a

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 (153) hide show
  1. package/dist/lib/browser/TranscriptContainer-QN5WUMWJ.mjs +11 -0
  2. package/dist/lib/browser/blueprint-definition-GO6GTEBT.mjs +150 -0
  3. package/dist/lib/browser/blueprint-definition-GO6GTEBT.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-UKUSJTQW.mjs → chunk-77NWYLC6.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-5WH45KBY.mjs → chunk-7LNCQDTT.mjs} +9 -4
  6. package/dist/lib/browser/chunk-7LNCQDTT.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-KJIQQHJB.mjs → chunk-COBQIZ6B.mjs} +78 -98
  8. package/dist/lib/browser/{chunk-KJIQQHJB.mjs.map → chunk-COBQIZ6B.mjs.map} +3 -3
  9. package/dist/lib/browser/chunk-GGHMOEKZ.mjs +63 -0
  10. package/dist/lib/browser/chunk-GGHMOEKZ.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-SREIAQSP.mjs → chunk-LCK3YRQF.mjs} +5 -5
  12. package/dist/lib/browser/chunk-LCK3YRQF.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-BJWYA2BU.mjs → chunk-ZS2FXKEF.mjs} +141 -168
  14. package/dist/lib/browser/chunk-ZS2FXKEF.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +22 -18
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/intent-resolver-52EPFRMR.mjs +25 -0
  18. package/dist/lib/browser/intent-resolver-52EPFRMR.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-4MEJMKYQ.mjs → react-surface-LCP2D2MF.mjs} +10 -10
  21. package/dist/lib/browser/react-surface-LCP2D2MF.mjs.map +7 -0
  22. package/dist/lib/browser/{transcriber-V77CN7XX.mjs → transcriber-NG5MRCP6.mjs} +7 -7
  23. package/dist/lib/browser/{transcriber-V77CN7XX.mjs.map → transcriber-NG5MRCP6.mjs.map} +1 -1
  24. package/dist/lib/browser/types/index.mjs +6 -8
  25. package/dist/lib/node-esm/{TranscriptContainer-GEUOOYHX.mjs → TranscriptContainer-WCUWVVSD.mjs} +4 -4
  26. package/dist/lib/node-esm/blueprint-definition-6SU7GLBR.mjs +151 -0
  27. package/dist/lib/node-esm/blueprint-definition-6SU7GLBR.mjs.map +7 -0
  28. package/dist/lib/node-esm/{chunk-A33GNR44.mjs → chunk-A6SB234F.mjs} +78 -98
  29. package/dist/lib/node-esm/{chunk-A33GNR44.mjs.map → chunk-A6SB234F.mjs.map} +3 -3
  30. package/dist/lib/node-esm/chunk-FTTZ4YSX.mjs +64 -0
  31. package/dist/lib/node-esm/chunk-FTTZ4YSX.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-XMUCZBP3.mjs → chunk-KLTPFUKN.mjs} +8 -4
  33. package/dist/lib/node-esm/chunk-KLTPFUKN.mjs.map +7 -0
  34. package/dist/lib/node-esm/{chunk-PHP7MCAY.mjs → chunk-N5Z4SKPH.mjs} +2 -2
  35. package/dist/lib/node-esm/{chunk-Y7PCJ34K.mjs → chunk-PEZRQYKO.mjs} +141 -168
  36. package/dist/lib/node-esm/chunk-PEZRQYKO.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-TM2ASOZA.mjs → chunk-RWRG3S2O.mjs} +5 -5
  38. package/dist/lib/node-esm/chunk-RWRG3S2O.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +22 -18
  40. package/dist/lib/node-esm/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/intent-resolver-DZBQQRHN.mjs +26 -0
  42. package/dist/lib/node-esm/intent-resolver-DZBQQRHN.mjs.map +7 -0
  43. package/dist/lib/node-esm/meta.json +1 -1
  44. package/dist/lib/node-esm/{react-surface-EZUPNHUC.mjs → react-surface-7UC2YXX2.mjs} +10 -10
  45. package/dist/lib/node-esm/react-surface-7UC2YXX2.mjs.map +7 -0
  46. package/dist/lib/node-esm/{transcriber-3SX3DNLV.mjs → transcriber-SMU7HD6F.mjs} +7 -7
  47. package/dist/lib/node-esm/{transcriber-3SX3DNLV.mjs.map → transcriber-SMU7HD6F.mjs.map} +1 -1
  48. package/dist/lib/node-esm/types/index.mjs +6 -8
  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 +5 -0
  52. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  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/components/Transcript/Transcript.d.ts +5 -5
  61. package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
  62. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +31 -16
  63. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
  64. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +3 -3
  65. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +1 -1
  66. package/dist/types/src/components/Transcript/transcript-extension.d.ts +1 -5
  67. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +1 -1
  68. package/dist/types/src/components/TranscriptContainer.d.ts +2 -2
  69. package/dist/types/src/components/TranscriptContainer.d.ts.map +1 -1
  70. package/dist/types/src/components/stories/FileTranscription.stories.d.ts +8 -4
  71. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts +13 -6
  73. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +10 -6
  75. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/stories/TranscriptionStory.d.ts +2 -1
  77. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +1 -1
  78. package/dist/types/src/functions/index.d.ts +3 -0
  79. package/dist/types/src/functions/index.d.ts.map +1 -0
  80. package/dist/types/src/functions/open.d.ts +7 -0
  81. package/dist/types/src/functions/open.d.ts.map +1 -0
  82. package/dist/types/src/functions/summarize.d.ts +11 -0
  83. package/dist/types/src/functions/summarize.d.ts.map +1 -0
  84. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  85. package/dist/types/src/meta.d.ts +0 -1
  86. package/dist/types/src/meta.d.ts.map +1 -1
  87. package/dist/types/src/segments-normalization/normalization.d.ts +376 -331
  88. package/dist/types/src/segments-normalization/normalization.d.ts.map +1 -1
  89. package/dist/types/src/testing/testing.d.ts +1 -1
  90. package/dist/types/src/testing/testing.d.ts.map +1 -1
  91. package/dist/types/src/transcriber/transcription-manager.d.ts +3 -7
  92. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  93. package/dist/types/src/types/Transcript.d.ts +30 -0
  94. package/dist/types/src/types/Transcript.d.ts.map +1 -0
  95. package/dist/types/src/types/TranscriptAction.d.ts +23 -0
  96. package/dist/types/src/types/TranscriptAction.d.ts.map +1 -0
  97. package/dist/types/src/types/index.d.ts +2 -1
  98. package/dist/types/src/types/index.d.ts.map +1 -1
  99. package/dist/types/src/types/types.d.ts +0 -26
  100. package/dist/types/src/types/types.d.ts.map +1 -1
  101. package/dist/types/tsconfig.tsbuildinfo +1 -1
  102. package/package.json +61 -62
  103. package/src/TranscriptionPlugin.tsx +57 -53
  104. package/src/capabilities/blueprint-definition.ts +31 -0
  105. package/src/capabilities/capabilities.ts +3 -3
  106. package/src/capabilities/index.ts +1 -0
  107. package/src/capabilities/intent-resolver.ts +4 -10
  108. package/src/capabilities/react-surface.tsx +2 -2
  109. package/src/components/Transcript/Transcript.stories.tsx +32 -30
  110. package/src/components/Transcript/Transcript.tsx +17 -25
  111. package/src/components/Transcript/deprecated/OldTranscript.tsx +7 -7
  112. package/src/components/Transcript/transcript-extension.ts +2 -39
  113. package/src/components/TranscriptContainer.tsx +6 -6
  114. package/src/components/stories/FileTranscription.stories.tsx +42 -30
  115. package/src/components/stories/KeyWordRecognition.stories.tsx +16 -9
  116. package/src/components/stories/MicrophoneTranscription.stories.tsx +36 -32
  117. package/src/components/stories/TranscriptionStory.tsx +10 -6
  118. package/src/functions/index.ts +6 -0
  119. package/src/functions/open.ts +39 -0
  120. package/src/functions/summarize.ts +103 -0
  121. package/src/hooks/useAudioFile.ts +49 -53
  122. package/src/meta.ts +1 -3
  123. package/src/segments-normalization/normalization.test.ts +1 -1
  124. package/src/segments-normalization/normalization.ts +1 -1
  125. package/src/testing/testing.ts +5 -5
  126. package/src/transcriber/transcription-manager.ts +17 -38
  127. package/src/types/{schema.ts → Transcript.ts} +12 -9
  128. package/src/types/TranscriptAction.ts +24 -0
  129. package/src/types/index.ts +2 -1
  130. package/src/types/types.ts +0 -24
  131. package/dist/lib/browser/TranscriptContainer-FH7VAWYA.mjs +0 -11
  132. package/dist/lib/browser/chunk-5WH45KBY.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-BJWYA2BU.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-KWOOVS5G.mjs +0 -55
  135. package/dist/lib/browser/chunk-KWOOVS5G.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-SREIAQSP.mjs.map +0 -7
  137. package/dist/lib/browser/intent-resolver-AOVQ7JI4.mjs +0 -30
  138. package/dist/lib/browser/intent-resolver-AOVQ7JI4.mjs.map +0 -7
  139. package/dist/lib/browser/react-surface-4MEJMKYQ.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-IKQMDRY6.mjs +0 -56
  141. package/dist/lib/node-esm/chunk-IKQMDRY6.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-TM2ASOZA.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-XMUCZBP3.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-Y7PCJ34K.mjs.map +0 -7
  145. package/dist/lib/node-esm/intent-resolver-P4XPIKQF.mjs +0 -31
  146. package/dist/lib/node-esm/intent-resolver-P4XPIKQF.mjs.map +0 -7
  147. package/dist/lib/node-esm/react-surface-EZUPNHUC.mjs.map +0 -7
  148. package/dist/types/src/types/schema.d.ts +0 -41
  149. package/dist/types/src/types/schema.d.ts.map +0 -1
  150. /package/dist/lib/browser/{TranscriptContainer-FH7VAWYA.mjs.map → TranscriptContainer-QN5WUMWJ.mjs.map} +0 -0
  151. /package/dist/lib/browser/{chunk-UKUSJTQW.mjs.map → chunk-77NWYLC6.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{TranscriptContainer-GEUOOYHX.mjs.map → TranscriptContainer-WCUWVVSD.mjs.map} +0 -0
  153. /package/dist/lib/node-esm/{chunk-PHP7MCAY.mjs.map → chunk-N5Z4SKPH.mjs.map} +0 -0
@@ -0,0 +1,64 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ __export,
4
+ meta
5
+ } from "./chunk-KLTPFUKN.mjs";
6
+
7
+ // src/types/TranscriptAction.ts
8
+ var TranscriptAction_exports = {};
9
+ __export(TranscriptAction_exports, {
10
+ Create: () => Create
11
+ });
12
+ import * as Schema2 from "effect/Schema";
13
+ import { SpaceSchema } from "@dxos/client/echo";
14
+
15
+ // src/types/Transcript.ts
16
+ var Transcript_exports = {};
17
+ __export(Transcript_exports, {
18
+ Transcript: () => Transcript,
19
+ makeTranscript: () => makeTranscript
20
+ });
21
+ import * as Schema from "effect/Schema";
22
+ import { Queue } from "@dxos/client/echo";
23
+ import { Obj, Ref, Type } from "@dxos/echo";
24
+ var Transcript = Schema.Struct({
25
+ // TODO(wittjosiah): Remove?
26
+ // TODO(burdon): Use Date or string?
27
+ started: Schema.optional(Schema.String),
28
+ ended: Schema.optional(Schema.String),
29
+ /**
30
+ * Queue containing TranscriptBlock objects.
31
+ */
32
+ queue: Type.Ref(Queue)
33
+ }).pipe(Type.Obj({
34
+ typename: "dxos.org/type/Transcript",
35
+ version: "0.1.0"
36
+ }));
37
+ var TranscriptHeader = Schema.Struct({
38
+ started: Schema.optional(Schema.String)
39
+ });
40
+ var makeTranscript = (queueDxn) => Obj.make(Transcript, {
41
+ queue: Ref.fromDXN(queueDxn)
42
+ });
43
+
44
+ // src/types/TranscriptAction.ts
45
+ var Create = class extends Schema2.TaggedClass()(`${meta.id}/action/create`, {
46
+ input: Schema2.Struct({
47
+ name: Schema2.optional(Schema2.String),
48
+ space: SpaceSchema
49
+ }),
50
+ output: Schema2.Struct({
51
+ object: Transcript
52
+ })
53
+ }) {
54
+ };
55
+
56
+ // src/types/types.ts
57
+ var TRANSCRIPTION_URL = "https://calls-service.dxos.workers.dev";
58
+
59
+ export {
60
+ Transcript_exports,
61
+ TranscriptAction_exports,
62
+ TRANSCRIPTION_URL
63
+ };
64
+ //# sourceMappingURL=chunk-FTTZ4YSX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/TranscriptAction.ts", "../../../src/types/Transcript.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SpaceSchema } from '@dxos/client/echo';\n\nimport { meta } from '../meta';\n\nimport { Transcript } from './Transcript';\n\n/**\n * Endpoint to the calls service.\n */\nexport class Create extends Schema.TaggedClass<Create>()(`${meta.id}/action/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n space: SpaceSchema,\n }),\n output: Schema.Struct({\n object: Transcript,\n }),\n}) {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Queue } from '@dxos/client/echo';\nimport { type DXN, Obj, Ref, Type } from '@dxos/echo';\n\n/**\n * Root transcript object created when the user starts a transcription.\n */\nexport const Transcript = Schema.Struct({\n // TODO(wittjosiah): Remove?\n // TODO(burdon): Use Date or string?\n started: Schema.optional(Schema.String),\n ended: Schema.optional(Schema.String),\n\n /**\n * Queue containing TranscriptBlock objects.\n */\n queue: Type.Ref(Queue),\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Transcript',\n version: '0.1.0',\n }),\n);\n\nexport type Transcript = Schema.Schema.Type<typeof Transcript>;\n\n// TODO(burdon): Do these need to be kept in sync with EDGE?\n\n/**\n * First message in queue.\n * Contains metadata for the recording and transcript.\n */\nconst TranscriptHeader = Schema.Struct({\n started: Schema.optional(Schema.String),\n});\n\nexport type TranscriptHeader = Schema.Schema.Type<typeof TranscriptHeader>;\n\nexport const makeTranscript = (queueDxn: DXN) => Obj.make(Transcript, { queue: Ref.fromDXN(queueDxn) });\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Endpoint to the calls service.\n */\n// TODO(burdon): Reconfigure/move.\nexport const TRANSCRIPTION_URL = 'https://calls-service.dxos.workers.dev';\n"],
5
+ "mappings": ";;;;;;;AAAA;;;;AAIA,YAAYA,aAAY;AAExB,SAASC,mBAAmB;;;ACN5B;;;;;AAIA,YAAYC,YAAY;AAExB,SAASC,aAAa;AACtB,SAAmBC,KAAKC,KAAKC,YAAY;AAKlC,IAAMC,aAAoBC,cAAO;;;EAGtCC,SAAgBC,gBAAgBC,aAAM;EACtCC,OAAcF,gBAAgBC,aAAM;;;;EAKpCE,OAAOC,KAAKC,IAAIC,KAAAA;AAClB,CAAA,EAAGC,KACDH,KAAKI,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,CAAA;AAWF,IAAMC,mBAA0Bb,cAAO;EACrCC,SAAgBC,gBAAgBC,aAAM;AACxC,CAAA;AAIO,IAAMW,iBAAiB,CAACC,aAAkBL,IAAIM,KAAKjB,YAAY;EAAEM,OAAOE,IAAIU,QAAQF,QAAAA;AAAU,CAAA;;;AD5B9F,IAAMG,SAAN,cAA4BC,oBAAW,EAAW,GAAGC,KAAKC,EAAE,kBAAkB;EACnFC,OAAcC,eAAO;IACnBC,MAAaC,iBAAgBC,cAAM;IACnCC,OAAOC;EACT,CAAA;EACAC,QAAeN,eAAO;IACpBO,QAAQC;EACV,CAAA;AACF,CAAA,EAAA;AAAI;;;AEfG,IAAMC,oBAAoB;",
6
+ "names": ["Schema", "SpaceSchema", "Schema", "Queue", "Obj", "Ref", "Type", "Transcript", "Struct", "started", "optional", "String", "ended", "queue", "Type", "Ref", "Queue", "pipe", "Obj", "typename", "version", "TranscriptHeader", "makeTranscript", "queueDxn", "make", "fromDXN", "Create", "TaggedClass", "meta", "id", "input", "Struct", "name", "optional", "String", "space", "SpaceSchema", "output", "object", "Transcript", "TRANSCRIPTION_URL"]
7
+ }
@@ -1,9 +1,13 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
2
7
 
3
8
  // src/meta.ts
4
- var TRANSCRIPTION_PLUGIN = "dxos.org/plugin/transcription";
5
9
  var meta = {
6
- id: TRANSCRIPTION_PLUGIN,
10
+ id: "dxos.org/plugin/transcription",
7
11
  name: "Transcription",
8
12
  description: "Voice transcription.",
9
13
  icon: "ph--microphone--regular",
@@ -15,7 +19,7 @@ var meta = {
15
19
  };
16
20
 
17
21
  export {
18
- TRANSCRIPTION_PLUGIN,
22
+ __export,
19
23
  meta
20
24
  };
21
- //# sourceMappingURL=chunk-XMUCZBP3.mjs.map
25
+ //# sourceMappingURL=chunk-KLTPFUKN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/transcription',\n name: 'Transcription',\n description: 'Voice transcription.',\n icon: 'ph--microphone--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-transcription',\n tags: ['labs'],\n screenshots: [],\n};\n"],
5
+ "mappings": ";;;;;;;;AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa,CAAA;AACf;",
6
+ "names": ["meta", "id", "name", "description", "icon", "source", "tags", "screenshots"]
7
+ }
@@ -2,9 +2,9 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
 
3
3
  // src/components/index.ts
4
4
  import { lazy } from "react";
5
- var TranscriptContainer = lazy(() => import("./TranscriptContainer-GEUOOYHX.mjs"));
5
+ var TranscriptContainer = lazy(() => import("./TranscriptContainer-WCUWVVSD.mjs"));
6
6
 
7
7
  export {
8
8
  TranscriptContainer
9
9
  };
10
- //# sourceMappingURL=chunk-PHP7MCAY.mjs.map
10
+ //# sourceMappingURL=chunk-N5Z4SKPH.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  TranscriptionCapabilities
4
- } from "./chunk-TM2ASOZA.mjs";
4
+ } from "./chunk-RWRG3S2O.mjs";
5
5
 
6
6
  // src/components/TranscriptContainer.tsx
7
7
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
@@ -24,76 +24,66 @@ var useAudioFile = (audioUrl, constraints) => {
24
24
  L: 20
25
25
  });
26
26
  scheduleTask(ctx, async () => {
27
- const response = await fetch(audioUrl);
28
- const blob = await response.blob();
29
- const objectUrl = URL.createObjectURL(blob);
30
- ctx.onDispose(() => {
31
- URL.revokeObjectURL(objectUrl);
32
- });
33
- const audio2 = new Audio();
34
- audio2.src = objectUrl;
35
- await new Promise((resolve, reject) => {
36
- audio2.addEventListener("error", (err) => {
37
- log.error("error", {
38
- err
39
- }, {
40
- F: __dxlog_file,
41
- L: 37,
42
- S: void 0,
43
- C: (f, a) => f(...a)
44
- });
45
- reject(err);
46
- }, {
47
- once: true
27
+ try {
28
+ const response = await fetch(audioUrl);
29
+ const blob = await response.blob();
30
+ const objectUrl = URL.createObjectURL(blob);
31
+ ctx.onDispose(() => {
32
+ URL.revokeObjectURL(objectUrl);
48
33
  });
49
- audio2.addEventListener("canplay", async () => {
50
- log.info("starting...", void 0, {
51
- F: __dxlog_file,
52
- L: 45,
53
- S: void 0,
54
- C: (f, a) => f(...a)
55
- });
56
- try {
57
- await audio2.play();
58
- resolve();
59
- } catch (playError) {
60
- log.error("Play failed", {
61
- playError
34
+ const audio2 = new Audio();
35
+ audio2.src = objectUrl;
36
+ await new Promise((resolve, reject) => {
37
+ audio2.addEventListener("error", (err) => {
38
+ log.error("error", {
39
+ err
62
40
  }, {
63
41
  F: __dxlog_file,
64
- L: 51,
42
+ L: 39,
65
43
  S: void 0,
66
44
  C: (f, a) => f(...a)
67
45
  });
46
+ reject(err);
47
+ }, {
48
+ once: true
49
+ });
50
+ audio2.addEventListener("canplay", async () => {
68
51
  resolve();
69
- }
70
- }, {
71
- once: true
52
+ }, {
53
+ once: true
54
+ });
55
+ audio2.load();
72
56
  });
73
- audio2.load();
74
- });
75
- const audioCtx = new AudioContext();
76
- if (audioCtx.state === "suspended") {
77
- await audioCtx.resume();
78
- }
79
- const destination = audioCtx.createMediaStreamDestination();
80
- destination.channelCount = 1;
81
- const source = audioCtx.createMediaElementSource(audio2);
82
- source.connect(destination);
83
- const track2 = destination.stream.getAudioTracks()[0];
84
- if (constraints) {
85
- await track2.applyConstraints(constraints).catch((err) => log.catch(err, void 0, {
57
+ const audioCtx = new AudioContext();
58
+ if (audioCtx.state === "suspended") {
59
+ await audioCtx.resume();
60
+ }
61
+ const destination = audioCtx.createMediaStreamDestination();
62
+ destination.channelCount = 1;
63
+ const source = audioCtx.createMediaElementSource(audio2);
64
+ source.connect(destination);
65
+ const track2 = destination.stream.getAudioTracks()[0];
66
+ if (constraints) {
67
+ await track2.applyConstraints(constraints).catch((err) => log.catch(err, void 0, {
68
+ F: __dxlog_file,
69
+ L: 68,
70
+ S: void 0,
71
+ C: (f, a) => f(...a)
72
+ }));
73
+ }
74
+ setStream({
75
+ audio: audio2,
76
+ stream: destination.stream,
77
+ track: destination.stream.getAudioTracks()[0]
78
+ });
79
+ } catch (err) {
80
+ log.catch(err, void 0, {
86
81
  F: __dxlog_file,
87
- L: 75,
82
+ L: 78,
88
83
  S: void 0,
89
84
  C: (f, a) => f(...a)
90
- }));
85
+ });
91
86
  }
92
- setStream({
93
- audio: audio2,
94
- stream: destination.stream,
95
- track: destination.stream.getAudioTracks()[0]
96
- });
97
87
  });
98
88
  return () => {
99
89
  void ctx.dispose();
@@ -145,12 +135,21 @@ import { Text } from "@codemirror/state";
145
135
  import { Event } from "@dxos/async";
146
136
  import { invariant } from "@dxos/invariant";
147
137
  import { log as log2 } from "@dxos/log";
138
+ function _define_property(obj, key, value) {
139
+ if (key in obj) {
140
+ Object.defineProperty(obj, key, {
141
+ value,
142
+ enumerable: true,
143
+ configurable: true,
144
+ writable: true
145
+ });
146
+ } else {
147
+ obj[key] = value;
148
+ }
149
+ return obj;
150
+ }
148
151
  var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/model/model.ts";
149
152
  var DocumentAdapter = class {
150
- _view;
151
- constructor(_view) {
152
- this._view = _view;
153
- }
154
153
  /** The document must always have at least one line. */
155
154
  lineCount() {
156
155
  return this._view.state.doc.lines - 1;
@@ -182,30 +181,12 @@ var DocumentAdapter = class {
182
181
  }
183
182
  });
184
183
  }
184
+ constructor(_view) {
185
+ _define_property(this, "_view", void 0);
186
+ this._view = _view;
187
+ }
185
188
  };
186
189
  var SerializationModel = class {
187
- _renderer;
188
- /** Ordered set of chunks. */
189
- _chunks;
190
- /** Map of chunk IDs to their current line counts. */
191
- _chunkLineCounts;
192
- /** Map of line numbers to chunk IDs. */
193
- _lineToChunk;
194
- /** Track chunk changes since last sync. */
195
- _changes;
196
- /** Emits when the document is updated. */
197
- update;
198
- constructor(_renderer, initialChunks = []) {
199
- this._renderer = _renderer;
200
- this._chunks = [];
201
- this._chunkLineCounts = /* @__PURE__ */ new Map();
202
- this._lineToChunk = /* @__PURE__ */ new Map();
203
- this._changes = [];
204
- this.update = new Event();
205
- initialChunks.forEach((chunk) => {
206
- this.appendChunk(chunk);
207
- });
208
- }
209
190
  toJSON() {
210
191
  return {
211
192
  chunks: this._chunks.length,
@@ -343,6 +324,23 @@ var SerializationModel = class {
343
324
  this._changes.length = 0;
344
325
  return this;
345
326
  }
327
+ constructor(_renderer, initialChunks = []) {
328
+ _define_property(this, "_renderer", void 0);
329
+ _define_property(this, "_chunks", void 0);
330
+ _define_property(this, "_chunkLineCounts", void 0);
331
+ _define_property(this, "_lineToChunk", void 0);
332
+ _define_property(this, "_changes", void 0);
333
+ _define_property(this, "update", void 0);
334
+ this._renderer = _renderer;
335
+ this._chunks = [];
336
+ this._chunkLineCounts = /* @__PURE__ */ new Map();
337
+ this._lineToChunk = /* @__PURE__ */ new Map();
338
+ this._changes = [];
339
+ this.update = new Event();
340
+ initialChunks.forEach((chunk) => {
341
+ this.appendChunk(chunk);
342
+ });
343
+ }
346
344
  };
347
345
 
348
346
  // src/hooks/useQueueModelAdapter.ts
@@ -399,9 +397,10 @@ import { useCapabilities } from "@dxos/app-framework";
399
397
 
400
398
  // src/capabilities/index.ts
401
399
  import { lazy } from "@dxos/app-framework";
402
- var IntentResolver = lazy(() => import("./intent-resolver-P4XPIKQF.mjs"));
403
- var ReactSurface = lazy(() => import("./react-surface-EZUPNHUC.mjs"));
404
- var Transcriber = lazy(() => import("./transcriber-3SX3DNLV.mjs"));
400
+ var BlueprintDefinition = lazy(() => import("./blueprint-definition-6SU7GLBR.mjs"));
401
+ var IntentResolver = lazy(() => import("./intent-resolver-DZBQQRHN.mjs"));
402
+ var ReactSurface = lazy(() => import("./react-surface-7UC2YXX2.mjs"));
403
+ var Transcriber = lazy(() => import("./transcriber-SMU7HD6F.mjs"));
405
404
 
406
405
  // src/hooks/useTranscriber.ts
407
406
  var useTranscriber = ({ audioStreamTrack, recorderConfig, transcriberConfig, onSegments }) => {
@@ -498,10 +497,10 @@ var useVoiceInput = ({ active, onUpdate }) => {
498
497
  // src/components/Transcript/Transcript.tsx
499
498
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
500
499
  import React from "react";
501
- import { IconButton, useThemeContext } from "@dxos/react-ui";
502
- import { createBasicExtensions, createMarkdownExtensions, createRenderer, createThemeExtensions, decorateMarkdown, editorWidth, preview, useTextEditor } from "@dxos/react-ui-editor";
500
+ import { useThemeContext } from "@dxos/react-ui";
501
+ import { autoScroll, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, decorateMarkdown, preview, useTextEditor } from "@dxos/react-ui-editor";
503
502
  import { mx } from "@dxos/react-ui-theme";
504
- import { isNotFalsy } from "@dxos/util";
503
+ import { isTruthy } from "@dxos/util";
505
504
 
506
505
  // src/components/Transcript/transcript-extension.ts
507
506
  import { RangeSetBuilder } from "@codemirror/state";
@@ -509,7 +508,20 @@ import { EditorView, GutterMarker, ViewPlugin, gutter } from "@codemirror/view";
509
508
  import { format } from "date-fns/format";
510
509
  import { intervalToDuration } from "date-fns/intervalToDuration";
511
510
  import { addEventListener, combine } from "@dxos/async";
512
- var transcript = ({ model, started, renderButton }) => {
511
+ function _define_property2(obj, key, value) {
512
+ if (key in obj) {
513
+ Object.defineProperty(obj, key, {
514
+ value,
515
+ enumerable: true,
516
+ configurable: true,
517
+ writable: true
518
+ });
519
+ } else {
520
+ obj[key] = value;
521
+ }
522
+ return obj;
523
+ }
524
+ var transcript = ({ model, started }) => {
513
525
  return [
514
526
  // Show timestamps in the gutter.
515
527
  gutter({
@@ -537,11 +549,23 @@ var transcript = ({ model, started, renderButton }) => {
537
549
  }),
538
550
  // Listen for model updates.
539
551
  ViewPlugin.fromClass(class {
540
- _controls;
541
- _cleanup;
542
- _adapter;
543
- _initialized = false;
552
+ update(_update) {
553
+ if (!this._initialized) {
554
+ this._initialized = true;
555
+ setTimeout(() => {
556
+ model.sync(this._adapter);
557
+ });
558
+ }
559
+ }
560
+ destroy() {
561
+ this._controls?.remove();
562
+ this._cleanup();
563
+ }
544
564
  constructor(view) {
565
+ _define_property2(this, "_controls", void 0);
566
+ _define_property2(this, "_cleanup", void 0);
567
+ _define_property2(this, "_adapter", void 0);
568
+ _define_property2(this, "_initialized", false);
545
569
  this._adapter = new DocumentAdapter(view);
546
570
  const scroller = view.scrollDOM;
547
571
  let isAutoScrolling = false;
@@ -563,62 +587,21 @@ var transcript = ({ model, started, renderButton }) => {
563
587
  })
564
588
  });
565
589
  };
566
- if (renderButton) {
567
- this._controls = document.createElement("div");
568
- this._controls.classList.add("cm-controls", "transition-opacity", "duration-300", "opacity-0");
569
- view.dom.appendChild(this._controls);
570
- renderButton(this._controls, {
571
- onClick: () => {
572
- scrollToBottom(false);
573
- }
574
- }, view);
575
- }
576
590
  this._cleanup = combine(addEventListener(view.scrollDOM, "scroll", () => {
577
591
  if (!isAutoScrolling) {
578
592
  hasScrolled = true;
579
593
  this._controls?.classList.remove("opacity-0");
580
594
  }
581
595
  }), model.update.on(() => {
582
- const autoScroll = scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight === 0 || !hasScrolled;
596
+ const autoScroll2 = scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight === 0 || !hasScrolled;
583
597
  model.sync(this._adapter);
584
- if (autoScroll) {
598
+ if (autoScroll2) {
585
599
  scrollToBottom(true);
586
600
  }
587
601
  }));
588
602
  }
589
- update(update) {
590
- if (!this._initialized) {
591
- this._initialized = true;
592
- setTimeout(() => {
593
- model.sync(this._adapter);
594
- });
595
- }
596
- }
597
- destroy() {
598
- this._controls?.remove();
599
- this._cleanup();
600
- }
601
603
  }),
602
604
  EditorView.theme({
603
- ".cm-scroller": {
604
- overflowY: "scroll"
605
- },
606
- ".cm-hide-scrollbar": {
607
- scrollbarWidth: "none",
608
- "-ms-overflow-style": "none"
609
- },
610
- ".cm-hide-scrollbar::-webkit-scrollbar": {
611
- display: "none"
612
- },
613
- ".cm-controls": {
614
- position: "absolute",
615
- bottom: "0.5rem",
616
- right: "0.5rem",
617
- zIndex: 1e3
618
- },
619
- ".cm-line": {
620
- paddingRight: "1rem"
621
- },
622
605
  ".cm-timestamp-gutter": {
623
606
  width: "6rem",
624
607
  paddingRight: "1rem"
@@ -632,12 +615,6 @@ var transcript = ({ model, started, renderButton }) => {
632
615
  ];
633
616
  };
634
617
  var TimestampMarker = class extends GutterMarker {
635
- _line;
636
- _timestamp;
637
- _started;
638
- constructor(_line, _timestamp, _started) {
639
- super(), this._line = _line, this._timestamp = _timestamp, this._started = _started;
640
- }
641
618
  eq(other) {
642
619
  return other._timestamp === this._timestamp;
643
620
  }
@@ -655,6 +632,9 @@ var TimestampMarker = class extends GutterMarker {
655
632
  };
656
633
  return el;
657
634
  }
635
+ constructor(_line, _timestamp, _started) {
636
+ super(), _define_property2(this, "_line", void 0), _define_property2(this, "_timestamp", void 0), _define_property2(this, "_started", void 0), this._line = _line, this._timestamp = _timestamp, this._started = _started;
637
+ }
658
638
  };
659
639
  var getStartTime = (started, message) => {
660
640
  if (started) {
@@ -679,7 +659,7 @@ var formatTimestamp = (timestamp, relative) => {
679
659
  };
680
660
 
681
661
  // src/components/Transcript/Transcript.tsx
682
- var renderMarkdown = (identities) => (message, index, debug = false) => {
662
+ var renderByline = (identities) => (message, index, debug = false) => {
683
663
  if (message.sender.role === "assistant") {
684
664
  return [
685
665
  message.blocks.find((block) => block._tag === "transcript")?.text ?? "",
@@ -690,12 +670,13 @@ var renderMarkdown = (identities) => (message, index, debug = false) => {
690
670
  const name = identity?.profile?.displayName ?? message.sender.contact?.target?.fullName ?? message.sender.name ?? message.sender.email ?? message.sender.identityDid;
691
671
  const blocks = message.blocks.filter((block) => block._tag === "transcript");
692
672
  return [
673
+ // TODO(thure): Use an XML tag with the bits needed here.
693
674
  `###### ${name}` + (debug ? ` [${index}]:${message.id}` : ""),
694
675
  blocks.map((block) => block.text.trim()).join(" "),
695
676
  ""
696
677
  ];
697
678
  };
698
- var Transcript = ({ classNames, transcript: object, space, model, attendableId, ignoreAttention }) => {
679
+ var TranscriptView = ({ classNames, space, transcript: object, model }) => {
699
680
  var _effect = _useSignals();
700
681
  try {
701
682
  const { themeMode } = useThemeContext();
@@ -707,25 +688,18 @@ var Transcript = ({ classNames, transcript: object, space, model, attendableId,
707
688
  lineWrapping: true,
708
689
  search: true
709
690
  }),
710
- createMarkdownExtensions({
711
- themeMode
712
- }),
691
+ createMarkdownExtensions(),
713
692
  createThemeExtensions({
714
693
  themeMode
715
694
  }),
716
695
  decorateMarkdown(),
717
- space && preview(),
696
+ preview(),
718
697
  transcript({
719
698
  model,
720
- started: object?.started ? new Date(object.started) : void 0,
721
- renderButton: createRenderer(({ onClick }) => /* @__PURE__ */ React.createElement(IconButton, {
722
- icon: "ph--arrow-line-down--regular",
723
- iconOnly: true,
724
- label: "Scroll to bottom",
725
- onClick
726
- }))
727
- })
728
- ].filter(isNotFalsy)
699
+ started: object?.started ? new Date(object.started) : void 0
700
+ }),
701
+ autoScroll()
702
+ ].filter(isTruthy)
729
703
  };
730
704
  }, [
731
705
  space,
@@ -733,7 +707,7 @@ var Transcript = ({ classNames, transcript: object, space, model, attendableId,
733
707
  ]);
734
708
  return /* @__PURE__ */ React.createElement("div", {
735
709
  ref: parentRef,
736
- className: mx("flex grow overflow-hidden", editorWidth, classNames),
710
+ className: mx("flex grow overflow-hidden container-max-width", classNames),
737
711
  "data-popover-collision-boundary": true
738
712
  });
739
713
  } finally {
@@ -751,10 +725,8 @@ var TranscriptionContainer = ({ transcript: transcript2 }) => {
751
725
  const queue = useQueue(transcript2.queue.dxn, {
752
726
  pollInterval: 1e3
753
727
  });
754
- const model = useQueueModelAdapter(renderMarkdown(members), queue);
755
- return /* @__PURE__ */ React2.createElement(StackItem.Content, {
756
- classNames: "container-max-width pli-2"
757
- }, /* @__PURE__ */ React2.createElement(Transcript, {
728
+ const model = useQueueModelAdapter(renderByline(members), queue);
729
+ return /* @__PURE__ */ React2.createElement(StackItem.Content, null, /* @__PURE__ */ React2.createElement(TranscriptView, {
758
730
  attendableId,
759
731
  space,
760
732
  model,
@@ -767,8 +739,8 @@ var TranscriptionContainer = ({ transcript: transcript2 }) => {
767
739
  var TranscriptContainer_default = TranscriptionContainer;
768
740
 
769
741
  export {
770
- renderMarkdown,
771
- Transcript,
742
+ renderByline,
743
+ TranscriptView,
772
744
  useAudioFile,
773
745
  useAudioTrack,
774
746
  useQueueModelAdapter,
@@ -776,8 +748,9 @@ export {
776
748
  useVoiceInput,
777
749
  TranscriptionContainer,
778
750
  TranscriptContainer_default,
751
+ BlueprintDefinition,
779
752
  IntentResolver,
780
753
  ReactSurface,
781
754
  Transcriber
782
755
  };
783
- //# sourceMappingURL=chunk-Y7PCJ34K.mjs.map
756
+ //# sourceMappingURL=chunk-PEZRQYKO.mjs.map