@pouchy_ai/companion-sdk 0.68.0 → 0.70.0

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/CHANGELOG.md CHANGED
@@ -2,6 +2,55 @@
2
2
 
3
3
  All notable changes to `@pouchy_ai/companion-sdk` are documented in this file.
4
4
 
5
+ ## [0.70.0]
6
+
7
+ ### Added
8
+
9
+ - **Each companion line of a call reports the voice cues it performed.** On a
10
+ call where `audioTags` was granted, `onTranscript`'s companion lines carry
11
+ `audioTags: string[]`: the cues in order, without brackets (`['sighs',
12
+ 'laughs']`), `[]` when the line performed none. `text` stays clean, as
13
+ before. The field is absent on user lines and on calls without the grant, so
14
+ its absence means "not applicable", never zero. Until now the cues were
15
+ stripped before anything you could see, so whether the companion used them
16
+ could only be judged by ear.
17
+ - `extractAudioTags(text)`: the same cues as a list, for self-plumbed
18
+ ElevenLabs sessions. It agrees with `stripAudioTags` on what a cue is.
19
+
20
+ ## [0.69.0]
21
+
22
+ ### Added
23
+
24
+ - **`call.setMuted(muted)`, `call.isMuted()`, `call.canMute` and
25
+ `connectCall({ muted })`: the reader's own mute.** The half-duplex path
26
+ re-opens the microphone 350 ms after every companion line, so a mute an
27
+ application built on the provider client switched itself back on. The SDK
28
+ now keeps the reader's mute apart from the half-duplex mute and opens the mic
29
+ only when neither holds. `canMute` says whether `setMuted` controls the mic
30
+ on this call (`true` on `openai-realtime`; on `elevenlabs-convai` whenever the
31
+ installed `@elevenlabs/client` has `setMicMuted`, which every version in the
32
+ peer range does). `muted: true` disables the OpenAI track before the offer
33
+ is made; on ElevenLabs it applies once the session is up, because that client
34
+ has no start-muted option.
35
+ - **`call.sendText(text)`: a line the reader typed, as their turn.** The
36
+ companion answers it as the reader's words (OpenAI: a user `input_text`
37
+ item plus `response.create`, cancelling a response in flight first;
38
+ ElevenLabs: `user_message`). The SDK reports it to `onTranscript` as
39
+ `role: 'user'`, once, so it reaches the transcript `connectCall` hands to
40
+ `/end` and the companion remembers it. Nothing reaches the provider before
41
+ the call. Returns `false` and sends nothing for blank text, after `close()`,
42
+ or on a closed channel.
43
+
44
+ ### Changed
45
+
46
+ - The CDN size budget for the unminified `companion-sdk.js` is raised from
47
+ 40,500 to 41,000 bytes gzipped (measured 40,584; 40,196 at 0.68.0). The
48
+ minified bundle, the one to serve, is 17,917 bytes against its unchanged
49
+ 18,000 budget.
50
+ - `injectEvent`'s doc now says what it is NOT: its line is context, never
51
+ reported to `onTranscript` or memory, and `connectCall` uses it for
52
+ server-pushed world moments. Behaviour is unchanged.
53
+
5
54
  ## [0.68.0]
6
55
 
7
56
  ### Fixed
package/README.md CHANGED
@@ -464,6 +464,11 @@ server may decline (OpenAI Realtime fallback, or the operator switched it off);
464
464
  ElevenLabs session yourself? Run every agent transcript line through
465
465
  `stripAudioTags(text)` before you show or store it.
466
466
 
467
+ To see what was performed (0.70.0): on a granted call every companion
468
+ `onTranscript` line carries `audioTags: string[]` (`['sighs', 'laughs']`, or
469
+ `[]`); the field is absent on user lines and on calls without the grant.
470
+ Self-plumbed: `extractAudioTags(line)` gives the same list.
471
+
467
472
  `connectCall({ record: true })` (0.65.0) records the **whole call — both
468
473
  voices**, kept by the voice provider, so a host that cannot capture audio on
469
474
  the device (React Native's native WebRTC has no WebAudio / MediaRecorder) gets
@@ -509,6 +514,17 @@ the call, fold it back in as a beat on the world turn door with
509
514
  `trigger.context: "this was a phone call"`, the gist as `text`, and any
510
515
  `proposedPatches` the call should leave behind.
511
516
 
517
+ **Mute and typing** (0.69.0). `call.setMuted(true)` mutes the reader's
518
+ microphone until `setMuted(false)`; it holds across the companion's lines (the
519
+ half-duplex re-open never undoes it), and `connectCall({ muted: true })` opens
520
+ the call muted. Show a mute control only when `call.canMute` is `true`.
521
+ `call.sendText(text)` sends a line the reader TYPED as their turn: the companion
522
+ answers it as something they said, it reaches `onTranscript` as
523
+ `role: 'user'`, and it is in the memory consolidated at hang-up. It cuts an
524
+ utterance in progress, like speaking would. Nothing is sent before you call it,
525
+ so run any check of your own first. `injectEvent` is different: a context
526
+ line, never reported as the reader's words.
527
+
512
528
  `call.interrupt()` (0.36.0) is the **silent cut**: stop the utterance currently
513
529
  being spoken WITHOUT generating new speech — for real-time commentary going
514
530
  stale at a beat boundary (next hand starts while last hand's remark is still
package/dist/call.d.ts CHANGED
@@ -45,14 +45,27 @@ export declare const AVATAR_VISUAL_TOOLS: VoiceToolBridge['tools'];
45
45
  * Only ASCII-word cues are removed (the cue vocabulary is English): a line's
46
46
  * own brackets — `【重点】`, `[1]` — are left alone. */
47
47
  export declare function stripAudioTags(text: string): string;
48
+ /** The performed cues in a call transcript line, in order, without brackets
49
+ * (0.70.0): `'[laughs] 好呀 [whispers] 秘密'` → `['laughs', 'whispers']`. The
50
+ * same cues `stripAudioTags` removes, so the two always agree. `connectCall`
51
+ * reports them on each companion line of a call where `audioTags` was
52
+ * granted (`onTranscript`'s `audioTags`); exported for self-plumbed
53
+ * ElevenLabs sessions. */
54
+ export declare function extractAudioTags(text: string): string[];
48
55
  /** Names of the avatar visual tools (for routing + the no-op fallback). */
49
56
  export declare const AVATAR_VISUAL_TOOL_NAMES: readonly string[];
50
57
  export interface CompanionCallOptions {
51
58
  /** Element to route remote audio to. One is created if omitted. */
52
59
  audioElement?: HTMLAudioElement;
60
+ /** One finished line. `text` never carries performed cues. On a call where
61
+ * `audioTags` was GRANTED (0.70.0), every companion line also carries
62
+ * `audioTags`: the cues it performed, in order (`[]` when it performed
63
+ * none). Absent on user lines and on calls without the grant, so absence
64
+ * means "not applicable", never "zero". */
53
65
  onTranscript?: (e: {
54
66
  role: 'user' | 'assistant';
55
67
  text: string;
68
+ audioTags?: string[];
56
69
  }) => void;
57
70
  onSpeakingChange?: (speaking: boolean) => void;
58
71
  onError?: (err: Error) => void;
@@ -64,13 +77,56 @@ export interface CompanionCallOptions {
64
77
  * "说一句就断了" field report). Enable only where AEC actually holds:
65
78
  * headphones, desktop, or devices you have verified. */
66
79
  bargeIn?: boolean;
80
+ /** Open the call with the reader's microphone MUTED (0.69.0); see
81
+ * `CompanionCall.setMuted`. On `openai-realtime` the track is disabled
82
+ * before it is attached, so nothing is ever sent. On `elevenlabs-convai`
83
+ * the mute is applied the moment the session is up; the provider client
84
+ * has no start-muted option, so the connect handshake itself (before the
85
+ * agent's first line) can carry audio. */
86
+ muted?: boolean;
67
87
  }
68
88
  export interface CompanionCall {
69
89
  /** Hang up. Idempotent. */
70
90
  close: () => void;
71
91
  /** Inject an out-of-band context line. `speak: true` makes the companion react
72
- * now; false stages it for the next turn. */
92
+ * now; false stages it for the next turn.
93
+ *
94
+ * NOT the reader's words: the line does not reach `onTranscript` or the
95
+ * memory `/end` consolidates, and `connectCall` uses this same lever for
96
+ * server-pushed world moments. For something the reader TYPED, use
97
+ * `sendText`. */
73
98
  injectEvent: (text: string, speak?: boolean) => void;
99
+ /** Send a line the READER typed, as their turn in the call (0.69.0). The
100
+ * companion answers it as something the reader said; it is reported to
101
+ * `onTranscript` as `role: 'user'` (once, by the SDK, the moment it is
102
+ * sent) and so reaches the memory `connectCall` hands to `/end` at hang-up,
103
+ * in order with the spoken lines.
104
+ *
105
+ * It takes the floor the way speech does: an utterance the companion is
106
+ * in the middle of is cut, then it replies to this line.
107
+ *
108
+ * Nothing is sent before this call — the provider sees the text only when
109
+ * you pass it here, so a check you run first runs before anyone reads it.
110
+ * Returns `false` (and sends nothing) for blank text, after `close()`, or
111
+ * when the call's channel is not open; `true` once it was handed to the
112
+ * provider. Same behaviour on both providers. */
113
+ sendText: (text: string) => boolean;
114
+ /** The reader's own mute (0.69.0). `true` stops the microphone sending
115
+ * audio until `setMuted(false)`. Distinct from the SDK's half-duplex mute
116
+ * (the mic is muted while the companion speaks, unless `bargeIn`): a
117
+ * reader who muted stays muted when the companion finishes a line. A
118
+ * no-op after `close()`. Check `canMute` before showing a mute control. */
119
+ setMuted: (muted: boolean) => void;
120
+ /** The reader's mute as last set (0.69.0) — the `setMuted` / `muted`
121
+ * state, not whether the half-duplex mute is momentarily engaged. A
122
+ * method, not a field, so it stays live on a spread copy of the handle. */
123
+ isMuted: () => boolean;
124
+ /** Whether `setMuted` actually controls the microphone on this call
125
+ * (0.69.0). `true` on `openai-realtime`; on `elevenlabs-convai` it is
126
+ * `true` when the installed `@elevenlabs/client` exposes `setMicMuted`
127
+ * (every version the peer range allows does). When `false`, `setMuted`
128
+ * only records the state: do not show a mute control. */
129
+ canMute: boolean;
74
130
  /** SILENT CUT (0.36.0): stop the utterance currently being spoken WITHOUT
75
131
  * generating any new speech — the "stale commentary at a beat boundary"
76
132
  * case (field request: fast-paced game, last hand's commentary still
@@ -1 +1 @@
1
- {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../src/call.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACX,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,EACX,cAAc,EACd,MAAM,UAAU,CAAC;AAIlB;;;gFAGgF;AAChF,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;IACtF,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAED;;;;;;6EAM6E;AAC7E,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAAC,OAAO,CAuDvD,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAA0C,CAAC;AAEhG;;;;;;;;;;;;uBAYuB;AACvB,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAAC,OAAO,CAyDxD,CAAC;AAEF;;;;;;;;qDAQqD;AACrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAA2C,CAAC;AAElG,MAAM,WAAW,oBAAoB;IACpC,mEAAmE;IACnE,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B;;;;;;6DAMyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC7B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;kDAC8C;IAC9C,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD;;;;;;;;;;;;;;;;2DAgBuD;IACvD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACtC;2DACuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;6CACyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD;uDACmD;IACnD,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;8DAC0D;IAC1D,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,CAAC;CACtB;AAID,oDAAoD;AACpD,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,eAAe,EACtB,IAAI,GAAE,oBAAyB,EAC/B,MAAM,CAAC,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,CAAC,CAWxB"}
1
+ {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../src/call.ts"],"names":[],"mappings":"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"}
package/dist/call.js CHANGED
@@ -159,6 +159,15 @@ export function stripAudioTags(text) {
159
159
  .replace(/\s+([,,。.!!??、])/g, '$1')
160
160
  .trim();
161
161
  }
162
+ /** The performed cues in a call transcript line, in order, without brackets
163
+ * (0.70.0): `'[laughs] 好呀 [whispers] 秘密'` → `['laughs', 'whispers']`. The
164
+ * same cues `stripAudioTags` removes, so the two always agree. `connectCall`
165
+ * reports them on each companion line of a call where `audioTags` was
166
+ * granted (`onTranscript`'s `audioTags`); exported for self-plumbed
167
+ * ElevenLabs sessions. */
168
+ export function extractAudioTags(text) {
169
+ return [...text.matchAll(/\[([A-Za-z][A-Za-z ,'-]{0,38})\]/g)].map((m) => m[1].trim());
170
+ }
162
171
  /** Names of the avatar visual tools (for routing + the no-op fallback). */
163
172
  export const AVATAR_VISUAL_TOOL_NAMES = AVATAR_VISUAL_TOOLS.map((t) => t.name);
164
173
  const OPENAI_REALTIME_CALLS = 'https://api.openai.com/v1/realtime/calls';
@@ -257,10 +266,17 @@ async function openOpenAICall(creds, opts, bridge) {
257
266
  // the companion interrupting itself.
258
267
  const MIC_UNMUTE_TAIL_MS = 350;
259
268
  let micUnmuteTimer = null;
260
- const setMicEnabled = (enabled) => {
269
+ // Two independent reasons the mic is off (0.69.0): the READER muted
270
+ // (setMuted), or the companion is speaking (half-duplex). The track is on
271
+ // only when neither holds, so the end-of-speech re-open can never undo a
272
+ // reader's mute — which is what made a mute layered on top of this SDK a
273
+ // button that switched itself back on.
274
+ let userMuted = opts.muted === true;
275
+ let speechMuted = false;
276
+ const applyMic = () => {
261
277
  try {
262
278
  for (const tr of mic.getAudioTracks())
263
- tr.enabled = enabled;
279
+ tr.enabled = !userMuted && !speechMuted;
264
280
  }
265
281
  catch {
266
282
  /* track gone — ignore */
@@ -271,15 +287,18 @@ async function openOpenAICall(creds, opts, bridge) {
271
287
  clearTimeout(micUnmuteTimer);
272
288
  micUnmuteTimer = null;
273
289
  }
274
- setMicEnabled(false);
290
+ speechMuted = true;
291
+ applyMic();
275
292
  };
276
293
  const scheduleMicUnmute = () => {
277
294
  if (micUnmuteTimer)
278
295
  clearTimeout(micUnmuteTimer);
279
296
  micUnmuteTimer = setTimeout(() => {
280
297
  micUnmuteTimer = null;
281
- if (!closed)
282
- setMicEnabled(true);
298
+ if (closed)
299
+ return;
300
+ speechMuted = false;
301
+ applyMic();
283
302
  }, MIC_UNMUTE_TAIL_MS);
284
303
  };
285
304
  // Whether the model is audibly speaking right now (driven by the
@@ -287,6 +306,15 @@ async function openOpenAICall(creds, opts, bridge) {
287
306
  // active response makes the server emit a benign-but-noisy error event, so
288
307
  // an idle interrupt() must be a true no-op.
289
308
  let oaiSpeaking = false;
309
+ // Whether a response is in flight (response.created → response.done) —
310
+ // broader than `oaiSpeaking`, which starts only with audio. `sendText`
311
+ // cancels an in-flight response before creating its own: the server
312
+ // refuses a second concurrent response, which would leave the typed line
313
+ // in the conversation with no reply.
314
+ let oaiResponseActive = false;
315
+ // A reader who asked to start muted never sends a frame: the track is
316
+ // disabled before the offer is even created.
317
+ applyMic();
290
318
  const dc = pc.createDataChannel('oai-events');
291
319
  // `response.function_call_arguments.done` carries the call_id + args but often
292
320
  // not the name — the name arrives earlier on `response.output_item.added`; track it.
@@ -374,6 +402,9 @@ async function openOpenAICall(creds, opts, bridge) {
374
402
  msg.transcript) {
375
403
  opts.onTranscript?.({ role: 'user', text: msg.transcript });
376
404
  }
405
+ else if (msg.type === 'response.created') {
406
+ oaiResponseActive = true;
407
+ }
377
408
  else if (msg.type === 'output_audio_buffer.started') {
378
409
  oaiSpeaking = true;
379
410
  opts.onSpeakingChange?.(true);
@@ -392,6 +423,8 @@ async function openOpenAICall(creds, opts, bridge) {
392
423
  // audio doesn't get captured the instant we unmute. Several event names
393
424
  // can end a turn; any of them re-arms the mic.
394
425
  oaiSpeaking = false;
426
+ if (msg.type === 'response.done')
427
+ oaiResponseActive = false;
395
428
  opts.onSpeakingChange?.(false);
396
429
  if (opts.bargeIn !== true)
397
430
  scheduleMicUnmute();
@@ -553,6 +586,38 @@ async function openOpenAICall(creds, opts, bridge) {
553
586
  if (speak)
554
587
  dc.send(JSON.stringify({ type: 'response.create' }));
555
588
  },
589
+ sendText: (text) => {
590
+ const line = typeof text === 'string' ? text.trim() : '';
591
+ if (closed || dc.readyState !== 'open' || !line)
592
+ return false;
593
+ try {
594
+ if (oaiResponseActive) {
595
+ dc.send(JSON.stringify({ type: 'response.cancel' }));
596
+ if (oaiSpeaking)
597
+ dc.send(JSON.stringify({ type: 'output_audio_buffer.clear' }));
598
+ }
599
+ dc.send(JSON.stringify({
600
+ type: 'conversation.item.create',
601
+ item: { type: 'message', role: 'user', content: [{ type: 'input_text', text: line }] }
602
+ }));
603
+ dc.send(JSON.stringify({ type: 'response.create' }));
604
+ }
605
+ catch {
606
+ return false;
607
+ }
608
+ // A typed item produces no input-audio transcription event, so the SDK
609
+ // reports it itself — that is what puts it in the caller's transcript
610
+ // and in the memory connectCall consolidates at hang-up.
611
+ opts.onTranscript?.({ role: 'user', text: line });
612
+ return true;
613
+ },
614
+ setMuted: (muted) => {
615
+ userMuted = muted === true;
616
+ if (!closed)
617
+ applyMic();
618
+ },
619
+ isMuted: () => userMuted,
620
+ canMute: true,
556
621
  interrupt: () => {
557
622
  // Silent cut: stop generating (response.cancel) AND flush what's
558
623
  // already buffered for playback (output_audio_buffer.clear — the
@@ -610,6 +675,15 @@ async function openConvaiCall(creds, opts, bridge) {
610
675
  /* not supported on this client build — ignore */
611
676
  }
612
677
  };
678
+ // The reader's mute and the half-duplex mute are separate reasons (0.69.0,
679
+ // see the OpenAI leg); the mic opens only when neither holds.
680
+ let userMuted = opts.muted === true;
681
+ let speechMuted = false;
682
+ const applyMic = () => setConvMicMuted(userMuted || speechMuted);
683
+ // Lines `sendText` already reported. Should the provider ever echo a typed
684
+ // user_message back as a user transcript, it must not be reported twice
685
+ // (and land in memory twice). Matched by exact text, consumed once.
686
+ const typedEcho = [];
613
687
  const conv = await mod.Conversation.startSession({
614
688
  conversationToken: creds.token,
615
689
  connectionType: 'webrtc',
@@ -660,15 +734,18 @@ async function openConvaiCall(creds, opts, bridge) {
660
734
  clearTimeout(micUnmuteTimer);
661
735
  micUnmuteTimer = null;
662
736
  }
663
- setConvMicMuted(true);
737
+ speechMuted = true;
738
+ applyMic();
664
739
  }
665
740
  else {
666
741
  if (micUnmuteTimer)
667
742
  clearTimeout(micUnmuteTimer);
668
743
  micUnmuteTimer = setTimeout(() => {
669
744
  micUnmuteTimer = null;
670
- if (!closed)
671
- setConvMicMuted(false);
745
+ if (closed)
746
+ return;
747
+ speechMuted = false;
748
+ applyMic();
672
749
  }, MIC_UNMUTE_TAIL_MS);
673
750
  }
674
751
  },
@@ -677,8 +754,19 @@ async function openConvaiCall(creds, opts, bridge) {
677
754
  // the server granted `audioTags` for this call (0.64.0).
678
755
  const raw = (message ?? '').trim();
679
756
  const text = creds.audioTags && role === 'agent' ? stripAudioTags(raw) : raw;
757
+ // What was performed, read off the same raw line before it is
758
+ // stripped (0.70.0): the transcript and memory stay clean, and the
759
+ // integrator can still count the cues.
760
+ const cues = creds.audioTags && role === 'agent' ? { audioTags: extractAudioTags(raw) } : {};
680
761
  if (!closed && text) {
681
- opts.onTranscript?.({ role: role === 'agent' ? 'assistant' : 'user', text });
762
+ if (role !== 'agent') {
763
+ const echo = typedEcho.indexOf(text);
764
+ if (echo !== -1) {
765
+ typedEcho.splice(echo, 1);
766
+ return;
767
+ }
768
+ }
769
+ opts.onTranscript?.({ role: role === 'agent' ? 'assistant' : 'user', text, ...cues });
682
770
  }
683
771
  },
684
772
  onError: (message) => {
@@ -725,6 +813,10 @@ async function openConvaiCall(creds, opts, bridge) {
725
813
  opts.onError?.(new Error('call disconnected'));
726
814
  }
727
815
  });
816
+ // The session is up: honour a start-muted request now (the EL client has no
817
+ // start-muted option — see CompanionCallOptions.muted).
818
+ if (userMuted)
819
+ applyMic();
728
820
  return {
729
821
  provider: 'elevenlabs-convai',
730
822
  close: () => {
@@ -750,6 +842,31 @@ async function openConvaiCall(creds, opts, bridge) {
750
842
  /* channel not ready */
751
843
  }
752
844
  },
845
+ sendText: (text) => {
846
+ const line = typeof text === 'string' ? text.trim() : '';
847
+ if (closed || !line)
848
+ return false;
849
+ try {
850
+ // A `user_message`: the agent answers it as the user's turn, and
851
+ // the server's own turn-taking cuts an utterance in progress.
852
+ conv.sendUserMessage(line);
853
+ }
854
+ catch {
855
+ return false;
856
+ }
857
+ typedEcho.push(line);
858
+ if (typedEcho.length > 20)
859
+ typedEcho.shift();
860
+ opts.onTranscript?.({ role: 'user', text: line });
861
+ return true;
862
+ },
863
+ setMuted: (muted) => {
864
+ userMuted = muted === true;
865
+ if (!closed)
866
+ applyMic();
867
+ },
868
+ isMuted: () => userMuted,
869
+ canMute: typeof conv.setMicMuted === 'function',
753
870
  interrupt: () => {
754
871
  // BEST-EFFORT silent cut — the EL client has no public "stop playback"
755
872
  // API (interruption is normally server-driven: a server `interruption`
package/dist/call.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sourceRoot":"","sources":["../src/call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../src/call.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { CompanionClient, CompanionError, pouchyBrandIconUrl, OUTBOX_AMBIGUOUS_M
3
3
  export type { CompanionDebugEvent } from './client.js';
4
4
  export type { CompanionErrorCodeValue, ControlErrorCodeValue } from './errors.js';
5
5
  export type { CompanionClientOptions, CompanionStreamState, HelloAck, RecalledMemory, CompanionTurn, CallCredentials, CallRecordingUnavailable, CallRecordingResult, CallWorldBrief, CallPrivateStory, CallTrimmed, CompanionToolDecl, ToolCallEvent, WorldStateInput, CompanionAvatar, CompanionWallet, WalletBalance, BrandIconSize, EndSessionResult, SendTextReply, TurnUsage, QueuedSend, OutboxStore, ConfirmActionResult, MandateDocument, ConfirmOutcomeClass, RememberDedup } from './client.js';
6
- export { openCompanionCall, HOST_CONTROL_TOOLS, HOST_CONTROL_TOOL_NAMES, AVATAR_VISUAL_TOOLS, AVATAR_VISUAL_TOOL_NAMES, stripAudioTags } from './call.js';
6
+ export { openCompanionCall, HOST_CONTROL_TOOLS, HOST_CONTROL_TOOL_NAMES, AVATAR_VISUAL_TOOLS, AVATAR_VISUAL_TOOL_NAMES, stripAudioTags, extractAudioTags } from './call.js';
7
7
  export type { CompanionCall, CompanionCallOptions, VoiceToolBridge } from './call.js';
8
8
  export { VOICE_TOOL_VARIABLE, VOICE_TOOL_VARIABLE_PLAIN, VOICE_TOOL_HEADER_PLAIN } from './voice-tool.js';
9
9
  export { COMPANION_SCOPES, COMPANION_MODALITIES, SENSITIVE_SCOPES, REPRESENT_SCOPES, DEFAULT_SCOPES, DEFAULT_MODALITIES, isSensitiveScope, isRepresentScope, hasScope, grantsScope } from './scopes.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,0BAA0B,EAC1B,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC/E,YAAY,EACX,sBAAsB,EACtB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAInF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAKpB,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMvE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACjE,YAAY,EACX,WAAW,EACX,aAAa,EACb,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,MAAM,QAAQ,CAAC;AAMhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EACX,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,MAAM,gBAAgB,CAAC;AAExB,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,eAAe,CAE7E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,0BAA0B,EAC1B,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC/E,YAAY,EACX,sBAAsB,EACtB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAInF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAKpB,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMvE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACjE,YAAY,EACX,WAAW,EACX,aAAa,EACb,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,MAAM,QAAQ,CAAC;AAMhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EACX,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,MAAM,gBAAgB,CAAC;AAExB,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,eAAe,CAE7E"}
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@
11
11
  // await c.sendText('what should I do?');
12
12
  import { CompanionClient } from './client.js';
13
13
  export { CompanionClient, CompanionError, pouchyBrandIconUrl, OUTBOX_AMBIGUOUS_MAX_AGE_MS, OUTBOX_MAX_REPLAY_ATTEMPTS } from './client.js';
14
- export { openCompanionCall, HOST_CONTROL_TOOLS, HOST_CONTROL_TOOL_NAMES, AVATAR_VISUAL_TOOLS, AVATAR_VISUAL_TOOL_NAMES, stripAudioTags } from './call.js';
14
+ export { openCompanionCall, HOST_CONTROL_TOOLS, HOST_CONTROL_TOOL_NAMES, AVATAR_VISUAL_TOOLS, AVATAR_VISUAL_TOOL_NAMES, stripAudioTags, extractAudioTags } from './call.js';
15
15
  // Exported because a self-plumbed integration (one that calls startCall and
16
16
  // opens the EL session itself) has to name this variable exactly; a literal
17
17
  // typed at their end is the silent-failure path this constant exists to close.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,sDAAsD;AACtD,EAAE;AACF,0DAA0D;AAC1D,6EAA6E;AAC7E,uBAAuB;AACvB,8CAA8C;AAC9C,eAAe;AACf,8EAA8E;AAC9E,2CAA2C;AAE3C,OAAO,EAAE,eAAe,EAA+B,MAAM,UAAU,CAAC;AAExE,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,0BAA0B,EAC1B,MAAM,UAAU,CAAC;AAgClB,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,MAAM,QAAQ,CAAC;AAEhB,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,UAAU,CAAC;AA4BlB,wEAAwE;AACxE,2EAA2E;AAC3E,8EAA8E;AAC9E,gEAAgE;AAChE,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAGpB,+EAA+E;AAC/E,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAWjE,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAC1E,+BAA+B;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAQrD,iCAAiC;AACjC,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC3D,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,sDAAsD;AACtD,EAAE;AACF,0DAA0D;AAC1D,6EAA6E;AAC7E,uBAAuB;AACvB,8CAA8C;AAC9C,eAAe;AACf,8EAA8E;AAC9E,2CAA2C;AAE3C,OAAO,EAAE,eAAe,EAA+B,MAAM,UAAU,CAAC;AAExE,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,0BAA0B,EAC1B,MAAM,UAAU,CAAC;AAgClB,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,MAAM,QAAQ,CAAC;AAEhB,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,UAAU,CAAC;AA4BlB,wEAAwE;AACxE,2EAA2E;AAC3E,8EAA8E;AAC9E,gEAAgE;AAChE,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAGpB,+EAA+E;AAC/E,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAWjE,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAC1E,+BAA+B;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAQrD,iCAAiC;AACjC,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC3D,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pouchy_ai/companion-sdk",
3
- "version": "0.68.0",
3
+ "version": "0.70.0",
4
4
  "description": "Embed the Pouchy companion \u2014 chat, voice, tools, memory, live world-state, instant UI, and agent-to-agent messaging \u2014 in any app, game, or site.",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
package/src/call.ts CHANGED
@@ -186,13 +186,28 @@ export function stripAudioTags(text: string): string {
186
186
  .trim();
187
187
  }
188
188
 
189
+ /** The performed cues in a call transcript line, in order, without brackets
190
+ * (0.70.0): `'[laughs] 好呀 [whispers] 秘密'` → `['laughs', 'whispers']`. The
191
+ * same cues `stripAudioTags` removes, so the two always agree. `connectCall`
192
+ * reports them on each companion line of a call where `audioTags` was
193
+ * granted (`onTranscript`'s `audioTags`); exported for self-plumbed
194
+ * ElevenLabs sessions. */
195
+ export function extractAudioTags(text: string): string[] {
196
+ return [...text.matchAll(/\[([A-Za-z][A-Za-z ,'-]{0,38})\]/g)].map((m) => m[1]!.trim());
197
+ }
198
+
189
199
  /** Names of the avatar visual tools (for routing + the no-op fallback). */
190
200
  export const AVATAR_VISUAL_TOOL_NAMES: readonly string[] = AVATAR_VISUAL_TOOLS.map((t) => t.name);
191
201
 
192
202
  export interface CompanionCallOptions {
193
203
  /** Element to route remote audio to. One is created if omitted. */
194
204
  audioElement?: HTMLAudioElement;
195
- onTranscript?: (e: { role: 'user' | 'assistant'; text: string }) => void;
205
+ /** One finished line. `text` never carries performed cues. On a call where
206
+ * `audioTags` was GRANTED (0.70.0), every companion line also carries
207
+ * `audioTags`: the cues it performed, in order (`[]` when it performed
208
+ * none). Absent on user lines and on calls without the grant, so absence
209
+ * means "not applicable", never "zero". */
210
+ onTranscript?: (e: { role: 'user' | 'assistant'; text: string; audioTags?: string[] }) => void;
196
211
  onSpeakingChange?: (speaking: boolean) => void;
197
212
  onError?: (err: Error) => void;
198
213
  /** OPT-IN full duplex: keep the mic OPEN while the companion speaks so the
@@ -203,14 +218,57 @@ export interface CompanionCallOptions {
203
218
  * "说一句就断了" field report). Enable only where AEC actually holds:
204
219
  * headphones, desktop, or devices you have verified. */
205
220
  bargeIn?: boolean;
221
+ /** Open the call with the reader's microphone MUTED (0.69.0); see
222
+ * `CompanionCall.setMuted`. On `openai-realtime` the track is disabled
223
+ * before it is attached, so nothing is ever sent. On `elevenlabs-convai`
224
+ * the mute is applied the moment the session is up; the provider client
225
+ * has no start-muted option, so the connect handshake itself (before the
226
+ * agent's first line) can carry audio. */
227
+ muted?: boolean;
206
228
  }
207
229
 
208
230
  export interface CompanionCall {
209
231
  /** Hang up. Idempotent. */
210
232
  close: () => void;
211
233
  /** Inject an out-of-band context line. `speak: true` makes the companion react
212
- * now; false stages it for the next turn. */
234
+ * now; false stages it for the next turn.
235
+ *
236
+ * NOT the reader's words: the line does not reach `onTranscript` or the
237
+ * memory `/end` consolidates, and `connectCall` uses this same lever for
238
+ * server-pushed world moments. For something the reader TYPED, use
239
+ * `sendText`. */
213
240
  injectEvent: (text: string, speak?: boolean) => void;
241
+ /** Send a line the READER typed, as their turn in the call (0.69.0). The
242
+ * companion answers it as something the reader said; it is reported to
243
+ * `onTranscript` as `role: 'user'` (once, by the SDK, the moment it is
244
+ * sent) and so reaches the memory `connectCall` hands to `/end` at hang-up,
245
+ * in order with the spoken lines.
246
+ *
247
+ * It takes the floor the way speech does: an utterance the companion is
248
+ * in the middle of is cut, then it replies to this line.
249
+ *
250
+ * Nothing is sent before this call — the provider sees the text only when
251
+ * you pass it here, so a check you run first runs before anyone reads it.
252
+ * Returns `false` (and sends nothing) for blank text, after `close()`, or
253
+ * when the call's channel is not open; `true` once it was handed to the
254
+ * provider. Same behaviour on both providers. */
255
+ sendText: (text: string) => boolean;
256
+ /** The reader's own mute (0.69.0). `true` stops the microphone sending
257
+ * audio until `setMuted(false)`. Distinct from the SDK's half-duplex mute
258
+ * (the mic is muted while the companion speaks, unless `bargeIn`): a
259
+ * reader who muted stays muted when the companion finishes a line. A
260
+ * no-op after `close()`. Check `canMute` before showing a mute control. */
261
+ setMuted: (muted: boolean) => void;
262
+ /** The reader's mute as last set (0.69.0) — the `setMuted` / `muted`
263
+ * state, not whether the half-duplex mute is momentarily engaged. A
264
+ * method, not a field, so it stays live on a spread copy of the handle. */
265
+ isMuted: () => boolean;
266
+ /** Whether `setMuted` actually controls the microphone on this call
267
+ * (0.69.0). `true` on `openai-realtime`; on `elevenlabs-convai` it is
268
+ * `true` when the installed `@elevenlabs/client` exposes `setMicMuted`
269
+ * (every version the peer range allows does). When `false`, `setMuted`
270
+ * only records the state: do not show a mute control. */
271
+ canMute: boolean;
214
272
  /** SILENT CUT (0.36.0): stop the utterance currently being spoken WITHOUT
215
273
  * generating any new speech — the "stale commentary at a beat boundary"
216
274
  * case (field request: fast-paced game, last hand's commentary still
@@ -359,9 +417,16 @@ async function openOpenAICall(
359
417
  // the companion interrupting itself.
360
418
  const MIC_UNMUTE_TAIL_MS = 350;
361
419
  let micUnmuteTimer: ReturnType<typeof setTimeout> | null = null;
362
- const setMicEnabled = (enabled: boolean) => {
420
+ // Two independent reasons the mic is off (0.69.0): the READER muted
421
+ // (setMuted), or the companion is speaking (half-duplex). The track is on
422
+ // only when neither holds, so the end-of-speech re-open can never undo a
423
+ // reader's mute — which is what made a mute layered on top of this SDK a
424
+ // button that switched itself back on.
425
+ let userMuted = opts.muted === true;
426
+ let speechMuted = false;
427
+ const applyMic = () => {
363
428
  try {
364
- for (const tr of mic.getAudioTracks()) tr.enabled = enabled;
429
+ for (const tr of mic.getAudioTracks()) tr.enabled = !userMuted && !speechMuted;
365
430
  } catch {
366
431
  /* track gone — ignore */
367
432
  }
@@ -371,13 +436,16 @@ async function openOpenAICall(
371
436
  clearTimeout(micUnmuteTimer);
372
437
  micUnmuteTimer = null;
373
438
  }
374
- setMicEnabled(false);
439
+ speechMuted = true;
440
+ applyMic();
375
441
  };
376
442
  const scheduleMicUnmute = () => {
377
443
  if (micUnmuteTimer) clearTimeout(micUnmuteTimer);
378
444
  micUnmuteTimer = setTimeout(() => {
379
445
  micUnmuteTimer = null;
380
- if (!closed) setMicEnabled(true);
446
+ if (closed) return;
447
+ speechMuted = false;
448
+ applyMic();
381
449
  }, MIC_UNMUTE_TAIL_MS);
382
450
  };
383
451
 
@@ -386,6 +454,15 @@ async function openOpenAICall(
386
454
  // active response makes the server emit a benign-but-noisy error event, so
387
455
  // an idle interrupt() must be a true no-op.
388
456
  let oaiSpeaking = false;
457
+ // Whether a response is in flight (response.created → response.done) —
458
+ // broader than `oaiSpeaking`, which starts only with audio. `sendText`
459
+ // cancels an in-flight response before creating its own: the server
460
+ // refuses a second concurrent response, which would leave the typed line
461
+ // in the conversation with no reply.
462
+ let oaiResponseActive = false;
463
+ // A reader who asked to start muted never sends a frame: the track is
464
+ // disabled before the offer is even created.
465
+ applyMic();
389
466
 
390
467
  const dc = pc.createDataChannel('oai-events');
391
468
  // `response.function_call_arguments.done` carries the call_id + args but often
@@ -486,6 +563,8 @@ async function openOpenAICall(
486
563
  msg.transcript
487
564
  ) {
488
565
  opts.onTranscript?.({ role: 'user', text: msg.transcript });
566
+ } else if (msg.type === 'response.created') {
567
+ oaiResponseActive = true;
489
568
  } else if (msg.type === 'output_audio_buffer.started') {
490
569
  oaiSpeaking = true;
491
570
  opts.onSpeakingChange?.(true);
@@ -504,6 +583,7 @@ async function openOpenAICall(
504
583
  // audio doesn't get captured the instant we unmute. Several event names
505
584
  // can end a turn; any of them re-arms the mic.
506
585
  oaiSpeaking = false;
586
+ if (msg.type === 'response.done') oaiResponseActive = false;
507
587
  opts.onSpeakingChange?.(false);
508
588
  if (opts.bargeIn !== true) scheduleMicUnmute();
509
589
  }
@@ -675,6 +755,36 @@ async function openOpenAICall(
675
755
  );
676
756
  if (speak) dc.send(JSON.stringify({ type: 'response.create' }));
677
757
  },
758
+ sendText: (text) => {
759
+ const line = typeof text === 'string' ? text.trim() : '';
760
+ if (closed || dc.readyState !== 'open' || !line) return false;
761
+ try {
762
+ if (oaiResponseActive) {
763
+ dc.send(JSON.stringify({ type: 'response.cancel' }));
764
+ if (oaiSpeaking) dc.send(JSON.stringify({ type: 'output_audio_buffer.clear' }));
765
+ }
766
+ dc.send(
767
+ JSON.stringify({
768
+ type: 'conversation.item.create',
769
+ item: { type: 'message', role: 'user', content: [{ type: 'input_text', text: line }] }
770
+ })
771
+ );
772
+ dc.send(JSON.stringify({ type: 'response.create' }));
773
+ } catch {
774
+ return false;
775
+ }
776
+ // A typed item produces no input-audio transcription event, so the SDK
777
+ // reports it itself — that is what puts it in the caller's transcript
778
+ // and in the memory connectCall consolidates at hang-up.
779
+ opts.onTranscript?.({ role: 'user', text: line });
780
+ return true;
781
+ },
782
+ setMuted: (muted) => {
783
+ userMuted = muted === true;
784
+ if (!closed) applyMic();
785
+ },
786
+ isMuted: () => userMuted,
787
+ canMute: true,
678
788
  interrupt: () => {
679
789
  // Silent cut: stop generating (response.cancel) AND flush what's
680
790
  // already buffered for playback (output_audio_buffer.clear — the
@@ -740,6 +850,15 @@ async function openConvaiCall(
740
850
  /* not supported on this client build — ignore */
741
851
  }
742
852
  };
853
+ // The reader's mute and the half-duplex mute are separate reasons (0.69.0,
854
+ // see the OpenAI leg); the mic opens only when neither holds.
855
+ let userMuted = opts.muted === true;
856
+ let speechMuted = false;
857
+ const applyMic = () => setConvMicMuted(userMuted || speechMuted);
858
+ // Lines `sendText` already reported. Should the provider ever echo a typed
859
+ // user_message back as a user transcript, it must not be reported twice
860
+ // (and land in memory twice). Matched by exact text, consumed once.
861
+ const typedEcho: string[] = [];
743
862
  const conv = await mod.Conversation.startSession({
744
863
  conversationToken: creds.token,
745
864
  connectionType: 'webrtc',
@@ -788,12 +907,15 @@ async function openConvaiCall(
788
907
  clearTimeout(micUnmuteTimer);
789
908
  micUnmuteTimer = null;
790
909
  }
791
- setConvMicMuted(true);
910
+ speechMuted = true;
911
+ applyMic();
792
912
  } else {
793
913
  if (micUnmuteTimer) clearTimeout(micUnmuteTimer);
794
914
  micUnmuteTimer = setTimeout(() => {
795
915
  micUnmuteTimer = null;
796
- if (!closed) setConvMicMuted(false);
916
+ if (closed) return;
917
+ speechMuted = false;
918
+ applyMic();
797
919
  }, MIC_UNMUTE_TAIL_MS);
798
920
  }
799
921
  },
@@ -802,8 +924,19 @@ async function openConvaiCall(
802
924
  // the server granted `audioTags` for this call (0.64.0).
803
925
  const raw = (message ?? '').trim();
804
926
  const text = creds.audioTags && role === 'agent' ? stripAudioTags(raw) : raw;
927
+ // What was performed, read off the same raw line before it is
928
+ // stripped (0.70.0): the transcript and memory stay clean, and the
929
+ // integrator can still count the cues.
930
+ const cues = creds.audioTags && role === 'agent' ? { audioTags: extractAudioTags(raw) } : {};
805
931
  if (!closed && text) {
806
- opts.onTranscript?.({ role: role === 'agent' ? 'assistant' : 'user', text });
932
+ if (role !== 'agent') {
933
+ const echo = typedEcho.indexOf(text);
934
+ if (echo !== -1) {
935
+ typedEcho.splice(echo, 1);
936
+ return;
937
+ }
938
+ }
939
+ opts.onTranscript?.({ role: role === 'agent' ? 'assistant' : 'user', text, ...cues });
807
940
  }
808
941
  },
809
942
  onError: (message: string) => {
@@ -845,6 +978,10 @@ async function openConvaiCall(
845
978
  }
846
979
  });
847
980
 
981
+ // The session is up: honour a start-muted request now (the EL client has no
982
+ // start-muted option — see CompanionCallOptions.muted).
983
+ if (userMuted) applyMic();
984
+
848
985
  return {
849
986
  provider: 'elevenlabs-convai',
850
987
  close: () => {
@@ -865,6 +1002,27 @@ async function openConvaiCall(
865
1002
  /* channel not ready */
866
1003
  }
867
1004
  },
1005
+ sendText: (text) => {
1006
+ const line = typeof text === 'string' ? text.trim() : '';
1007
+ if (closed || !line) return false;
1008
+ try {
1009
+ // A `user_message`: the agent answers it as the user's turn, and
1010
+ // the server's own turn-taking cuts an utterance in progress.
1011
+ conv.sendUserMessage(line);
1012
+ } catch {
1013
+ return false;
1014
+ }
1015
+ typedEcho.push(line);
1016
+ if (typedEcho.length > 20) typedEcho.shift();
1017
+ opts.onTranscript?.({ role: 'user', text: line });
1018
+ return true;
1019
+ },
1020
+ setMuted: (muted) => {
1021
+ userMuted = muted === true;
1022
+ if (!closed) applyMic();
1023
+ },
1024
+ isMuted: () => userMuted,
1025
+ canMute: typeof (conv as unknown as { setMicMuted?: unknown }).setMicMuted === 'function',
868
1026
  interrupt: () => {
869
1027
  // BEST-EFFORT silent cut — the EL client has no public "stop playback"
870
1028
  // API (interruption is normally server-driven: a server `interruption`
package/src/index.ts CHANGED
@@ -56,7 +56,8 @@ export {
56
56
  HOST_CONTROL_TOOL_NAMES,
57
57
  AVATAR_VISUAL_TOOLS,
58
58
  AVATAR_VISUAL_TOOL_NAMES,
59
- stripAudioTags
59
+ stripAudioTags,
60
+ extractAudioTags
60
61
  } from './call';
61
62
  export type { CompanionCall, CompanionCallOptions, VoiceToolBridge } from './call';
62
63
  // Exported because a self-plumbed integration (one that calls startCall and