@voicethere/agent 0.7.2 → 0.7.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/README.md +12 -11
- package/dist/agent.js +92 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +92 -4
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/runtime.d.ts +45 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +285 -0
- package/dist/runtime.js.map +1 -1
- package/dist/templates/echo/agent.js +98 -1
- package/dist/templates/echo-dc/agent.js +98 -1
- package/dist/templates/game-sync/agent.js +98 -1
- package/dist/templates/positional-tts/agent.js +98 -1
- package/dist/templates/recording-consent/agent.js +98 -1
- package/dist/templates/voice-showcase/agent.js +98 -1
- package/dist/templates/voice-starter/agent.js +107 -1
- package/dist/templates/webhooks/agent.js +98 -1
- package/dist/templates/webhooks-redis/agent.js +98 -1
- package/dist/verify/lib.d.ts +1 -1
- package/dist/verify/lib.d.ts.map +1 -1
- package/dist/verify/lib.js +1 -0
- package/dist/verify/lib.js.map +1 -1
- package/package.json +5 -5
- package/templates/agent.ts +13 -0
- package/templates/mix-smoke.ts +72 -1
package/dist/verify/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/verify/lib.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/verify/lib.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voicethere/agent",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "VoiceThere customer agent SDK — IPC types and runtime helpers for sandboxed child bundles",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -92,12 +92,12 @@
|
|
|
92
92
|
"esbuild": "0.25.12"
|
|
93
93
|
},
|
|
94
94
|
"peerDependencies": {
|
|
95
|
-
"@node-webrtc-rust/sdk": ">=0.
|
|
95
|
+
"@node-webrtc-rust/sdk": ">=0.9.0"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
|
-
"@node-webrtc-rust/helpers": "0.
|
|
99
|
-
"@node-webrtc-rust/sdk": "0.
|
|
100
|
-
"@node-webrtc-rust/signaling": "0.
|
|
98
|
+
"@node-webrtc-rust/helpers": "0.9.0",
|
|
99
|
+
"@node-webrtc-rust/sdk": "0.9.0",
|
|
100
|
+
"@node-webrtc-rust/signaling": "0.9.0",
|
|
101
101
|
"@types/node": "22.20.1",
|
|
102
102
|
"http-server": "14.1.1",
|
|
103
103
|
"ioredis": "5.11.1",
|
package/templates/agent.ts
CHANGED
|
@@ -48,6 +48,8 @@ function peerState(sessionId: string): PeerState {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
function formatSpeechDetail(speech: SpeechEvent): string {
|
|
51
|
+
const language = (speech as SpeechEvent & { language?: string }).language;
|
|
52
|
+
if (language) return language;
|
|
51
53
|
if (speech.text) return `"${speech.text}"`;
|
|
52
54
|
if (speech.error) return speech.error;
|
|
53
55
|
return "";
|
|
@@ -61,6 +63,12 @@ function handleSpeechEvent(sessionId: string, speech: SpeechEvent): void {
|
|
|
61
63
|
const state = peerState(sessionId);
|
|
62
64
|
const detail = formatSpeechDetail(speech);
|
|
63
65
|
|
|
66
|
+
// Published `@node-webrtc-rust/sdk` may not list `user_language` yet.
|
|
67
|
+
if ((speech.type as string) === "user_language") {
|
|
68
|
+
agentLog("info", `[${sessionId}] user_language ${detail}`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
64
72
|
switch (speech.type) {
|
|
65
73
|
// --- User turn (VAD + STT) ---
|
|
66
74
|
case "user_speaking_start":
|
|
@@ -170,6 +178,11 @@ defineAgent({
|
|
|
170
178
|
speak(sessionId, `You said: ${text}`);
|
|
171
179
|
},
|
|
172
180
|
|
|
181
|
+
onUserLanguage({ sessionId, language }) {
|
|
182
|
+
// Route prompts / TTS voice from the detected ISO 639-1 code
|
|
183
|
+
agentLog("info", `user_language ${sessionId} ${language}`);
|
|
184
|
+
},
|
|
185
|
+
|
|
173
186
|
onSessionEnd({ sessionId }) {
|
|
174
187
|
peers.delete(sessionId);
|
|
175
188
|
agentLog("info", `session_end ${sessionId}`);
|
package/templates/mix-smoke.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* - `{ type: "mix", action: "set_tts_pose", clientId, pose }`
|
|
14
14
|
* - `{ type: "mix", action: "speak", clientId, text }`
|
|
15
15
|
* - `{ type: "mix", action: "clear_tts_pose", clientId }`
|
|
16
|
+
* - `{ type: "mix", action: "play", sessionIds?, bytes?, url?, volume? }`
|
|
16
17
|
*
|
|
17
18
|
* Acks: `{ type: "mix_ack", action, ok: true, statuses?, ... }` or `{ ok: false, error }`.
|
|
18
19
|
* Ignores `ping` / chat strings (voice-control readiness).
|
|
@@ -23,6 +24,7 @@ import {
|
|
|
23
24
|
createMixGroup,
|
|
24
25
|
defineAgent,
|
|
25
26
|
getClientMixStatus,
|
|
27
|
+
play,
|
|
26
28
|
sendToClient,
|
|
27
29
|
setClientPose,
|
|
28
30
|
setGlobalMute,
|
|
@@ -68,7 +70,15 @@ export type MixCommand =
|
|
|
68
70
|
| { type: "mix"; action: "get_status"; clientId?: string }
|
|
69
71
|
| { type: "mix"; action: "set_tts_pose"; clientId: string; pose: MixPose }
|
|
70
72
|
| { type: "mix"; action: "speak"; clientId: string; text: string }
|
|
71
|
-
| { type: "mix"; action: "clear_tts_pose"; clientId: string }
|
|
73
|
+
| { type: "mix"; action: "clear_tts_pose"; clientId: string }
|
|
74
|
+
| {
|
|
75
|
+
type: "mix";
|
|
76
|
+
action: "play";
|
|
77
|
+
sessionIds?: string[];
|
|
78
|
+
bytes?: string;
|
|
79
|
+
url?: string;
|
|
80
|
+
volume?: number;
|
|
81
|
+
};
|
|
72
82
|
|
|
73
83
|
export type MixClientStatus = {
|
|
74
84
|
clientId?: string;
|
|
@@ -86,6 +96,7 @@ export type MixAck =
|
|
|
86
96
|
sessionId?: string;
|
|
87
97
|
clientIds?: string[];
|
|
88
98
|
statuses?: MixClientStatus[];
|
|
99
|
+
playId?: string;
|
|
89
100
|
}
|
|
90
101
|
| { type: "mix_ack"; action: string; ok: false; error: string };
|
|
91
102
|
|
|
@@ -194,6 +205,47 @@ export function isMixCommand(message: unknown): message is MixCommand {
|
|
|
194
205
|
clearMsg.clientId.trim().length > 0
|
|
195
206
|
);
|
|
196
207
|
}
|
|
208
|
+
case "play": {
|
|
209
|
+
const playMsg = message as {
|
|
210
|
+
sessionIds?: unknown;
|
|
211
|
+
bytes?: unknown;
|
|
212
|
+
url?: unknown;
|
|
213
|
+
volume?: unknown;
|
|
214
|
+
};
|
|
215
|
+
const hasBytes =
|
|
216
|
+
typeof playMsg.bytes === "string" && playMsg.bytes.trim().length > 0;
|
|
217
|
+
const hasUrl =
|
|
218
|
+
typeof playMsg.url === "string" && playMsg.url.trim().length > 0;
|
|
219
|
+
if (!hasBytes && !hasUrl) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
if (
|
|
223
|
+
playMsg.bytes !== undefined &&
|
|
224
|
+
(typeof playMsg.bytes !== "string" || playMsg.bytes.trim().length === 0)
|
|
225
|
+
) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
if (
|
|
229
|
+
playMsg.url !== undefined &&
|
|
230
|
+
(typeof playMsg.url !== "string" || playMsg.url.trim().length === 0)
|
|
231
|
+
) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
if (playMsg.sessionIds !== undefined) {
|
|
235
|
+
if (
|
|
236
|
+
!Array.isArray(playMsg.sessionIds) ||
|
|
237
|
+
!playMsg.sessionIds.every(
|
|
238
|
+
(id) => typeof id === "string" && id.trim().length > 0,
|
|
239
|
+
)
|
|
240
|
+
) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (playMsg.volume !== undefined && typeof playMsg.volume !== "number") {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
197
249
|
default:
|
|
198
250
|
return false;
|
|
199
251
|
}
|
|
@@ -235,6 +287,7 @@ function ackOk(
|
|
|
235
287
|
sessionId?: string;
|
|
236
288
|
clientIds?: string[];
|
|
237
289
|
statuses?: MixClientStatus[];
|
|
290
|
+
playId?: string;
|
|
238
291
|
},
|
|
239
292
|
): void {
|
|
240
293
|
sendToClient(sessionId, {
|
|
@@ -386,6 +439,24 @@ async function handleMixCommand(
|
|
|
386
439
|
ackOk(sessionId, action);
|
|
387
440
|
return;
|
|
388
441
|
}
|
|
442
|
+
case "play": {
|
|
443
|
+
const inlineUrl =
|
|
444
|
+
command.url?.trim() || "https://example.com/inline-clip.wav";
|
|
445
|
+
const result = await play({
|
|
446
|
+
url: inlineUrl,
|
|
447
|
+
...(command.sessionIds?.length
|
|
448
|
+
? { sessionIds: command.sessionIds }
|
|
449
|
+
: {}),
|
|
450
|
+
...(command.bytes ? { bytes: command.bytes } : {}),
|
|
451
|
+
...(command.volume !== undefined ? { volume: command.volume } : {}),
|
|
452
|
+
});
|
|
453
|
+
if (!result.ok || !result.playId) {
|
|
454
|
+
ackError(sessionId, action, result.reason ?? "play failed");
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
ackOk(sessionId, action, { playId: result.playId });
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
389
460
|
default:
|
|
390
461
|
ackError(sessionId, "unknown", "unsupported mix action");
|
|
391
462
|
}
|