flow-agent-bridge 0.31.0 → 0.33.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/README.md +57 -13
- package/dist/api.d.ts +2 -0
- package/dist/api.js +31 -0
- package/dist/api.js.map +1 -1
- package/dist/bridge.d.ts +3 -6
- package/dist/bridge.js +44 -25
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +11 -7
- package/dist/config.js +8 -4
- package/dist/config.js.map +1 -1
- package/dist/huddle-context.d.ts +41 -0
- package/dist/huddle-context.js +190 -0
- package/dist/huddle-context.js.map +1 -0
- package/dist/huddle-replies.d.ts +17 -0
- package/dist/huddle-replies.js +39 -0
- package/dist/huddle-replies.js.map +1 -0
- package/dist/huddle-voice.d.ts +55 -9
- package/dist/huddle-voice.js +309 -62
- package/dist/huddle-voice.js.map +1 -1
- package/dist/runtime.d.ts +5 -0
- package/dist/runtime.js +16 -7
- package/dist/runtime.js.map +1 -1
- package/dist/shared-file-worker.d.ts +7 -0
- package/dist/shared-file-worker.js +93 -0
- package/dist/shared-file-worker.js.map +1 -0
- package/dist/shared-files.d.ts +11 -0
- package/dist/shared-files.js +52 -0
- package/dist/shared-files.js.map +1 -0
- package/package.json +9 -5
package/dist/huddle-voice.js
CHANGED
|
@@ -1,11 +1,32 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { WebSocket } from 'ws';
|
|
3
|
+
import { CallTurnQueue, HuddleContext } from './huddle-context.js';
|
|
4
|
+
import { SharedReplyScheduler } from './huddle-replies.js';
|
|
1
5
|
const TERMINAL_INVITE_STATES = new Set(['ended', 'declined', 'missed', 'cancelled']);
|
|
2
|
-
const MAX_HANDOFF_LENGTH = 4000;
|
|
3
6
|
let liveKitLoggerInitialized = false;
|
|
7
|
+
/** Convert LiveKit's call history into inputs for resumable and stateless CLIs. */
|
|
8
|
+
export function buildVoiceRuntimeInput(messages, callerName, agentName) {
|
|
9
|
+
const conversational = messages.filter((message) => (message.role === 'user' || message.role === 'assistant') && message.text.trim().length > 0);
|
|
10
|
+
const latestUser = [...conversational]
|
|
11
|
+
.reverse()
|
|
12
|
+
.find((message) => message.role === 'user')
|
|
13
|
+
?.text.trim();
|
|
14
|
+
if (!latestUser)
|
|
15
|
+
return null;
|
|
16
|
+
return {
|
|
17
|
+
prompt: latestUser,
|
|
18
|
+
transcript: conversational
|
|
19
|
+
.map((message) => `${message.role === 'user' ? callerName : agentName}: ${message.text.trim()}`)
|
|
20
|
+
.join('\n'),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
4
23
|
/**
|
|
5
24
|
* Turns the existing DM ring into a real bot call. The server remains the
|
|
6
25
|
* source of truth for invite and roster state; this class just performs the
|
|
7
26
|
* same accept / join / leave operations as a human client, then attaches a
|
|
8
|
-
* realtime audio participant to the minted LiveKit room token.
|
|
27
|
+
* realtime audio participant to the minted LiveKit room token. Speech uses a
|
|
28
|
+
* short-lived inference grant from Flow; reasoning uses the bridge's existing
|
|
29
|
+
* Claude/Codex runtime login.
|
|
9
30
|
*/
|
|
10
31
|
export class HuddleVoiceManager {
|
|
11
32
|
options;
|
|
@@ -15,12 +36,61 @@ export class HuddleVoiceManager {
|
|
|
15
36
|
terminalInvites = new Set();
|
|
16
37
|
handledInvites = new Set();
|
|
17
38
|
sessionFactory;
|
|
39
|
+
shared = null;
|
|
18
40
|
constructor(options) {
|
|
19
41
|
this.options = options;
|
|
20
42
|
this.sessionFactory = options.sessionFactory ?? createLiveKitVoiceSession;
|
|
21
43
|
}
|
|
22
44
|
get activeChannelId() {
|
|
23
|
-
return this.active?.channelId ?? null;
|
|
45
|
+
return this.active?.channelId ?? this.shared?.channelId ?? null;
|
|
46
|
+
}
|
|
47
|
+
handleMessage(message, notify = true) {
|
|
48
|
+
return this.shared?.context.message(message, notify) ?? false;
|
|
49
|
+
}
|
|
50
|
+
handleArtifact(artifact, deleted = false) {
|
|
51
|
+
this.shared?.context.artifact(artifact, deleted);
|
|
52
|
+
}
|
|
53
|
+
removeMessage(id, channelId, at) {
|
|
54
|
+
if (this.shared?.channelId === channelId)
|
|
55
|
+
this.shared.context.removeMessage(id, at);
|
|
56
|
+
}
|
|
57
|
+
/** Backfill after socket reconnect; versions/deduplication preserve newer live events. */
|
|
58
|
+
async refreshContext(initial = false) {
|
|
59
|
+
const shared = this.shared;
|
|
60
|
+
if (!shared)
|
|
61
|
+
return;
|
|
62
|
+
const at = new Date().toISOString();
|
|
63
|
+
let timeout;
|
|
64
|
+
try {
|
|
65
|
+
const [page, artifacts] = await Promise.race([
|
|
66
|
+
Promise.all([
|
|
67
|
+
this.options.api.listMessages?.(shared.channelId, 200),
|
|
68
|
+
this.options.listArtifacts?.(),
|
|
69
|
+
]),
|
|
70
|
+
new Promise((_, reject) => { timeout = setTimeout(() => reject(new Error('Context refresh timed out')), 5000); }),
|
|
71
|
+
]);
|
|
72
|
+
if (this.shared !== shared)
|
|
73
|
+
return;
|
|
74
|
+
if (page)
|
|
75
|
+
shared.context.reconcileMessages(page.messages, at, initial ? undefined : shared.startedAt);
|
|
76
|
+
if (artifacts)
|
|
77
|
+
shared.context.reconcileArtifacts(artifacts, at, initial ? undefined : shared.startedAt);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
this.options.log('could not refresh shared call material');
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
if (timeout)
|
|
84
|
+
clearTimeout(timeout);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async memberLeft(channelId, userId) {
|
|
88
|
+
const shared = this.shared;
|
|
89
|
+
if (shared?.channelId !== channelId || (userId !== this.options.agentId && userId !== shared.callerId))
|
|
90
|
+
return;
|
|
91
|
+
this.rememberTerminal(shared.inviteId);
|
|
92
|
+
await this.endActive('call participant lost channel access');
|
|
93
|
+
await this.closeShared(shared.inviteId);
|
|
24
94
|
}
|
|
25
95
|
async handleInvite(data) {
|
|
26
96
|
if (this.stopping)
|
|
@@ -50,11 +120,6 @@ export class HuddleVoiceManager {
|
|
|
50
120
|
await this.declineWithMessage(invite.id, invite.channelId, `📞 Voice huddles are turned off for me. Set \`voice.enabled\` to \`true\` in my bridge config and restart me.`);
|
|
51
121
|
return;
|
|
52
122
|
}
|
|
53
|
-
const apiKey = this.options.apiKey?.trim();
|
|
54
|
-
if (!apiKey) {
|
|
55
|
-
await this.declineWithMessage(invite.id, invite.channelId, `📞 I can’t answer voice yet because my bridge is missing \`OPENAI_API_KEY\`. Add it to the bridge environment, restart me, and call again.`);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
123
|
// Reserve the one call slot before the asynchronous directory lookup. Two
|
|
59
124
|
// different rings can arrive on the socket in the same event-loop turn.
|
|
60
125
|
this.acceptingInviteId = invite.id;
|
|
@@ -66,6 +131,25 @@ export class HuddleVoiceManager {
|
|
|
66
131
|
}
|
|
67
132
|
if (this.stopping || this.terminalInvites.has(invite.id))
|
|
68
133
|
return;
|
|
134
|
+
const shared = {
|
|
135
|
+
inviteId: invite.id, channelId: invite.channelId, callerId: invite.startedBy, startedAt: new Date().toISOString(),
|
|
136
|
+
abort: new AbortController(), turns: new CallTurnQueue(),
|
|
137
|
+
session: null, changed: false,
|
|
138
|
+
context: null,
|
|
139
|
+
};
|
|
140
|
+
shared.context = new HuddleContext({
|
|
141
|
+
channelId: invite.channelId, callerId: invite.startedBy,
|
|
142
|
+
download: (id, signal) => {
|
|
143
|
+
if (!this.options.api.downloadCallFile)
|
|
144
|
+
throw new Error('Call file downloads are unavailable');
|
|
145
|
+
return this.options.api.downloadCallFile(id, signal);
|
|
146
|
+
},
|
|
147
|
+
changed: () => {
|
|
148
|
+
shared.changed = true;
|
|
149
|
+
shared.session?.sharedMaterialChanged?.();
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
this.shared = shared;
|
|
69
153
|
// Accept first so the caller stops hearing a ring immediately. Context
|
|
70
154
|
// loading and model connection happen while both users are in the room.
|
|
71
155
|
const room = await this.options.api.acceptHuddleInvite(invite.id);
|
|
@@ -75,10 +159,16 @@ export class HuddleVoiceManager {
|
|
|
75
159
|
return;
|
|
76
160
|
}
|
|
77
161
|
const instructions = await this.options.buildInstructions(invite.channelId, invite.startedBy);
|
|
162
|
+
await this.refreshContext(true);
|
|
78
163
|
if (this.stopping || this.terminalInvites.has(invite.id)) {
|
|
79
164
|
await this.leaveQuietly(invite.channelId);
|
|
80
165
|
return;
|
|
81
166
|
}
|
|
167
|
+
if (!room.inferenceToken?.trim()) {
|
|
168
|
+
throw new Error('Flow server did not provide an agent inference token; update the server and bridge together');
|
|
169
|
+
}
|
|
170
|
+
const runtimeSessionId = randomUUID();
|
|
171
|
+
let runtimeStarted = false;
|
|
82
172
|
let endedDuringStart = false;
|
|
83
173
|
const session = await this.sessionFactory({
|
|
84
174
|
url: room.url,
|
|
@@ -87,13 +177,28 @@ export class HuddleVoiceManager {
|
|
|
87
177
|
callerName: this.options.callerName(invite.startedBy),
|
|
88
178
|
agentName: this.options.agentName,
|
|
89
179
|
instructions,
|
|
90
|
-
|
|
180
|
+
inferenceToken: room.inferenceToken,
|
|
91
181
|
config: this.options.config,
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
182
|
+
runTurn: async (turn) => {
|
|
183
|
+
const signal = AbortSignal.any([turn.signal, shared.abort.signal]);
|
|
184
|
+
return shared.turns.run(signal, async () => {
|
|
185
|
+
const material = shared.context.snapshot();
|
|
186
|
+
const context = material.text ? `\n\n${material.text}` : '';
|
|
187
|
+
const result = await this.options.runTurn({
|
|
188
|
+
...turn, signal,
|
|
189
|
+
prompt: turn.prompt + context,
|
|
190
|
+
transcript: turn.transcript + context,
|
|
191
|
+
imagePaths: material.imagePaths,
|
|
192
|
+
sessionId: runtimeSessionId,
|
|
193
|
+
resume: runtimeStarted,
|
|
194
|
+
systemPrompt: instructions,
|
|
195
|
+
});
|
|
196
|
+
if (result.ok || result.sawSession)
|
|
197
|
+
runtimeStarted = true;
|
|
198
|
+
if (result.ok && !result.interrupted && !signal.aborted)
|
|
199
|
+
material.acknowledge();
|
|
200
|
+
return result;
|
|
201
|
+
});
|
|
97
202
|
},
|
|
98
203
|
onEnded: () => {
|
|
99
204
|
endedDuringStart = true;
|
|
@@ -112,6 +217,9 @@ export class HuddleVoiceManager {
|
|
|
112
217
|
callerId: invite.startedBy,
|
|
113
218
|
session,
|
|
114
219
|
};
|
|
220
|
+
shared.session = session;
|
|
221
|
+
if (shared.changed)
|
|
222
|
+
session.sharedMaterialChanged?.();
|
|
115
223
|
this.options.log(`answered huddle from ${this.options.callerName(invite.startedBy)}`);
|
|
116
224
|
}
|
|
117
225
|
catch (error) {
|
|
@@ -125,6 +233,8 @@ export class HuddleVoiceManager {
|
|
|
125
233
|
}
|
|
126
234
|
}
|
|
127
235
|
finally {
|
|
236
|
+
if (this.active?.inviteId !== invite.id)
|
|
237
|
+
await this.closeShared(invite.id);
|
|
128
238
|
if (this.acceptingInviteId === invite.id)
|
|
129
239
|
this.acceptingInviteId = null;
|
|
130
240
|
}
|
|
@@ -141,6 +251,17 @@ export class HuddleVoiceManager {
|
|
|
141
251
|
async stop() {
|
|
142
252
|
this.stopping = true;
|
|
143
253
|
await this.endActive('bridge stopping');
|
|
254
|
+
if (this.shared)
|
|
255
|
+
await this.closeShared(this.shared.inviteId);
|
|
256
|
+
}
|
|
257
|
+
async closeShared(inviteId) {
|
|
258
|
+
const shared = this.shared;
|
|
259
|
+
if (!shared || shared.inviteId !== inviteId)
|
|
260
|
+
return;
|
|
261
|
+
this.shared = null;
|
|
262
|
+
shared.abort.abort();
|
|
263
|
+
await shared.turns.idle();
|
|
264
|
+
await shared.context.close().catch(() => this.options.log('call temporary-file cleanup failed'));
|
|
144
265
|
}
|
|
145
266
|
async declineWithMessage(inviteId, channelId, message) {
|
|
146
267
|
await this.options.api
|
|
@@ -155,6 +276,7 @@ export class HuddleVoiceManager {
|
|
|
155
276
|
if (!active || active.inviteId !== inviteId)
|
|
156
277
|
return;
|
|
157
278
|
this.active = null;
|
|
279
|
+
await this.closeShared(inviteId);
|
|
158
280
|
await this.leaveQuietly(active.channelId);
|
|
159
281
|
this.options.log('huddle voice session ended');
|
|
160
282
|
}
|
|
@@ -163,8 +285,10 @@ export class HuddleVoiceManager {
|
|
|
163
285
|
if (!active)
|
|
164
286
|
return;
|
|
165
287
|
this.active = null;
|
|
288
|
+
this.shared?.abort.abort();
|
|
166
289
|
this.options.log(`ending huddle voice (${reason})`);
|
|
167
290
|
await active.session.close().catch((error) => this.options.log(`voice close failed: ${errorText(error)}`));
|
|
291
|
+
await this.closeShared(active.inviteId);
|
|
168
292
|
await this.leaveQuietly(active.channelId);
|
|
169
293
|
}
|
|
170
294
|
async leaveQuietly(channelId) {
|
|
@@ -191,72 +315,154 @@ export class HuddleVoiceManager {
|
|
|
191
315
|
}
|
|
192
316
|
/**
|
|
193
317
|
* Production session adapter. Imports are deliberately lazy: a text-only
|
|
194
|
-
* bridge can start without loading LiveKit's native RTC binding
|
|
195
|
-
*
|
|
318
|
+
* bridge can start without loading LiveKit's native RTC binding. Audio uses
|
|
319
|
+
* LiveKit Inference with a short-lived server-minted grant; the LLM below is
|
|
320
|
+
* the bridge's already-authenticated Claude/Codex CLI runtime.
|
|
196
321
|
*/
|
|
197
322
|
export async function createLiveKitVoiceSession(options) {
|
|
198
|
-
const [{ Room, RoomEvent }, agents
|
|
323
|
+
const [{ Room, RoomEvent }, agents] = await Promise.all([
|
|
199
324
|
import('@livekit/rtc-node'),
|
|
200
325
|
import('@livekit/agents'),
|
|
201
|
-
import('@livekit/agents-plugin-openai'),
|
|
202
326
|
]);
|
|
203
|
-
const { llm, voice } = agents;
|
|
204
|
-
|
|
205
|
-
// AgentSession directly, so it must initialize the framework logger itself.
|
|
327
|
+
const { inference, llm, voice } = agents;
|
|
328
|
+
let sharedReplies;
|
|
206
329
|
if (!liveKitLoggerInitialized) {
|
|
207
330
|
agents.initializeLogger({ pretty: false, level: 'warn' });
|
|
208
331
|
liveKitLoggerInitialized = true;
|
|
209
332
|
}
|
|
333
|
+
/** Adapt the bridge's ordinary runtime contract to LiveKit's streaming LLM. */
|
|
334
|
+
class RuntimeLLM extends llm.LLM {
|
|
335
|
+
label() {
|
|
336
|
+
return 'flow.bridge-runtime';
|
|
337
|
+
}
|
|
338
|
+
get provider() {
|
|
339
|
+
return 'flow';
|
|
340
|
+
}
|
|
341
|
+
get model() {
|
|
342
|
+
return 'agent-bridge';
|
|
343
|
+
}
|
|
344
|
+
chat(args) {
|
|
345
|
+
return new RuntimeLLMStream(this, {
|
|
346
|
+
chatCtx: args.chatCtx,
|
|
347
|
+
...(args.toolCtx ? { toolCtx: args.toolCtx } : {}),
|
|
348
|
+
connOptions: args.connOptions ?? agents.DEFAULT_API_CONNECT_OPTIONS,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
class RuntimeLLMStream extends llm.LLMStream {
|
|
353
|
+
async run() {
|
|
354
|
+
const messages = this.chatCtx.items.filter((item) => item.type === 'message');
|
|
355
|
+
const input = buildVoiceRuntimeInput(messages.map((message) => ({ role: message.role, text: message.textContent ?? '' })), options.callerName, options.agentName);
|
|
356
|
+
if (!input)
|
|
357
|
+
return;
|
|
358
|
+
sharedReplies?.consumed();
|
|
359
|
+
const responseId = `bridge-${randomUUID()}`;
|
|
360
|
+
let emitted = false;
|
|
361
|
+
let previous = '';
|
|
362
|
+
const emit = (text) => {
|
|
363
|
+
const clean = text.trim();
|
|
364
|
+
if (!clean || clean === previous || this.abortController.signal.aborted)
|
|
365
|
+
return;
|
|
366
|
+
previous = clean;
|
|
367
|
+
emitted = true;
|
|
368
|
+
this.queue.put({ id: responseId, delta: { role: 'assistant', content: `${clean} ` } });
|
|
369
|
+
};
|
|
370
|
+
const result = await options.runTurn({
|
|
371
|
+
prompt: input.prompt,
|
|
372
|
+
transcript: input.transcript,
|
|
373
|
+
signal: this.abortController.signal,
|
|
374
|
+
onText: emit,
|
|
375
|
+
});
|
|
376
|
+
if (this.abortController.signal.aborted || result.interrupted)
|
|
377
|
+
return;
|
|
378
|
+
if (!emitted && result.text.trim())
|
|
379
|
+
emit(result.text);
|
|
380
|
+
if (!result.ok) {
|
|
381
|
+
options.log(`voice runtime error: ${result.error ?? 'unknown'}`);
|
|
382
|
+
}
|
|
383
|
+
if (!emitted && !result.ok) {
|
|
384
|
+
emit('I hit a problem while working on that. Please try asking me again.');
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
const baseUrl = options.config.inferenceUrl.replace(/\/+$/, '');
|
|
389
|
+
const connect = (path, timeout, session) => connectInferenceWebSocket(baseUrl, path, options.inferenceToken, timeout, session);
|
|
390
|
+
// The SDK normally mints an inference token from LIVEKIT_API_SECRET. Flow
|
|
391
|
+
// must never place that project secret on a bot host, so construct the
|
|
392
|
+
// stock streaming codecs and replace only their public WebSocket connector
|
|
393
|
+
// with one authenticated by the narrow, short-lived token from the server.
|
|
394
|
+
const speechToText = new inference.STT({
|
|
395
|
+
model: options.config.sttModel,
|
|
396
|
+
baseURL: baseUrl,
|
|
397
|
+
sampleRate: 16_000,
|
|
398
|
+
encoding: 'pcm_s16le',
|
|
399
|
+
apiKey: 'server-minted-token',
|
|
400
|
+
apiSecret: 'not-used-by-flow-bridge',
|
|
401
|
+
});
|
|
402
|
+
speechToText.connectWs = (timeout) => connect('/stt', timeout, {
|
|
403
|
+
type: 'session.create',
|
|
404
|
+
model: options.config.sttModel,
|
|
405
|
+
settings: { sample_rate: '16000', encoding: 'pcm_s16le', extra: {} },
|
|
406
|
+
connection: { timeout: timeout / 1000, retries: 3 },
|
|
407
|
+
});
|
|
408
|
+
const textToSpeech = new inference.TTS({
|
|
409
|
+
model: options.config.ttsModel,
|
|
410
|
+
voice: options.config.ttsVoice,
|
|
411
|
+
language: 'en',
|
|
412
|
+
baseURL: baseUrl,
|
|
413
|
+
sampleRate: 16_000,
|
|
414
|
+
encoding: 'pcm_s16le',
|
|
415
|
+
apiKey: 'server-minted-token',
|
|
416
|
+
apiSecret: 'not-used-by-flow-bridge',
|
|
417
|
+
});
|
|
418
|
+
textToSpeech.connectWs = (timeout) => connect('/tts', timeout, {
|
|
419
|
+
type: 'session.create',
|
|
420
|
+
model: options.config.ttsModel,
|
|
421
|
+
voice: options.config.ttsVoice,
|
|
422
|
+
language: 'en',
|
|
423
|
+
sample_rate: '16000',
|
|
424
|
+
encoding: 'pcm_s16le',
|
|
425
|
+
extra: {},
|
|
426
|
+
connection: { timeout: timeout / 1000, retries: 3 },
|
|
427
|
+
});
|
|
210
428
|
const room = new Room();
|
|
211
429
|
let closing = false;
|
|
212
430
|
let ended = false;
|
|
431
|
+
let limitTimer;
|
|
213
432
|
const emitEnded = () => {
|
|
214
433
|
if (ended)
|
|
215
434
|
return;
|
|
216
435
|
ended = true;
|
|
436
|
+
sharedReplies?.close();
|
|
437
|
+
if (limitTimer)
|
|
438
|
+
clearTimeout(limitTimer);
|
|
217
439
|
options.onEnded();
|
|
218
440
|
};
|
|
219
441
|
await room.connect(options.url, options.token, { autoSubscribe: true, dynacast: true });
|
|
220
442
|
room.on(RoomEvent.Disconnected, emitEnded);
|
|
221
|
-
const model = new openai.realtime.RealtimeModel({
|
|
222
|
-
apiKey: options.apiKey,
|
|
223
|
-
model: options.config.model,
|
|
224
|
-
voice: options.config.voice,
|
|
225
|
-
maxSessionDuration: options.config.maxSessionMinutes * 60_000,
|
|
226
|
-
turnDetection: {
|
|
227
|
-
type: 'semantic_vad',
|
|
228
|
-
eagerness: 'auto',
|
|
229
|
-
create_response: true,
|
|
230
|
-
interrupt_response: true,
|
|
231
|
-
},
|
|
232
|
-
});
|
|
233
|
-
const handoffTool = llm.tool({
|
|
234
|
-
name: 'handoff_to_chat',
|
|
235
|
-
description: 'Queue substantial work in the normal Flow chat agent after the caller explicitly asks you to do it. ' +
|
|
236
|
-
'Use this for code changes, repository work, research, or anything requiring tools. Ask for missing details first.',
|
|
237
|
-
parameters: {
|
|
238
|
-
type: 'object',
|
|
239
|
-
additionalProperties: false,
|
|
240
|
-
properties: {
|
|
241
|
-
request: {
|
|
242
|
-
type: 'string',
|
|
243
|
-
minLength: 1,
|
|
244
|
-
maxLength: MAX_HANDOFF_LENGTH,
|
|
245
|
-
description: 'A self-contained task request preserving the caller’s constraints and decisions from this call.',
|
|
246
|
-
},
|
|
247
|
-
},
|
|
248
|
-
required: ['request'],
|
|
249
|
-
},
|
|
250
|
-
execute: async (args) => options.handoff(args.request),
|
|
251
|
-
});
|
|
252
443
|
const session = new voice.AgentSession({
|
|
253
|
-
|
|
444
|
+
stt: speechToText,
|
|
445
|
+
llm: new RuntimeLLM(),
|
|
446
|
+
tts: textToSpeech,
|
|
254
447
|
vad: null,
|
|
255
448
|
userAwayTimeout: null,
|
|
256
|
-
turnHandling: {
|
|
449
|
+
turnHandling: {
|
|
450
|
+
turnDetection: 'stt',
|
|
451
|
+
interruption: { enabled: true },
|
|
452
|
+
},
|
|
453
|
+
});
|
|
454
|
+
sharedReplies = new SharedReplyScheduler({
|
|
455
|
+
idle: () => session.agentState === 'listening' && session.userState !== 'speaking' && !closing && !ended,
|
|
456
|
+
reply: async () => {
|
|
457
|
+
await session.generateReply({
|
|
458
|
+
userInput: '[Flow call update: shared material changed. Acknowledge newly received files briefly, without claiming to have inspected them. If a NEW typed message asks a question, answer it aloud using the shared material. If a file the caller asked about has finished opening, continue their request. Do not repeat completed requests from older messages. Do not post a chat reply.]',
|
|
459
|
+
allowInterruptions: true,
|
|
460
|
+
}).waitForPlayout();
|
|
461
|
+
},
|
|
462
|
+
error: () => options.log('could not speak shared call update'),
|
|
257
463
|
});
|
|
258
464
|
session.on(voice.AgentSessionEventTypes.Error, (event) => {
|
|
259
|
-
options.log(`
|
|
465
|
+
options.log(`huddle voice error: ${errorText(event.error)}`);
|
|
260
466
|
});
|
|
261
467
|
session.on(voice.AgentSessionEventTypes.UserInputTranscribed, (event) => {
|
|
262
468
|
if (event.isFinal && event.transcript.trim())
|
|
@@ -266,10 +472,7 @@ export async function createLiveKitVoiceSession(options) {
|
|
|
266
472
|
try {
|
|
267
473
|
await session.start({
|
|
268
474
|
room,
|
|
269
|
-
agent: voice.Agent.create({
|
|
270
|
-
instructions: options.instructions,
|
|
271
|
-
tools: [handoffTool],
|
|
272
|
-
}),
|
|
475
|
+
agent: voice.Agent.create({ instructions: options.instructions }),
|
|
273
476
|
inputOptions: {
|
|
274
477
|
participantIdentity: options.callerId,
|
|
275
478
|
audioEnabled: true,
|
|
@@ -286,22 +489,32 @@ export async function createLiveKitVoiceSession(options) {
|
|
|
286
489
|
// optional audio, trace, log, and transcript upload disabled as well.
|
|
287
490
|
record: false,
|
|
288
491
|
});
|
|
289
|
-
session.
|
|
290
|
-
instructions: `Greet ${options.callerName} by name in one short, natural sentence. ` +
|
|
291
|
-
`You just answered their Flow Huddle, so sound like you picked up a call rather than starting a demo.`,
|
|
492
|
+
session.say(`Hey ${options.callerName}, I’m here.`, {
|
|
292
493
|
allowInterruptions: true,
|
|
494
|
+
addToChatCtx: true,
|
|
293
495
|
});
|
|
496
|
+
limitTimer = setTimeout(() => {
|
|
497
|
+
options.log(`ending huddle after ${options.config.maxSessionMinutes} minute limit`);
|
|
498
|
+
void session.close();
|
|
499
|
+
}, options.config.maxSessionMinutes * 60_000);
|
|
500
|
+
limitTimer.unref();
|
|
294
501
|
}
|
|
295
502
|
catch (error) {
|
|
503
|
+
if (limitTimer)
|
|
504
|
+
clearTimeout(limitTimer);
|
|
296
505
|
await session.close().catch(() => undefined);
|
|
297
506
|
await room.disconnect().catch(() => undefined);
|
|
298
507
|
throw error;
|
|
299
508
|
}
|
|
300
509
|
return {
|
|
510
|
+
sharedMaterialChanged: () => sharedReplies?.changed(),
|
|
301
511
|
close: async () => {
|
|
302
512
|
if (closing)
|
|
303
513
|
return;
|
|
304
514
|
closing = true;
|
|
515
|
+
sharedReplies?.close();
|
|
516
|
+
if (limitTimer)
|
|
517
|
+
clearTimeout(limitTimer);
|
|
305
518
|
await session.close().catch((error) => options.log(`agent session close failed: ${errorText(error)}`));
|
|
306
519
|
if (room.isConnected) {
|
|
307
520
|
await room.disconnect().catch((error) => options.log(`LiveKit disconnect failed: ${errorText(error)}`));
|
|
@@ -309,6 +522,40 @@ export async function createLiveKitVoiceSession(options) {
|
|
|
309
522
|
},
|
|
310
523
|
};
|
|
311
524
|
}
|
|
525
|
+
/** Connect to LiveKit Inference without ever holding the project API secret. */
|
|
526
|
+
export function connectInferenceWebSocket(baseUrl, path, token, timeout, session) {
|
|
527
|
+
const websocketUrl = `${baseUrl.replace(/^http/, 'ws')}${path}`;
|
|
528
|
+
return new Promise((resolve, reject) => {
|
|
529
|
+
const socket = new WebSocket(websocketUrl, { headers: { Authorization: `Bearer ${token}` } });
|
|
530
|
+
const timer = setTimeout(() => {
|
|
531
|
+
cleanup();
|
|
532
|
+
socket.terminate();
|
|
533
|
+
reject(new Error(`LiveKit inference ${path.slice(1)} connection timed out`));
|
|
534
|
+
}, timeout);
|
|
535
|
+
const cleanup = () => {
|
|
536
|
+
clearTimeout(timer);
|
|
537
|
+
socket.off('open', onOpen);
|
|
538
|
+
socket.off('error', onError);
|
|
539
|
+
};
|
|
540
|
+
const onOpen = () => {
|
|
541
|
+
cleanup();
|
|
542
|
+
try {
|
|
543
|
+
socket.send(JSON.stringify(session));
|
|
544
|
+
resolve(socket);
|
|
545
|
+
}
|
|
546
|
+
catch (error) {
|
|
547
|
+
socket.terminate();
|
|
548
|
+
reject(error);
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
const onError = (error) => {
|
|
552
|
+
cleanup();
|
|
553
|
+
reject(error);
|
|
554
|
+
};
|
|
555
|
+
socket.once('open', onOpen);
|
|
556
|
+
socket.once('error', onError);
|
|
557
|
+
});
|
|
558
|
+
}
|
|
312
559
|
function errorText(error) {
|
|
313
560
|
if (error instanceof Error)
|
|
314
561
|
return error.message;
|
package/dist/huddle-voice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"huddle-voice.js","sourceRoot":"","sources":["../src/huddle-voice.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"huddle-voice.js","sourceRoot":"","sources":["../src/huddle-voice.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { RuntimeConfig } from './config.js';
|
|
2
2
|
export interface RunOpts {
|
|
3
|
+
/** Prepared call images/PDF previews. Claude reads paths; Codex receives image inputs. */
|
|
4
|
+
imagePaths?: string[] | undefined;
|
|
5
|
+
/** Avoid OS command-line limits for document context and call transcripts. */
|
|
6
|
+
stdinPrompt?: boolean;
|
|
3
7
|
sessionId: string;
|
|
4
8
|
/** false → --session-id (new session); true → --resume. */
|
|
5
9
|
resume: boolean;
|
|
@@ -77,6 +81,7 @@ export declare class StreamJsonParser {
|
|
|
77
81
|
private handleLine;
|
|
78
82
|
}
|
|
79
83
|
export declare function buildClaudeArgs(cfg: RuntimeConfig, opts: RunOpts): string[];
|
|
84
|
+
export declare function buildCodexArgs(cfg: RuntimeConfig, opts: RunOpts): string[];
|
|
80
85
|
/** Demo mode: static canned reply, no CLI spawn. */
|
|
81
86
|
export declare const DEMO_REPLY = "Your message was received";
|
|
82
87
|
/**
|