@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.
Files changed (82) hide show
  1. package/README.md +85 -0
  2. package/dist/index.d.ts +18 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +18 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/livekit-agent-room-coordinator.d.ts +220 -13
  7. package/dist/livekit-agent-room-coordinator.d.ts.map +1 -1
  8. package/dist/livekit-agent-room-coordinator.js +409 -65
  9. package/dist/livekit-agent-room-coordinator.js.map +1 -1
  10. package/dist/livekit-egress-service.d.ts +7 -0
  11. package/dist/livekit-egress-service.d.ts.map +1 -1
  12. package/dist/livekit-egress-service.js +11 -0
  13. package/dist/livekit-egress-service.js.map +1 -1
  14. package/dist/livekit-native-module.d.ts +18 -0
  15. package/dist/livekit-native-module.d.ts.map +1 -0
  16. package/dist/livekit-native-module.js +27 -0
  17. package/dist/livekit-native-module.js.map +1 -0
  18. package/dist/livekit-participant-service.d.ts +47 -0
  19. package/dist/livekit-participant-service.d.ts.map +1 -0
  20. package/dist/livekit-participant-service.js +64 -0
  21. package/dist/livekit-participant-service.js.map +1 -0
  22. package/dist/livekit-sip-service.d.ts +141 -0
  23. package/dist/livekit-sip-service.d.ts.map +1 -0
  24. package/dist/livekit-sip-service.js +169 -0
  25. package/dist/livekit-sip-service.js.map +1 -0
  26. package/dist/livekit-token-service.d.ts +26 -5
  27. package/dist/livekit-token-service.d.ts.map +1 -1
  28. package/dist/livekit-token-service.js +22 -7
  29. package/dist/livekit-token-service.js.map +1 -1
  30. package/dist/livekit-webhook.d.ts +65 -0
  31. package/dist/livekit-webhook.d.ts.map +1 -0
  32. package/dist/livekit-webhook.js +65 -0
  33. package/dist/livekit-webhook.js.map +1 -0
  34. package/dist/meeting-dial-in-service.d.ts +83 -0
  35. package/dist/meeting-dial-in-service.d.ts.map +1 -0
  36. package/dist/meeting-dial-in-service.js +202 -0
  37. package/dist/meeting-dial-in-service.js.map +1 -0
  38. package/dist/room-audio/audio-decoder.d.ts +40 -0
  39. package/dist/room-audio/audio-decoder.d.ts.map +1 -0
  40. package/dist/room-audio/audio-decoder.js +205 -0
  41. package/dist/room-audio/audio-decoder.js.map +1 -0
  42. package/dist/room-audio/comfort-tone.d.ts +23 -0
  43. package/dist/room-audio/comfort-tone.d.ts.map +1 -0
  44. package/dist/room-audio/comfort-tone.js +70 -0
  45. package/dist/room-audio/comfort-tone.js.map +1 -0
  46. package/dist/room-audio/pcm-frame-pump.d.ts +134 -0
  47. package/dist/room-audio/pcm-frame-pump.d.ts.map +1 -0
  48. package/dist/room-audio/pcm-frame-pump.js +253 -0
  49. package/dist/room-audio/pcm-frame-pump.js.map +1 -0
  50. package/dist/room-audio/room-audio-decode-cache.d.ts +37 -0
  51. package/dist/room-audio/room-audio-decode-cache.d.ts.map +1 -0
  52. package/dist/room-audio/room-audio-decode-cache.js +75 -0
  53. package/dist/room-audio/room-audio-decode-cache.js.map +1 -0
  54. package/dist/room-audio/room-audio-player.d.ts +178 -0
  55. package/dist/room-audio/room-audio-player.d.ts.map +1 -0
  56. package/dist/room-audio/room-audio-player.js +404 -0
  57. package/dist/room-audio/room-audio-player.js.map +1 -0
  58. package/dist/room-audio/room-audio-sources.d.ts +47 -0
  59. package/dist/room-audio/room-audio-sources.d.ts.map +1 -0
  60. package/dist/room-audio/room-audio-sources.js +116 -0
  61. package/dist/room-audio/room-audio-sources.js.map +1 -0
  62. package/dist/room-audio/room-speech-synthesizer.d.ts +55 -0
  63. package/dist/room-audio/room-speech-synthesizer.d.ts.map +1 -0
  64. package/dist/room-audio/room-speech-synthesizer.js +56 -0
  65. package/dist/room-audio/room-speech-synthesizer.js.map +1 -0
  66. package/dist/room-authorization.d.ts +58 -0
  67. package/dist/room-authorization.d.ts.map +1 -0
  68. package/dist/room-authorization.js +212 -0
  69. package/dist/room-authorization.js.map +1 -0
  70. package/dist/room-handoff/handoff-offer-registry.d.ts +147 -0
  71. package/dist/room-handoff/handoff-offer-registry.d.ts.map +1 -0
  72. package/dist/room-handoff/handoff-offer-registry.js +548 -0
  73. package/dist/room-handoff/handoff-offer-registry.js.map +1 -0
  74. package/dist/room-handoff/handoff-types.d.ts +172 -0
  75. package/dist/room-handoff/handoff-types.d.ts.map +1 -0
  76. package/dist/room-handoff/handoff-types.js +16 -0
  77. package/dist/room-handoff/handoff-types.js.map +1 -0
  78. package/dist/room-handoff/room-handoff-engine.d.ts +149 -0
  79. package/dist/room-handoff/room-handoff-engine.d.ts.map +1 -0
  80. package/dist/room-handoff/room-handoff-engine.js +563 -0
  81. package/dist/room-handoff/room-handoff-engine.js.map +1 -0
  82. 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. mints the agent bot's scoped LiveKit token ({@link LiveKitTokenService}),
5
- * 2. opens the realtime model session via an injectable {@link RealtimeSessionFactory} seam, and
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 { AlwaysAddressedMatcher, RegexAddressedMatcher } from '@memberjunction/ai-bridge-base';
18
- import { AIBridgeEngine } from '@memberjunction/ai-bridge-server';
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: mints the bot token, opens the realtime session, and
79
- * bridges it into the room.
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 or the session factory is unbound.
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
- const botIdentity = `agent-${params.AgentSessionID}`;
94
- const botToken = await this.tokenService.MintBotToken(params.RoomName, botIdentity, botName);
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 session = await this.sessionFactory({
110
- AgentID: params.AgentID,
111
- AgentName: params.AgentName,
112
- TargetAgentID: params.TargetAgentID,
113
- RealtimeModelID: params.RealtimeModelID,
114
- RealtimeVoice: params.RealtimeVoice,
115
- RoomName: params.RoomName,
116
- ContextUser: params.ContextUser,
117
- MetadataProvider: params.MetadataProvider,
118
- // So the co-agent observability run groups under THIS agent session (parity with native chat).
119
- AgentSessionID: params.AgentSessionID,
120
- MeetingMode: isMeeting || undefined,
121
- SelfNames: isMeeting ? selfNames : undefined,
122
- });
123
- const active = await this.bridgeOps.StartBridgeSession({
124
- AgentSessionID: params.AgentSessionID,
125
- AgentID: params.AgentID,
126
- Provider: provider,
127
- RealtimeSession: session,
128
- Address: botToken.ServerUrl,
129
- JoinMethod: 'OnDemand',
130
- TurnMode: params.TurnMode ?? 'Passive',
131
- // Meeting: gate speech to ADDRESSED turns (RegexAddressedMatcher on the agent's names) AND tell the
132
- // engine the model's auto-response is off so the bridge becomes the sole trigger. Solo 1:1: respond to
133
- // ALL the user's speech (AlwaysAddressedMatcher) with the model's own auto-response — Passive's
134
- // name-match would otherwise leave a single agent silent unless you said its name each turn.
135
- TurnMatcher: isMeeting ? new RegexAddressedMatcher(selfNames) : new AlwaysAddressedMatcher(),
136
- DisableAutoResponse: isMeeting || undefined,
137
- // Roster info for the room turn moderator (the LLM router, when one is wired via SetTurnModerator):
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
- NativeModuleSpecifier: this.resolveNativeModuleSpecifier(),
153
- },
154
- ContextUser: params.ContextUser,
155
- MetadataProvider: params.MetadataProvider,
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. Prefers the
201
- * `LIVEKIT_NATIVE_MODULE` env override (e.g. a deployment's custom-sample-rate wrapper), else the default
202
- * {@link DEFAULT_NATIVE_MODULE}. Overridable in tests via {@link SetNativeModuleSpecifier}.
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"}