@memberjunction/livekit-room-server 6.2.0-edge.2 → 6.2.0-edge.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 +85 -0
- package/dist/index.d.ts +18 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/livekit-agent-room-coordinator.d.ts +220 -13
- package/dist/livekit-agent-room-coordinator.d.ts.map +1 -1
- package/dist/livekit-agent-room-coordinator.js +409 -65
- package/dist/livekit-agent-room-coordinator.js.map +1 -1
- package/dist/livekit-egress-service.d.ts +7 -0
- package/dist/livekit-egress-service.d.ts.map +1 -1
- package/dist/livekit-egress-service.js +11 -0
- package/dist/livekit-egress-service.js.map +1 -1
- package/dist/livekit-native-module.d.ts +18 -0
- package/dist/livekit-native-module.d.ts.map +1 -0
- package/dist/livekit-native-module.js +27 -0
- package/dist/livekit-native-module.js.map +1 -0
- package/dist/livekit-participant-service.d.ts +47 -0
- package/dist/livekit-participant-service.d.ts.map +1 -0
- package/dist/livekit-participant-service.js +64 -0
- package/dist/livekit-participant-service.js.map +1 -0
- package/dist/livekit-sip-service.d.ts +141 -0
- package/dist/livekit-sip-service.d.ts.map +1 -0
- package/dist/livekit-sip-service.js +169 -0
- package/dist/livekit-sip-service.js.map +1 -0
- package/dist/livekit-token-service.d.ts +26 -5
- package/dist/livekit-token-service.d.ts.map +1 -1
- package/dist/livekit-token-service.js +22 -7
- package/dist/livekit-token-service.js.map +1 -1
- package/dist/livekit-webhook.d.ts +65 -0
- package/dist/livekit-webhook.d.ts.map +1 -0
- package/dist/livekit-webhook.js +65 -0
- package/dist/livekit-webhook.js.map +1 -0
- package/dist/meeting-dial-in-service.d.ts +83 -0
- package/dist/meeting-dial-in-service.d.ts.map +1 -0
- package/dist/meeting-dial-in-service.js +202 -0
- package/dist/meeting-dial-in-service.js.map +1 -0
- package/dist/room-audio/audio-decoder.d.ts +40 -0
- package/dist/room-audio/audio-decoder.d.ts.map +1 -0
- package/dist/room-audio/audio-decoder.js +205 -0
- package/dist/room-audio/audio-decoder.js.map +1 -0
- package/dist/room-audio/comfort-tone.d.ts +23 -0
- package/dist/room-audio/comfort-tone.d.ts.map +1 -0
- package/dist/room-audio/comfort-tone.js +70 -0
- package/dist/room-audio/comfort-tone.js.map +1 -0
- package/dist/room-audio/pcm-frame-pump.d.ts +134 -0
- package/dist/room-audio/pcm-frame-pump.d.ts.map +1 -0
- package/dist/room-audio/pcm-frame-pump.js +253 -0
- package/dist/room-audio/pcm-frame-pump.js.map +1 -0
- package/dist/room-audio/room-audio-decode-cache.d.ts +37 -0
- package/dist/room-audio/room-audio-decode-cache.d.ts.map +1 -0
- package/dist/room-audio/room-audio-decode-cache.js +75 -0
- package/dist/room-audio/room-audio-decode-cache.js.map +1 -0
- package/dist/room-audio/room-audio-player.d.ts +178 -0
- package/dist/room-audio/room-audio-player.d.ts.map +1 -0
- package/dist/room-audio/room-audio-player.js +404 -0
- package/dist/room-audio/room-audio-player.js.map +1 -0
- package/dist/room-audio/room-audio-sources.d.ts +47 -0
- package/dist/room-audio/room-audio-sources.d.ts.map +1 -0
- package/dist/room-audio/room-audio-sources.js +116 -0
- package/dist/room-audio/room-audio-sources.js.map +1 -0
- package/dist/room-audio/room-speech-synthesizer.d.ts +55 -0
- package/dist/room-audio/room-speech-synthesizer.d.ts.map +1 -0
- package/dist/room-audio/room-speech-synthesizer.js +56 -0
- package/dist/room-audio/room-speech-synthesizer.js.map +1 -0
- package/dist/room-authorization.d.ts +58 -0
- package/dist/room-authorization.d.ts.map +1 -0
- package/dist/room-authorization.js +212 -0
- package/dist/room-authorization.js.map +1 -0
- package/dist/room-handoff/handoff-offer-registry.d.ts +147 -0
- package/dist/room-handoff/handoff-offer-registry.d.ts.map +1 -0
- package/dist/room-handoff/handoff-offer-registry.js +548 -0
- package/dist/room-handoff/handoff-offer-registry.js.map +1 -0
- package/dist/room-handoff/handoff-types.d.ts +172 -0
- package/dist/room-handoff/handoff-types.d.ts.map +1 -0
- package/dist/room-handoff/handoff-types.js +16 -0
- package/dist/room-handoff/handoff-types.js.map +1 -0
- package/dist/room-handoff/room-handoff-engine.d.ts +149 -0
- package/dist/room-handoff/room-handoff-engine.d.ts.map +1 -0
- package/dist/room-handoff/room-handoff-engine.js +563 -0
- package/dist/room-handoff/room-handoff-engine.js.map +1 -0
- package/package.json +15 -9
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview {@link LiveKitAgentRoomCoordinator} — the server-side **session-start harness** for the
|
|
3
3
|
* MJ-native LiveKit room (§1 of the realtime-bridge buildout plan). Given an agent + a room, it:
|
|
4
|
-
* 1.
|
|
5
|
-
* 2.
|
|
4
|
+
* 1. opens the realtime model session via an injectable {@link RealtimeSessionFactory} seam,
|
|
5
|
+
* 2. mints the agent bot's scoped LiveKit token ({@link LiveKitTokenService}), whose attributes depend on the session, and
|
|
6
6
|
* 3. bridges that session into the room through {@link AIBridgeEngine.StartBridgeSession} (which wires
|
|
7
7
|
* the transport seam + turn-taking automatically).
|
|
8
|
+
* A start that fails after step 1 closes the model session before the error propagates, recording the failure on the
|
|
9
|
+
* agent's co-agent run first ({@link FailedStartRecorder}).
|
|
8
10
|
*
|
|
9
11
|
* The realtime-session factory is a seam (mirroring `LiveKitBridge.SetSdkFactory`): production binds it to
|
|
10
12
|
* the real model-resolution path (`@memberjunction/ai-agents`), and tests/de-risk inject a stub session.
|
|
@@ -12,13 +14,38 @@
|
|
|
12
14
|
*
|
|
13
15
|
* @module @memberjunction/livekit-room-server
|
|
14
16
|
*/
|
|
15
|
-
import { BaseSingleton } from '@memberjunction/global';
|
|
17
|
+
import { BaseSingleton, NormalizeUUID, UUIDsEqual } from '@memberjunction/global';
|
|
16
18
|
import { LogError, LogStatus } from '@memberjunction/core';
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
+
import { AgentAvatarAttributes, AgentParticipantIdentity, AgentWatchesAttributes, InboundVideoStreamsOf, ResolveIsModelFullDuplex, } from '@memberjunction/ai';
|
|
20
|
+
import { DefaultNativeLoader } from '@memberjunction/ai-bridge-livekit';
|
|
21
|
+
import { AIEngine } from '@memberjunction/aiengine';
|
|
22
|
+
import { AlwaysAddressedMatcher, RegexAddressedMatcher, TURN_TAKING_TOOL_DEFINITIONS, } from '@memberjunction/ai-bridge-base';
|
|
23
|
+
import { AIBridgeEngine, } from '@memberjunction/ai-bridge-server';
|
|
19
24
|
import { LiveKitTokenService } from './livekit-token-service.js';
|
|
25
|
+
import { ResolveLiveKitNativeModuleSpecifier } from './livekit-native-module.js';
|
|
26
|
+
/**
|
|
27
|
+
* Static capability map for known realtime drivers when resolving full-duplex capability before session connect.
|
|
28
|
+
* Avoids class-name substring heuristics.
|
|
29
|
+
*/
|
|
30
|
+
const DRIVER_STATIC_CAPABILITIES = {
|
|
31
|
+
OpenAILiveRealtime: { FullDuplex: true },
|
|
32
|
+
};
|
|
33
|
+
function GetDriverStaticCapabilities(driverClass) {
|
|
34
|
+
if (!driverClass) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const key = driverClass.trim().toLowerCase();
|
|
38
|
+
for (const [cls, caps] of Object.entries(DRIVER_STATIC_CAPABILITIES)) {
|
|
39
|
+
if (cls.toLowerCase() === key) {
|
|
40
|
+
return caps;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
20
45
|
/** The `DriverClass` the LiveKit bridge registers under (must match the `MJ: AI Bridge Providers` row). */
|
|
21
46
|
export const LIVEKIT_BRIDGE_DRIVER_CLASS = 'LiveKitBridge';
|
|
47
|
+
/** The answer for a phone call: the module is not asked. */
|
|
48
|
+
const PHONE_CALL_AVATAR_VIDEO = { Supported: false, Reason: 'phone' };
|
|
22
49
|
/**
|
|
23
50
|
* Coordinates starting (and stopping) an agent's presence in a LiveKit room. A process-wide singleton
|
|
24
51
|
* (per MJ convention) so deployment code can bind the realtime-session factory once at startup and the
|
|
@@ -39,6 +66,7 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
39
66
|
*/
|
|
40
67
|
this.roomRosters = new Map();
|
|
41
68
|
this.bridgeOps = AIBridgeEngine.Instance;
|
|
69
|
+
this.turnStateSource = (roomKey) => AIBridgeEngine.Instance.GetRoomTurnSnapshot(roomKey);
|
|
42
70
|
this.sessionFactory = () => {
|
|
43
71
|
throw new Error('LiveKitAgentRoomCoordinator has no realtime-session factory bound. Call SetSessionFactory(...) ' +
|
|
44
72
|
'with a factory that resolves a BaseRealtimeModel and returns an IRealtimeSession (see @memberjunction/ai-agents), ' +
|
|
@@ -57,6 +85,53 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
57
85
|
SetSessionFactory(factory) {
|
|
58
86
|
this.sessionFactory = factory;
|
|
59
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Binds the seam that installs the engine's turn-taking tool handler on a model session. Without it a
|
|
90
|
+
* full-duplex model's `i_am_addressed` / `yield_turn` calls cannot be executed (the room's floor gate still
|
|
91
|
+
* protects against overlap; the model just cannot reserve the floor or hand it to a named agent).
|
|
92
|
+
*
|
|
93
|
+
* @param binder The binder, or `undefined` to clear it.
|
|
94
|
+
*/
|
|
95
|
+
SetTurnToolBinder(binder) {
|
|
96
|
+
this.turnToolBinder = binder;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Binds the seam that says whether the agent behind a model session watches meetings. Without it no agent watches:
|
|
100
|
+
* the bot reads nobody's camera or screen and the room never offers people the choice.
|
|
101
|
+
*
|
|
102
|
+
* @param resolver The resolver, or `undefined` to clear it.
|
|
103
|
+
*/
|
|
104
|
+
SetAgentVisionResolver(resolver) {
|
|
105
|
+
this.agentVisionResolver = resolver;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Binds the seam that records a failed start on the agent's co-agent run. Without it, the run of an agent whose start
|
|
109
|
+
* failed reads as completed: closing its model session finalizes the run that way.
|
|
110
|
+
*
|
|
111
|
+
* @param recorder The recorder, or `undefined` to clear it.
|
|
112
|
+
*/
|
|
113
|
+
SetFailedStartRecorder(recorder) {
|
|
114
|
+
this.failedStartRecorder = recorder;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Overrides where a room's turn-taking snapshot comes from (an injectable seam for unit testing; production
|
|
118
|
+
* reads the process-wide {@link AIBridgeEngine}).
|
|
119
|
+
*
|
|
120
|
+
* @param source Returns the snapshot for a room key, or `null` when the room holds no agents.
|
|
121
|
+
*/
|
|
122
|
+
SetTurnStateSource(source) {
|
|
123
|
+
this.turnStateSource = source;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A room's live turn-taking state — floor holder, whether a person is speaking, any pending hand-off, the
|
|
127
|
+
* agent-to-agent loop-cap progress, the most recent floor events, and who is seated. Read-only.
|
|
128
|
+
*
|
|
129
|
+
* @param roomName The LiveKit room name (the bridge's room key).
|
|
130
|
+
* @returns The snapshot, or `null` when the room holds no agents.
|
|
131
|
+
*/
|
|
132
|
+
GetRoomTurnState(roomName) {
|
|
133
|
+
return this.turnStateSource(roomName.trim());
|
|
134
|
+
}
|
|
60
135
|
/**
|
|
61
136
|
* Overrides the token service used to mint the bot token (e.g. to inject explicit credentials).
|
|
62
137
|
*
|
|
@@ -75,12 +150,18 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
75
150
|
this.bridgeOps = ops;
|
|
76
151
|
}
|
|
77
152
|
/**
|
|
78
|
-
* Starts the agent's presence in a LiveKit room:
|
|
79
|
-
* bridges
|
|
153
|
+
* Starts the agent's presence in a LiveKit room: opens the realtime session, mints the bot token, and
|
|
154
|
+
* bridges the session into the room.
|
|
155
|
+
*
|
|
156
|
+
* A start that fails once the model session is open (the bot token can't be minted, the bridge doesn't start) closes
|
|
157
|
+
* that session before the error propagates, after recording the failure, with the start's error, on the session's
|
|
158
|
+
* co-agent run ({@link SetFailedStartRecorder}), which would otherwise read as completed. The agent session it runs under
|
|
159
|
+
* (`AgentSessionID`) is the caller's: a caller that created one for this start closes it.
|
|
80
160
|
*
|
|
81
161
|
* @param params The session parameters.
|
|
82
162
|
* @returns The active session handles.
|
|
83
|
-
* @throws {Error} when the LiveKit provider is not configured/registered
|
|
163
|
+
* @throws {Error} when the LiveKit provider is not configured/registered, the session factory is unbound or fails,
|
|
164
|
+
* the bot token can't be minted, or the bridge doesn't start.
|
|
84
165
|
*/
|
|
85
166
|
async StartAgentRoomSession(params) {
|
|
86
167
|
await this.bridgeOps.Config(false, params.ContextUser, params.MetadataProvider);
|
|
@@ -90,8 +171,11 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
90
171
|
'Seed/activate the LiveKit provider row before starting a room session.');
|
|
91
172
|
}
|
|
92
173
|
const botName = params.AgentName ?? 'Agent';
|
|
93
|
-
|
|
94
|
-
const
|
|
174
|
+
// `agent-<agent session id>`: the identity the bridge, the engine and other agents' bots read as an agent's.
|
|
175
|
+
const botIdentity = AgentParticipantIdentity(params.AgentSessionID);
|
|
176
|
+
// Fail before opening a model session when LiveKit isn't configured. The bot's token itself is minted once the
|
|
177
|
+
// session is open, because whether the bot watches depends on the session (see agentWatches).
|
|
178
|
+
this.tokenService.AssertConfigured();
|
|
95
179
|
// Multi-agent MEETING detection: if the room already holds an agent, THIS agent joins as a meeting
|
|
96
180
|
// participant — auto-response OFF, speaks only when addressed by name. When a room becomes multi-agent
|
|
97
181
|
// the agents ALREADY in it are retroactively re-gated too (capability-permitting — see below). The names
|
|
@@ -106,55 +190,185 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
106
190
|
// (gated meeting mode + LLM router) for controlled scenarios (webinars, large rooms, weaker models).
|
|
107
191
|
const moderatorMode = process.env.MJ_REALTIME_MODERATOR_MODE === 'on';
|
|
108
192
|
const isMeeting = moderatorMode && existingAgents.length > 0;
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
// the names it answers to + its participation style. `'proactive'` (default) lets the moderator bring
|
|
139
|
-
// it in unaddressed when relevant; per-agent `'addressed-only'` resolution from config is a follow-up.
|
|
140
|
-
AgentNames: selfNames,
|
|
141
|
-
ParticipationMode: 'proactive',
|
|
142
|
-
// The voiced TARGET agent (e.g. Sage) — the moderator resolves its role + per-agent turnTaking.mode.
|
|
143
|
-
TargetAgentID: params.TargetAgentID,
|
|
144
|
-
// NativeModuleSpecifier tells LiveKitNativeMeetingSdk which native room-client wrapper to load — the
|
|
145
|
-
// @livekit/rtc-node-backed @memberjunction/ai-bridge-livekit-native by default, overridable via env
|
|
146
|
-
// (e.g. a one-line module setting Gemini's 16 kHz inbound rate). AccessToken is the pre-signed bot
|
|
147
|
-
// join token; the room ws URL arrives as `Address`.
|
|
148
|
-
Configuration: {
|
|
149
|
-
AccessToken: botToken.Token,
|
|
150
|
-
BotDisplayName: botName,
|
|
193
|
+
const addressing = isMeeting ? 'Regex' : params.TurnAddressing ?? 'Auto';
|
|
194
|
+
let resolvedFullDuplex = params.FullDuplex;
|
|
195
|
+
if (resolvedFullDuplex === undefined && params.RealtimeModelID) {
|
|
196
|
+
resolvedFullDuplex = this.resolveIsModelFullDuplexFromId(params.RealtimeModelID);
|
|
197
|
+
}
|
|
198
|
+
const host = params.Host;
|
|
199
|
+
const buildToolsForFullDuplex = (isFd) => {
|
|
200
|
+
const turnTakingTools = isFd || addressing === 'Regex' ? [] : [...TURN_TAKING_TOOL_DEFINITIONS];
|
|
201
|
+
return (host?.HostTools?.length ?? 0) > 0 || turnTakingTools.length > 0
|
|
202
|
+
? [...(host?.HostTools ?? []), ...turnTakingTools]
|
|
203
|
+
: undefined;
|
|
204
|
+
};
|
|
205
|
+
// Whether this host's bot can publish the agent's avatar is asked BEFORE the model session opens, so a host that
|
|
206
|
+
// can't never asks the model for it (and is never billed for video nobody sees). Cleared if the avatar is taken down.
|
|
207
|
+
// A phone call is never asked about: the caller sees no video, so the session asks for no avatar at all.
|
|
208
|
+
const phoneCall = host?.Channel === 'phone';
|
|
209
|
+
const avatarVideo = phoneCall ? PHONE_CALL_AVATAR_VIDEO : await this.DescribeAvatarVideo();
|
|
210
|
+
let avatarDelivery = avatarVideo.Supported === true ? 'room' : undefined;
|
|
211
|
+
let activeTurnHandler = undefined;
|
|
212
|
+
const openModelSession = async (priorTranscript) => {
|
|
213
|
+
const initialTools = buildToolsForFullDuplex(resolvedFullDuplex ?? false);
|
|
214
|
+
const opened = await this.sessionFactory({
|
|
215
|
+
AvatarDelivery: avatarDelivery,
|
|
216
|
+
PhoneCall: phoneCall || undefined,
|
|
217
|
+
AgentID: params.AgentID,
|
|
218
|
+
AgentName: params.AgentName,
|
|
219
|
+
TargetAgentID: params.TargetAgentID,
|
|
220
|
+
RealtimeModelID: params.RealtimeModelID,
|
|
221
|
+
RealtimeVoice: params.RealtimeVoice,
|
|
151
222
|
RoomName: params.RoomName,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
223
|
+
ContextUser: params.ContextUser,
|
|
224
|
+
MetadataProvider: params.MetadataProvider,
|
|
225
|
+
// So the co-agent observability run groups under THIS agent session (parity with native chat).
|
|
226
|
+
AgentSessionID: params.AgentSessionID,
|
|
227
|
+
MeetingMode: isMeeting || undefined,
|
|
228
|
+
SelfNames: isMeeting ? selfNames : undefined,
|
|
229
|
+
HostTools: initialTools,
|
|
230
|
+
HostFraming: host?.HostFraming,
|
|
231
|
+
ConversationID: host?.ConversationID,
|
|
232
|
+
PriorTranscript: priorTranscript,
|
|
233
|
+
ResolveHostTools: (resolved) => {
|
|
234
|
+
if (resolvedFullDuplex === undefined) {
|
|
235
|
+
if (resolved.ModelID) {
|
|
236
|
+
const effective = AIEngine.Instance.GetEffectiveModelConfiguration(resolved.ModelID, resolved.ModelVendorID);
|
|
237
|
+
const model = (AIEngine.Instance.Models ?? []).find(m => UUIDsEqual(m.ID, resolved.ModelID));
|
|
238
|
+
const staticCaps = GetDriverStaticCapabilities(resolved.DriverClass);
|
|
239
|
+
resolvedFullDuplex = ResolveIsModelFullDuplex(effective ?? model?.ModelConfigurationObject, staticCaps);
|
|
240
|
+
}
|
|
241
|
+
else if (resolved.DriverClass) {
|
|
242
|
+
const staticCaps = GetDriverStaticCapabilities(resolved.DriverClass);
|
|
243
|
+
resolvedFullDuplex = staticCaps?.FullDuplex === true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return buildToolsForFullDuplex(resolvedFullDuplex ?? false);
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
const declaredTurnToolsInitially = !resolvedFullDuplex && addressing !== 'Regex';
|
|
250
|
+
if (resolvedFullDuplex === undefined) {
|
|
251
|
+
resolvedFullDuplex = opened.Capabilities?.FullDuplex === true;
|
|
252
|
+
}
|
|
253
|
+
else if (opened.Capabilities?.FullDuplex !== undefined && opened.Capabilities.FullDuplex !== resolvedFullDuplex) {
|
|
254
|
+
LogStatus(`[LiveKitAgentRoomCoordinator] WARNING: Session factory opened with Capabilities.FullDuplex=${opened.Capabilities.FullDuplex}, ` +
|
|
255
|
+
`which disagrees with pre-open resolved FullDuplex=${resolvedFullDuplex}. Initial tools may mismatch.`);
|
|
256
|
+
}
|
|
257
|
+
// If full duplex is active, but turn-taking tools were declared to the session initially
|
|
258
|
+
// (e.g. because full-duplex was only discovered after open, or custom factory ignored ResolveHostTools):
|
|
259
|
+
if (resolvedFullDuplex && declaredTurnToolsInitially) {
|
|
260
|
+
const desiredTools = buildToolsForFullDuplex(true);
|
|
261
|
+
try {
|
|
262
|
+
await opened.RegisterTools(desiredTools ?? []);
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
LogError(`[LiveKitAgentRoomCoordinator] Failed to reconfigure tools after discovering FullDuplex: ${err instanceof Error ? err.message : String(err)}`);
|
|
266
|
+
}
|
|
267
|
+
// Explicitly bind a no-op handler so any in-flight or model-cached turn-taking tool calls return a clear "not available" result
|
|
268
|
+
if (this.turnToolBinder) {
|
|
269
|
+
const noopTurnHandler = {
|
|
270
|
+
Handles(toolName) {
|
|
271
|
+
return TURN_TAKING_TOOL_DEFINITIONS.some(t => t.Name === toolName);
|
|
272
|
+
},
|
|
273
|
+
async Execute(call) {
|
|
274
|
+
return JSON.stringify({
|
|
275
|
+
success: false,
|
|
276
|
+
error: `Tool '${call.ToolName}' is not available: session is running in full-duplex mode.`,
|
|
277
|
+
});
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
this.turnToolBinder(opened, noopTurnHandler);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
host?.OnModelSession?.(opened);
|
|
284
|
+
if (activeTurnHandler) {
|
|
285
|
+
this.bindTurnTools(opened, activeTurnHandler, botName, resolvedFullDuplex);
|
|
286
|
+
}
|
|
287
|
+
return opened;
|
|
288
|
+
};
|
|
289
|
+
const session = await openModelSession();
|
|
290
|
+
const finalFullDuplex = resolvedFullDuplex ?? false;
|
|
291
|
+
// The bridge id is known only after the engine starts the session, but the end-of-session hook is registered at start,
|
|
292
|
+
// so it reaches the id through this holder.
|
|
293
|
+
const started = {};
|
|
294
|
+
// Until the bridge engine holds the model session (StartBridgeSession resolves), the session is this start's to close:
|
|
295
|
+
// when the bot's token can't be minted or the bridge doesn't start, it is closed before the error propagates, so a
|
|
296
|
+
// failed start leaves no model connection open (#5308), and its co-agent run reads as failed, with the start's error.
|
|
297
|
+
// From then on the engine closes it when the bridge ends.
|
|
298
|
+
let botToken;
|
|
299
|
+
let active;
|
|
300
|
+
try {
|
|
301
|
+
const watches = this.agentWatches(session);
|
|
302
|
+
const avatar = this.avatarStatusFor(session, avatarVideo, botName);
|
|
303
|
+
const botAttributes = { ...(watches ? AgentWatchesAttributes(true) : {}), ...AgentAvatarAttributes(avatar) };
|
|
304
|
+
botToken = await this.mintBotToken(params.RoomName, botIdentity, botName, botAttributes);
|
|
305
|
+
active = await this.bridgeOps.StartBridgeSession({
|
|
306
|
+
AgentSessionID: params.AgentSessionID,
|
|
307
|
+
AgentID: params.AgentID,
|
|
308
|
+
Provider: provider,
|
|
309
|
+
RealtimeSession: session,
|
|
310
|
+
FullDuplex: finalFullDuplex,
|
|
311
|
+
Address: botToken.ServerUrl,
|
|
312
|
+
JoinMethod: host?.JoinMethod ?? 'OnDemand',
|
|
313
|
+
Direction: host?.Direction,
|
|
314
|
+
TurnMode: params.TurnMode ?? 'Passive',
|
|
315
|
+
TurnAddressing: addressing,
|
|
316
|
+
// Meeting: gate speech to ADDRESSED turns (RegexAddressedMatcher on the agent's names) AND tell the
|
|
317
|
+
// engine the model's auto-response is off so the bridge becomes the sole trigger. Solo 1:1: respond to
|
|
318
|
+
// ALL the user's speech (AlwaysAddressedMatcher) with the model's own auto-response — Passive's
|
|
319
|
+
// name-match would otherwise leave a single agent silent unless you said its name each turn.
|
|
320
|
+
TurnMatcher: isMeeting ? new RegexAddressedMatcher(selfNames) : new AlwaysAddressedMatcher(),
|
|
321
|
+
DisableAutoResponse: isMeeting || undefined,
|
|
322
|
+
// Roster info for the room turn moderator (the LLM router, when one is wired via SetTurnModerator):
|
|
323
|
+
// the names it answers to + its participation style. `'proactive'` (default) lets the moderator bring
|
|
324
|
+
// it in unaddressed when relevant; per-agent `'addressed-only'` resolution from config is a follow-up.
|
|
325
|
+
AgentNames: selfNames,
|
|
326
|
+
ParticipationMode: 'proactive',
|
|
327
|
+
// The voiced TARGET agent (e.g. Sage) — the moderator resolves its role + per-agent turnTaking.mode.
|
|
328
|
+
TargetAgentID: params.TargetAgentID,
|
|
329
|
+
// NativeModuleSpecifier tells LiveKitNativeMeetingSdk which native room-client wrapper to load — the
|
|
330
|
+
// @livekit/rtc-node-backed @memberjunction/ai-bridge-livekit-native by default, overridable via env
|
|
331
|
+
// (e.g. a one-line module setting Gemini's 16 kHz inbound rate). AccessToken is the pre-signed bot
|
|
332
|
+
// join token; the room ws URL arrives as `Address`.
|
|
333
|
+
Configuration: {
|
|
334
|
+
AccessToken: botToken.Token,
|
|
335
|
+
BotDisplayName: botName,
|
|
336
|
+
RoomName: params.RoomName,
|
|
337
|
+
NativeModuleSpecifier: this.resolveNativeModuleSpecifier(),
|
|
338
|
+
// The bot reads the cameras and screens of people who allow it, only when this agent watches.
|
|
339
|
+
AgentVision: watches,
|
|
340
|
+
},
|
|
341
|
+
ContextUser: params.ContextUser,
|
|
342
|
+
MetadataProvider: params.MetadataProvider,
|
|
343
|
+
// Host-owned call: its own transcript, barge-in policy, model recovery and end-of-session bookkeeping.
|
|
344
|
+
TranscriptSink: host?.TranscriptSink,
|
|
345
|
+
OnBargeIn: host?.OnBargeIn,
|
|
346
|
+
RecoverRealtimeSession: host?.RecoverModelSession ? (request) => openModelSession(request.PriorTranscript) : undefined,
|
|
347
|
+
// The bot took the avatar down mid-meeting: the model session is replaced by one that renders none (and re-opened
|
|
348
|
+
// without it from then on), so the model stops generating video nobody sees.
|
|
349
|
+
RecoverRealtimeSessionWithoutAvatar: avatar?.Granted
|
|
350
|
+
? (request) => {
|
|
351
|
+
avatarDelivery = undefined;
|
|
352
|
+
return openModelSession(request.PriorTranscript);
|
|
353
|
+
}
|
|
354
|
+
: undefined,
|
|
355
|
+
OnSessionEnded: async (reason) => {
|
|
356
|
+
// An agent that leaves on its own (every human gone, the model lost, a handoff) must drop off the room's roster too.
|
|
357
|
+
if (started.SessionBridgeID) {
|
|
358
|
+
this.removeFromRoster(started.SessionBridgeID);
|
|
359
|
+
}
|
|
360
|
+
await host?.OnSessionEnded?.(reason);
|
|
361
|
+
},
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
await this.closeModelSessionOfFailedStart(session, err);
|
|
366
|
+
throw err;
|
|
367
|
+
}
|
|
368
|
+
started.SessionBridgeID = active.SessionBridgeID;
|
|
157
369
|
this.addToRoster(roomKey, { AgentSessionID: params.AgentSessionID, SessionBridgeID: active.SessionBridgeID, Names: selfNames });
|
|
370
|
+
activeTurnHandler = active.TurnTakingToolHandler;
|
|
371
|
+
this.bindTurnTools(session, active.TurnTakingToolHandler, botName, finalFullDuplex);
|
|
158
372
|
// The room just became (or stayed) multi-agent → retroactively re-gate the agents already in it into
|
|
159
373
|
// meeting mode so the whole room takes turns, not just the newcomers. Capability-gated in the engine:
|
|
160
374
|
// a provider that can't reconfigure a live session (e.g. Gemini) is left conversational, no dead call.
|
|
@@ -168,6 +382,119 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
168
382
|
`(bridge ${active.SessionBridgeID}, ${isMeeting ? 'MEETING — addressed-only' : 'solo 1:1'})`);
|
|
169
383
|
return { SessionBridgeID: active.SessionBridgeID, RoomName: params.RoomName, ServerUrl: botToken.ServerUrl };
|
|
170
384
|
}
|
|
385
|
+
/**
|
|
386
|
+
* Whether the agent behind this model session watches the meeting: its setting is on (through the bound
|
|
387
|
+
* {@link AgentVisionResolver}) AND its session takes inbound video. Watching on an audio-only model would offer people
|
|
388
|
+
* a choice no frame could honour, so it is logged and treated as off.
|
|
389
|
+
*/
|
|
390
|
+
agentWatches(session) {
|
|
391
|
+
const settingOn = this.agentVisionResolver?.(session) === true;
|
|
392
|
+
if (settingOn && InboundVideoStreamsOf(session.Capabilities) === 0) {
|
|
393
|
+
LogStatus('[LiveKitAgentRoomCoordinator] The agent is set to watch meetings, but its realtime model takes no video; it will not watch.');
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
return settingOn;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Whether this host's bots can publish an agent's avatar, from the native room module the bots join with (`ffmpeg`
|
|
400
|
+
* with the H.264 and AAC decoders, and a room SDK that publishes video). Asked before every agent's model session
|
|
401
|
+
* opens; the module probes once and remembers. A module that cannot be loaded, or that predates avatars, means no.
|
|
402
|
+
*/
|
|
403
|
+
async DescribeAvatarVideo() {
|
|
404
|
+
try {
|
|
405
|
+
const nativeModule = await DefaultNativeLoader(this.resolveNativeModuleSpecifier());
|
|
406
|
+
if (!nativeModule.describeAvatarVideo) {
|
|
407
|
+
return { Supported: false, Reason: 'bridged', Detail: 'the native room module publishes no avatars' };
|
|
408
|
+
}
|
|
409
|
+
return await nativeModule.describeAvatarVideo();
|
|
410
|
+
}
|
|
411
|
+
catch (err) {
|
|
412
|
+
return { Supported: false, Reason: 'bridged', Detail: `the native room module could not be asked: ${err instanceof Error ? err.message : String(err)}` };
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* What became of the agent's avatar request: the session's own status, except that a session which asked for an
|
|
417
|
+
* avatar and stayed audio only because this host could not publish it carries the host's reason (`decoder-missing`
|
|
418
|
+
* when there is no usable ffmpeg, `phone` on a phone call whose session factory still asked). Logged once per join when
|
|
419
|
+
* an avatar was asked for.
|
|
420
|
+
*/
|
|
421
|
+
avatarStatusFor(session, avatarVideo, botName) {
|
|
422
|
+
const status = session.AvatarStatus;
|
|
423
|
+
if (!status?.Requested) {
|
|
424
|
+
return status;
|
|
425
|
+
}
|
|
426
|
+
const resolved = !status.Granted && status.Reason === 'bridged' && avatarVideo.Supported === false ? { ...status, Reason: avatarVideo.Reason } : status;
|
|
427
|
+
const detail = avatarVideo.Supported === false && avatarVideo.Detail ? ` (${avatarVideo.Detail})` : '';
|
|
428
|
+
LogStatus(`[LiveKitAgentRoomCoordinator] ${botName}'s avatar: ${resolved.Granted ? 'on' : `audio only, ${resolved.Reason ?? 'bridged'}${detail}`}`);
|
|
429
|
+
return resolved;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Mints the bot's join token with its attributes: `mj.agentWatches` when the agent watches, so the room offers people
|
|
433
|
+
* the choice from the moment the bot joins, and `mj.agentAvatar` when the agent asked for an avatar. Minted once the
|
|
434
|
+
* model session is open; when it fails, the start closes that session (see {@link StartAgentRoomSession}).
|
|
435
|
+
*/
|
|
436
|
+
async mintBotToken(roomName, botIdentity, botName, attributes) {
|
|
437
|
+
return this.tokenService.MintBotToken(roomName, botIdentity, botName, Object.keys(attributes).length > 0 ? attributes : undefined);
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Closes the model session of a start that failed before the bridge engine took it: the bot's token could not be minted,
|
|
441
|
+
* or the bridge did not start (its row could not be saved, the driver could not connect). The failure is recorded on the
|
|
442
|
+
* session's co-agent run first ({@link FailedStartRecorder}), since the close alone would finalize that run as completed.
|
|
443
|
+
* Neither step throws: a failure is logged, so the caller sees why the start failed and the session is still closed.
|
|
444
|
+
*/
|
|
445
|
+
async closeModelSessionOfFailedStart(session, startError) {
|
|
446
|
+
try {
|
|
447
|
+
await this.failedStartRecorder?.(session, startError instanceof Error ? startError.message : String(startError));
|
|
448
|
+
}
|
|
449
|
+
catch (err) {
|
|
450
|
+
LogError(`[LiveKitAgentRoomCoordinator] recording a failed start on the agent's run failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
451
|
+
}
|
|
452
|
+
try {
|
|
453
|
+
await session.Close();
|
|
454
|
+
}
|
|
455
|
+
catch (err) {
|
|
456
|
+
LogError(`[LiveKitAgentRoomCoordinator] closing the model session of a failed start failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/** Installs the engine's turn-taking tool handler on the model session, when the session has one (a turn-based model in a room). */
|
|
460
|
+
bindTurnTools(session, handler, botName, isFullDuplex) {
|
|
461
|
+
if (!handler) {
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
// Full-duplex models never get turn-taking tools; do not bind turn-taking handlers to them
|
|
465
|
+
if (isFullDuplex) {
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
if (!this.turnToolBinder) {
|
|
469
|
+
LogError(`[LiveKitAgentRoomCoordinator] ${botName} has turn-taking tools but no turn-tool binder is set (SetTurnToolBinder); ` +
|
|
470
|
+
'its i_am_addressed / yield_turn calls will not execute.');
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
this.turnToolBinder(session, handler);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Resolves whether the model with the given ID is full duplex from model metadata and static driver capabilities.
|
|
477
|
+
*/
|
|
478
|
+
resolveIsModelFullDuplexFromId(modelId) {
|
|
479
|
+
try {
|
|
480
|
+
const model = (AIEngine.Instance.Models ?? []).find(m => UUIDsEqual(m.ID, modelId));
|
|
481
|
+
if (!model) {
|
|
482
|
+
return undefined;
|
|
483
|
+
}
|
|
484
|
+
const vendors = (AIEngine.Instance.ModelVendorsByModelID?.get(NormalizeUUID(model.ID)) ??
|
|
485
|
+
(AIEngine.Instance.ModelVendors ?? []).filter(mv => UUIDsEqual(mv.ModelID, model.ID)))
|
|
486
|
+
.filter(v => v.DriverClass != null && (v.Status === undefined || v.Status === 'Active'))
|
|
487
|
+
.sort((a, b) => (b.Priority ?? 0) - (a.Priority ?? 0));
|
|
488
|
+
const primaryVendor = vendors[0];
|
|
489
|
+
const effective = AIEngine.Instance.GetEffectiveModelConfiguration(model.ID, primaryVendor?.ID);
|
|
490
|
+
const staticCaps = GetDriverStaticCapabilities(primaryVendor?.DriverClass);
|
|
491
|
+
return ResolveIsModelFullDuplex(effective ?? model.ModelConfigurationObject, staticCaps);
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
LogError(`[LiveKitAgentRoomCoordinator] resolveIsModelFullDuplexFromId failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
495
|
+
return undefined;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
171
498
|
/** Appends an agent to a room's roster (creating the room's list on first join). */
|
|
172
499
|
addToRoster(roomKey, entry) {
|
|
173
500
|
const roster = this.roomRosters.get(roomKey);
|
|
@@ -194,17 +521,13 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
194
521
|
return;
|
|
195
522
|
}
|
|
196
523
|
}
|
|
197
|
-
/** The default native room-client wrapper specifier — the @livekit/rtc-node package this repo ships. */
|
|
198
|
-
static { this.DEFAULT_NATIVE_MODULE = '@memberjunction/ai-bridge-livekit-native'; }
|
|
199
524
|
/**
|
|
200
|
-
* Resolves the native LiveKit room-client module specifier for the bridge session
|
|
201
|
-
*
|
|
202
|
-
*
|
|
525
|
+
* Resolves the native LiveKit room-client module specifier for the bridge session (see
|
|
526
|
+
* {@link ResolveLiveKitNativeModuleSpecifier}: the test override, else `LIVEKIT_NATIVE_MODULE`, else the default
|
|
527
|
+
* `@memberjunction/ai-bridge-livekit-native`). Overridable in tests via {@link SetNativeModuleSpecifier}.
|
|
203
528
|
*/
|
|
204
529
|
resolveNativeModuleSpecifier() {
|
|
205
|
-
return (this.nativeModuleSpecifierOverride
|
|
206
|
-
process.env.LIVEKIT_NATIVE_MODULE ??
|
|
207
|
-
LiveKitAgentRoomCoordinator.DEFAULT_NATIVE_MODULE);
|
|
530
|
+
return ResolveLiveKitNativeModuleSpecifier(this.nativeModuleSpecifierOverride);
|
|
208
531
|
}
|
|
209
532
|
/**
|
|
210
533
|
* Overrides the native room-client module specifier (primarily for unit testing — production resolves it
|
|
@@ -256,5 +579,26 @@ export class LiveKitAgentRoomCoordinator extends BaseSingleton {
|
|
|
256
579
|
await Promise.all(bridgeIDs.map((id) => this.StopAgentRoomSession(id, reason, contextUser, provider)));
|
|
257
580
|
return bridgeIDs.length;
|
|
258
581
|
}
|
|
582
|
+
/**
|
|
583
|
+
* Looks up the room name associated with a session bridge ID if present in the coordinator's active rosters.
|
|
584
|
+
*
|
|
585
|
+
* @param sessionBridgeID The `MJ: AI Agent Session Bridges` row id.
|
|
586
|
+
* @returns The room name, or `undefined` if not tracked in the active rosters.
|
|
587
|
+
*/
|
|
588
|
+
GetRoomForBridge(sessionBridgeID) {
|
|
589
|
+
for (const [roomKey, roster] of this.roomRosters) {
|
|
590
|
+
if (roster.some((e) => e.SessionBridgeID === sessionBridgeID)) {
|
|
591
|
+
return roomKey;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
return undefined;
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Returns the agent sessions currently active in the given room.
|
|
598
|
+
*/
|
|
599
|
+
GetAgentsInRoom(roomName) {
|
|
600
|
+
const roomKey = roomName.trim().toLowerCase();
|
|
601
|
+
return this.roomRosters.get(roomKey) ?? [];
|
|
602
|
+
}
|
|
259
603
|
}
|
|
260
604
|
//# sourceMappingURL=livekit-agent-room-coordinator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"livekit-agent-room-coordinator.js","sourceRoot":"","sources":["../src/livekit-agent-room-coordinator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"livekit-agent-room-coordinator.js","sourceRoot":"","sources":["../src/livekit-agent-room-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,13 @@ export declare class LiveKitEgressService {
|
|
|
76
76
|
* @returns The active recordings.
|
|
77
77
|
*/
|
|
78
78
|
ListActiveRecordings(roomName: string): Promise<RecordingInfo[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Looks up the room name for an egress id.
|
|
81
|
+
*
|
|
82
|
+
* @param egressId The egress id to query.
|
|
83
|
+
* @returns The room name, or `undefined` if not found.
|
|
84
|
+
*/
|
|
85
|
+
GetRoomForEgress(egressId: string): Promise<string | undefined>;
|
|
79
86
|
/** Maps an SDK `EgressInfo` to the normalized {@link RecordingInfo}. */
|
|
80
87
|
private toRecordingInfo;
|
|
81
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"livekit-egress-service.d.ts","sourceRoot":"","sources":["../src/livekit-egress-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAuD,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAExF,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mGAAmG;AACnG,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;AAE5G,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qEAAqE;AACrE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAE1C;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAM5E;;;;;OAKG;IACU,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAOrF;;;;;OAKG;IACU,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKpE;;;;;OAKG;IACU,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK7E,wEAAwE;IACxE,OAAO,CAAC,eAAe;CAuBxB"}
|
|
1
|
+
{"version":3,"file":"livekit-egress-service.d.ts","sourceRoot":"","sources":["../src/livekit-egress-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAuD,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAExF,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mGAAmG;AACnG,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;AAE5G,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qEAAqE;AACrE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAE1C;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAM5E;;;;;OAKG;IACU,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAOrF;;;;;OAKG;IACU,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKpE;;;;;OAKG;IACU,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK7E;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAM5E,wEAAwE;IACxE,OAAO,CAAC,eAAe;CAuBxB"}
|