@dxos/plugin-transcription 0.8.3-main.7f5a14c → 0.8.3

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 (68) hide show
  1. package/dist/lib/browser/{TranscriptContainer-PDSOWOMY.mjs → TranscriptContainer-H3AZQ4CQ.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-KMCEHAVR.mjs → chunk-53AXUEIQ.mjs} +4 -4
  3. package/dist/lib/browser/{chunk-KMCEHAVR.mjs.map → chunk-53AXUEIQ.mjs.map} +3 -3
  4. package/dist/lib/browser/{chunk-KUO25QLG.mjs → chunk-IQ5ZRMHZ.mjs} +4 -4
  5. package/dist/lib/browser/{chunk-KUO25QLG.mjs.map → chunk-IQ5ZRMHZ.mjs.map} +2 -2
  6. package/dist/lib/browser/{chunk-RPMSRXAD.mjs → chunk-UDCCT32F.mjs} +2 -2
  7. package/dist/lib/browser/index.mjs +3 -7
  8. package/dist/lib/browser/index.mjs.map +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-4KQXXK3L.mjs → react-surface-HMJS5FSS.mjs} +3 -3
  11. package/dist/lib/browser/{transcriber-KKKY7OTA.mjs → transcriber-OYPLZFG5.mjs} +2 -2
  12. package/dist/lib/node/{TranscriptContainer-74YHORVT.cjs → TranscriptContainer-KIG3GMAB.cjs} +7 -7
  13. package/dist/lib/node/{TranscriptContainer-74YHORVT.cjs.map → TranscriptContainer-KIG3GMAB.cjs.map} +2 -2
  14. package/dist/lib/node/{chunk-SZXEXASL.cjs → chunk-3PYT3BDM.cjs} +5 -5
  15. package/dist/lib/node/{chunk-TH26IEUM.cjs → chunk-CVUN3UO7.cjs} +6 -6
  16. package/dist/lib/node/{chunk-TH26IEUM.cjs.map → chunk-CVUN3UO7.cjs.map} +2 -2
  17. package/dist/lib/node/{chunk-C5W34GLS.cjs → chunk-ZFAUMZXE.cjs} +7 -7
  18. package/dist/lib/node/{chunk-C5W34GLS.cjs.map → chunk-ZFAUMZXE.cjs.map} +2 -2
  19. package/dist/lib/node/index.cjs +19 -23
  20. package/dist/lib/node/index.cjs.map +3 -3
  21. package/dist/lib/node/meta.json +1 -1
  22. package/dist/lib/node/{react-surface-QVXIHCOA.cjs → react-surface-N25TBBG4.cjs} +7 -7
  23. package/dist/lib/node/{transcriber-532JRZHY.cjs → transcriber-6J4FVFSZ.cjs} +8 -8
  24. package/dist/lib/node-esm/{TranscriptContainer-VBUQ7KJJ.mjs → TranscriptContainer-G75LDEO5.mjs} +2 -2
  25. package/dist/lib/node-esm/{chunk-2U54OZH3.mjs → chunk-56QHOX4A.mjs} +4 -4
  26. package/dist/lib/node-esm/{chunk-2U54OZH3.mjs.map → chunk-56QHOX4A.mjs.map} +3 -3
  27. package/dist/lib/node-esm/{chunk-QS4L6XU3.mjs → chunk-MFJO7EKD.mjs} +2 -2
  28. package/dist/lib/node-esm/{chunk-QSGGTMXE.mjs → chunk-PRL64SRU.mjs} +4 -4
  29. package/dist/lib/node-esm/{chunk-QSGGTMXE.mjs.map → chunk-PRL64SRU.mjs.map} +2 -2
  30. package/dist/lib/node-esm/index.mjs +3 -7
  31. package/dist/lib/node-esm/index.mjs.map +3 -3
  32. package/dist/lib/node-esm/meta.json +1 -1
  33. package/dist/lib/node-esm/{react-surface-ZB7Y2YF7.mjs → react-surface-JGQSYGRR.mjs} +3 -3
  34. package/dist/lib/node-esm/{transcriber-SPV5ZLIJ.mjs → transcriber-TVG2MBBN.mjs} +2 -2
  35. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +3 -2
  36. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +1 -1
  37. package/dist/types/src/hooks/useQueueModelAdapter.d.ts +3 -2
  38. package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +1 -1
  39. package/dist/types/src/segments-normalization/normalization.d.ts +161 -352
  40. package/dist/types/src/segments-normalization/normalization.d.ts.map +1 -1
  41. package/dist/types/src/testing/testing.d.ts +3 -3
  42. package/dist/types/src/testing/testing.d.ts.map +1 -1
  43. package/dist/types/src/translations.d.ts +0 -5
  44. package/dist/types/src/translations.d.ts.map +1 -1
  45. package/dist/types/src/types/schema.d.ts +4 -3
  46. package/dist/types/src/types/schema.d.ts.map +1 -1
  47. package/package.json +51 -51
  48. package/src/components/stories/FileTranscription.stories.tsx +2 -2
  49. package/src/components/stories/MicrophoneTranscription.stories.tsx +3 -3
  50. package/src/hooks/useQueueModelAdapter.ts +4 -3
  51. package/src/model/model.test.ts +17 -17
  52. package/src/segments-normalization/message-normalizer.ts +1 -1
  53. package/src/segments-normalization/normalization.test.ts +13 -12
  54. package/src/segments-normalization/normalization.ts +8 -6
  55. package/src/testing/testing.ts +9 -10
  56. package/src/transcriber/transcription-manager.ts +3 -3
  57. package/src/translations.ts +0 -5
  58. /package/dist/lib/browser/{TranscriptContainer-PDSOWOMY.mjs.map → TranscriptContainer-H3AZQ4CQ.mjs.map} +0 -0
  59. /package/dist/lib/browser/{chunk-RPMSRXAD.mjs.map → chunk-UDCCT32F.mjs.map} +0 -0
  60. /package/dist/lib/browser/{react-surface-4KQXXK3L.mjs.map → react-surface-HMJS5FSS.mjs.map} +0 -0
  61. /package/dist/lib/browser/{transcriber-KKKY7OTA.mjs.map → transcriber-OYPLZFG5.mjs.map} +0 -0
  62. /package/dist/lib/node/{chunk-SZXEXASL.cjs.map → chunk-3PYT3BDM.cjs.map} +0 -0
  63. /package/dist/lib/node/{react-surface-QVXIHCOA.cjs.map → react-surface-N25TBBG4.cjs.map} +0 -0
  64. /package/dist/lib/node/{transcriber-532JRZHY.cjs.map → transcriber-6J4FVFSZ.cjs.map} +0 -0
  65. /package/dist/lib/node-esm/{TranscriptContainer-VBUQ7KJJ.mjs.map → TranscriptContainer-G75LDEO5.mjs.map} +0 -0
  66. /package/dist/lib/node-esm/{chunk-QS4L6XU3.mjs.map → chunk-MFJO7EKD.mjs.map} +0 -0
  67. /package/dist/lib/node-esm/{react-surface-ZB7Y2YF7.mjs.map → react-surface-JGQSYGRR.mjs.map} +0 -0
  68. /package/dist/lib/node-esm/{transcriber-SPV5ZLIJ.mjs.map → transcriber-TVG2MBBN.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-transcription/src/meta.ts":{"bytes":1671,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts":{"bytes":2844,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-transcription/src/types/schema.ts":{"bytes":3627,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/types/types.ts":{"bytes":3240,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/types/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-transcription/src/types/index.ts":{"bytes":562,"imports":[{"path":"packages/plugins/plugin-transcription/src/types/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/plugins/plugin-transcription/src/types/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts":{"bytes":3188,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/model/model.ts":{"bytes":23748,"imports":[{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/model/index.ts":{"bytes":476,"imports":[{"path":"packages/plugins/plugin-transcription/src/model/model.ts","kind":"import-statement","original":"./model"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/Transcript/transcript-extension.ts":{"bytes":24561,"imports":[{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/intervalToDuration","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/model/index.ts","kind":"import-statement","original":"../../model"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/Transcript/Transcript.tsx":{"bytes":11116,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/Transcript/transcript-extension.ts","kind":"import-statement","original":"./transcript-extension"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/Transcript/index.ts":{"bytes":505,"imports":[{"path":"packages/plugins/plugin-transcription/src/components/Transcript/Transcript.tsx","kind":"import-statement","original":"./Transcript"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts":{"bytes":10112,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts":{"bytes":3213,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useQueueModelAdapter.ts":{"bytes":5517,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts":{"bytes":3964,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/index.ts","kind":"import-statement","original":"../capabilities"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts":{"bytes":7151,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui-sfx","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts","kind":"import-statement","original":"./useAudioTrack"},{"path":"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts","kind":"import-statement","original":"./useTranscriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/index.ts":{"bytes":923,"imports":[{"path":"packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts","kind":"import-statement","original":"./useAudioFile"},{"path":"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts","kind":"import-statement","original":"./useAudioTrack"},{"path":"packages/plugins/plugin-transcription/src/hooks/useQueueModelAdapter.ts","kind":"import-statement","original":"./useQueueModelAdapter"},{"path":"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts","kind":"import-statement","original":"./useTranscriber"},{"path":"packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts","kind":"import-statement","original":"./useVoiceInput"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx":{"bytes":4502,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/Transcript/index.ts","kind":"import-statement","original":"./Transcript"},{"path":"packages/plugins/plugin-transcription/src/hooks/index.ts","kind":"import-statement","original":"../hooks"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/index.ts":{"bytes":1017,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/Transcript/index.ts","kind":"import-statement","original":"./Transcript"},{"path":"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx","kind":"import-statement","original":"./TranscriptContainer"},{"path":"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx","kind":"dynamic-import","original":"./TranscriptContainer"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx":{"bytes":3036,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/audio-recorder.ts":{"bytes":3191,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts":{"bytes":13353,"imports":[{"path":"extendable-media-recorder","kind":"import-statement","external":true},{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"extendable-media-recorder-wav-encoder","kind":"dynamic-import","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/util/array.ts":{"bytes":1543,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/util/get-time-str.ts":{"bytes":1301,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/util/monitor-audio-level.ts":{"bytes":5898,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/util/index.ts":{"bytes":694,"imports":[{"path":"packages/plugins/plugin-transcription/src/util/array.ts","kind":"import-statement","original":"./array"},{"path":"packages/plugins/plugin-transcription/src/util/get-time-str.ts","kind":"import-statement","original":"./get-time-str"},{"path":"packages/plugins/plugin-transcription/src/util/monitor-audio-level.ts","kind":"import-statement","original":"./monitor-audio-level"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts":{"bytes":25522,"imports":[{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"packages/plugins/plugin-transcription/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/transcription-manager.ts":{"bytes":19806,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts","kind":"import-statement","original":"./media-stream-recorder"},{"path":"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts","kind":"import-statement","original":"./transcriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/index.ts":{"bytes":848,"imports":[{"path":"packages/plugins/plugin-transcription/src/transcriber/audio-recorder.ts","kind":"import-statement","original":"./audio-recorder"},{"path":"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts","kind":"import-statement","original":"./media-stream-recorder"},{"path":"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts","kind":"import-statement","original":"./transcriber"},{"path":"packages/plugins/plugin-transcription/src/transcriber/transcription-manager.ts","kind":"import-statement","original":"./transcription-manager"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts":{"bytes":7427,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/transcriber/index.ts","kind":"import-statement","original":"../transcriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/index.ts":{"bytes":1394,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts","kind":"dynamic-import","original":"./intent-resolver"},{"path":"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"},{"path":"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts","kind":"dynamic-import","original":"./transcriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/translations.ts":{"bytes":2375,"imports":[{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx":{"bytes":9512,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-transcription/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/index.ts":{"bytes":1082,"imports":[{"path":"packages/plugins/plugin-transcription/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-transcription/src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-transcription/src/transcriber/index.ts","kind":"import-statement","original":"./transcriber"},{"path":"packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx","kind":"import-statement","original":"./TranscriptionPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-transcription/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5766},"packages/plugins/plugin-transcription/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-RPMSRXAD.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KMCEHAVR.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KUO25QLG.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["MediaStreamRecorder","TRANSCRIPTION_PLUGIN","Transcriber","Transcript","TranscriptContainer","TranscriptionCapabilities","TranscriptionContainer","TranscriptionManager","TranscriptionPlugin","meta","renderMarkdown","useAudioFile","useAudioTrack","useQueueModelAdapter","useTranscriber","useVoiceInput"],"entryPoint":"packages/plugins/plugin-transcription/src/index.ts","inputs":{"packages/plugins/plugin-transcription/src/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx":{"bytesInOutput":2011},"packages/plugins/plugin-transcription/src/translations.ts":{"bytesInOutput":518}},"bytes":3709},"packages/plugins/plugin-transcription/dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-transcription/dist/lib/browser/types/index.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"}],"exports":["TRANSCRIPTION_URL","TranscriptSchema","TranscriptType","TranscriptionAction"],"entryPoint":"packages/plugins/plugin-transcription/src/types/index.ts","inputs":{},"bytes":282},"packages/plugins/plugin-transcription/dist/lib/browser/intent-resolver-BGADCHVM.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1628},"packages/plugins/plugin-transcription/dist/lib/browser/intent-resolver-BGADCHVM.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts","inputs":{"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts":{"bytesInOutput":627}},"bytes":919},"packages/plugins/plugin-transcription/dist/lib/browser/TranscriptContainer-PDSOWOMY.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-transcription/dist/lib/browser/TranscriptContainer-PDSOWOMY.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KMCEHAVR.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"}],"exports":["TranscriptionContainer","default"],"entryPoint":"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx","inputs":{},"bytes":295},"packages/plugins/plugin-transcription/dist/lib/browser/react-surface-4KQXXK3L.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1462},"packages/plugins/plugin-transcription/dist/lib/browser/react-surface-4KQXXK3L.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-RPMSRXAD.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KMCEHAVR.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx","inputs":{"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx":{"bytesInOutput":551}},"bytes":958},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-RPMSRXAD.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":453},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-RPMSRXAD.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/TranscriptContainer-PDSOWOMY.mjs","kind":"dynamic-import"}],"exports":["TranscriptContainer"],"inputs":{"packages/plugins/plugin-transcription/src/components/index.ts":{"bytesInOutput":114}},"bytes":258},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KMCEHAVR.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":46668},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KMCEHAVR.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/intervalToDuration","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/intent-resolver-BGADCHVM.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/react-surface-4KQXXK3L.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/transcriber-KKKY7OTA.mjs","kind":"dynamic-import"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui-sfx","kind":"import-statement","external":true}],"exports":["IntentResolver","ReactSurface","Transcriber","Transcript","TranscriptContainer_default","TranscriptionContainer","renderMarkdown","useAudioFile","useAudioTrack","useQueueModelAdapter","useTranscriber","useVoiceInput"],"inputs":{"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx":{"bytesInOutput":1094},"packages/plugins/plugin-transcription/src/components/Transcript/Transcript.tsx":{"bytesInOutput":2474},"packages/plugins/plugin-transcription/src/components/Transcript/transcript-extension.ts":{"bytesInOutput":5452},"packages/plugins/plugin-transcription/src/model/model.ts":{"bytesInOutput":5036},"packages/plugins/plugin-transcription/src/model/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/components/Transcript/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts":{"bytesInOutput":2719},"packages/plugins/plugin-transcription/src/hooks/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts":{"bytesInOutput":656},"packages/plugins/plugin-transcription/src/hooks/useQueueModelAdapter.ts":{"bytesInOutput":1075},"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts":{"bytesInOutput":804},"packages/plugins/plugin-transcription/src/capabilities/index.ts":{"bytesInOutput":258},"packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts":{"bytesInOutput":1882}},"bytes":22867},"packages/plugins/plugin-transcription/dist/lib/browser/transcriber-KKKY7OTA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3706},"packages/plugins/plugin-transcription/dist/lib/browser/transcriber-KKKY7OTA.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KUO25QLG.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts","inputs":{"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts":{"bytesInOutput":1381}},"bytes":1781},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KUO25QLG.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":28997},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-KUO25QLG.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"extendable-media-recorder","kind":"import-statement","external":true},{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"extendable-media-recorder-wav-encoder","kind":"dynamic-import","external":true},{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["MediaStreamRecorder","Transcriber","TranscriptionManager"],"inputs":{"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts":{"bytesInOutput":3747},"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts":{"bytesInOutput":6164},"packages/plugins/plugin-transcription/src/util/array.ts":{"bytesInOutput":267},"packages/plugins/plugin-transcription/src/util/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/transcriber/transcription-manager.ts":{"bytesInOutput":4891},"packages/plugins/plugin-transcription/src/transcriber/index.ts":{"bytesInOutput":0}},"bytes":15619},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3298},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true}],"exports":["TRANSCRIPTION_URL","TranscriptSchema","TranscriptType","TranscriptionAction"],"inputs":{"packages/plugins/plugin-transcription/src/types/schema.ts":{"bytesInOutput":665},"packages/plugins/plugin-transcription/src/types/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/types/types.ts":{"bytesInOutput":642}},"bytes":1631},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1631},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["TranscriptionCapabilities"],"inputs":{"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts":{"bytesInOutput":435}},"bytes":658},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":817},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs":{"imports":[],"exports":["TRANSCRIPTION_PLUGIN","meta"],"inputs":{"packages/plugins/plugin-transcription/src/meta.ts":{"bytesInOutput":337}},"bytes":478}}}
1
+ {"inputs":{"packages/plugins/plugin-transcription/src/meta.ts":{"bytes":1671,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts":{"bytes":2844,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-transcription/src/types/schema.ts":{"bytes":3627,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/types/types.ts":{"bytes":3240,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/types/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-transcription/src/types/index.ts":{"bytes":562,"imports":[{"path":"packages/plugins/plugin-transcription/src/types/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/plugins/plugin-transcription/src/types/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts":{"bytes":3188,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/model/model.ts":{"bytes":23748,"imports":[{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/model/index.ts":{"bytes":476,"imports":[{"path":"packages/plugins/plugin-transcription/src/model/model.ts","kind":"import-statement","original":"./model"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/Transcript/transcript-extension.ts":{"bytes":24561,"imports":[{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/intervalToDuration","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/model/index.ts","kind":"import-statement","original":"../../model"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/Transcript/Transcript.tsx":{"bytes":11116,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/Transcript/transcript-extension.ts","kind":"import-statement","original":"./transcript-extension"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/Transcript/index.ts":{"bytes":505,"imports":[{"path":"packages/plugins/plugin-transcription/src/components/Transcript/Transcript.tsx","kind":"import-statement","original":"./Transcript"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts":{"bytes":10112,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts":{"bytes":3213,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useQueueModelAdapter.ts":{"bytes":5557,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts":{"bytes":3964,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/index.ts","kind":"import-statement","original":"../capabilities"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts":{"bytes":7151,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui-sfx","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts","kind":"import-statement","original":"./useAudioTrack"},{"path":"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts","kind":"import-statement","original":"./useTranscriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/hooks/index.ts":{"bytes":923,"imports":[{"path":"packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts","kind":"import-statement","original":"./useAudioFile"},{"path":"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts","kind":"import-statement","original":"./useAudioTrack"},{"path":"packages/plugins/plugin-transcription/src/hooks/useQueueModelAdapter.ts","kind":"import-statement","original":"./useQueueModelAdapter"},{"path":"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts","kind":"import-statement","original":"./useTranscriber"},{"path":"packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts","kind":"import-statement","original":"./useVoiceInput"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx":{"bytes":4502,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/Transcript/index.ts","kind":"import-statement","original":"./Transcript"},{"path":"packages/plugins/plugin-transcription/src/hooks/index.ts","kind":"import-statement","original":"../hooks"}],"format":"esm"},"packages/plugins/plugin-transcription/src/components/index.ts":{"bytes":1017,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/Transcript/index.ts","kind":"import-statement","original":"./Transcript"},{"path":"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx","kind":"import-statement","original":"./TranscriptContainer"},{"path":"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx","kind":"dynamic-import","original":"./TranscriptContainer"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx":{"bytes":3036,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/audio-recorder.ts":{"bytes":3191,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts":{"bytes":13353,"imports":[{"path":"extendable-media-recorder","kind":"import-statement","external":true},{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"extendable-media-recorder-wav-encoder","kind":"dynamic-import","external":true}],"format":"esm"},"packages/plugins/plugin-transcription/src/util/array.ts":{"bytes":1543,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/util/get-time-str.ts":{"bytes":1301,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/util/monitor-audio-level.ts":{"bytes":5898,"imports":[],"format":"esm"},"packages/plugins/plugin-transcription/src/util/index.ts":{"bytes":694,"imports":[{"path":"packages/plugins/plugin-transcription/src/util/array.ts","kind":"import-statement","original":"./array"},{"path":"packages/plugins/plugin-transcription/src/util/get-time-str.ts","kind":"import-statement","original":"./get-time-str"},{"path":"packages/plugins/plugin-transcription/src/util/monitor-audio-level.ts","kind":"import-statement","original":"./monitor-audio-level"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts":{"bytes":25522,"imports":[{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"packages/plugins/plugin-transcription/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/transcription-manager.ts":{"bytes":19868,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts","kind":"import-statement","original":"./media-stream-recorder"},{"path":"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts","kind":"import-statement","original":"./transcriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/transcriber/index.ts":{"bytes":848,"imports":[{"path":"packages/plugins/plugin-transcription/src/transcriber/audio-recorder.ts","kind":"import-statement","original":"./audio-recorder"},{"path":"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts","kind":"import-statement","original":"./media-stream-recorder"},{"path":"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts","kind":"import-statement","original":"./transcriber"},{"path":"packages/plugins/plugin-transcription/src/transcriber/transcription-manager.ts","kind":"import-statement","original":"./transcription-manager"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts":{"bytes":7427,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/transcriber/index.ts","kind":"import-statement","original":"../transcriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/capabilities/index.ts":{"bytes":1394,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts","kind":"dynamic-import","original":"./intent-resolver"},{"path":"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"},{"path":"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts","kind":"dynamic-import","original":"./transcriber"}],"format":"esm"},"packages/plugins/plugin-transcription/src/translations.ts":{"bytes":1761,"imports":[{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx":{"bytes":9512,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-transcription/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/plugin-transcription/src/types/index.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-transcription/src/index.ts":{"bytes":1082,"imports":[{"path":"packages/plugins/plugin-transcription/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/plugin-transcription/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-transcription/src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/plugins/plugin-transcription/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-transcription/src/transcriber/index.ts","kind":"import-statement","original":"./transcriber"},{"path":"packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx","kind":"import-statement","original":"./TranscriptionPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-transcription/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5493},"packages/plugins/plugin-transcription/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-UDCCT32F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-53AXUEIQ.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-IQ5ZRMHZ.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["MediaStreamRecorder","TRANSCRIPTION_PLUGIN","Transcriber","Transcript","TranscriptContainer","TranscriptionCapabilities","TranscriptionContainer","TranscriptionManager","TranscriptionPlugin","meta","renderMarkdown","useAudioFile","useAudioTrack","useQueueModelAdapter","useTranscriber","useVoiceInput"],"entryPoint":"packages/plugins/plugin-transcription/src/index.ts","inputs":{"packages/plugins/plugin-transcription/src/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/TranscriptionPlugin.tsx":{"bytesInOutput":2011},"packages/plugins/plugin-transcription/src/translations.ts":{"bytesInOutput":382}},"bytes":3573},"packages/plugins/plugin-transcription/dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-transcription/dist/lib/browser/types/index.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"}],"exports":["TRANSCRIPTION_URL","TranscriptSchema","TranscriptType","TranscriptionAction"],"entryPoint":"packages/plugins/plugin-transcription/src/types/index.ts","inputs":{},"bytes":282},"packages/plugins/plugin-transcription/dist/lib/browser/intent-resolver-BGADCHVM.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1628},"packages/plugins/plugin-transcription/dist/lib/browser/intent-resolver-BGADCHVM.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts","inputs":{"packages/plugins/plugin-transcription/src/capabilities/intent-resolver.ts":{"bytesInOutput":627}},"bytes":919},"packages/plugins/plugin-transcription/dist/lib/browser/TranscriptContainer-H3AZQ4CQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-transcription/dist/lib/browser/TranscriptContainer-H3AZQ4CQ.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-53AXUEIQ.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"}],"exports":["TranscriptionContainer","default"],"entryPoint":"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx","inputs":{},"bytes":295},"packages/plugins/plugin-transcription/dist/lib/browser/react-surface-HMJS5FSS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1462},"packages/plugins/plugin-transcription/dist/lib/browser/react-surface-HMJS5FSS.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-UDCCT32F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-53AXUEIQ.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx","inputs":{"packages/plugins/plugin-transcription/src/capabilities/react-surface.tsx":{"bytesInOutput":551}},"bytes":958},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-UDCCT32F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":453},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-UDCCT32F.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/TranscriptContainer-H3AZQ4CQ.mjs","kind":"dynamic-import"}],"exports":["TranscriptContainer"],"inputs":{"packages/plugins/plugin-transcription/src/components/index.ts":{"bytesInOutput":114}},"bytes":258},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-53AXUEIQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":46698},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-53AXUEIQ.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/intervalToDuration","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/intent-resolver-BGADCHVM.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/react-surface-HMJS5FSS.mjs","kind":"dynamic-import"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/transcriber-OYPLZFG5.mjs","kind":"dynamic-import"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui-sfx","kind":"import-statement","external":true}],"exports":["IntentResolver","ReactSurface","Transcriber","Transcript","TranscriptContainer_default","TranscriptionContainer","renderMarkdown","useAudioFile","useAudioTrack","useQueueModelAdapter","useTranscriber","useVoiceInput"],"inputs":{"packages/plugins/plugin-transcription/src/components/TranscriptContainer.tsx":{"bytesInOutput":1094},"packages/plugins/plugin-transcription/src/components/Transcript/Transcript.tsx":{"bytesInOutput":2474},"packages/plugins/plugin-transcription/src/components/Transcript/transcript-extension.ts":{"bytesInOutput":5452},"packages/plugins/plugin-transcription/src/model/model.ts":{"bytesInOutput":5036},"packages/plugins/plugin-transcription/src/model/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/components/Transcript/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/hooks/useAudioFile.ts":{"bytesInOutput":2719},"packages/plugins/plugin-transcription/src/hooks/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/hooks/useAudioTrack.ts":{"bytesInOutput":656},"packages/plugins/plugin-transcription/src/hooks/useQueueModelAdapter.ts":{"bytesInOutput":1075},"packages/plugins/plugin-transcription/src/hooks/useTranscriber.ts":{"bytesInOutput":804},"packages/plugins/plugin-transcription/src/capabilities/index.ts":{"bytesInOutput":258},"packages/plugins/plugin-transcription/src/hooks/useVoiceInput.ts":{"bytesInOutput":1882}},"bytes":22867},"packages/plugins/plugin-transcription/dist/lib/browser/transcriber-OYPLZFG5.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3706},"packages/plugins/plugin-transcription/dist/lib/browser/transcriber-OYPLZFG5.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-IQ5ZRMHZ.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs","kind":"import-statement"},{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts","inputs":{"packages/plugins/plugin-transcription/src/capabilities/transcriber.ts":{"bytesInOutput":1381}},"bytes":1781},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-IQ5ZRMHZ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29030},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-IQ5ZRMHZ.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs","kind":"import-statement"},{"path":"extendable-media-recorder","kind":"import-statement","external":true},{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"extendable-media-recorder-wav-encoder","kind":"dynamic-import","external":true},{"path":"wavefile","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["MediaStreamRecorder","Transcriber","TranscriptionManager"],"inputs":{"packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts":{"bytesInOutput":3747},"packages/plugins/plugin-transcription/src/transcriber/transcriber.ts":{"bytesInOutput":6164},"packages/plugins/plugin-transcription/src/util/array.ts":{"bytesInOutput":267},"packages/plugins/plugin-transcription/src/util/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/transcriber/transcription-manager.ts":{"bytesInOutput":4909},"packages/plugins/plugin-transcription/src/transcriber/index.ts":{"bytesInOutput":0}},"bytes":15637},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3298},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-OSISJM2F.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true}],"exports":["TRANSCRIPTION_URL","TranscriptSchema","TranscriptType","TranscriptionAction"],"inputs":{"packages/plugins/plugin-transcription/src/types/schema.ts":{"bytesInOutput":665},"packages/plugins/plugin-transcription/src/types/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-transcription/src/types/types.ts":{"bytesInOutput":642}},"bytes":1631},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1631},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-W2KNYJD6.mjs":{"imports":[{"path":"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["TranscriptionCapabilities"],"inputs":{"packages/plugins/plugin-transcription/src/capabilities/capabilities.ts":{"bytesInOutput":435}},"bytes":658},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":817},"packages/plugins/plugin-transcription/dist/lib/browser/chunk-GOF7MJNV.mjs":{"imports":[],"exports":["TRANSCRIPTION_PLUGIN","meta"],"inputs":{"packages/plugins/plugin-transcription/src/meta.ts":{"bytesInOutput":337}},"bytes":478}}}
@@ -1,7 +1,7 @@
1
- import "./chunk-RPMSRXAD.mjs";
1
+ import "./chunk-UDCCT32F.mjs";
2
2
  import {
3
3
  TranscriptionContainer
4
- } from "./chunk-KMCEHAVR.mjs";
4
+ } from "./chunk-53AXUEIQ.mjs";
5
5
  import {
6
6
  TranscriptType
7
7
  } from "./chunk-OSISJM2F.mjs";
@@ -31,4 +31,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
31
31
  export {
32
32
  react_surface_default as default
33
33
  };
34
- //# sourceMappingURL=react-surface-4KQXXK3L.mjs.map
34
+ //# sourceMappingURL=react-surface-HMJS5FSS.mjs.map
@@ -2,7 +2,7 @@ import {
2
2
  MediaStreamRecorder,
3
3
  Transcriber,
4
4
  TranscriptionManager
5
- } from "./chunk-KUO25QLG.mjs";
5
+ } from "./chunk-IQ5ZRMHZ.mjs";
6
6
  import "./chunk-OSISJM2F.mjs";
7
7
  import {
8
8
  TranscriptionCapabilities
@@ -53,4 +53,4 @@ var transcriber_default = (context) => {
53
53
  export {
54
54
  transcriber_default as default
55
55
  };
56
- //# sourceMappingURL=transcriber-KKKY7OTA.mjs.map
56
+ //# sourceMappingURL=transcriber-OYPLZFG5.mjs.map
@@ -16,17 +16,17 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var TranscriptContainer_74YHORVT_exports = {};
20
- __export(TranscriptContainer_74YHORVT_exports, {
21
- TranscriptionContainer: () => import_chunk_TH26IEUM.TranscriptionContainer,
22
- default: () => import_chunk_TH26IEUM.TranscriptContainer_default
19
+ var TranscriptContainer_KIG3GMAB_exports = {};
20
+ __export(TranscriptContainer_KIG3GMAB_exports, {
21
+ TranscriptionContainer: () => import_chunk_CVUN3UO7.TranscriptionContainer,
22
+ default: () => import_chunk_CVUN3UO7.TranscriptContainer_default
23
23
  });
24
- module.exports = __toCommonJS(TranscriptContainer_74YHORVT_exports);
25
- var import_chunk_TH26IEUM = require("./chunk-TH26IEUM.cjs");
24
+ module.exports = __toCommonJS(TranscriptContainer_KIG3GMAB_exports);
25
+ var import_chunk_CVUN3UO7 = require("./chunk-CVUN3UO7.cjs");
26
26
  var import_chunk_FKDJNJ57 = require("./chunk-FKDJNJ57.cjs");
27
27
  var import_chunk_AFUZI63A = require("./chunk-AFUZI63A.cjs");
28
28
  // Annotate the CommonJS export names for ESM import in node:
29
29
  0 && (module.exports = {
30
30
  TranscriptionContainer
31
31
  });
32
- //# sourceMappingURL=TranscriptContainer-74YHORVT.cjs.map
32
+ //# sourceMappingURL=TranscriptContainer-KIG3GMAB.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["TranscriptContainer-74YHORVT.cjs"],
4
- "sourcesContent": ["import {\n TranscriptContainer_default,\n TranscriptionContainer\n} from \"./chunk-TH26IEUM.cjs\";\nimport \"./chunk-FKDJNJ57.cjs\";\nimport \"./chunk-AFUZI63A.cjs\";\nexport {\n TranscriptionContainer,\n TranscriptContainer_default as default\n};\n//# sourceMappingURL=TranscriptContainer-74YHORVT.cjs.map\n"],
3
+ "sources": ["TranscriptContainer-KIG3GMAB.cjs"],
4
+ "sourcesContent": ["import {\n TranscriptContainer_default,\n TranscriptionContainer\n} from \"./chunk-CVUN3UO7.cjs\";\nimport \"./chunk-FKDJNJ57.cjs\";\nimport \"./chunk-AFUZI63A.cjs\";\nexport {\n TranscriptionContainer,\n TranscriptContainer_default as default\n};\n//# sourceMappingURL=TranscriptContainer-KIG3GMAB.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;AACP,4BAAO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -26,15 +26,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_SZXEXASL_exports = {};
30
- __export(chunk_SZXEXASL_exports, {
29
+ var chunk_3PYT3BDM_exports = {};
30
+ __export(chunk_3PYT3BDM_exports, {
31
31
  TranscriptContainer: () => TranscriptContainer
32
32
  });
33
- module.exports = __toCommonJS(chunk_SZXEXASL_exports);
33
+ module.exports = __toCommonJS(chunk_3PYT3BDM_exports);
34
34
  var import_react = require("react");
35
- var TranscriptContainer = (0, import_react.lazy)(() => import("./TranscriptContainer-74YHORVT.cjs"));
35
+ var TranscriptContainer = (0, import_react.lazy)(() => import("./TranscriptContainer-KIG3GMAB.cjs"));
36
36
  // Annotate the CommonJS export names for ESM import in node:
37
37
  0 && (module.exports = {
38
38
  TranscriptContainer
39
39
  });
40
- //# sourceMappingURL=chunk-SZXEXASL.cjs.map
40
+ //# sourceMappingURL=chunk-3PYT3BDM.cjs.map
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_TH26IEUM_exports = {};
30
- __export(chunk_TH26IEUM_exports, {
29
+ var chunk_CVUN3UO7_exports = {};
30
+ __export(chunk_CVUN3UO7_exports, {
31
31
  IntentResolver: () => IntentResolver,
32
32
  ReactSurface: () => ReactSurface,
33
33
  Transcriber: () => Transcriber,
@@ -41,7 +41,7 @@ __export(chunk_TH26IEUM_exports, {
41
41
  useTranscriber: () => useTranscriber,
42
42
  useVoiceInput: () => useVoiceInput
43
43
  });
44
- module.exports = __toCommonJS(chunk_TH26IEUM_exports);
44
+ module.exports = __toCommonJS(chunk_CVUN3UO7_exports);
45
45
  var import_chunk_FKDJNJ57 = require("./chunk-FKDJNJ57.cjs");
46
46
  var import_tracking = require("@preact-signals/safe-react/tracking");
47
47
  var import_react = __toESM(require("react"));
@@ -651,8 +651,8 @@ var useQueueModelAdapter = (renderer, queue, initialChunks = []) => {
651
651
  return model;
652
652
  };
653
653
  var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-LL3TTI4H.cjs"));
654
- var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-QVXIHCOA.cjs"));
655
- var Transcriber = (0, import_app_framework2.lazy)(() => import("./transcriber-532JRZHY.cjs"));
654
+ var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-N25TBBG4.cjs"));
655
+ var Transcriber = (0, import_app_framework2.lazy)(() => import("./transcriber-6J4FVFSZ.cjs"));
656
656
  var useTranscriber = ({ audioStreamTrack, onSegments, transcriberConfig, recorderConfig }) => {
657
657
  const [getTranscriber] = (0, import_app_framework.useCapabilities)(import_chunk_FKDJNJ57.TranscriptionCapabilities.Transcriber);
658
658
  const transcriber = (0, import_react6.useMemo)(() => {
@@ -775,4 +775,4 @@ var TranscriptContainer_default = TranscriptionContainer;
775
775
  useTranscriber,
776
776
  useVoiceInput
777
777
  });
778
- //# sourceMappingURL=chunk-TH26IEUM.cjs.map
778
+ //# sourceMappingURL=chunk-CVUN3UO7.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/TranscriptContainer.tsx", "../../../src/components/Transcript/Transcript.tsx", "../../../src/components/Transcript/transcript-extension.ts", "../../../src/model/model.ts", "../../../src/hooks/useAudioFile.ts", "../../../src/hooks/useAudioTrack.ts", "../../../src/hooks/useQueueModelAdapter.ts", "../../../src/hooks/useTranscriber.ts", "../../../src/capabilities/index.ts", "../../../src/hooks/useVoiceInput.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { fullyQualifiedId, getSpace } from '@dxos/client/echo';\nimport { useMembers, useQueue } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { type DataType } from '@dxos/schema';\n\nimport { Transcript, renderMarkdown } from './Transcript';\nimport { useQueueModelAdapter } from '../hooks';\nimport { type TranscriptType } from '../types';\n\nexport const TranscriptionContainer: FC<{ role: string; transcript: TranscriptType }> = ({ role, transcript }) => {\n const attendableId = fullyQualifiedId(transcript);\n const space = getSpace(transcript);\n const members = useMembers(space?.key).map((member) => member.identity);\n const queue = useQueue<DataType.Message>(transcript.queue.dxn, { pollInterval: 1_000 });\n const model = useQueueModelAdapter(renderMarkdown(members), queue);\n\n return (\n <StackItem.Content role={role} classNames='container-max-width pli-2'>\n <Transcript attendableId={attendableId} space={space} model={model} transcript={transcript} />\n </StackItem.Content>\n );\n};\n\nexport default TranscriptionContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { IconButton, type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createMarkdownExtensions,\n createRenderer,\n createThemeExtensions,\n decorateMarkdown,\n editorWidth,\n preview,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { transcript } from './transcript-extension';\nimport { type SerializationModel } from '../../model';\nimport { type TranscriptType } from '../../types';\n\nexport const renderMarkdown =\n (identities: Identity[]) =>\n (message: DataType.Message, index: number, debug = false): string[] => {\n if (message.sender.role === 'assistant') {\n // Start/stop block.\n return [message.blocks.find((block) => block.type === 'transcription')?.text ?? '', ''];\n }\n\n // TODO(burdon): Use link/reference markup for users (with popover).\n // TODO(burdon): Color and avatar.\n const identity = identities.find((identity) => identity.did === message.sender.identityDid);\n const name =\n identity?.profile?.displayName ??\n message.sender.contact?.target?.fullName ??\n message.sender.name ??\n message.sender.email ??\n message.sender.identityDid;\n const blocks = message.blocks.filter((block) => block.type === 'transcription');\n return [\n `###### ${name}` + (debug ? ` [${index}]:${message.id}` : ''),\n blocks.map((block) => block.text.trim()).join(' '),\n '',\n ];\n };\n\nexport type TranscriptProps = ThemedClassName<{\n transcript?: TranscriptType;\n space?: Space;\n model: SerializationModel<DataType.Message>;\n // TODO(wittjosiah): Move to container.\n attendableId?: string;\n ignoreAttention?: boolean;\n}>;\n\n/**\n * Transcript component implemented using the editor.\n */\nexport const Transcript = ({\n classNames,\n transcript: object,\n space,\n model,\n attendableId,\n ignoreAttention,\n}: TranscriptProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n return {\n extensions: [\n createBasicExtensions({ readOnly: true, lineWrapping: true }),\n createMarkdownExtensions({ themeMode }),\n createThemeExtensions({ themeMode }),\n decorateMarkdown(),\n space && preview(),\n transcript({\n model,\n started: object?.started ? new Date(object.started) : undefined,\n renderButton: createRenderer(({ onClick }) => (\n <IconButton icon='ph--arrow-line-down--regular' iconOnly label='Scroll to bottom' onClick={onClick} />\n )),\n }),\n ].filter(isNotFalsy),\n };\n }, [space, model]);\n\n return (\n <div\n ref={parentRef}\n className={mx('flex grow overflow-hidden', editorWidth, classNames)}\n data-popover-collision-boundary={true}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, RangeSetBuilder } from '@codemirror/state';\nimport { EditorView, GutterMarker, ViewPlugin, type ViewUpdate, gutter } from '@codemirror/view';\nimport { format } from 'date-fns/format';\nimport { intervalToDuration } from 'date-fns/intervalToDuration';\n\nimport { type CleanupFn, addEventListener, combine } from '@dxos/async';\nimport { type RenderCallback } from '@dxos/react-ui-editor';\nimport { type DataType } from '@dxos/schema';\n\nimport { DocumentAdapter, type SerializationModel } from '../../model';\n\n/**\n * Data structure that maps Chunks queue to lines with transcript state.\n */\nexport type TranscriptOptions = {\n model: SerializationModel<DataType.Message>;\n started?: Date;\n renderButton?: RenderCallback<{ onClick: () => void }>;\n};\n\n/**\n * Scrolling transcript with timestamps.\n */\nexport const transcript = ({ model, started, renderButton }: TranscriptOptions): Extension => {\n return [\n // Show timestamps in the gutter.\n gutter({\n class: 'cm-timestamp-gutter',\n lineMarkerChange: (update) => update.docChanged || update.viewportChanged,\n markers: (view) => {\n const start = getStartTime(started, model.chunks[0]);\n const builder = new RangeSetBuilder<GutterMarker>();\n for (const { from, to } of view.visibleRanges) {\n let line = view.state.doc.lineAt(from);\n while (line.from <= to) {\n const block = model.getChunkAtLine(line.number)?.blocks[0];\n const timestamp = block?.type === 'transcription' && block.started;\n if (timestamp) {\n builder.add(line.from, line.from, new TimestampMarker(line.number, new Date(timestamp), start));\n }\n\n if (line.to + 1 > view.state.doc.length) {\n break;\n }\n\n line = view.state.doc.lineAt(line.to + 1);\n }\n }\n\n return builder.finish();\n },\n }),\n\n // Listen for model updates.\n ViewPlugin.fromClass(\n class {\n private readonly _controls?: HTMLDivElement;\n private readonly _cleanup: CleanupFn;\n private readonly _adapter: DocumentAdapter;\n private _initialized = false;\n\n constructor(view: EditorView) {\n this._adapter = new DocumentAdapter(view);\n\n const scroller = view.scrollDOM;\n let isAutoScrolling = false;\n let hasScrolled = false;\n\n let timeout: NodeJS.Timeout | undefined;\n const scrollToBottom = (smooth = false) => {\n scroller.style.scrollBehavior = smooth ? 'smooth' : '';\n\n // Temporarily hide scrollbar to prevent flicker.\n scroller.classList.add('cm-hide-scrollbar');\n isAutoScrolling = true;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n this._controls?.classList.add('opacity-0');\n scroller.classList.remove('cm-hide-scrollbar');\n isAutoScrolling = false;\n }, 500);\n\n // Scroll to bottom.\n view.dispatch({\n effects: EditorView.scrollIntoView(view.state.doc.length, { y: 'end' }),\n });\n };\n\n // Scroll button.\n if (renderButton) {\n this._controls = document.createElement('div');\n this._controls.classList.add('cm-controls', 'transition-opacity', 'duration-300', 'opacity-0');\n view.dom.appendChild(this._controls);\n renderButton(\n this._controls,\n {\n onClick: () => {\n scrollToBottom(false);\n },\n },\n view,\n );\n }\n\n // Event listeners.\n this._cleanup = combine(\n addEventListener(view.scrollDOM, 'scroll', () => {\n if (!isAutoScrolling) {\n hasScrolled = true;\n this._controls?.classList.remove('opacity-0');\n }\n }),\n\n model.update.on(() => {\n // Check if clamped to bottom.\n const autoScroll =\n scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight === 0 || !hasScrolled;\n\n // Sync.\n model.sync(this._adapter);\n\n // Scroll.\n if (autoScroll) {\n scrollToBottom(true);\n }\n }),\n );\n }\n\n update(update: ViewUpdate) {\n // Initial sync.\n if (!this._initialized) {\n this._initialized = true;\n setTimeout(() => {\n model.sync(this._adapter);\n });\n }\n }\n\n destroy() {\n this._controls?.remove();\n this._cleanup();\n }\n },\n ),\n\n EditorView.theme({\n '.cm-scroller': {\n overflowY: 'scroll',\n },\n '.cm-hide-scrollbar': {\n scrollbarWidth: 'none',\n '-ms-overflow-style': 'none',\n },\n '.cm-hide-scrollbar::-webkit-scrollbar': {\n display: 'none',\n },\n '.cm-controls': {\n position: 'absolute',\n bottom: '0.5rem',\n right: '0.5rem',\n zIndex: 1000,\n },\n '.cm-line': {\n paddingRight: '1rem',\n },\n '.cm-timestamp-gutter': {\n width: '6rem',\n paddingRight: '1rem',\n },\n '.cm-timestamp-gutter > .cm-gutterElement > div': {\n display: 'inline-flex',\n textAlign: 'right',\n padding: '3px',\n },\n }),\n ];\n};\n\n/**\n * Gutter marker that displays a timestamp.\n */\nclass TimestampMarker extends GutterMarker {\n constructor(\n readonly _line: number,\n readonly _timestamp: Date,\n readonly _started?: Date,\n ) {\n super();\n }\n\n override eq(other: this): boolean {\n return other._timestamp === this._timestamp;\n }\n\n override toDOM(view: EditorView): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'text-sm text-subdued hover:bg-hoverSurface cursor-pointer';\n el.textContent = formatTimestamp(this._timestamp, this._started);\n // TODO(burdon): Click to bookmark or copy hyperlink.\n el.onclick = () => {\n const pos = view.state.doc.line(this._line).from;\n view.dispatch({\n effects: EditorView.scrollIntoView(pos, { y: 'start' }),\n });\n };\n\n return el;\n }\n}\n\nconst getStartTime = (started?: Date, message?: DataType.Message): Date | undefined => {\n if (started) {\n return started;\n }\n\n if (message?.blocks[0]?.type === 'transcription' && message.blocks[0].started) {\n return new Date(message.blocks[0].started);\n }\n\n return undefined;\n};\n\nconst formatTimestamp = (timestamp: Date, relative?: Date) => {\n if (relative) {\n const pad = (n = 0) => String(n).padStart(2, '0');\n const { hours, minutes, seconds } = intervalToDuration({ start: relative, end: timestamp });\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;\n } else {\n return format(timestamp, 'HH:mm:ss');\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Text } from '@codemirror/state';\nimport { type EditorView } from '@codemirror/view';\n\nimport { Event } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nexport type Chunk = { id: string };\n\n/**\n * Covert block to a set of markdown lines.\n */\nexport type ChunkRenderer<T extends Chunk> = (chunk: T, index: number, debug?: boolean) => string[];\n\n/**\n * Abstract representation of the document model.\n */\nexport interface ChunkDocument {\n lineCount(): number;\n replaceLines(from: number, remove: number, insert: string[]): void;\n}\n\n/**\n * Codemirror document adapter.\n */\nexport class DocumentAdapter implements ChunkDocument {\n constructor(private readonly _view: EditorView) {}\n\n /** The document must always have at least one line. */\n lineCount(): number {\n return this._view.state.doc.lines - 1;\n }\n\n replaceLines(from: number, remove: number, insert: string[]): void {\n log('replaceLines', { count: this._view.state.doc.lines, from, remove, insert });\n\n const numLines = this._view.state.doc.lines;\n const posFrom = this._view.state.doc.line(from).from;\n const posTo = remove === 0 ? posFrom : this._view.state.doc.line(Math.min(numLines, from + remove)).from;\n\n // Don't remove the last line.\n let text = insert.join('\\n');\n if (posTo === this._view.state.doc.length) {\n text += '\\n';\n }\n\n this._view.dispatch({\n changes: { from: posFrom, to: posTo, insert: text },\n });\n }\n}\n\ntype ChunkChange<T extends Chunk> =\n | {\n type: 'append';\n index: number;\n chunk: T;\n }\n | {\n type: 'update';\n index: number;\n chunk: T;\n }\n | {\n type: 'delete';\n index: number;\n id: string;\n };\n\n/**\n * Each Chunk can be converted into a set of lines.\n * Chunks can be added, updated or deleted from the Queue.\n * A Document is an immutable projection that represents a flat list of lines corresponding to the Queue.\n *\n * Ideally we would implement a custom virtual Text model for the View, but this currently isn't possible in Codemirror.\n * Instead this model tracks changes and syncs them with the ChunkDocument.\n */\nexport class SerializationModel<T extends Chunk> {\n /** Ordered set of chunks. */\n private readonly _chunks: T[] = [];\n\n /** Map of chunk IDs to their current line counts. */\n private readonly _chunkLineCounts = new Map<string, number>();\n\n /** Map of line numbers to chunk IDs. */\n private readonly _lineToChunk = new Map<number, T>();\n\n /** Track chunk changes since last sync. */\n private readonly _changes: Array<ChunkChange<T>> = [];\n\n /** Emits when the document is updated. */\n public readonly update = new Event<void>();\n\n constructor(\n private readonly _renderer: ChunkRenderer<T>,\n initialChunks: T[] = [],\n ) {\n initialChunks.forEach((chunk) => {\n this.appendChunk(chunk);\n });\n }\n\n toJSON(): { chunks: number; changes: number } {\n return {\n chunks: this._chunks.length,\n changes: this._changes.length,\n };\n }\n\n get doc() {\n return Text.of([...this._chunks.flatMap((chunk, index) => this._renderer(chunk, index)), '']);\n }\n\n get chunks() {\n return this._chunks;\n }\n\n /**\n * Get the block ID at the given line number.\n */\n getChunkAtLine(line: number): T | undefined {\n return this._lineToChunk.get(line);\n }\n\n reset(): this {\n this._chunks.length = 0;\n this._chunkLineCounts.clear();\n this._lineToChunk.clear();\n this.update.emit();\n return this;\n }\n\n appendChunk(chunk: T): this {\n const index = this._chunks.length;\n this._chunks.push(chunk);\n this._changes.push({ type: 'append', index, chunk });\n this.update.emit();\n return this;\n }\n\n updateChunk(chunk: T): this {\n const index = this._chunks.findIndex((c) => c.id === chunk.id);\n invariant(index !== -1);\n this._chunks[index] = chunk;\n this._changes.push({ type: 'update', index, chunk });\n this.update.emit();\n return this;\n }\n\n deleteBlock(id: string): this {\n const index = this._chunks.findIndex((c) => c.id === id);\n invariant(index !== -1);\n this._chunks.splice(index, 1);\n this._changes.push({ type: 'delete', index, id });\n this.update.emit();\n return this;\n }\n\n /**\n * Syncs the tracked changes with the ChunkDocument.\n */\n sync(document: ChunkDocument): this {\n log('sync', { changes: this._changes });\n\n // Process each change in order.\n for (const change of this._changes) {\n switch (change.type) {\n case 'append': {\n // For appends, convert block to lines and add at the end.\n const lines = this._renderer(change.chunk, change.index);\n const lastLine = document.lineCount();\n document.replaceLines(lastLine + 1, 0, lines);\n break;\n }\n\n case 'update': {\n // For updates, find the block's line range and replace with new lines.\n let lineStart = 1;\n for (let i = 0; i < change.index; i++) {\n lineStart += this._chunkLineCounts.get(this._chunks[i].id)!;\n }\n const previousLineCount = this._chunkLineCounts.get(change.chunk.id)!;\n const newLines = this._renderer(change.chunk, change.index);\n document.replaceLines(lineStart, previousLineCount, newLines);\n break;\n }\n\n case 'delete': {\n // For deletes, find the block's line range and remove those lines.\n let lineStart = 1;\n for (let i = 0; i < change.index; i++) {\n lineStart += this._chunkLineCounts.get(this._chunks[i].id)!;\n }\n const previousLineCount = this._chunkLineCounts.get(change.id)!;\n document.replaceLines(lineStart, previousLineCount, []);\n break;\n }\n }\n }\n\n // Clear the line-to-block mapping.\n this._lineToChunk.clear();\n\n // Update all block line counts and line-to-block mapping after processing changes.\n let currentLine = 1;\n for (const [index, chunk] of this._chunks.entries()) {\n const lineCount = this._renderer(chunk, index).length;\n this._chunkLineCounts.set(chunk.id, lineCount);\n this._lineToChunk.set(currentLine, chunk);\n currentLine += lineCount;\n }\n\n // Clean up deleted blocks.\n const chunkIds = new Set(this._chunks.map((chunk) => chunk.id));\n for (const id of this._chunkLineCounts.keys()) {\n if (!chunkIds.has(id)) {\n this._chunkLineCounts.delete(id);\n }\n }\n\n // Clear changes after sync.\n this._changes.length = 0;\n return this;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\n\nexport type UseAudioState = {\n audio?: HTMLAudioElement;\n stream?: MediaStream;\n track?: MediaStreamTrack;\n};\n\nexport const useAudioFile = (audioUrl: string, constraints?: MediaTrackConstraints): UseAudioState => {\n const [{ audio, stream, track }, setStream] = useState<UseAudioState>({});\n useEffect(() => {\n const ctx = new Context();\n\n scheduleTask(ctx, async () => {\n const response = await fetch(audioUrl);\n const blob = await response.blob();\n const objectUrl = URL.createObjectURL(blob);\n ctx.onDispose(() => {\n URL.revokeObjectURL(objectUrl);\n });\n\n const audio = new Audio();\n audio.src = objectUrl;\n\n await new Promise<void>((resolve, reject) => {\n audio.addEventListener(\n 'error',\n (err) => {\n log.error('error', { err });\n reject(err);\n },\n { once: true },\n );\n audio.addEventListener(\n 'canplay',\n async () => {\n log.info('starting...');\n try {\n // Try to play the audio\n await audio.play();\n resolve();\n } catch (playError) {\n log.error('Play failed', { playError });\n // Still resolve as the audio is ready, even if autoplay failed.\n resolve();\n }\n },\n { once: true },\n );\n audio.load();\n });\n\n const audioCtx = new AudioContext();\n\n // Resume AudioContext if it's suspended.\n if (audioCtx.state === 'suspended') {\n await audioCtx.resume();\n }\n\n const destination = audioCtx.createMediaStreamDestination();\n destination.channelCount = 1;\n\n const source = audioCtx.createMediaElementSource(audio);\n source.connect(destination);\n const track = destination.stream.getAudioTracks()[0];\n if (constraints) {\n await track.applyConstraints(constraints).catch((err) => log.catch(err));\n }\n\n // Also connect to speakers so audio is audible.\n setStream({\n audio,\n stream: destination.stream,\n track: destination.stream.getAudioTracks()[0],\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [audioUrl]);\n\n return { audio, stream, track };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n/**\n *\n */\n// TODO(burdon): Reconcile with react-ui-sfx and plugin-calls.\nexport const useAudioTrack = (active?: boolean, constraints?: MediaTrackConstraints): MediaStreamTrack | undefined => {\n const [track, setTrack] = useState<MediaStreamTrack>();\n useEffect(() => {\n if (!active) {\n track?.stop();\n setTrack(undefined);\n return;\n }\n\n const initAudio = async () => {\n const audio = new Audio();\n audio.srcObject = await navigator.mediaDevices.getUserMedia({ audio: constraints ?? true });\n const [track] = audio.srcObject.getAudioTracks();\n if (track) {\n setTrack(track);\n }\n };\n\n if (active) {\n void initAudio();\n }\n }, [active]);\n\n return track;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo, useEffect, useState } from 'react';\n\nimport { type Queue } from '@dxos/react-client/echo';\n\nimport { type Chunk, type ChunkRenderer, SerializationModel } from '../model';\n\n/**\n * Model adapter for a queue.\n */\nexport const useQueueModelAdapter = <T extends Chunk>(\n renderer: ChunkRenderer<T>,\n queue: Queue<T> | undefined,\n initialChunks: T[] = [],\n): SerializationModel<T> => {\n const model = useMemo(() => new SerializationModel<T>(renderer, initialChunks), [queue]);\n const [loaded, setLoaded] = useState(false);\n\n // Set initial blocks.\n useEffect(() => {\n if (!queue) {\n return;\n }\n\n const update = () => {\n for (const block of queue?.objects ?? []) {\n model.appendChunk(block);\n }\n\n setLoaded(true);\n };\n\n // TODO(burdon): This is a hack to ensure the queue is loaded.\n let i: NodeJS.Timeout | undefined;\n if (queue.isLoading) {\n i = setInterval(() => {\n if (!queue?.isLoading) {\n clearInterval(i);\n update();\n }\n }, 1_000);\n } else {\n update();\n }\n\n return () => clearTimeout(i);\n }, [model, queue]);\n\n // TODO(burdon): Can we listen for queue events?\n useEffect(() => {\n if (!loaded || !queue || model.chunks.length === queue.objects.length) {\n return;\n }\n\n const chunk = queue.objects.at(-1);\n if (chunk) {\n model.appendChunk(chunk);\n }\n }, [model, loaded, queue?.objects.length]);\n\n return model;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework';\n\nimport { TranscriptionCapabilities } from '../capabilities';\nimport { type Transcriber } from '../transcriber';\n\n/**\n * Records audio while user is speaking and transcribes it after user is done speaking.\n */\nexport const useTranscriber = ({\n audioStreamTrack,\n onSegments,\n transcriberConfig,\n recorderConfig,\n}: Partial<TranscriptionCapabilities.GetTranscriberProps>) => {\n const [getTranscriber] = useCapabilities(TranscriptionCapabilities.Transcriber);\n\n // Initialize audio transcription.\n const transcriber = useMemo<Transcriber | undefined>(() => {\n if (!onSegments || !audioStreamTrack || !getTranscriber) {\n return undefined;\n }\n\n return getTranscriber({ audioStreamTrack, onSegments, transcriberConfig, recorderConfig });\n }, [audioStreamTrack, onSegments, getTranscriber, transcriberConfig, recorderConfig]);\n\n useEffect(() => {\n return () => {\n void transcriber?.close();\n };\n }, [transcriber]);\n\n return transcriber;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Transcriber = lazy(() => import('./transcriber'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useState, useEffect, useCallback } from 'react';\n\nimport { scheduleMicroTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\n\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\nimport { type TranscriberParams } from '../transcriber';\n\nexport type UseVoiceInputProps = {\n active?: boolean;\n onUpdate: (text: string) => void;\n};\n\n/**\n * Hook for voice input.\n */\nexport const useVoiceInput = ({ active, onUpdate }: UseVoiceInputProps) => {\n const soundStart = useSoundEffect('StartRecording');\n const soundStop = useSoundEffect('StopRecording');\n\n const handleSegments = useCallback<TranscriberParams['onSegments']>(async (segments) => {\n const text = segments.map((str) => str.text.trim().replace(/[^\\w\\s]/g, '')).join(' ');\n onUpdate(text);\n }, []);\n\n // Audio/transcription.\n const [recording, setRecording] = useState(false);\n const track = useAudioTrack(active);\n const transcriber = useTranscriber({\n audioStreamTrack: track,\n onSegments: handleSegments,\n });\n\n // Start/stop transcription.\n useEffect(() => {\n const ctx = new Context();\n scheduleMicroTask(ctx, async () => {\n if (active && transcriber) {\n await transcriber.open();\n log.info('starting...');\n setRecording(true);\n void soundStart.play();\n transcriber.startChunksRecording();\n } else if (!active && transcriber?.isOpen) {\n transcriber?.stopChunksRecording();\n await transcriber?.close();\n log.info('stopped');\n setRecording(false);\n void soundStop.play();\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [active, transcriber]);\n\n return { recording };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { fullyQualifiedId, getSpace } from '@dxos/client/echo';\nimport { useMembers, useQueue } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { type DataType } from '@dxos/schema';\n\nimport { Transcript, renderMarkdown } from './Transcript';\nimport { useQueueModelAdapter } from '../hooks';\nimport { type TranscriptType } from '../types';\n\nexport const TranscriptionContainer: FC<{ role: string; transcript: TranscriptType }> = ({ role, transcript }) => {\n const attendableId = fullyQualifiedId(transcript);\n const space = getSpace(transcript);\n const members = useMembers(space?.key).map((member) => member.identity);\n const queue = useQueue<DataType.Message>(transcript.queue.dxn, { pollInterval: 1_000 });\n const model = useQueueModelAdapter(renderMarkdown(members), queue);\n\n return (\n <StackItem.Content role={role} classNames='container-max-width pli-2'>\n <Transcript attendableId={attendableId} space={space} model={model} transcript={transcript} />\n </StackItem.Content>\n );\n};\n\nexport default TranscriptionContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { IconButton, type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createMarkdownExtensions,\n createRenderer,\n createThemeExtensions,\n decorateMarkdown,\n editorWidth,\n preview,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { transcript } from './transcript-extension';\nimport { type SerializationModel } from '../../model';\nimport { type TranscriptType } from '../../types';\n\nexport const renderMarkdown =\n (identities: Identity[]) =>\n (message: DataType.Message, index: number, debug = false): string[] => {\n if (message.sender.role === 'assistant') {\n // Start/stop block.\n return [message.blocks.find((block) => block.type === 'transcription')?.text ?? '', ''];\n }\n\n // TODO(burdon): Use link/reference markup for users (with popover).\n // TODO(burdon): Color and avatar.\n const identity = identities.find((identity) => identity.did === message.sender.identityDid);\n const name =\n identity?.profile?.displayName ??\n message.sender.contact?.target?.fullName ??\n message.sender.name ??\n message.sender.email ??\n message.sender.identityDid;\n const blocks = message.blocks.filter((block) => block.type === 'transcription');\n return [\n `###### ${name}` + (debug ? ` [${index}]:${message.id}` : ''),\n blocks.map((block) => block.text.trim()).join(' '),\n '',\n ];\n };\n\nexport type TranscriptProps = ThemedClassName<{\n transcript?: TranscriptType;\n space?: Space;\n model: SerializationModel<DataType.Message>;\n // TODO(wittjosiah): Move to container.\n attendableId?: string;\n ignoreAttention?: boolean;\n}>;\n\n/**\n * Transcript component implemented using the editor.\n */\nexport const Transcript = ({\n classNames,\n transcript: object,\n space,\n model,\n attendableId,\n ignoreAttention,\n}: TranscriptProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n return {\n extensions: [\n createBasicExtensions({ readOnly: true, lineWrapping: true }),\n createMarkdownExtensions({ themeMode }),\n createThemeExtensions({ themeMode }),\n decorateMarkdown(),\n space && preview(),\n transcript({\n model,\n started: object?.started ? new Date(object.started) : undefined,\n renderButton: createRenderer(({ onClick }) => (\n <IconButton icon='ph--arrow-line-down--regular' iconOnly label='Scroll to bottom' onClick={onClick} />\n )),\n }),\n ].filter(isNotFalsy),\n };\n }, [space, model]);\n\n return (\n <div\n ref={parentRef}\n className={mx('flex grow overflow-hidden', editorWidth, classNames)}\n data-popover-collision-boundary={true}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, RangeSetBuilder } from '@codemirror/state';\nimport { EditorView, GutterMarker, ViewPlugin, type ViewUpdate, gutter } from '@codemirror/view';\nimport { format } from 'date-fns/format';\nimport { intervalToDuration } from 'date-fns/intervalToDuration';\n\nimport { type CleanupFn, addEventListener, combine } from '@dxos/async';\nimport { type RenderCallback } from '@dxos/react-ui-editor';\nimport { type DataType } from '@dxos/schema';\n\nimport { DocumentAdapter, type SerializationModel } from '../../model';\n\n/**\n * Data structure that maps Chunks queue to lines with transcript state.\n */\nexport type TranscriptOptions = {\n model: SerializationModel<DataType.Message>;\n started?: Date;\n renderButton?: RenderCallback<{ onClick: () => void }>;\n};\n\n/**\n * Scrolling transcript with timestamps.\n */\nexport const transcript = ({ model, started, renderButton }: TranscriptOptions): Extension => {\n return [\n // Show timestamps in the gutter.\n gutter({\n class: 'cm-timestamp-gutter',\n lineMarkerChange: (update) => update.docChanged || update.viewportChanged,\n markers: (view) => {\n const start = getStartTime(started, model.chunks[0]);\n const builder = new RangeSetBuilder<GutterMarker>();\n for (const { from, to } of view.visibleRanges) {\n let line = view.state.doc.lineAt(from);\n while (line.from <= to) {\n const block = model.getChunkAtLine(line.number)?.blocks[0];\n const timestamp = block?.type === 'transcription' && block.started;\n if (timestamp) {\n builder.add(line.from, line.from, new TimestampMarker(line.number, new Date(timestamp), start));\n }\n\n if (line.to + 1 > view.state.doc.length) {\n break;\n }\n\n line = view.state.doc.lineAt(line.to + 1);\n }\n }\n\n return builder.finish();\n },\n }),\n\n // Listen for model updates.\n ViewPlugin.fromClass(\n class {\n private readonly _controls?: HTMLDivElement;\n private readonly _cleanup: CleanupFn;\n private readonly _adapter: DocumentAdapter;\n private _initialized = false;\n\n constructor(view: EditorView) {\n this._adapter = new DocumentAdapter(view);\n\n const scroller = view.scrollDOM;\n let isAutoScrolling = false;\n let hasScrolled = false;\n\n let timeout: NodeJS.Timeout | undefined;\n const scrollToBottom = (smooth = false) => {\n scroller.style.scrollBehavior = smooth ? 'smooth' : '';\n\n // Temporarily hide scrollbar to prevent flicker.\n scroller.classList.add('cm-hide-scrollbar');\n isAutoScrolling = true;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n this._controls?.classList.add('opacity-0');\n scroller.classList.remove('cm-hide-scrollbar');\n isAutoScrolling = false;\n }, 500);\n\n // Scroll to bottom.\n view.dispatch({\n effects: EditorView.scrollIntoView(view.state.doc.length, { y: 'end' }),\n });\n };\n\n // Scroll button.\n if (renderButton) {\n this._controls = document.createElement('div');\n this._controls.classList.add('cm-controls', 'transition-opacity', 'duration-300', 'opacity-0');\n view.dom.appendChild(this._controls);\n renderButton(\n this._controls,\n {\n onClick: () => {\n scrollToBottom(false);\n },\n },\n view,\n );\n }\n\n // Event listeners.\n this._cleanup = combine(\n addEventListener(view.scrollDOM, 'scroll', () => {\n if (!isAutoScrolling) {\n hasScrolled = true;\n this._controls?.classList.remove('opacity-0');\n }\n }),\n\n model.update.on(() => {\n // Check if clamped to bottom.\n const autoScroll =\n scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight === 0 || !hasScrolled;\n\n // Sync.\n model.sync(this._adapter);\n\n // Scroll.\n if (autoScroll) {\n scrollToBottom(true);\n }\n }),\n );\n }\n\n update(update: ViewUpdate) {\n // Initial sync.\n if (!this._initialized) {\n this._initialized = true;\n setTimeout(() => {\n model.sync(this._adapter);\n });\n }\n }\n\n destroy() {\n this._controls?.remove();\n this._cleanup();\n }\n },\n ),\n\n EditorView.theme({\n '.cm-scroller': {\n overflowY: 'scroll',\n },\n '.cm-hide-scrollbar': {\n scrollbarWidth: 'none',\n '-ms-overflow-style': 'none',\n },\n '.cm-hide-scrollbar::-webkit-scrollbar': {\n display: 'none',\n },\n '.cm-controls': {\n position: 'absolute',\n bottom: '0.5rem',\n right: '0.5rem',\n zIndex: 1000,\n },\n '.cm-line': {\n paddingRight: '1rem',\n },\n '.cm-timestamp-gutter': {\n width: '6rem',\n paddingRight: '1rem',\n },\n '.cm-timestamp-gutter > .cm-gutterElement > div': {\n display: 'inline-flex',\n textAlign: 'right',\n padding: '3px',\n },\n }),\n ];\n};\n\n/**\n * Gutter marker that displays a timestamp.\n */\nclass TimestampMarker extends GutterMarker {\n constructor(\n readonly _line: number,\n readonly _timestamp: Date,\n readonly _started?: Date,\n ) {\n super();\n }\n\n override eq(other: this): boolean {\n return other._timestamp === this._timestamp;\n }\n\n override toDOM(view: EditorView): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'text-sm text-subdued hover:bg-hoverSurface cursor-pointer';\n el.textContent = formatTimestamp(this._timestamp, this._started);\n // TODO(burdon): Click to bookmark or copy hyperlink.\n el.onclick = () => {\n const pos = view.state.doc.line(this._line).from;\n view.dispatch({\n effects: EditorView.scrollIntoView(pos, { y: 'start' }),\n });\n };\n\n return el;\n }\n}\n\nconst getStartTime = (started?: Date, message?: DataType.Message): Date | undefined => {\n if (started) {\n return started;\n }\n\n if (message?.blocks[0]?.type === 'transcription' && message.blocks[0].started) {\n return new Date(message.blocks[0].started);\n }\n\n return undefined;\n};\n\nconst formatTimestamp = (timestamp: Date, relative?: Date) => {\n if (relative) {\n const pad = (n = 0) => String(n).padStart(2, '0');\n const { hours, minutes, seconds } = intervalToDuration({ start: relative, end: timestamp });\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;\n } else {\n return format(timestamp, 'HH:mm:ss');\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Text } from '@codemirror/state';\nimport { type EditorView } from '@codemirror/view';\n\nimport { Event } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nexport type Chunk = { id: string };\n\n/**\n * Covert block to a set of markdown lines.\n */\nexport type ChunkRenderer<T extends Chunk> = (chunk: T, index: number, debug?: boolean) => string[];\n\n/**\n * Abstract representation of the document model.\n */\nexport interface ChunkDocument {\n lineCount(): number;\n replaceLines(from: number, remove: number, insert: string[]): void;\n}\n\n/**\n * Codemirror document adapter.\n */\nexport class DocumentAdapter implements ChunkDocument {\n constructor(private readonly _view: EditorView) {}\n\n /** The document must always have at least one line. */\n lineCount(): number {\n return this._view.state.doc.lines - 1;\n }\n\n replaceLines(from: number, remove: number, insert: string[]): void {\n log('replaceLines', { count: this._view.state.doc.lines, from, remove, insert });\n\n const numLines = this._view.state.doc.lines;\n const posFrom = this._view.state.doc.line(from).from;\n const posTo = remove === 0 ? posFrom : this._view.state.doc.line(Math.min(numLines, from + remove)).from;\n\n // Don't remove the last line.\n let text = insert.join('\\n');\n if (posTo === this._view.state.doc.length) {\n text += '\\n';\n }\n\n this._view.dispatch({\n changes: { from: posFrom, to: posTo, insert: text },\n });\n }\n}\n\ntype ChunkChange<T extends Chunk> =\n | {\n type: 'append';\n index: number;\n chunk: T;\n }\n | {\n type: 'update';\n index: number;\n chunk: T;\n }\n | {\n type: 'delete';\n index: number;\n id: string;\n };\n\n/**\n * Each Chunk can be converted into a set of lines.\n * Chunks can be added, updated or deleted from the Queue.\n * A Document is an immutable projection that represents a flat list of lines corresponding to the Queue.\n *\n * Ideally we would implement a custom virtual Text model for the View, but this currently isn't possible in Codemirror.\n * Instead this model tracks changes and syncs them with the ChunkDocument.\n */\nexport class SerializationModel<T extends Chunk> {\n /** Ordered set of chunks. */\n private readonly _chunks: T[] = [];\n\n /** Map of chunk IDs to their current line counts. */\n private readonly _chunkLineCounts = new Map<string, number>();\n\n /** Map of line numbers to chunk IDs. */\n private readonly _lineToChunk = new Map<number, T>();\n\n /** Track chunk changes since last sync. */\n private readonly _changes: Array<ChunkChange<T>> = [];\n\n /** Emits when the document is updated. */\n public readonly update = new Event<void>();\n\n constructor(\n private readonly _renderer: ChunkRenderer<T>,\n initialChunks: T[] = [],\n ) {\n initialChunks.forEach((chunk) => {\n this.appendChunk(chunk);\n });\n }\n\n toJSON(): { chunks: number; changes: number } {\n return {\n chunks: this._chunks.length,\n changes: this._changes.length,\n };\n }\n\n get doc() {\n return Text.of([...this._chunks.flatMap((chunk, index) => this._renderer(chunk, index)), '']);\n }\n\n get chunks() {\n return this._chunks;\n }\n\n /**\n * Get the block ID at the given line number.\n */\n getChunkAtLine(line: number): T | undefined {\n return this._lineToChunk.get(line);\n }\n\n reset(): this {\n this._chunks.length = 0;\n this._chunkLineCounts.clear();\n this._lineToChunk.clear();\n this.update.emit();\n return this;\n }\n\n appendChunk(chunk: T): this {\n const index = this._chunks.length;\n this._chunks.push(chunk);\n this._changes.push({ type: 'append', index, chunk });\n this.update.emit();\n return this;\n }\n\n updateChunk(chunk: T): this {\n const index = this._chunks.findIndex((c) => c.id === chunk.id);\n invariant(index !== -1);\n this._chunks[index] = chunk;\n this._changes.push({ type: 'update', index, chunk });\n this.update.emit();\n return this;\n }\n\n deleteBlock(id: string): this {\n const index = this._chunks.findIndex((c) => c.id === id);\n invariant(index !== -1);\n this._chunks.splice(index, 1);\n this._changes.push({ type: 'delete', index, id });\n this.update.emit();\n return this;\n }\n\n /**\n * Syncs the tracked changes with the ChunkDocument.\n */\n sync(document: ChunkDocument): this {\n log('sync', { changes: this._changes });\n\n // Process each change in order.\n for (const change of this._changes) {\n switch (change.type) {\n case 'append': {\n // For appends, convert block to lines and add at the end.\n const lines = this._renderer(change.chunk, change.index);\n const lastLine = document.lineCount();\n document.replaceLines(lastLine + 1, 0, lines);\n break;\n }\n\n case 'update': {\n // For updates, find the block's line range and replace with new lines.\n let lineStart = 1;\n for (let i = 0; i < change.index; i++) {\n lineStart += this._chunkLineCounts.get(this._chunks[i].id)!;\n }\n const previousLineCount = this._chunkLineCounts.get(change.chunk.id)!;\n const newLines = this._renderer(change.chunk, change.index);\n document.replaceLines(lineStart, previousLineCount, newLines);\n break;\n }\n\n case 'delete': {\n // For deletes, find the block's line range and remove those lines.\n let lineStart = 1;\n for (let i = 0; i < change.index; i++) {\n lineStart += this._chunkLineCounts.get(this._chunks[i].id)!;\n }\n const previousLineCount = this._chunkLineCounts.get(change.id)!;\n document.replaceLines(lineStart, previousLineCount, []);\n break;\n }\n }\n }\n\n // Clear the line-to-block mapping.\n this._lineToChunk.clear();\n\n // Update all block line counts and line-to-block mapping after processing changes.\n let currentLine = 1;\n for (const [index, chunk] of this._chunks.entries()) {\n const lineCount = this._renderer(chunk, index).length;\n this._chunkLineCounts.set(chunk.id, lineCount);\n this._lineToChunk.set(currentLine, chunk);\n currentLine += lineCount;\n }\n\n // Clean up deleted blocks.\n const chunkIds = new Set(this._chunks.map((chunk) => chunk.id));\n for (const id of this._chunkLineCounts.keys()) {\n if (!chunkIds.has(id)) {\n this._chunkLineCounts.delete(id);\n }\n }\n\n // Clear changes after sync.\n this._changes.length = 0;\n return this;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\n\nexport type UseAudioState = {\n audio?: HTMLAudioElement;\n stream?: MediaStream;\n track?: MediaStreamTrack;\n};\n\nexport const useAudioFile = (audioUrl: string, constraints?: MediaTrackConstraints): UseAudioState => {\n const [{ audio, stream, track }, setStream] = useState<UseAudioState>({});\n useEffect(() => {\n const ctx = new Context();\n\n scheduleTask(ctx, async () => {\n const response = await fetch(audioUrl);\n const blob = await response.blob();\n const objectUrl = URL.createObjectURL(blob);\n ctx.onDispose(() => {\n URL.revokeObjectURL(objectUrl);\n });\n\n const audio = new Audio();\n audio.src = objectUrl;\n\n await new Promise<void>((resolve, reject) => {\n audio.addEventListener(\n 'error',\n (err) => {\n log.error('error', { err });\n reject(err);\n },\n { once: true },\n );\n audio.addEventListener(\n 'canplay',\n async () => {\n log.info('starting...');\n try {\n // Try to play the audio\n await audio.play();\n resolve();\n } catch (playError) {\n log.error('Play failed', { playError });\n // Still resolve as the audio is ready, even if autoplay failed.\n resolve();\n }\n },\n { once: true },\n );\n audio.load();\n });\n\n const audioCtx = new AudioContext();\n\n // Resume AudioContext if it's suspended.\n if (audioCtx.state === 'suspended') {\n await audioCtx.resume();\n }\n\n const destination = audioCtx.createMediaStreamDestination();\n destination.channelCount = 1;\n\n const source = audioCtx.createMediaElementSource(audio);\n source.connect(destination);\n const track = destination.stream.getAudioTracks()[0];\n if (constraints) {\n await track.applyConstraints(constraints).catch((err) => log.catch(err));\n }\n\n // Also connect to speakers so audio is audible.\n setStream({\n audio,\n stream: destination.stream,\n track: destination.stream.getAudioTracks()[0],\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [audioUrl]);\n\n return { audio, stream, track };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n/**\n *\n */\n// TODO(burdon): Reconcile with react-ui-sfx and plugin-calls.\nexport const useAudioTrack = (active?: boolean, constraints?: MediaTrackConstraints): MediaStreamTrack | undefined => {\n const [track, setTrack] = useState<MediaStreamTrack>();\n useEffect(() => {\n if (!active) {\n track?.stop();\n setTrack(undefined);\n return;\n }\n\n const initAudio = async () => {\n const audio = new Audio();\n audio.srcObject = await navigator.mediaDevices.getUserMedia({ audio: constraints ?? true });\n const [track] = audio.srcObject.getAudioTracks();\n if (track) {\n setTrack(track);\n }\n };\n\n if (active) {\n void initAudio();\n }\n }, [active]);\n\n return track;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport type { Obj } from '@dxos/echo';\nimport { type Queue } from '@dxos/react-client/echo';\n\nimport { type ChunkRenderer, SerializationModel } from '../model';\n\n/**\n * Model adapter for a queue.\n */\nexport const useQueueModelAdapter = <T extends Obj.Any>(\n renderer: ChunkRenderer<T>,\n queue: Queue<T> | undefined,\n initialChunks: T[] = [],\n): SerializationModel<T> => {\n const model = useMemo(() => new SerializationModel<T>(renderer, initialChunks), [queue]);\n const [loaded, setLoaded] = useState(false);\n\n // Set initial blocks.\n useEffect(() => {\n if (!queue) {\n return;\n }\n\n const update = () => {\n for (const block of queue?.objects ?? []) {\n model.appendChunk(block);\n }\n\n setLoaded(true);\n };\n\n // TODO(burdon): This is a hack to ensure the queue is loaded.\n let i: NodeJS.Timeout | undefined;\n if (queue.isLoading) {\n i = setInterval(() => {\n if (!queue?.isLoading) {\n clearInterval(i);\n update();\n }\n }, 1_000);\n } else {\n update();\n }\n\n return () => clearTimeout(i);\n }, [model, queue]);\n\n // TODO(burdon): Can we listen for queue events?\n useEffect(() => {\n if (!loaded || !queue || model.chunks.length === queue.objects.length) {\n return;\n }\n\n const chunk = queue.objects.at(-1);\n if (chunk) {\n model.appendChunk(chunk);\n }\n }, [model, loaded, queue?.objects.length]);\n\n return model;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework';\n\nimport { TranscriptionCapabilities } from '../capabilities';\nimport { type Transcriber } from '../transcriber';\n\n/**\n * Records audio while user is speaking and transcribes it after user is done speaking.\n */\nexport const useTranscriber = ({\n audioStreamTrack,\n onSegments,\n transcriberConfig,\n recorderConfig,\n}: Partial<TranscriptionCapabilities.GetTranscriberProps>) => {\n const [getTranscriber] = useCapabilities(TranscriptionCapabilities.Transcriber);\n\n // Initialize audio transcription.\n const transcriber = useMemo<Transcriber | undefined>(() => {\n if (!onSegments || !audioStreamTrack || !getTranscriber) {\n return undefined;\n }\n\n return getTranscriber({ audioStreamTrack, onSegments, transcriberConfig, recorderConfig });\n }, [audioStreamTrack, onSegments, getTranscriber, transcriberConfig, recorderConfig]);\n\n useEffect(() => {\n return () => {\n void transcriber?.close();\n };\n }, [transcriber]);\n\n return transcriber;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Transcriber = lazy(() => import('./transcriber'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useState, useEffect, useCallback } from 'react';\n\nimport { scheduleMicroTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\n\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\nimport { type TranscriberParams } from '../transcriber';\n\nexport type UseVoiceInputProps = {\n active?: boolean;\n onUpdate: (text: string) => void;\n};\n\n/**\n * Hook for voice input.\n */\nexport const useVoiceInput = ({ active, onUpdate }: UseVoiceInputProps) => {\n const soundStart = useSoundEffect('StartRecording');\n const soundStop = useSoundEffect('StopRecording');\n\n const handleSegments = useCallback<TranscriberParams['onSegments']>(async (segments) => {\n const text = segments.map((str) => str.text.trim().replace(/[^\\w\\s]/g, '')).join(' ');\n onUpdate(text);\n }, []);\n\n // Audio/transcription.\n const [recording, setRecording] = useState(false);\n const track = useAudioTrack(active);\n const transcriber = useTranscriber({\n audioStreamTrack: track,\n onSegments: handleSegments,\n });\n\n // Start/stop transcription.\n useEffect(() => {\n const ctx = new Context();\n scheduleMicroTask(ctx, async () => {\n if (active && transcriber) {\n await transcriber.open();\n log.info('starting...');\n setRecording(true);\n void soundStart.play();\n transcriber.startChunksRecording();\n } else if (!active && transcriber?.isOpen) {\n transcriber?.stopChunksRecording();\n await transcriber?.close();\n log.info('stopped');\n setRecording(false);\n void soundStop.play();\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [active, transcriber]);\n\n return { recording };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_echo", "import_react", "import_state", "import_async", "import_log", "import_app_framework", "import_context", "DocumentAdapter", "_view", "lineCount", "state", "doc", "lines", "replaceLines", "from", "remove", "insert", "log", "count", "numLines", "posFrom", "line", "posTo", "Math", "min", "text", "join", "length", "dispatch", "changes", "to", "SerializationModel", "_renderer", "initialChunks", "_chunks", "_chunkLineCounts", "Map", "_lineToChunk", "_changes", "update", "Event", "forEach", "chunk", "appendChunk", "toJSON", "chunks", "Text", "of", "flatMap", "index", "getChunkAtLine", "get", "reset", "clear", "emit", "push", "type", "updateChunk", "findIndex", "c", "id", "invariant", "deleteBlock", "splice", "sync", "document", "change", "lastLine", "lineStart", "i", "previousLineCount", "newLines", "currentLine", "entries", "set", "chunkIds", "Set", "map", "keys", "has", "delete", "transcript", "model", "started", "renderButton", "gutter", "class", "lineMarkerChange", "docChanged", "viewportChanged", "markers", "view", "start", "getStartTime", "builder", "RangeSetBuilder", "visibleRanges", "lineAt", "block", "number", "blocks", "timestamp", "add", "TimestampMarker", "Date", "finish", "ViewPlugin", "fromClass", "_initialized", "_adapter", "scroller", "scrollDOM", "isAutoScrolling", "hasScrolled", "timeout", "scrollToBottom", "smooth", "style", "scrollBehavior", "classList", "clearTimeout", "setTimeout", "_controls", "effects", "EditorView", "scrollIntoView", "y", "createElement", "dom", "appendChild", "onClick", "_cleanup", "combine", "addEventListener", "on", "autoScroll", "scrollHeight", "scrollTop", "clientHeight", "destroy", "theme", "overflowY", "scrollbarWidth", "display", "position", "bottom", "right", "zIndex", "paddingRight", "width", "textAlign", "padding", "GutterMarker", "_line", "_timestamp", "_started", "eq", "other", "toDOM", "el", "className", "textContent", "formatTimestamp", "onclick", "pos", "message", "undefined", "relative", "pad", "n", "String", "padStart", "hours", "minutes", "seconds", "intervalToDuration", "end", "format", "renderMarkdown", "identities", "debug", "sender", "role", "find", "identity", "did", "identityDid", "name", "profile", "displayName", "contact", "target", "fullName", "email", "filter", "trim", "Transcript", "classNames", "object", "space", "attendableId", "ignoreAttention", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "extensions", "createBasicExtensions", "readOnly", "lineWrapping", "createMarkdownExtensions", "createThemeExtensions", "decorateMarkdown", "preview", "createRenderer", "React", "IconButton", "icon", "iconOnly", "label", "isNotFalsy", "div", "ref", "mx", "editorWidth", "data-popover-collision-boundary", "useAudioFile", "audioUrl", "constraints", "audio", "stream", "track", "setStream", "useState", "useEffect", "ctx", "Context", "scheduleTask", "response", "fetch", "blob", "objectUrl", "URL", "createObjectURL", "onDispose", "revokeObjectURL", "Audio", "src", "Promise", "resolve", "reject", "err", "error", "once", "info", "play", "playError", "load", "audioCtx", "AudioContext", "resume", "destination", "createMediaStreamDestination", "channelCount", "source", "createMediaElementSource", "connect", "getAudioTracks", "applyConstraints", "catch", "dispose", "useAudioTrack", "active", "setTrack", "stop", "initAudio", "srcObject", "navigator", "mediaDevices", "getUserMedia", "useQueueModelAdapter", "renderer", "queue", "useMemo", "loaded", "setLoaded", "objects", "isLoading", "setInterval", "clearInterval", "at", "IntentResolver", "lazy", "ReactSurface", "Transcriber", "useTranscriber", "audioStreamTrack", "onSegments", "transcriberConfig", "recorderConfig", "getTranscriber", "useCapabilities", "TranscriptionCapabilities", "transcriber", "close", "useVoiceInput", "onUpdate", "soundStart", "useSoundEffect", "soundStop", "handleSegments", "useCallback", "segments", "str", "replace", "recording", "setRecording", "scheduleMicroTask", "open", "startChunksRecording", "isOpen", "stopChunksRecording", "TranscriptionContainer", "fullyQualifiedId", "getSpace", "members", "useMembers", "key", "member", "useQueue", "dxn", "pollInterval", "StackItem", "Content"]
7
7
  }