@layercode/js-sdk 1.0.19 → 1.0.22

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.
@@ -1,3 +1,18 @@
1
+ /**
2
+ * Interface for LayercodeClient public methods
3
+ */
4
+ interface ILayercodeClient {
5
+ connect(): Promise<void>;
6
+ disconnect(): Promise<void>;
7
+ triggerUserTurnStarted(): Promise<void>;
8
+ triggerUserTurnFinished(): Promise<void>;
9
+ getStream(): MediaStream | null;
10
+ setInputDevice(deviceId: string): Promise<void>;
11
+ readonly status: string;
12
+ readonly userAudioAmplitude: number;
13
+ readonly agentAudioAmplitude: number;
14
+ readonly sessionId: string | null;
15
+ }
1
16
  /**
2
17
  * Interface for LayercodeClient constructor options
3
18
  */
@@ -28,12 +43,14 @@ interface LayercodeClientOptions {
28
43
  onAgentAmplitudeChange?: (amplitude: number) => void;
29
44
  /** Callback when connection status changes */
30
45
  onStatusChange?: (status: string) => void;
46
+ /** Callback when user turn changes */
47
+ onUserIsSpeakingChange?: (isSpeaking: boolean) => void;
31
48
  }
32
49
  /**
33
50
  * @class LayercodeClient
34
51
  * @classdesc Core client for Layercode audio pipeline that manages audio recording, WebSocket communication, and speech processing.
35
52
  */
36
- declare class LayercodeClient {
53
+ declare class LayercodeClient implements ILayercodeClient {
37
54
  private options;
38
55
  private wavRecorder;
39
56
  private wavPlayer;
@@ -43,11 +60,13 @@ declare class LayercodeClient {
43
60
  private pushToTalkActive;
44
61
  private pushToTalkEnabled;
45
62
  private canInterrupt;
46
- private vadPausedPlayer;
47
63
  private userIsSpeaking;
48
64
  private endUserTurn;
49
65
  private recorderStarted;
50
66
  private readySent;
67
+ private currentTurnText;
68
+ private currentTurnId;
69
+ private audioBuffer;
51
70
  _websocketUrl: string;
52
71
  status: string;
53
72
  userAudioAmplitude: number;
@@ -70,6 +89,7 @@ declare class LayercodeClient {
70
89
  * @private
71
90
  */
72
91
  private _clientResponseAudioReplayFinished;
92
+ private _estimateWordsHeard;
73
93
  private _clientInterruptAssistantReplay;
74
94
  triggerUserTurnStarted(): Promise<void>;
75
95
  triggerUserTurnFinished(): Promise<void>;
@@ -107,5 +127,11 @@ declare class LayercodeClient {
107
127
  * @returns {MediaStream|null} The microphone stream or null if not initialized
108
128
  */
109
129
  getStream(): MediaStream | null;
130
+ /**
131
+ * Switches the input device for the microphone and restarts recording
132
+ * @param {string} deviceId - The deviceId of the new microphone
133
+ */
134
+ setInputDevice(deviceId: string): Promise<void>;
110
135
  }
111
136
  export default LayercodeClient;
137
+ export type { ILayercodeClient, LayercodeClientOptions };
@@ -1,4 +1,4 @@
1
- export type LayercodeMessageType = 'client.audio' | 'trigger.turn.start' | 'trigger.turn.end' | 'trigger.response.audio.replay_finished' | 'vad_events' | 'client.ready' | 'turn.start' | 'turn.end' | 'response.audio' | 'response.data';
1
+ export type LayercodeMessageType = 'client.audio' | 'trigger.turn.start' | 'trigger.turn.end' | 'trigger.response.audio.replay_finished' | 'trigger.response.audio.interrupted' | 'vad_events' | 'client.ready' | 'turn.start' | 'turn.end' | 'response.audio' | 'response.text' | 'response.data';
2
2
  export interface BaseLayercodeMessage {
3
3
  type: LayercodeMessageType;
4
4
  event_id?: string;
@@ -20,9 +20,19 @@ export interface ClientReadyMessage extends BaseLayercodeMessage {
20
20
  }
21
21
  export interface ClientTriggerResponseAudioReplayFinishedMessage extends BaseLayercodeMessage {
22
22
  type: 'trigger.response.audio.replay_finished';
23
- reason: 'completed' | 'interrupted';
23
+ reason: 'completed';
24
24
  last_delta_id_played?: string;
25
25
  }
26
+ export interface ClientTriggerResponseAudioInterruptedMessage extends BaseLayercodeMessage {
27
+ type: 'trigger.response.audio.interrupted';
28
+ playback_offset?: number;
29
+ interruption_context?: {
30
+ turn_id: string;
31
+ estimated_words_heard: number;
32
+ total_words: number;
33
+ text_heard: string;
34
+ };
35
+ }
26
36
  export interface ServerTurnMessage extends BaseLayercodeMessage {
27
37
  type: 'turn.start' | 'turn.end';
28
38
  role: 'user' | 'assistant';
@@ -33,11 +43,16 @@ export interface ServerResponseAudioMessage extends BaseLayercodeMessage {
33
43
  delta_id?: string;
34
44
  turn_id: string;
35
45
  }
46
+ export interface ServerResponseTextMessage extends BaseLayercodeMessage {
47
+ type: 'response.text';
48
+ content: string;
49
+ turn_id: string;
50
+ }
36
51
  export interface ServerResponseDataMessage extends BaseLayercodeMessage {
37
52
  type: 'response.data';
38
53
  content: any;
39
54
  turn_id: string;
40
55
  }
41
- export type ServerMessage = ServerTurnMessage | ServerResponseAudioMessage | ServerResponseDataMessage;
42
- export type ClientMessage = ClientAudioMessage | ClientTriggerTurnMessage | ClientTriggerResponseAudioReplayFinishedMessage | ClientVadEventsMessage | ClientReadyMessage;
56
+ export type ServerMessage = ServerTurnMessage | ServerResponseAudioMessage | ServerResponseTextMessage | ServerResponseDataMessage;
57
+ export type ClientMessage = ClientAudioMessage | ClientTriggerTurnMessage | ClientTriggerResponseAudioReplayFinishedMessage | ClientTriggerResponseAudioInterruptedMessage | ClientVadEventsMessage | ClientReadyMessage;
43
58
  export type LayercodeMessage = ClientMessage | ServerMessage;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Layercode",
3
3
  "license": "MIT",
4
4
  "name": "@layercode/js-sdk",
5
- "version": "1.0.19",
5
+ "version": "1.0.22",
6
6
  "description": "Layercode JavaScript SDK for browser usage",
7
7
  "type": "module",
8
8
  "main": "dist/layercode-js-sdk.esm.js",