@estuary-ai/sdk 0.1.4 → 0.1.6

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.
package/dist/index.mjs CHANGED
@@ -3738,7 +3738,7 @@ var SocketManager = class extends TypedEventEmitter {
3738
3738
  // src/voice/voice-manager.ts
3739
3739
  async function createVoiceManager(transport, socketManager, sampleRate, logger) {
3740
3740
  if (transport === "websocket") {
3741
- const { WebSocketVoiceManager } = await import('./websocket-voice-A4CK3UTM.mjs');
3741
+ const { WebSocketVoiceManager } = await import('./websocket-voice-HYHCIYEW.mjs');
3742
3742
  return new WebSocketVoiceManager(socketManager, sampleRate, logger);
3743
3743
  }
3744
3744
  if (transport === "livekit") {
@@ -3747,7 +3747,7 @@ async function createVoiceManager(transport, socketManager, sampleRate, logger)
3747
3747
  return new LiveKitVoiceManager(socketManager, logger);
3748
3748
  } catch {
3749
3749
  logger.warn("livekit-client not installed, falling back to WebSocket voice");
3750
- const { WebSocketVoiceManager } = await import('./websocket-voice-A4CK3UTM.mjs');
3750
+ const { WebSocketVoiceManager } = await import('./websocket-voice-HYHCIYEW.mjs');
3751
3751
  return new WebSocketVoiceManager(socketManager, sampleRate, logger);
3752
3752
  }
3753
3753
  }
@@ -3756,7 +3756,7 @@ async function createVoiceManager(transport, socketManager, sampleRate, logger)
3756
3756
  const { LiveKitVoiceManager } = await import('./livekit-voice-H6WZ44LM.mjs');
3757
3757
  return new LiveKitVoiceManager(socketManager, logger);
3758
3758
  } catch {
3759
- const { WebSocketVoiceManager } = await import('./websocket-voice-A4CK3UTM.mjs');
3759
+ const { WebSocketVoiceManager } = await import('./websocket-voice-HYHCIYEW.mjs');
3760
3760
  return new WebSocketVoiceManager(socketManager, sampleRate, logger);
3761
3761
  }
3762
3762
  }
@@ -3865,6 +3865,8 @@ var AudioPlayer = class {
3865
3865
  sampleRate;
3866
3866
  onEvent;
3867
3867
  audioContext = null;
3868
+ mediaStreamDest = null;
3869
+ audioElement = null;
3868
3870
  queue = [];
3869
3871
  currentSource = null;
3870
3872
  currentMessageId = null;
@@ -3900,6 +3902,16 @@ var AudioPlayer = class {
3900
3902
  }
3901
3903
  dispose() {
3902
3904
  this.clear();
3905
+ if (this.audioElement) {
3906
+ this.audioElement.pause();
3907
+ this.audioElement.srcObject = null;
3908
+ this.audioElement.remove();
3909
+ this.audioElement = null;
3910
+ }
3911
+ if (this.mediaStreamDest) {
3912
+ this.mediaStreamDest.disconnect();
3913
+ this.mediaStreamDest = null;
3914
+ }
3903
3915
  if (this.audioContext) {
3904
3916
  this.audioContext.close().catch(() => {
3905
3917
  });
@@ -3912,8 +3924,20 @@ var AudioPlayer = class {
3912
3924
  return null;
3913
3925
  }
3914
3926
  const AudioCtx = globalThis.AudioContext || globalThis.webkitAudioContext;
3915
- this.audioContext = new AudioCtx({ sampleRate: this.sampleRate });
3916
- return this.audioContext;
3927
+ const ctx = new AudioCtx({ sampleRate: this.sampleRate });
3928
+ this.audioContext = ctx;
3929
+ if (typeof document !== "undefined") {
3930
+ this.mediaStreamDest = ctx.createMediaStreamDestination();
3931
+ const el = document.createElement("audio");
3932
+ el.srcObject = this.mediaStreamDest.stream;
3933
+ el.autoplay = true;
3934
+ el.style.display = "none";
3935
+ document.body.appendChild(el);
3936
+ el.play().catch(() => {
3937
+ });
3938
+ this.audioElement = el;
3939
+ }
3940
+ return ctx;
3917
3941
  }
3918
3942
  playNext() {
3919
3943
  const ctx = this.getAudioContext();
@@ -3936,7 +3960,7 @@ var AudioPlayer = class {
3936
3960
  this.isPlaying = true;
3937
3961
  const source = ctx.createBufferSource();
3938
3962
  source.buffer = buffer;
3939
- source.connect(ctx.destination);
3963
+ source.connect(this.mediaStreamDest ?? ctx.destination);
3940
3964
  this.currentSource = source;
3941
3965
  source.onended = () => {
3942
3966
  this.currentSource = null;
@@ -4096,6 +4120,9 @@ var EstuaryClient = class extends TypedEventEmitter {
4096
4120
  this.ensureConnected();
4097
4121
  this.socketManager.emitEvent("client_interrupt", { message_id: messageId });
4098
4122
  this.audioPlayer?.clear();
4123
+ if (this.config.suppressMicDuringPlayback) {
4124
+ this.voiceManager?.setSuppressed?.(false);
4125
+ }
4099
4126
  }
4100
4127
  /** Send a camera image for vision processing */
4101
4128
  sendCameraImage(imageBase64, mimeType, requestId, text) {
@@ -4134,9 +4161,15 @@ var EstuaryClient = class extends TypedEventEmitter {
4134
4161
  this.audioPlayer = new AudioPlayer(sampleRate, (event) => {
4135
4162
  if (event.type === "started") {
4136
4163
  this.emit("audioPlaybackStarted", event.messageId);
4164
+ if (this.config.suppressMicDuringPlayback) {
4165
+ this.voiceManager?.setSuppressed?.(true);
4166
+ }
4137
4167
  } else if (event.type === "complete") {
4138
4168
  this.emit("audioPlaybackComplete", event.messageId);
4139
4169
  this.notifyAudioPlaybackComplete(event.messageId);
4170
+ if (this.config.suppressMicDuringPlayback) {
4171
+ this.voiceManager?.setSuppressed?.(false);
4172
+ }
4140
4173
  }
4141
4174
  });
4142
4175
  }
@@ -4191,6 +4224,9 @@ var EstuaryClient = class extends TypedEventEmitter {
4191
4224
  this.socketManager.on("interrupt", (data) => {
4192
4225
  this.audioPlayer?.clear();
4193
4226
  this.actionParsers.clear();
4227
+ if (this.config.suppressMicDuringPlayback) {
4228
+ this.voiceManager?.setSuppressed?.(false);
4229
+ }
4194
4230
  this.emit("interrupt", data);
4195
4231
  });
4196
4232
  this.socketManager.on("error", (error) => this.emit("error", error));