@holostaff/sdk 0.9.2 → 0.9.4
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/stage/anamFace.d.ts +12 -3
- package/dist/stage/anamFace.d.ts.map +1 -1
- package/dist/stage/anamFace.js +127 -32
- package/dist/stage/anamFace.js.map +1 -1
- package/dist/stage/index.d.ts.map +1 -1
- package/dist/stage/index.js +19 -2
- package/dist/stage/index.js.map +1 -1
- package/dist/stage/realtime.d.ts +2 -0
- package/dist/stage/realtime.d.ts.map +1 -1
- package/dist/stage/realtime.js +28 -0
- package/dist/stage/realtime.js.map +1 -1
- package/package.json +4 -2
package/dist/stage/anamFace.d.ts
CHANGED
|
@@ -8,10 +8,19 @@
|
|
|
8
8
|
* BYO-audio path is deleted). This is the de-Vue-ified port of tutorLM's
|
|
9
9
|
* anamSessionManager.
|
|
10
10
|
*
|
|
11
|
+
* Feed model (mirrors tutorLM's proven queue):
|
|
12
|
+
* - Sentences are QUEUED and spoken ONE AT A TIME.
|
|
13
|
+
* - Each sentence opens a FRESH talkStream (unique correlation id) and
|
|
14
|
+
* sends a single chunk with endOfSpeech=true. Reusing one stream for
|
|
15
|
+
* the whole turn makes Anam fall many turns behind ("pipeline stalled"
|
|
16
|
+
* / "throughput dropped") and become un-interruptible.
|
|
17
|
+
* - We pace the next sentence on a spoken-duration estimate so the queue
|
|
18
|
+
* stays short — which is what makes barge-in feel instant.
|
|
19
|
+
* - interrupt() clears the queue AND calls interruptPersona() so the
|
|
20
|
+
* avatar stops mid-utterance the moment the user speaks.
|
|
21
|
+
*
|
|
11
22
|
* @anam-ai/js-sdk is an OPTIONAL dependency, lazy-loaded only when a
|
|
12
|
-
* Stage opens (keeps the base SDK lean — like rrweb).
|
|
13
|
-
* variable so the base build doesn't require it installed; if it's
|
|
14
|
-
* absent, voice is gracefully unavailable.
|
|
23
|
+
* Stage opens (keeps the base SDK lean — like rrweb).
|
|
15
24
|
*/
|
|
16
25
|
export interface AnamFace {
|
|
17
26
|
/** Speak a sentence (the model's text → Anam TTS + lip-sync). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anamFace.d.ts","sourceRoot":"","sources":["../../src/stage/anamFace.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"anamFace.d.ts","sourceRoot":"","sources":["../../src/stage/anamFace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,QAAQ;IACvB,iEAAiE;IACjE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,kEAAkE;IAClE,SAAS,IAAI,IAAI,CAAA;IACjB,IAAI,IAAI,IAAI,CAAA;CACb;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,gBAAgB,CAAA;IACzB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;CAC/B,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6HpB"}
|
package/dist/stage/anamFace.js
CHANGED
|
@@ -8,10 +8,19 @@
|
|
|
8
8
|
* BYO-audio path is deleted). This is the de-Vue-ified port of tutorLM's
|
|
9
9
|
* anamSessionManager.
|
|
10
10
|
*
|
|
11
|
+
* Feed model (mirrors tutorLM's proven queue):
|
|
12
|
+
* - Sentences are QUEUED and spoken ONE AT A TIME.
|
|
13
|
+
* - Each sentence opens a FRESH talkStream (unique correlation id) and
|
|
14
|
+
* sends a single chunk with endOfSpeech=true. Reusing one stream for
|
|
15
|
+
* the whole turn makes Anam fall many turns behind ("pipeline stalled"
|
|
16
|
+
* / "throughput dropped") and become un-interruptible.
|
|
17
|
+
* - We pace the next sentence on a spoken-duration estimate so the queue
|
|
18
|
+
* stays short — which is what makes barge-in feel instant.
|
|
19
|
+
* - interrupt() clears the queue AND calls interruptPersona() so the
|
|
20
|
+
* avatar stops mid-utterance the moment the user speaks.
|
|
21
|
+
*
|
|
11
22
|
* @anam-ai/js-sdk is an OPTIONAL dependency, lazy-loaded only when a
|
|
12
|
-
* Stage opens (keeps the base SDK lean — like rrweb).
|
|
13
|
-
* variable so the base build doesn't require it installed; if it's
|
|
14
|
-
* absent, voice is gracefully unavailable.
|
|
23
|
+
* Stage opens (keeps the base SDK lean — like rrweb).
|
|
15
24
|
*/
|
|
16
25
|
/**
|
|
17
26
|
* Connect Anam to a <video> element and return the text sink. Anam owns
|
|
@@ -29,6 +38,24 @@ export async function startAnamFace(opts) {
|
|
|
29
38
|
throw new Error('@anam-ai/js-sdk: createClient not found (version mismatch)');
|
|
30
39
|
}
|
|
31
40
|
const client = createClient(opts.sessionToken, { disableInputAudio: true });
|
|
41
|
+
// TEMP diagnostic — log every Anam event so we can see SESSION_READY /
|
|
42
|
+
// CONNECTION_CLOSED / video lifecycle.
|
|
43
|
+
try {
|
|
44
|
+
const AnamEvent = mod.AnamEvent
|
|
45
|
+
?? mod.default?.AnamEvent;
|
|
46
|
+
const addListener = client.addListener;
|
|
47
|
+
if (AnamEvent && typeof addListener === 'function') {
|
|
48
|
+
for (const name of Object.keys(AnamEvent)) {
|
|
49
|
+
addListener.call(client, AnamEvent[name], (...a) => {
|
|
50
|
+
try {
|
|
51
|
+
console.log('[holostaff:anam] event', name, a?.[0] ?? '');
|
|
52
|
+
}
|
|
53
|
+
catch { /* */ }
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch { /* best-effort */ }
|
|
32
59
|
// Bind the avatar to the video element (API name varies by version).
|
|
33
60
|
const videoId = ensureId(opts.videoEl);
|
|
34
61
|
if (typeof client.streamToVideoElement === 'function') {
|
|
@@ -37,51 +64,105 @@ export async function startAnamFace(opts) {
|
|
|
37
64
|
else if (typeof client.startSession === 'function') {
|
|
38
65
|
await client.startSession();
|
|
39
66
|
}
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
67
|
+
// ── Sequential speak queue (tutorLM's pattern) ───────────────────────
|
|
68
|
+
const queue = [];
|
|
69
|
+
let pumping = false;
|
|
70
|
+
// Bumped on every interrupt/stop; the pump drops any work whose epoch
|
|
71
|
+
// is stale so a cancelled turn can't resume after barge-in.
|
|
72
|
+
let epoch = 0;
|
|
73
|
+
let activeStream = null;
|
|
74
|
+
const endActiveStream = async () => {
|
|
75
|
+
const s = activeStream;
|
|
76
|
+
activeStream = null;
|
|
77
|
+
if (s?.endMessage) {
|
|
78
|
+
try {
|
|
79
|
+
await s.endMessage();
|
|
80
|
+
}
|
|
81
|
+
catch { /* */ }
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const pump = async () => {
|
|
85
|
+
if (pumping)
|
|
86
|
+
return;
|
|
87
|
+
pumping = true;
|
|
88
|
+
try {
|
|
89
|
+
while (queue.length) {
|
|
90
|
+
const myEpoch = epoch;
|
|
91
|
+
const text = queue.shift();
|
|
92
|
+
if (!text)
|
|
93
|
+
continue;
|
|
94
|
+
// Fresh stream per sentence — Anam closes a stream once the
|
|
95
|
+
// persona finishes; reusing it silently drops chunks.
|
|
96
|
+
await endActiveStream();
|
|
97
|
+
if (myEpoch !== epoch)
|
|
98
|
+
break;
|
|
99
|
+
let stream = null;
|
|
100
|
+
const correlationId = `hs-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
101
|
+
try {
|
|
102
|
+
if (typeof client.createTalkMessageStream === 'function') {
|
|
103
|
+
stream = client.createTalkMessageStream(correlationId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch { /* */ }
|
|
107
|
+
if (!stream) {
|
|
108
|
+
// No streaming API — fall back to one-shot talk().
|
|
109
|
+
if (typeof client.talk === 'function') {
|
|
110
|
+
try {
|
|
111
|
+
await client.talk(text);
|
|
112
|
+
}
|
|
113
|
+
catch { /* */ }
|
|
114
|
+
}
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
activeStream = stream;
|
|
118
|
+
const chunk = text + ' ';
|
|
119
|
+
try {
|
|
120
|
+
// true = end of this utterance; Anam plays it, then closes.
|
|
121
|
+
if (stream.streamMessageChunk)
|
|
122
|
+
await stream.streamMessageChunk(chunk, true);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
opts.onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
126
|
+
}
|
|
127
|
+
// Pace the next sentence on a spoken-duration estimate (~70ms/char,
|
|
128
|
+
// floor 1.2s) so the queue tracks playback instead of racing ahead.
|
|
129
|
+
// A short poll lets barge-in cut the wait the instant epoch changes.
|
|
130
|
+
await waitPaced(Math.max(1200, Math.ceil(chunk.length * 70)), () => myEpoch !== epoch);
|
|
131
|
+
if (myEpoch !== epoch)
|
|
132
|
+
break;
|
|
133
|
+
await endActiveStream();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
pumping = false;
|
|
48
138
|
}
|
|
49
|
-
return stream;
|
|
50
139
|
};
|
|
51
140
|
return {
|
|
52
141
|
enqueueSentence(text) {
|
|
53
142
|
const t = text.trim();
|
|
54
143
|
if (!t)
|
|
55
144
|
return;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (s?.streamMessageChunk)
|
|
59
|
-
s.streamMessageChunk(t, false);
|
|
60
|
-
else if (typeof client.talk === 'function')
|
|
61
|
-
void client.talk(t);
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
opts.onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
65
|
-
}
|
|
145
|
+
queue.push(t);
|
|
146
|
+
void pump();
|
|
66
147
|
},
|
|
67
148
|
interrupt() {
|
|
149
|
+
// Barge-in: drop everything queued and stop the avatar NOW.
|
|
150
|
+
epoch++;
|
|
151
|
+
queue.length = 0;
|
|
68
152
|
try {
|
|
69
|
-
|
|
70
|
-
// sentence starts a fresh turn (stale chunks are abandoned).
|
|
71
|
-
if (stream?.endMessage)
|
|
72
|
-
stream.endMessage();
|
|
73
|
-
else if (typeof client.interruptPersona === 'function')
|
|
74
|
-
client.interruptPersona();
|
|
153
|
+
client.interruptPersona?.();
|
|
75
154
|
}
|
|
76
|
-
catch { /*
|
|
77
|
-
|
|
155
|
+
catch { /* */ }
|
|
156
|
+
void endActiveStream();
|
|
78
157
|
},
|
|
79
158
|
stop() {
|
|
159
|
+
epoch++;
|
|
160
|
+
queue.length = 0;
|
|
80
161
|
try {
|
|
81
|
-
|
|
162
|
+
client.interruptPersona?.();
|
|
82
163
|
}
|
|
83
164
|
catch { /* */ }
|
|
84
|
-
|
|
165
|
+
void endActiveStream();
|
|
85
166
|
try {
|
|
86
167
|
if (typeof client.stopStreaming === 'function')
|
|
87
168
|
void client.stopStreaming();
|
|
@@ -92,6 +173,20 @@ export async function startAnamFace(opts) {
|
|
|
92
173
|
},
|
|
93
174
|
};
|
|
94
175
|
}
|
|
176
|
+
/** Resolve after `ms`, polling so a cancel (`cancelled()`) returns early. */
|
|
177
|
+
function waitPaced(ms, cancelled) {
|
|
178
|
+
return new Promise(resolve => {
|
|
179
|
+
const start = Date.now();
|
|
180
|
+
const tick = () => {
|
|
181
|
+
if (cancelled() || Date.now() - start >= ms) {
|
|
182
|
+
resolve();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
setTimeout(tick, 100);
|
|
186
|
+
};
|
|
187
|
+
tick();
|
|
188
|
+
});
|
|
189
|
+
}
|
|
95
190
|
function ensureId(el) {
|
|
96
191
|
if (!el.id)
|
|
97
192
|
el.id = `holostaff-anam-${Math.random().toString(36).slice(2, 9)}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anamFace.js","sourceRoot":"","sources":["../../src/stage/anamFace.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"anamFace.js","sourceRoot":"","sources":["../../src/stage/anamFace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAKzD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,eAAe,CAAA;IACpB,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,QAAQ,EAAE,eAAe,CAAA;IACzB,uEAAuE;IACvE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,iEAAiE;IACjE,wBAAwB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IAC5B,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,OAAO,CAAA;IACjB,OAAO,IAAI,IAAI,CAAA;CAChB;AAyBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAKzD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,eAAe,CAAA;IACpB,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,QAAQ,EAAE,eAAe,CAAA;IACzB,uEAAuE;IACvE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,iEAAiE;IACjE,wBAAwB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IAC5B,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,OAAO,CAAA;IACjB,OAAO,IAAI,IAAI,CAAA;CAChB;AAyBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CA4JxD"}
|
package/dist/stage/index.js
CHANGED
|
@@ -36,6 +36,11 @@ export function startStage(deps) {
|
|
|
36
36
|
let realtime = null;
|
|
37
37
|
let micStream = null;
|
|
38
38
|
let sentenceBuf = '';
|
|
39
|
+
// Barge-in bookkeeping: the turn the user interrupted. Trailing deltas
|
|
40
|
+
// from a cancelled response share its turnId and must be dropped, or
|
|
41
|
+
// they'd refill the buffer and the avatar would resume the old answer.
|
|
42
|
+
let lastTurnId = '';
|
|
43
|
+
let mutedTurnId = null;
|
|
39
44
|
const reportErr = (err) => {
|
|
40
45
|
deps.cfg.onError?.(err, { method: 'STAGE', path: '(voice)' });
|
|
41
46
|
};
|
|
@@ -127,18 +132,30 @@ export function startStage(deps) {
|
|
|
127
132
|
? `The visitor tapped "Talk" on your suggestion: "${seed.intent}". Open the conversation on that.`
|
|
128
133
|
: undefined,
|
|
129
134
|
}, {
|
|
130
|
-
onTextDelta: (delta) => {
|
|
135
|
+
onTextDelta: (delta, turnId) => {
|
|
136
|
+
lastTurnId = turnId;
|
|
137
|
+
// Drop trailing deltas from a turn the user barged in on.
|
|
138
|
+
if (turnId === mutedTurnId)
|
|
139
|
+
return;
|
|
131
140
|
ui?.setState('speaking');
|
|
132
141
|
sentenceBuf += delta;
|
|
133
142
|
ui?.appendCaption(delta);
|
|
134
143
|
flushSentences(false);
|
|
135
144
|
},
|
|
136
|
-
onTurnDone: () => {
|
|
145
|
+
onTurnDone: (turnId) => {
|
|
146
|
+
if (turnId === mutedTurnId) {
|
|
147
|
+
mutedTurnId = null;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
137
150
|
flushSentences(true);
|
|
138
151
|
ui?.setState('listening');
|
|
139
152
|
},
|
|
140
153
|
onUserSpeechStarted: () => {
|
|
154
|
+
// Barge-in: mute the in-flight turn, stop generation, stop the
|
|
155
|
+
// avatar, drop the half-formed sentence.
|
|
156
|
+
mutedTurnId = lastTurnId;
|
|
141
157
|
sentenceBuf = '';
|
|
158
|
+
realtime?.cancelResponse();
|
|
142
159
|
face?.interrupt();
|
|
143
160
|
ui?.setState('listening');
|
|
144
161
|
},
|
package/dist/stage/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAwB,MAAM,iBAAiB,CAAA;AAItE,OAAO,EAAE,eAAe,EAA2C,MAAM,eAAe,CAAA;AACxF,OAAO,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAA;AAoCpD,MAAM,YAAY,GAAiB;IACjC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,mGAAmG;IAChH,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACpF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;SACjF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;CACF,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAA;IACpF,CAAC;IAED,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,EAAE,GAAmB,IAAI,CAAA;IAC7B,IAAI,IAAI,GAAoB,IAAI,CAAA;IAChC,IAAI,QAAQ,GAA2B,IAAI,CAAA;IAC3C,IAAI,SAAS,GAAuB,IAAI,CAAA;IACxC,IAAI,WAAW,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stage/index.ts"],"names":[],"mappings":"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"}
|
package/dist/stage/realtime.d.ts
CHANGED
|
@@ -44,6 +44,8 @@ export interface RealtimeCallbacks {
|
|
|
44
44
|
export interface RealtimeSession {
|
|
45
45
|
/** Return a tool result + ask the model to continue. */
|
|
46
46
|
sendToolResult(callId: string, output: unknown): void;
|
|
47
|
+
/** Barge-in: cancel the in-flight response so it stops emitting text. */
|
|
48
|
+
cancelResponse(): void;
|
|
47
49
|
close(): void;
|
|
48
50
|
}
|
|
49
51
|
export declare function connectRealtime(opts: RealtimeConnectOptions, cb: RealtimeCallbacks): Promise<RealtimeSession>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/stage/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,SAAS,EAAE,WAAW,CAAA;IACtB;2DACuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAChD,6DAA6D;IAC7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,gEAAgE;IAChE,mBAAmB,IAAI,IAAI,CAAA;IAC3B,gCAAgC;IAChC,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACvF,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IACrD,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,EAC5B,EAAE,EAAE,iBAAiB,GACpB,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/stage/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,SAAS,EAAE,WAAW,CAAA;IACtB;2DACuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAChD,6DAA6D;IAC7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,gEAAgE;IAChE,mBAAmB,IAAI,IAAI,CAAA;IAC3B,gCAAgC;IAChC,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACvF,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IACrD,yEAAyE;IACzE,cAAc,IAAI,IAAI,CAAA;IACtB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,EAC5B,EAAE,EAAE,iBAAiB,GACpB,OAAO,CAAC,eAAe,CAAC,CAwI1B"}
|
package/dist/stage/realtime.js
CHANGED
|
@@ -54,6 +54,10 @@ export async function connectRealtime(opts, cb) {
|
|
|
54
54
|
}
|
|
55
55
|
// Greet first — the copilot opens by speaking (instructions say how).
|
|
56
56
|
send({ type: 'response.create' });
|
|
57
|
+
try {
|
|
58
|
+
console.log('[holostaff:rt] dc open → sent session.update + response.create');
|
|
59
|
+
}
|
|
60
|
+
catch { /* */ }
|
|
57
61
|
});
|
|
58
62
|
dc.addEventListener('message', (ev) => {
|
|
59
63
|
let msg;
|
|
@@ -63,8 +67,22 @@ export async function connectRealtime(opts, cb) {
|
|
|
63
67
|
catch {
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
70
|
+
// TEMP diagnostic — surface every Realtime event type so we can see
|
|
71
|
+
// what the provider actually emits (event names vary by version).
|
|
72
|
+
try {
|
|
73
|
+
console.log('[holostaff:rt] event', msg.type, msg.delta ? `delta="${String(msg.delta).slice(0, 40)}"` : '');
|
|
74
|
+
}
|
|
75
|
+
catch { /* */ }
|
|
66
76
|
handleServerEvent(msg);
|
|
67
77
|
});
|
|
78
|
+
dc.addEventListener('error', (e) => { try {
|
|
79
|
+
console.warn('[holostaff:rt] dc error', e);
|
|
80
|
+
}
|
|
81
|
+
catch { /* */ } });
|
|
82
|
+
dc.addEventListener('close', () => { try {
|
|
83
|
+
console.log('[holostaff:rt] dc closed');
|
|
84
|
+
}
|
|
85
|
+
catch { /* */ } });
|
|
68
86
|
const handleServerEvent = (msg) => {
|
|
69
87
|
switch (msg.type) {
|
|
70
88
|
// Text deltas — naming varies across Realtime versions.
|
|
@@ -119,6 +137,11 @@ export async function connectRealtime(opts, cb) {
|
|
|
119
137
|
}
|
|
120
138
|
const answer = await sdpRes.text();
|
|
121
139
|
await pc.setRemoteDescription({ type: 'answer', sdp: answer });
|
|
140
|
+
try {
|
|
141
|
+
console.log('[holostaff:rt] SDP answer applied; ice/conn state:', pc.iceConnectionState, pc.connectionState);
|
|
142
|
+
pc.addEventListener('connectionstatechange', () => console.log('[holostaff:rt] pc state', pc.connectionState));
|
|
143
|
+
}
|
|
144
|
+
catch { /* */ }
|
|
122
145
|
return {
|
|
123
146
|
sendToolResult(callId, output) {
|
|
124
147
|
send({
|
|
@@ -131,6 +154,11 @@ export async function connectRealtime(opts, cb) {
|
|
|
131
154
|
});
|
|
132
155
|
send({ type: 'response.create' });
|
|
133
156
|
},
|
|
157
|
+
cancelResponse() {
|
|
158
|
+
// Stop the current generation. Harmless if none is active (the
|
|
159
|
+
// server may emit a benign error event, which we swallow).
|
|
160
|
+
send({ type: 'response.cancel' });
|
|
161
|
+
},
|
|
134
162
|
close() {
|
|
135
163
|
try {
|
|
136
164
|
dc.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/stage/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/stage/realtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holostaff/sdk",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "Holostaff SDK — lifetime identity, stage detection, custom signal probes, and the living-portrait presence layer (chip, note, Theater, voice Stage) for the Holostaff runtime.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://docs.holostaff.ai",
|
|
@@ -46,6 +46,8 @@
|
|
|
46
46
|
"@anam-ai/js-sdk": ">=3"
|
|
47
47
|
},
|
|
48
48
|
"peerDependenciesMeta": {
|
|
49
|
-
"@anam-ai/js-sdk": {
|
|
49
|
+
"@anam-ai/js-sdk": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
50
52
|
}
|
|
51
53
|
}
|