@pouchy_ai/companion-sdk 0.68.0 → 0.69.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 +34 -0
- package/README.md +11 -0
- package/dist/call.d.ts +44 -1
- package/dist/call.d.ts.map +1 -1
- package/dist/call.js +112 -8
- package/dist/call.js.map +1 -1
- package/package.json +1 -1
- package/src/call.ts +146 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@pouchy_ai/companion-sdk` are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.69.0]
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`call.setMuted(muted)`, `call.isMuted()`, `call.canMute` and
|
|
10
|
+
`connectCall({ muted })`: the reader's own mute.** The half-duplex path
|
|
11
|
+
re-opens the microphone 350 ms after every companion line, so a mute an
|
|
12
|
+
application built on the provider client switched itself back on. The SDK
|
|
13
|
+
now keeps the reader's mute apart from the half-duplex mute and opens the mic
|
|
14
|
+
only when neither holds. `canMute` says whether `setMuted` controls the mic
|
|
15
|
+
on this call (`true` on `openai-realtime`; on `elevenlabs-convai` whenever the
|
|
16
|
+
installed `@elevenlabs/client` has `setMicMuted`, which every version in the
|
|
17
|
+
peer range does). `muted: true` disables the OpenAI track before the offer
|
|
18
|
+
is made; on ElevenLabs it applies once the session is up, because that client
|
|
19
|
+
has no start-muted option.
|
|
20
|
+
- **`call.sendText(text)`: a line the reader typed, as their turn.** The
|
|
21
|
+
companion answers it as the reader's words (OpenAI: a user `input_text`
|
|
22
|
+
item plus `response.create`, cancelling a response in flight first;
|
|
23
|
+
ElevenLabs: `user_message`). The SDK reports it to `onTranscript` as
|
|
24
|
+
`role: 'user'`, once, so it reaches the transcript `connectCall` hands to
|
|
25
|
+
`/end` and the companion remembers it. Nothing reaches the provider before
|
|
26
|
+
the call. Returns `false` and sends nothing for blank text, after `close()`,
|
|
27
|
+
or on a closed channel.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- The CDN size budget for the unminified `companion-sdk.js` is raised from
|
|
32
|
+
40,500 to 41,000 bytes gzipped (measured 40,584; 40,196 at 0.68.0). The
|
|
33
|
+
minified bundle, the one to serve, is 17,917 bytes against its unchanged
|
|
34
|
+
18,000 budget.
|
|
35
|
+
- `injectEvent`'s doc now says what it is NOT: its line is context, never
|
|
36
|
+
reported to `onTranscript` or memory, and `connectCall` uses it for
|
|
37
|
+
server-pushed world moments. Behaviour is unchanged.
|
|
38
|
+
|
|
5
39
|
## [0.68.0]
|
|
6
40
|
|
|
7
41
|
### Fixed
|
package/README.md
CHANGED
|
@@ -509,6 +509,17 @@ the call, fold it back in as a beat on the world turn door with
|
|
|
509
509
|
`trigger.context: "this was a phone call"`, the gist as `text`, and any
|
|
510
510
|
`proposedPatches` the call should leave behind.
|
|
511
511
|
|
|
512
|
+
**Mute and typing** (0.69.0). `call.setMuted(true)` mutes the reader's
|
|
513
|
+
microphone until `setMuted(false)`; it holds across the companion's lines (the
|
|
514
|
+
half-duplex re-open never undoes it), and `connectCall({ muted: true })` opens
|
|
515
|
+
the call muted. Show a mute control only when `call.canMute` is `true`.
|
|
516
|
+
`call.sendText(text)` sends a line the reader TYPED as their turn: the companion
|
|
517
|
+
answers it as something they said, it reaches `onTranscript` as
|
|
518
|
+
`role: 'user'`, and it is in the memory consolidated at hang-up. It cuts an
|
|
519
|
+
utterance in progress, like speaking would. Nothing is sent before you call it,
|
|
520
|
+
so run any check of your own first. `injectEvent` is different: a context
|
|
521
|
+
line, never reported as the reader's words.
|
|
522
|
+
|
|
512
523
|
`call.interrupt()` (0.36.0) is the **silent cut**: stop the utterance currently
|
|
513
524
|
being spoken WITHOUT generating new speech — for real-time commentary going
|
|
514
525
|
stale at a beat boundary (next hand starts while last hand's remark is still
|
package/dist/call.d.ts
CHANGED
|
@@ -64,13 +64,56 @@ export interface CompanionCallOptions {
|
|
|
64
64
|
* "说一句就断了" field report). Enable only where AEC actually holds:
|
|
65
65
|
* headphones, desktop, or devices you have verified. */
|
|
66
66
|
bargeIn?: boolean;
|
|
67
|
+
/** Open the call with the reader's microphone MUTED (0.69.0); see
|
|
68
|
+
* `CompanionCall.setMuted`. On `openai-realtime` the track is disabled
|
|
69
|
+
* before it is attached, so nothing is ever sent. On `elevenlabs-convai`
|
|
70
|
+
* the mute is applied the moment the session is up; the provider client
|
|
71
|
+
* has no start-muted option, so the connect handshake itself (before the
|
|
72
|
+
* agent's first line) can carry audio. */
|
|
73
|
+
muted?: boolean;
|
|
67
74
|
}
|
|
68
75
|
export interface CompanionCall {
|
|
69
76
|
/** Hang up. Idempotent. */
|
|
70
77
|
close: () => void;
|
|
71
78
|
/** Inject an out-of-band context line. `speak: true` makes the companion react
|
|
72
|
-
* now; false stages it for the next turn.
|
|
79
|
+
* now; false stages it for the next turn.
|
|
80
|
+
*
|
|
81
|
+
* NOT the reader's words: the line does not reach `onTranscript` or the
|
|
82
|
+
* memory `/end` consolidates, and `connectCall` uses this same lever for
|
|
83
|
+
* server-pushed world moments. For something the reader TYPED, use
|
|
84
|
+
* `sendText`. */
|
|
73
85
|
injectEvent: (text: string, speak?: boolean) => void;
|
|
86
|
+
/** Send a line the READER typed, as their turn in the call (0.69.0). The
|
|
87
|
+
* companion answers it as something the reader said; it is reported to
|
|
88
|
+
* `onTranscript` as `role: 'user'` (once, by the SDK, the moment it is
|
|
89
|
+
* sent) and so reaches the memory `connectCall` hands to `/end` at hang-up,
|
|
90
|
+
* in order with the spoken lines.
|
|
91
|
+
*
|
|
92
|
+
* It takes the floor the way speech does: an utterance the companion is
|
|
93
|
+
* in the middle of is cut, then it replies to this line.
|
|
94
|
+
*
|
|
95
|
+
* Nothing is sent before this call — the provider sees the text only when
|
|
96
|
+
* you pass it here, so a check you run first runs before anyone reads it.
|
|
97
|
+
* Returns `false` (and sends nothing) for blank text, after `close()`, or
|
|
98
|
+
* when the call's channel is not open; `true` once it was handed to the
|
|
99
|
+
* provider. Same behaviour on both providers. */
|
|
100
|
+
sendText: (text: string) => boolean;
|
|
101
|
+
/** The reader's own mute (0.69.0). `true` stops the microphone sending
|
|
102
|
+
* audio until `setMuted(false)`. Distinct from the SDK's half-duplex mute
|
|
103
|
+
* (the mic is muted while the companion speaks, unless `bargeIn`): a
|
|
104
|
+
* reader who muted stays muted when the companion finishes a line. A
|
|
105
|
+
* no-op after `close()`. Check `canMute` before showing a mute control. */
|
|
106
|
+
setMuted: (muted: boolean) => void;
|
|
107
|
+
/** The reader's mute as last set (0.69.0) — the `setMuted` / `muted`
|
|
108
|
+
* state, not whether the half-duplex mute is momentarily engaged. A
|
|
109
|
+
* method, not a field, so it stays live on a spread copy of the handle. */
|
|
110
|
+
isMuted: () => boolean;
|
|
111
|
+
/** Whether `setMuted` actually controls the microphone on this call
|
|
112
|
+
* (0.69.0). `true` on `openai-realtime`; on `elevenlabs-convai` it is
|
|
113
|
+
* `true` when the installed `@elevenlabs/client` exposes `setMicMuted`
|
|
114
|
+
* (every version the peer range allows does). When `false`, `setMuted`
|
|
115
|
+
* only records the state: do not show a mute control. */
|
|
116
|
+
canMute: boolean;
|
|
74
117
|
/** SILENT CUT (0.36.0): stop the utterance currently being spoken WITHOUT
|
|
75
118
|
* generating any new speech — the "stale commentary at a beat boundary"
|
|
76
119
|
* case (field request: fast-paced game, last hand's commentary still
|
package/dist/call.d.ts.map
CHANGED
|
@@ -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;
|
|
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;IAClB;;;;;+CAK2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC7B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;;;;sBAMkB;IAClB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD;;;;;;;;;;;;;sDAakD;IAClD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC;;;;gFAI4E;IAC5E,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC;;gFAE4E;IAC5E,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB;;;;8DAI0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;;;;;;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"}
|
package/dist/call.js
CHANGED
|
@@ -257,10 +257,17 @@ async function openOpenAICall(creds, opts, bridge) {
|
|
|
257
257
|
// the companion interrupting itself.
|
|
258
258
|
const MIC_UNMUTE_TAIL_MS = 350;
|
|
259
259
|
let micUnmuteTimer = null;
|
|
260
|
-
|
|
260
|
+
// Two independent reasons the mic is off (0.69.0): the READER muted
|
|
261
|
+
// (setMuted), or the companion is speaking (half-duplex). The track is on
|
|
262
|
+
// only when neither holds, so the end-of-speech re-open can never undo a
|
|
263
|
+
// reader's mute — which is what made a mute layered on top of this SDK a
|
|
264
|
+
// button that switched itself back on.
|
|
265
|
+
let userMuted = opts.muted === true;
|
|
266
|
+
let speechMuted = false;
|
|
267
|
+
const applyMic = () => {
|
|
261
268
|
try {
|
|
262
269
|
for (const tr of mic.getAudioTracks())
|
|
263
|
-
tr.enabled =
|
|
270
|
+
tr.enabled = !userMuted && !speechMuted;
|
|
264
271
|
}
|
|
265
272
|
catch {
|
|
266
273
|
/* track gone — ignore */
|
|
@@ -271,15 +278,18 @@ async function openOpenAICall(creds, opts, bridge) {
|
|
|
271
278
|
clearTimeout(micUnmuteTimer);
|
|
272
279
|
micUnmuteTimer = null;
|
|
273
280
|
}
|
|
274
|
-
|
|
281
|
+
speechMuted = true;
|
|
282
|
+
applyMic();
|
|
275
283
|
};
|
|
276
284
|
const scheduleMicUnmute = () => {
|
|
277
285
|
if (micUnmuteTimer)
|
|
278
286
|
clearTimeout(micUnmuteTimer);
|
|
279
287
|
micUnmuteTimer = setTimeout(() => {
|
|
280
288
|
micUnmuteTimer = null;
|
|
281
|
-
if (
|
|
282
|
-
|
|
289
|
+
if (closed)
|
|
290
|
+
return;
|
|
291
|
+
speechMuted = false;
|
|
292
|
+
applyMic();
|
|
283
293
|
}, MIC_UNMUTE_TAIL_MS);
|
|
284
294
|
};
|
|
285
295
|
// Whether the model is audibly speaking right now (driven by the
|
|
@@ -287,6 +297,15 @@ async function openOpenAICall(creds, opts, bridge) {
|
|
|
287
297
|
// active response makes the server emit a benign-but-noisy error event, so
|
|
288
298
|
// an idle interrupt() must be a true no-op.
|
|
289
299
|
let oaiSpeaking = false;
|
|
300
|
+
// Whether a response is in flight (response.created → response.done) —
|
|
301
|
+
// broader than `oaiSpeaking`, which starts only with audio. `sendText`
|
|
302
|
+
// cancels an in-flight response before creating its own: the server
|
|
303
|
+
// refuses a second concurrent response, which would leave the typed line
|
|
304
|
+
// in the conversation with no reply.
|
|
305
|
+
let oaiResponseActive = false;
|
|
306
|
+
// A reader who asked to start muted never sends a frame: the track is
|
|
307
|
+
// disabled before the offer is even created.
|
|
308
|
+
applyMic();
|
|
290
309
|
const dc = pc.createDataChannel('oai-events');
|
|
291
310
|
// `response.function_call_arguments.done` carries the call_id + args but often
|
|
292
311
|
// not the name — the name arrives earlier on `response.output_item.added`; track it.
|
|
@@ -374,6 +393,9 @@ async function openOpenAICall(creds, opts, bridge) {
|
|
|
374
393
|
msg.transcript) {
|
|
375
394
|
opts.onTranscript?.({ role: 'user', text: msg.transcript });
|
|
376
395
|
}
|
|
396
|
+
else if (msg.type === 'response.created') {
|
|
397
|
+
oaiResponseActive = true;
|
|
398
|
+
}
|
|
377
399
|
else if (msg.type === 'output_audio_buffer.started') {
|
|
378
400
|
oaiSpeaking = true;
|
|
379
401
|
opts.onSpeakingChange?.(true);
|
|
@@ -392,6 +414,8 @@ async function openOpenAICall(creds, opts, bridge) {
|
|
|
392
414
|
// audio doesn't get captured the instant we unmute. Several event names
|
|
393
415
|
// can end a turn; any of them re-arms the mic.
|
|
394
416
|
oaiSpeaking = false;
|
|
417
|
+
if (msg.type === 'response.done')
|
|
418
|
+
oaiResponseActive = false;
|
|
395
419
|
opts.onSpeakingChange?.(false);
|
|
396
420
|
if (opts.bargeIn !== true)
|
|
397
421
|
scheduleMicUnmute();
|
|
@@ -553,6 +577,38 @@ async function openOpenAICall(creds, opts, bridge) {
|
|
|
553
577
|
if (speak)
|
|
554
578
|
dc.send(JSON.stringify({ type: 'response.create' }));
|
|
555
579
|
},
|
|
580
|
+
sendText: (text) => {
|
|
581
|
+
const line = typeof text === 'string' ? text.trim() : '';
|
|
582
|
+
if (closed || dc.readyState !== 'open' || !line)
|
|
583
|
+
return false;
|
|
584
|
+
try {
|
|
585
|
+
if (oaiResponseActive) {
|
|
586
|
+
dc.send(JSON.stringify({ type: 'response.cancel' }));
|
|
587
|
+
if (oaiSpeaking)
|
|
588
|
+
dc.send(JSON.stringify({ type: 'output_audio_buffer.clear' }));
|
|
589
|
+
}
|
|
590
|
+
dc.send(JSON.stringify({
|
|
591
|
+
type: 'conversation.item.create',
|
|
592
|
+
item: { type: 'message', role: 'user', content: [{ type: 'input_text', text: line }] }
|
|
593
|
+
}));
|
|
594
|
+
dc.send(JSON.stringify({ type: 'response.create' }));
|
|
595
|
+
}
|
|
596
|
+
catch {
|
|
597
|
+
return false;
|
|
598
|
+
}
|
|
599
|
+
// A typed item produces no input-audio transcription event, so the SDK
|
|
600
|
+
// reports it itself — that is what puts it in the caller's transcript
|
|
601
|
+
// and in the memory connectCall consolidates at hang-up.
|
|
602
|
+
opts.onTranscript?.({ role: 'user', text: line });
|
|
603
|
+
return true;
|
|
604
|
+
},
|
|
605
|
+
setMuted: (muted) => {
|
|
606
|
+
userMuted = muted === true;
|
|
607
|
+
if (!closed)
|
|
608
|
+
applyMic();
|
|
609
|
+
},
|
|
610
|
+
isMuted: () => userMuted,
|
|
611
|
+
canMute: true,
|
|
556
612
|
interrupt: () => {
|
|
557
613
|
// Silent cut: stop generating (response.cancel) AND flush what's
|
|
558
614
|
// already buffered for playback (output_audio_buffer.clear — the
|
|
@@ -610,6 +666,15 @@ async function openConvaiCall(creds, opts, bridge) {
|
|
|
610
666
|
/* not supported on this client build — ignore */
|
|
611
667
|
}
|
|
612
668
|
};
|
|
669
|
+
// The reader's mute and the half-duplex mute are separate reasons (0.69.0,
|
|
670
|
+
// see the OpenAI leg); the mic opens only when neither holds.
|
|
671
|
+
let userMuted = opts.muted === true;
|
|
672
|
+
let speechMuted = false;
|
|
673
|
+
const applyMic = () => setConvMicMuted(userMuted || speechMuted);
|
|
674
|
+
// Lines `sendText` already reported. Should the provider ever echo a typed
|
|
675
|
+
// user_message back as a user transcript, it must not be reported twice
|
|
676
|
+
// (and land in memory twice). Matched by exact text, consumed once.
|
|
677
|
+
const typedEcho = [];
|
|
613
678
|
const conv = await mod.Conversation.startSession({
|
|
614
679
|
conversationToken: creds.token,
|
|
615
680
|
connectionType: 'webrtc',
|
|
@@ -660,15 +725,18 @@ async function openConvaiCall(creds, opts, bridge) {
|
|
|
660
725
|
clearTimeout(micUnmuteTimer);
|
|
661
726
|
micUnmuteTimer = null;
|
|
662
727
|
}
|
|
663
|
-
|
|
728
|
+
speechMuted = true;
|
|
729
|
+
applyMic();
|
|
664
730
|
}
|
|
665
731
|
else {
|
|
666
732
|
if (micUnmuteTimer)
|
|
667
733
|
clearTimeout(micUnmuteTimer);
|
|
668
734
|
micUnmuteTimer = setTimeout(() => {
|
|
669
735
|
micUnmuteTimer = null;
|
|
670
|
-
if (
|
|
671
|
-
|
|
736
|
+
if (closed)
|
|
737
|
+
return;
|
|
738
|
+
speechMuted = false;
|
|
739
|
+
applyMic();
|
|
672
740
|
}, MIC_UNMUTE_TAIL_MS);
|
|
673
741
|
}
|
|
674
742
|
},
|
|
@@ -678,6 +746,13 @@ async function openConvaiCall(creds, opts, bridge) {
|
|
|
678
746
|
const raw = (message ?? '').trim();
|
|
679
747
|
const text = creds.audioTags && role === 'agent' ? stripAudioTags(raw) : raw;
|
|
680
748
|
if (!closed && text) {
|
|
749
|
+
if (role !== 'agent') {
|
|
750
|
+
const echo = typedEcho.indexOf(text);
|
|
751
|
+
if (echo !== -1) {
|
|
752
|
+
typedEcho.splice(echo, 1);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
681
756
|
opts.onTranscript?.({ role: role === 'agent' ? 'assistant' : 'user', text });
|
|
682
757
|
}
|
|
683
758
|
},
|
|
@@ -725,6 +800,10 @@ async function openConvaiCall(creds, opts, bridge) {
|
|
|
725
800
|
opts.onError?.(new Error('call disconnected'));
|
|
726
801
|
}
|
|
727
802
|
});
|
|
803
|
+
// The session is up: honour a start-muted request now (the EL client has no
|
|
804
|
+
// start-muted option — see CompanionCallOptions.muted).
|
|
805
|
+
if (userMuted)
|
|
806
|
+
applyMic();
|
|
728
807
|
return {
|
|
729
808
|
provider: 'elevenlabs-convai',
|
|
730
809
|
close: () => {
|
|
@@ -750,6 +829,31 @@ async function openConvaiCall(creds, opts, bridge) {
|
|
|
750
829
|
/* channel not ready */
|
|
751
830
|
}
|
|
752
831
|
},
|
|
832
|
+
sendText: (text) => {
|
|
833
|
+
const line = typeof text === 'string' ? text.trim() : '';
|
|
834
|
+
if (closed || !line)
|
|
835
|
+
return false;
|
|
836
|
+
try {
|
|
837
|
+
// A `user_message`: the agent answers it as the user's turn, and
|
|
838
|
+
// the server's own turn-taking cuts an utterance in progress.
|
|
839
|
+
conv.sendUserMessage(line);
|
|
840
|
+
}
|
|
841
|
+
catch {
|
|
842
|
+
return false;
|
|
843
|
+
}
|
|
844
|
+
typedEcho.push(line);
|
|
845
|
+
if (typedEcho.length > 20)
|
|
846
|
+
typedEcho.shift();
|
|
847
|
+
opts.onTranscript?.({ role: 'user', text: line });
|
|
848
|
+
return true;
|
|
849
|
+
},
|
|
850
|
+
setMuted: (muted) => {
|
|
851
|
+
userMuted = muted === true;
|
|
852
|
+
if (!closed)
|
|
853
|
+
applyMic();
|
|
854
|
+
},
|
|
855
|
+
isMuted: () => userMuted,
|
|
856
|
+
canMute: typeof conv.setMicMuted === 'function',
|
|
753
857
|
interrupt: () => {
|
|
754
858
|
// BEST-EFFORT silent cut — the EL client has no public "stop playback"
|
|
755
859
|
// 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pouchy_ai/companion-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.69.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
|
@@ -203,14 +203,57 @@ export interface CompanionCallOptions {
|
|
|
203
203
|
* "说一句就断了" field report). Enable only where AEC actually holds:
|
|
204
204
|
* headphones, desktop, or devices you have verified. */
|
|
205
205
|
bargeIn?: boolean;
|
|
206
|
+
/** Open the call with the reader's microphone MUTED (0.69.0); see
|
|
207
|
+
* `CompanionCall.setMuted`. On `openai-realtime` the track is disabled
|
|
208
|
+
* before it is attached, so nothing is ever sent. On `elevenlabs-convai`
|
|
209
|
+
* the mute is applied the moment the session is up; the provider client
|
|
210
|
+
* has no start-muted option, so the connect handshake itself (before the
|
|
211
|
+
* agent's first line) can carry audio. */
|
|
212
|
+
muted?: boolean;
|
|
206
213
|
}
|
|
207
214
|
|
|
208
215
|
export interface CompanionCall {
|
|
209
216
|
/** Hang up. Idempotent. */
|
|
210
217
|
close: () => void;
|
|
211
218
|
/** Inject an out-of-band context line. `speak: true` makes the companion react
|
|
212
|
-
* now; false stages it for the next turn.
|
|
219
|
+
* now; false stages it for the next turn.
|
|
220
|
+
*
|
|
221
|
+
* NOT the reader's words: the line does not reach `onTranscript` or the
|
|
222
|
+
* memory `/end` consolidates, and `connectCall` uses this same lever for
|
|
223
|
+
* server-pushed world moments. For something the reader TYPED, use
|
|
224
|
+
* `sendText`. */
|
|
213
225
|
injectEvent: (text: string, speak?: boolean) => void;
|
|
226
|
+
/** Send a line the READER typed, as their turn in the call (0.69.0). The
|
|
227
|
+
* companion answers it as something the reader said; it is reported to
|
|
228
|
+
* `onTranscript` as `role: 'user'` (once, by the SDK, the moment it is
|
|
229
|
+
* sent) and so reaches the memory `connectCall` hands to `/end` at hang-up,
|
|
230
|
+
* in order with the spoken lines.
|
|
231
|
+
*
|
|
232
|
+
* It takes the floor the way speech does: an utterance the companion is
|
|
233
|
+
* in the middle of is cut, then it replies to this line.
|
|
234
|
+
*
|
|
235
|
+
* Nothing is sent before this call — the provider sees the text only when
|
|
236
|
+
* you pass it here, so a check you run first runs before anyone reads it.
|
|
237
|
+
* Returns `false` (and sends nothing) for blank text, after `close()`, or
|
|
238
|
+
* when the call's channel is not open; `true` once it was handed to the
|
|
239
|
+
* provider. Same behaviour on both providers. */
|
|
240
|
+
sendText: (text: string) => boolean;
|
|
241
|
+
/** The reader's own mute (0.69.0). `true` stops the microphone sending
|
|
242
|
+
* audio until `setMuted(false)`. Distinct from the SDK's half-duplex mute
|
|
243
|
+
* (the mic is muted while the companion speaks, unless `bargeIn`): a
|
|
244
|
+
* reader who muted stays muted when the companion finishes a line. A
|
|
245
|
+
* no-op after `close()`. Check `canMute` before showing a mute control. */
|
|
246
|
+
setMuted: (muted: boolean) => void;
|
|
247
|
+
/** The reader's mute as last set (0.69.0) — the `setMuted` / `muted`
|
|
248
|
+
* state, not whether the half-duplex mute is momentarily engaged. A
|
|
249
|
+
* method, not a field, so it stays live on a spread copy of the handle. */
|
|
250
|
+
isMuted: () => boolean;
|
|
251
|
+
/** Whether `setMuted` actually controls the microphone on this call
|
|
252
|
+
* (0.69.0). `true` on `openai-realtime`; on `elevenlabs-convai` it is
|
|
253
|
+
* `true` when the installed `@elevenlabs/client` exposes `setMicMuted`
|
|
254
|
+
* (every version the peer range allows does). When `false`, `setMuted`
|
|
255
|
+
* only records the state: do not show a mute control. */
|
|
256
|
+
canMute: boolean;
|
|
214
257
|
/** SILENT CUT (0.36.0): stop the utterance currently being spoken WITHOUT
|
|
215
258
|
* generating any new speech — the "stale commentary at a beat boundary"
|
|
216
259
|
* case (field request: fast-paced game, last hand's commentary still
|
|
@@ -359,9 +402,16 @@ async function openOpenAICall(
|
|
|
359
402
|
// the companion interrupting itself.
|
|
360
403
|
const MIC_UNMUTE_TAIL_MS = 350;
|
|
361
404
|
let micUnmuteTimer: ReturnType<typeof setTimeout> | null = null;
|
|
362
|
-
|
|
405
|
+
// Two independent reasons the mic is off (0.69.0): the READER muted
|
|
406
|
+
// (setMuted), or the companion is speaking (half-duplex). The track is on
|
|
407
|
+
// only when neither holds, so the end-of-speech re-open can never undo a
|
|
408
|
+
// reader's mute — which is what made a mute layered on top of this SDK a
|
|
409
|
+
// button that switched itself back on.
|
|
410
|
+
let userMuted = opts.muted === true;
|
|
411
|
+
let speechMuted = false;
|
|
412
|
+
const applyMic = () => {
|
|
363
413
|
try {
|
|
364
|
-
for (const tr of mic.getAudioTracks()) tr.enabled =
|
|
414
|
+
for (const tr of mic.getAudioTracks()) tr.enabled = !userMuted && !speechMuted;
|
|
365
415
|
} catch {
|
|
366
416
|
/* track gone — ignore */
|
|
367
417
|
}
|
|
@@ -371,13 +421,16 @@ async function openOpenAICall(
|
|
|
371
421
|
clearTimeout(micUnmuteTimer);
|
|
372
422
|
micUnmuteTimer = null;
|
|
373
423
|
}
|
|
374
|
-
|
|
424
|
+
speechMuted = true;
|
|
425
|
+
applyMic();
|
|
375
426
|
};
|
|
376
427
|
const scheduleMicUnmute = () => {
|
|
377
428
|
if (micUnmuteTimer) clearTimeout(micUnmuteTimer);
|
|
378
429
|
micUnmuteTimer = setTimeout(() => {
|
|
379
430
|
micUnmuteTimer = null;
|
|
380
|
-
if (
|
|
431
|
+
if (closed) return;
|
|
432
|
+
speechMuted = false;
|
|
433
|
+
applyMic();
|
|
381
434
|
}, MIC_UNMUTE_TAIL_MS);
|
|
382
435
|
};
|
|
383
436
|
|
|
@@ -386,6 +439,15 @@ async function openOpenAICall(
|
|
|
386
439
|
// active response makes the server emit a benign-but-noisy error event, so
|
|
387
440
|
// an idle interrupt() must be a true no-op.
|
|
388
441
|
let oaiSpeaking = false;
|
|
442
|
+
// Whether a response is in flight (response.created → response.done) —
|
|
443
|
+
// broader than `oaiSpeaking`, which starts only with audio. `sendText`
|
|
444
|
+
// cancels an in-flight response before creating its own: the server
|
|
445
|
+
// refuses a second concurrent response, which would leave the typed line
|
|
446
|
+
// in the conversation with no reply.
|
|
447
|
+
let oaiResponseActive = false;
|
|
448
|
+
// A reader who asked to start muted never sends a frame: the track is
|
|
449
|
+
// disabled before the offer is even created.
|
|
450
|
+
applyMic();
|
|
389
451
|
|
|
390
452
|
const dc = pc.createDataChannel('oai-events');
|
|
391
453
|
// `response.function_call_arguments.done` carries the call_id + args but often
|
|
@@ -486,6 +548,8 @@ async function openOpenAICall(
|
|
|
486
548
|
msg.transcript
|
|
487
549
|
) {
|
|
488
550
|
opts.onTranscript?.({ role: 'user', text: msg.transcript });
|
|
551
|
+
} else if (msg.type === 'response.created') {
|
|
552
|
+
oaiResponseActive = true;
|
|
489
553
|
} else if (msg.type === 'output_audio_buffer.started') {
|
|
490
554
|
oaiSpeaking = true;
|
|
491
555
|
opts.onSpeakingChange?.(true);
|
|
@@ -504,6 +568,7 @@ async function openOpenAICall(
|
|
|
504
568
|
// audio doesn't get captured the instant we unmute. Several event names
|
|
505
569
|
// can end a turn; any of them re-arms the mic.
|
|
506
570
|
oaiSpeaking = false;
|
|
571
|
+
if (msg.type === 'response.done') oaiResponseActive = false;
|
|
507
572
|
opts.onSpeakingChange?.(false);
|
|
508
573
|
if (opts.bargeIn !== true) scheduleMicUnmute();
|
|
509
574
|
}
|
|
@@ -675,6 +740,36 @@ async function openOpenAICall(
|
|
|
675
740
|
);
|
|
676
741
|
if (speak) dc.send(JSON.stringify({ type: 'response.create' }));
|
|
677
742
|
},
|
|
743
|
+
sendText: (text) => {
|
|
744
|
+
const line = typeof text === 'string' ? text.trim() : '';
|
|
745
|
+
if (closed || dc.readyState !== 'open' || !line) return false;
|
|
746
|
+
try {
|
|
747
|
+
if (oaiResponseActive) {
|
|
748
|
+
dc.send(JSON.stringify({ type: 'response.cancel' }));
|
|
749
|
+
if (oaiSpeaking) dc.send(JSON.stringify({ type: 'output_audio_buffer.clear' }));
|
|
750
|
+
}
|
|
751
|
+
dc.send(
|
|
752
|
+
JSON.stringify({
|
|
753
|
+
type: 'conversation.item.create',
|
|
754
|
+
item: { type: 'message', role: 'user', content: [{ type: 'input_text', text: line }] }
|
|
755
|
+
})
|
|
756
|
+
);
|
|
757
|
+
dc.send(JSON.stringify({ type: 'response.create' }));
|
|
758
|
+
} catch {
|
|
759
|
+
return false;
|
|
760
|
+
}
|
|
761
|
+
// A typed item produces no input-audio transcription event, so the SDK
|
|
762
|
+
// reports it itself — that is what puts it in the caller's transcript
|
|
763
|
+
// and in the memory connectCall consolidates at hang-up.
|
|
764
|
+
opts.onTranscript?.({ role: 'user', text: line });
|
|
765
|
+
return true;
|
|
766
|
+
},
|
|
767
|
+
setMuted: (muted) => {
|
|
768
|
+
userMuted = muted === true;
|
|
769
|
+
if (!closed) applyMic();
|
|
770
|
+
},
|
|
771
|
+
isMuted: () => userMuted,
|
|
772
|
+
canMute: true,
|
|
678
773
|
interrupt: () => {
|
|
679
774
|
// Silent cut: stop generating (response.cancel) AND flush what's
|
|
680
775
|
// already buffered for playback (output_audio_buffer.clear — the
|
|
@@ -740,6 +835,15 @@ async function openConvaiCall(
|
|
|
740
835
|
/* not supported on this client build — ignore */
|
|
741
836
|
}
|
|
742
837
|
};
|
|
838
|
+
// The reader's mute and the half-duplex mute are separate reasons (0.69.0,
|
|
839
|
+
// see the OpenAI leg); the mic opens only when neither holds.
|
|
840
|
+
let userMuted = opts.muted === true;
|
|
841
|
+
let speechMuted = false;
|
|
842
|
+
const applyMic = () => setConvMicMuted(userMuted || speechMuted);
|
|
843
|
+
// Lines `sendText` already reported. Should the provider ever echo a typed
|
|
844
|
+
// user_message back as a user transcript, it must not be reported twice
|
|
845
|
+
// (and land in memory twice). Matched by exact text, consumed once.
|
|
846
|
+
const typedEcho: string[] = [];
|
|
743
847
|
const conv = await mod.Conversation.startSession({
|
|
744
848
|
conversationToken: creds.token,
|
|
745
849
|
connectionType: 'webrtc',
|
|
@@ -788,12 +892,15 @@ async function openConvaiCall(
|
|
|
788
892
|
clearTimeout(micUnmuteTimer);
|
|
789
893
|
micUnmuteTimer = null;
|
|
790
894
|
}
|
|
791
|
-
|
|
895
|
+
speechMuted = true;
|
|
896
|
+
applyMic();
|
|
792
897
|
} else {
|
|
793
898
|
if (micUnmuteTimer) clearTimeout(micUnmuteTimer);
|
|
794
899
|
micUnmuteTimer = setTimeout(() => {
|
|
795
900
|
micUnmuteTimer = null;
|
|
796
|
-
if (
|
|
901
|
+
if (closed) return;
|
|
902
|
+
speechMuted = false;
|
|
903
|
+
applyMic();
|
|
797
904
|
}, MIC_UNMUTE_TAIL_MS);
|
|
798
905
|
}
|
|
799
906
|
},
|
|
@@ -803,6 +910,13 @@ async function openConvaiCall(
|
|
|
803
910
|
const raw = (message ?? '').trim();
|
|
804
911
|
const text = creds.audioTags && role === 'agent' ? stripAudioTags(raw) : raw;
|
|
805
912
|
if (!closed && text) {
|
|
913
|
+
if (role !== 'agent') {
|
|
914
|
+
const echo = typedEcho.indexOf(text);
|
|
915
|
+
if (echo !== -1) {
|
|
916
|
+
typedEcho.splice(echo, 1);
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
}
|
|
806
920
|
opts.onTranscript?.({ role: role === 'agent' ? 'assistant' : 'user', text });
|
|
807
921
|
}
|
|
808
922
|
},
|
|
@@ -845,6 +959,10 @@ async function openConvaiCall(
|
|
|
845
959
|
}
|
|
846
960
|
});
|
|
847
961
|
|
|
962
|
+
// The session is up: honour a start-muted request now (the EL client has no
|
|
963
|
+
// start-muted option — see CompanionCallOptions.muted).
|
|
964
|
+
if (userMuted) applyMic();
|
|
965
|
+
|
|
848
966
|
return {
|
|
849
967
|
provider: 'elevenlabs-convai',
|
|
850
968
|
close: () => {
|
|
@@ -865,6 +983,27 @@ async function openConvaiCall(
|
|
|
865
983
|
/* channel not ready */
|
|
866
984
|
}
|
|
867
985
|
},
|
|
986
|
+
sendText: (text) => {
|
|
987
|
+
const line = typeof text === 'string' ? text.trim() : '';
|
|
988
|
+
if (closed || !line) return false;
|
|
989
|
+
try {
|
|
990
|
+
// A `user_message`: the agent answers it as the user's turn, and
|
|
991
|
+
// the server's own turn-taking cuts an utterance in progress.
|
|
992
|
+
conv.sendUserMessage(line);
|
|
993
|
+
} catch {
|
|
994
|
+
return false;
|
|
995
|
+
}
|
|
996
|
+
typedEcho.push(line);
|
|
997
|
+
if (typedEcho.length > 20) typedEcho.shift();
|
|
998
|
+
opts.onTranscript?.({ role: 'user', text: line });
|
|
999
|
+
return true;
|
|
1000
|
+
},
|
|
1001
|
+
setMuted: (muted) => {
|
|
1002
|
+
userMuted = muted === true;
|
|
1003
|
+
if (!closed) applyMic();
|
|
1004
|
+
},
|
|
1005
|
+
isMuted: () => userMuted,
|
|
1006
|
+
canMute: typeof (conv as unknown as { setMicMuted?: unknown }).setMicMuted === 'function',
|
|
868
1007
|
interrupt: () => {
|
|
869
1008
|
// BEST-EFFORT silent cut — the EL client has no public "stop playback"
|
|
870
1009
|
// API (interruption is normally server-driven: a server `interruption`
|