@memberjunction/ai-agents 6.2.0-edge.3 → 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 (104) hide show
  1. package/README.md +6 -0
  2. package/dist/AgentRunner.d.ts +49 -2
  3. package/dist/AgentRunner.d.ts.map +1 -1
  4. package/dist/AgentRunner.js +114 -21
  5. package/dist/AgentRunner.js.map +1 -1
  6. package/dist/ConversationCompactionManager.d.ts +2 -0
  7. package/dist/ConversationCompactionManager.d.ts.map +1 -1
  8. package/dist/ConversationCompactionManager.js +2 -2
  9. package/dist/ConversationCompactionManager.js.map +1 -1
  10. package/dist/ConversationToolManager.d.ts +13 -2
  11. package/dist/ConversationToolManager.d.ts.map +1 -1
  12. package/dist/ConversationToolManager.js +19 -3
  13. package/dist/ConversationToolManager.js.map +1 -1
  14. package/dist/KnowledgeAgent.d.ts.map +1 -1
  15. package/dist/KnowledgeAgent.js +6 -1
  16. package/dist/KnowledgeAgent.js.map +1 -1
  17. package/dist/MJAIAgentRequestEntityServer.d.ts +6 -0
  18. package/dist/MJAIAgentRequestEntityServer.d.ts.map +1 -1
  19. package/dist/MJAIAgentRequestEntityServer.js +26 -1
  20. package/dist/MJAIAgentRequestEntityServer.js.map +1 -1
  21. package/dist/agent-run-watchdog.d.ts +65 -5
  22. package/dist/agent-run-watchdog.d.ts.map +1 -1
  23. package/dist/agent-run-watchdog.js +143 -28
  24. package/dist/agent-run-watchdog.js.map +1 -1
  25. package/dist/agent-types/loop-agent-prompt-params.d.ts +7 -0
  26. package/dist/agent-types/loop-agent-prompt-params.d.ts.map +1 -1
  27. package/dist/agent-types/loop-agent-prompt-params.js +1 -0
  28. package/dist/agent-types/loop-agent-prompt-params.js.map +1 -1
  29. package/dist/artifact-tools/SearchResultSetToolLibrary.js +4 -4
  30. package/dist/artifact-tools/SearchResultSetToolLibrary.js.map +1 -1
  31. package/dist/base-agent.d.ts +275 -18
  32. package/dist/base-agent.d.ts.map +1 -1
  33. package/dist/base-agent.js +761 -216
  34. package/dist/base-agent.js.map +1 -1
  35. package/dist/client-tool-results.d.ts +45 -0
  36. package/dist/client-tool-results.d.ts.map +1 -0
  37. package/dist/client-tool-results.js +94 -0
  38. package/dist/client-tool-results.js.map +1 -0
  39. package/dist/index.d.ts +5 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +5 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/prior-turn-tool-result-cache.d.ts +31 -12
  44. package/dist/prior-turn-tool-result-cache.d.ts.map +1 -1
  45. package/dist/prior-turn-tool-result-cache.js +59 -16
  46. package/dist/prior-turn-tool-result-cache.js.map +1 -1
  47. package/dist/realtime/bridge-realtime-session-factory.d.ts +44 -2
  48. package/dist/realtime/bridge-realtime-session-factory.d.ts.map +1 -1
  49. package/dist/realtime/bridge-realtime-session-factory.js +68 -20
  50. package/dist/realtime/bridge-realtime-session-factory.js.map +1 -1
  51. package/dist/realtime/bridge-realtime-usage-recorder.d.ts +81 -0
  52. package/dist/realtime/bridge-realtime-usage-recorder.d.ts.map +1 -0
  53. package/dist/realtime/bridge-realtime-usage-recorder.js +194 -0
  54. package/dist/realtime/bridge-realtime-usage-recorder.js.map +1 -0
  55. package/dist/realtime/client-only-channel-server.d.ts +83 -0
  56. package/dist/realtime/client-only-channel-server.d.ts.map +1 -0
  57. package/dist/realtime/client-only-channel-server.js +107 -0
  58. package/dist/realtime/client-only-channel-server.js.map +1 -0
  59. package/dist/realtime/identity-verification-channel-server.d.ts +50 -0
  60. package/dist/realtime/identity-verification-channel-server.d.ts.map +1 -0
  61. package/dist/realtime/identity-verification-channel-server.js +66 -0
  62. package/dist/realtime/identity-verification-channel-server.js.map +1 -0
  63. package/dist/realtime/interactive-component-channel-server.d.ts +39 -0
  64. package/dist/realtime/interactive-component-channel-server.d.ts.map +1 -0
  65. package/dist/realtime/interactive-component-channel-server.js +55 -0
  66. package/dist/realtime/interactive-component-channel-server.js.map +1 -0
  67. package/dist/realtime/realtime-avatar-resolution.d.ts +194 -0
  68. package/dist/realtime/realtime-avatar-resolution.d.ts.map +1 -0
  69. package/dist/realtime/realtime-avatar-resolution.js +208 -0
  70. package/dist/realtime/realtime-avatar-resolution.js.map +1 -0
  71. package/dist/realtime/realtime-channel-policy.d.ts +81 -0
  72. package/dist/realtime/realtime-channel-policy.d.ts.map +1 -0
  73. package/dist/realtime/realtime-channel-policy.js +91 -0
  74. package/dist/realtime/realtime-channel-policy.js.map +1 -0
  75. package/dist/realtime/realtime-channel-server-host.d.ts +14 -0
  76. package/dist/realtime/realtime-channel-server-host.d.ts.map +1 -1
  77. package/dist/realtime/realtime-channel-server-host.js +35 -0
  78. package/dist/realtime/realtime-channel-server-host.js.map +1 -1
  79. package/dist/realtime/realtime-client-session-service.d.ts +430 -30
  80. package/dist/realtime/realtime-client-session-service.d.ts.map +1 -1
  81. package/dist/realtime/realtime-client-session-service.js +766 -111
  82. package/dist/realtime/realtime-client-session-service.js.map +1 -1
  83. package/dist/realtime/realtime-coagent-config.d.ts +94 -15
  84. package/dist/realtime/realtime-coagent-config.d.ts.map +1 -1
  85. package/dist/realtime/realtime-coagent-config.js +109 -4
  86. package/dist/realtime/realtime-coagent-config.js.map +1 -1
  87. package/dist/realtime/realtime-recording-store.d.ts +136 -16
  88. package/dist/realtime/realtime-recording-store.d.ts.map +1 -1
  89. package/dist/realtime/realtime-recording-store.js +505 -39
  90. package/dist/realtime/realtime-recording-store.js.map +1 -1
  91. package/dist/realtime/realtime-session-runner.js +4 -4
  92. package/dist/realtime/realtime-session-runner.js.map +1 -1
  93. package/dist/realtime/realtime-vendor-resolution.d.ts +9 -0
  94. package/dist/realtime/realtime-vendor-resolution.d.ts.map +1 -1
  95. package/dist/realtime/realtime-vendor-resolution.js +16 -5
  96. package/dist/realtime/realtime-vendor-resolution.js.map +1 -1
  97. package/dist/realtime/realtime-video-output-gate.d.ts +83 -0
  98. package/dist/realtime/realtime-video-output-gate.d.ts.map +1 -0
  99. package/dist/realtime/realtime-video-output-gate.js +79 -0
  100. package/dist/realtime/realtime-video-output-gate.js.map +1 -0
  101. package/dist/tool-result-format.d.ts +14 -0
  102. package/dist/tool-result-format.d.ts.map +1 -1
  103. package/dist/tool-result-format.js.map +1 -1
  104. package/package.json +19 -19
@@ -0,0 +1,45 @@
1
+ import type { AgentChatMessage, ClientToolResultSummary } from '@memberjunction/ai-core-plus';
2
+ import type { ChatMessageContent, ChatMessageContentBlock } from '@memberjunction/ai';
3
+ /** Expiration for a client tool result message without images: it is removed after 3 turns. */
4
+ export declare const CLIENT_TOOL_RESULT_EXPIRATION: {
5
+ readonly expirationTurns: 3;
6
+ readonly expirationMode: "Remove";
7
+ };
8
+ /** Expiration for a client tool result message with images: it is removed after 2 turns, so screenshots leave the context soon. */
9
+ export declare const CLIENT_TOOL_IMAGE_RESULT_EXPIRATION: {
10
+ readonly expirationTurns: 2;
11
+ readonly expirationMode: "Remove";
12
+ };
13
+ /** The token estimate for one image block: a high estimate of what vision models charge for a 1280×800 image. */
14
+ export declare const IMAGE_BLOCK_TOKEN_ESTIMATE = 1600;
15
+ /** A content block type that carries media: every type other than text and tool results. */
16
+ type MediaBlockType = Exclude<ChatMessageContentBlock['type'], 'text' | 'tool_result'>;
17
+ /**
18
+ * The character cap for one client tool result from the agent type prompt params.
19
+ * -1 means no cap. Anything that is not a positive integer means no cap.
20
+ */
21
+ export declare function ResolveClientToolResultMaxChars(promptParams: Record<string, unknown> | undefined): number;
22
+ /**
23
+ * Markdown summary of client tool results for the conversation. Each successful result is
24
+ * included in full, or cut to `maxChars` with a note that says how much was cut. A `maxChars`
25
+ * that is not a positive integer, such as -1 or 0, means no cap.
26
+ */
27
+ export declare function FormatClientToolResults(results: ClientToolResultSummary[], maxChars: number): string;
28
+ /**
29
+ * The conversation message for client tool results. Images come first as `image_url` blocks and
30
+ * the markdown summary follows as a text block, so a vision model sees both. Only successful
31
+ * results contribute images, and each image block carries its tool's name as `fileName`.
32
+ * Without images the content is the plain markdown string.
33
+ */
34
+ export declare function BuildClientToolResultMessage(results: ClientToolResultSummary[], turnAdded: number, maxChars: number): AgentChatMessage;
35
+ /** Whether a content block carries an image, audio, video or file rather than text or a tool result. */
36
+ export declare function IsMediaBlock(block: ChatMessageContentBlock): block is ChatMessageContentBlock & {
37
+ type: MediaBlockType;
38
+ };
39
+ /**
40
+ * The text of a message with every media block replaced by a stub that names its kind, such as
41
+ * `[image omitted]` or `[file omitted]`. Text and tool result blocks keep their content.
42
+ */
43
+ export declare function ReplaceMediaBlocksWithStubs(content: ChatMessageContent): string;
44
+ export {};
45
+ //# sourceMappingURL=client-tool-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-tool-results.d.ts","sourceRoot":"","sources":["../src/client-tool-results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAuB,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACnH,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,+FAA+F;AAC/F,eAAO,MAAM,6BAA6B;;;CAA4D,CAAC;AAEvG,mIAAmI;AACnI,eAAO,MAAM,mCAAmC;;;CAA4D,CAAC;AAE7G,iHAAiH;AACjH,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,4FAA4F;AAC5F,KAAK,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC;AAUvF;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAGzG;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBpG;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,uBAAuB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAWtI;AAED,wGAAwG;AACxG,wBAAgB,YAAY,CAAC,KAAK,EAAE,uBAAuB,GAAG,KAAK,IAAI,uBAAuB,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAExH;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAG/E"}
@@ -0,0 +1,94 @@
1
+ /** Expiration for a client tool result message without images: it is removed after 3 turns. */
2
+ export const CLIENT_TOOL_RESULT_EXPIRATION = { expirationTurns: 3, expirationMode: 'Remove' };
3
+ /** Expiration for a client tool result message with images: it is removed after 2 turns, so screenshots leave the context soon. */
4
+ export const CLIENT_TOOL_IMAGE_RESULT_EXPIRATION = { expirationTurns: 2, expirationMode: 'Remove' };
5
+ /** The token estimate for one image block: a high estimate of what vision models charge for a 1280×800 image. */
6
+ export const IMAGE_BLOCK_TOKEN_ESTIMATE = 1600;
7
+ /** The stub that replaces each kind of media block in text. */
8
+ const MEDIA_BLOCK_STUBS = {
9
+ image_url: '[image omitted]',
10
+ file_url: '[file omitted]',
11
+ audio_url: '[audio omitted]',
12
+ video_url: '[video omitted]',
13
+ };
14
+ /**
15
+ * The character cap for one client tool result from the agent type prompt params.
16
+ * -1 means no cap. Anything that is not a positive integer means no cap.
17
+ */
18
+ export function ResolveClientToolResultMaxChars(promptParams) {
19
+ const raw = promptParams?.['clientToolResultMaxChars'];
20
+ return typeof raw === 'number' && Number.isInteger(raw) && raw > 0 ? raw : -1;
21
+ }
22
+ /**
23
+ * Markdown summary of client tool results for the conversation. Each successful result is
24
+ * included in full, or cut to `maxChars` with a note that says how much was cut. A `maxChars`
25
+ * that is not a positive integer, such as -1 or 0, means no cap.
26
+ */
27
+ export function FormatClientToolResults(results, maxChars) {
28
+ const failedCount = results.filter(r => !r.Success).length;
29
+ const header = failedCount > 0
30
+ ? `${failedCount} of ${results.length} client tool(s) failed:`
31
+ : 'Client tool results:';
32
+ const lines = results.map(r => {
33
+ const icon = r.Success ? '✓' : '✗';
34
+ let line = `${icon} **${r.ToolName}**: ${r.Success ? 'succeeded' : 'failed'}`;
35
+ if (r.ErrorMessage)
36
+ line += ` — ${r.ErrorMessage}`;
37
+ if (r.Success && r.Result != null) {
38
+ line += `\n Result: ${capResult(r.Result, maxChars)}`;
39
+ }
40
+ return line;
41
+ });
42
+ return `${header}\n${lines.join('\n')}`;
43
+ }
44
+ /**
45
+ * The conversation message for client tool results. Images come first as `image_url` blocks and
46
+ * the markdown summary follows as a text block, so a vision model sees both. Only successful
47
+ * results contribute images, and each image block carries its tool's name as `fileName`.
48
+ * Without images the content is the plain markdown string.
49
+ */
50
+ export function BuildClientToolResultMessage(results, turnAdded, maxChars) {
51
+ const text = FormatClientToolResults(results, maxChars);
52
+ const imageBlocks = results.flatMap(r => (r.Success && r.Media) ? r.Media.map(m => toImageBlock(m, r.ToolName)) : []);
53
+ if (imageBlocks.length === 0) {
54
+ return { role: 'user', content: text, metadata: { turnAdded, messageType: 'client-tool-result', ...CLIENT_TOOL_RESULT_EXPIRATION } };
55
+ }
56
+ return {
57
+ role: 'user',
58
+ content: [...imageBlocks, { type: 'text', content: text }],
59
+ metadata: { turnAdded, messageType: 'client-tool-result', ...CLIENT_TOOL_IMAGE_RESULT_EXPIRATION },
60
+ };
61
+ }
62
+ /** Whether a content block carries an image, audio, video or file rather than text or a tool result. */
63
+ export function IsMediaBlock(block) {
64
+ return block.type !== 'text' && block.type !== 'tool_result';
65
+ }
66
+ /**
67
+ * The text of a message with every media block replaced by a stub that names its kind, such as
68
+ * `[image omitted]` or `[file omitted]`. Text and tool result blocks keep their content.
69
+ */
70
+ export function ReplaceMediaBlocksWithStubs(content) {
71
+ if (typeof content === 'string')
72
+ return content;
73
+ return content.map(block => IsMediaBlock(block) ? MEDIA_BLOCK_STUBS[block.type] : block.content).join('\n');
74
+ }
75
+ /** An `image_url` block for one client tool image, with the tool's name as its file name. */
76
+ function toImageBlock(media, toolName) {
77
+ return { type: 'image_url', content: `data:${media.MimeType};base64,${media.Base64}`, mimeType: media.MimeType, fileName: toolName };
78
+ }
79
+ /**
80
+ * The result as text. When `maxChars` is a positive integer and the text is longer, the text is
81
+ * cut to `maxChars` and a note says how much was cut. The cut never splits a surrogate pair.
82
+ */
83
+ function capResult(result, maxChars) {
84
+ const text = typeof result === 'string' ? result : JSON.stringify(result);
85
+ if (!Number.isInteger(maxChars) || maxChars <= 0 || text.length <= maxChars)
86
+ return text;
87
+ const keep = isHighSurrogate(text.charCodeAt(maxChars - 1)) ? maxChars - 1 : maxChars;
88
+ return `${text.slice(0, keep)} [truncated ${text.length - keep} of ${text.length} chars]`;
89
+ }
90
+ /** Whether a UTF-16 code unit is the first half of a surrogate pair (U+D800 to U+DBFF). */
91
+ function isHighSurrogate(codeUnit) {
92
+ return codeUnit >= 0xd800 && codeUnit <= 0xdbff;
93
+ }
94
+ //# sourceMappingURL=client-tool-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-tool-results.js","sourceRoot":"","sources":["../src/client-tool-results.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -71,13 +71,18 @@ export { RealtimeToolBroker, RealtimeToolBrokerDeps, ExecutedToolCall, Delegated
71
71
  export * from './realtime/realtime-client-session-service.js';
72
72
  export * from './realtime/realtime-coagent-config.js';
73
73
  export * from './realtime/realtime-vendor-resolution.js';
74
+ export * from './realtime/realtime-video-output-gate.js';
74
75
  export * from './realtime/realtime-narration.js';
75
76
  export * from './realtime/realtime-delegation-narrator.js';
76
77
  export * from './realtime/realtime-coagent-resolution.js';
77
78
  export * from './realtime/bridge-host-params.js';
78
79
  export * from './realtime/realtime-channel-server-host.js';
80
+ export * from './realtime/realtime-channel-policy.js';
79
81
  export * from './realtime/whiteboard-channel-server.js';
82
+ export * from './realtime/client-only-channel-server.js';
80
83
  export * from './realtime/client-context-channel-server.js';
84
+ export * from './realtime/identity-verification-channel-server.js';
85
+ export * from './realtime/interactive-component-channel-server.js';
81
86
  export * from './realtime/meeting-controls-state.js';
82
87
  export * from './realtime/meeting-controls-channel-server.js';
83
88
  export * from './realtime/media-channel-server.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -76,13 +76,18 @@ export { RealtimeToolBroker } from './realtime/realtime-tool-broker.js';
76
76
  export * from './realtime/realtime-client-session-service.js';
77
77
  export * from './realtime/realtime-coagent-config.js';
78
78
  export * from './realtime/realtime-vendor-resolution.js';
79
+ export * from './realtime/realtime-video-output-gate.js';
79
80
  export * from './realtime/realtime-narration.js';
80
81
  export * from './realtime/realtime-delegation-narrator.js';
81
82
  export * from './realtime/realtime-coagent-resolution.js';
82
83
  export * from './realtime/bridge-host-params.js';
83
84
  export * from './realtime/realtime-channel-server-host.js';
85
+ export * from './realtime/realtime-channel-policy.js';
84
86
  export * from './realtime/whiteboard-channel-server.js';
87
+ export * from './realtime/client-only-channel-server.js';
85
88
  export * from './realtime/client-context-channel-server.js';
89
+ export * from './realtime/identity-verification-channel-server.js';
90
+ export * from './realtime/interactive-component-channel-server.js';
86
91
  export * from './realtime/meeting-controls-state.js';
87
92
  export * from './realtime/meeting-controls-channel-server.js';
88
93
  export * from './realtime/media-channel-server.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,13 @@ import { CarryForwardStepRecord } from './tool-result-format.js';
20
20
  * - Entries are keyed by conversation AND agent, mirroring the DB path's `AgentID`
21
21
  * filter — in a multi-agent conversation, agent B must never inherit agent A's
22
22
  * results labeled "your previous turn".
23
+ * - Entries are also keyed by branch, mirroring the DB path's branch-path filter — a
24
+ * run never inherits results from a run whose reply row is off its path. A branch with
25
+ * no entry yet falls back to the DB path, which can return a trunk run from before the fork.
26
+ * - Entries carry the reply row of the run that stored them. When a save on this server
27
+ * marks that row replaced (`ReplacedAt` set by an in-place rerun of its turn), the entry
28
+ * is no longer served, just as the DB path leaves out runs whose reply row is replaced:
29
+ * a replaced answer's tool results are never carried forward.
23
30
  * - Values are the raw completed-`Tool`-step `OutputData` projections; eligibility is
24
31
  * still decided downstream by `BuildPriorTurnToolResultsMessage` via `toolFamily`,
25
32
  * identical for cached and DB-loaded records.
@@ -38,9 +45,14 @@ import { CarryForwardStepRecord } from './tool-result-format.js';
38
45
  * the TTL bounds the staleness window, and each node self-heals on its next completed
39
46
  * run for that conversation — so the fallback keeps the default single-node deployment
40
47
  * exact while multi-node degrades gracefully rather than paying the queries every turn.
48
+ * The replaced-row rule has the same limit: a replacement saved on another server is not
49
+ * seen here, so this node can still serve that run's entry until it expires or is replaced.
41
50
  */
42
51
  export declare class PriorTurnToolResultCache extends BaseSingleton<PriorTurnToolResultCache> {
43
- /** Protected per the {@link BaseSingleton} contract — obtain via {@link Instance}. */
52
+ /**
53
+ * Protected per the {@link BaseSingleton} contract — obtain via {@link Instance}. Listens for
54
+ * entity saves on this server to learn which conversation details were replaced.
55
+ */
44
56
  protected constructor();
45
57
  /** Process-wide singleton accessor (Global Object Store backed, bundler-duplication safe). */
46
58
  static get Instance(): PriorTurnToolResultCache;
@@ -51,21 +63,28 @@ export declare class PriorTurnToolResultCache extends BaseSingleton<PriorTurnToo
51
63
  * bounding the multi-node staleness window described above.
52
64
  */
53
65
  private cache;
54
- /**
55
- * Cache key: normalized conversation + agent, so agent B never inherits agent A's
56
- * results in a multi-agent conversation. `::` is safe (UUIDs cannot contain it).
57
- */
66
+ /** Normalized ids of conversation details replaced by an in-place rerun, seen on this server. */
67
+ private replacedDetails;
68
+ /** Key: conversation, agent and branch ('trunk' when none), so an entry serves only runs on the branch that stored it. */
58
69
  private static buildKey;
59
70
  /**
60
71
  * Returns the carry-forward records of this agent's most recent settled root run in
61
- * the conversation on this node — `[]` means "settled with no tool results" (a
62
- * valid, query-skipping answer); `undefined` means "not known here, ask the
63
- * database".
72
+ * the conversation on this node, on one branch path (`branchId` null is the trunk) —
73
+ * `[]` means "settled with no tool results" (a valid, query-skipping answer);
74
+ * `undefined` means "not known here, ask the database". An entry whose run's reply row
75
+ * was replaced is dropped and reads as `undefined`.
76
+ */
77
+ Get(conversationId: string, agentId: string, branchId: string | null): CarryForwardStepRecord[] | undefined;
78
+ /**
79
+ * Records a settled root run's carry-forward projections (empty array included) for one branch path.
80
+ * `sourceDetailId` is the run's reply row; the entry is not served once that row is replaced.
64
81
  */
65
- Get(conversationId: string, agentId: string): CarryForwardStepRecord[] | undefined;
66
- /** Records a settled root run's carry-forward projections (empty array included). */
67
- Set(conversationId: string, agentId: string, steps: CarryForwardStepRecord[]): void;
68
- /** Drops every entry — test isolation hook. */
82
+ Set(conversationId: string, agentId: string, branchId: string | null, steps: CarryForwardStepRecord[], sourceDetailId?: string | null): void;
83
+ /** Records that an in-place rerun replaced a conversation detail; entries whose run replied with it are no longer served. */
84
+ MarkDetailReplaced(detailId: string): void;
85
+ /** Drops every entry and every replaced-detail mark — test isolation hook. */
69
86
  Clear(): void;
87
+ /** Marks a conversation detail replaced when a save on this server leaves its `ReplacedAt` set. */
88
+ private onGlobalEvent;
70
89
  }
71
90
  //# sourceMappingURL=prior-turn-tool-result-cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prior-turn-tool-result-cache.d.ts","sourceRoot":"","sources":["../src/prior-turn-tool-result-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,wBAAyB,SAAQ,aAAa,CAAC,wBAAwB,CAAC;IACjF,sFAAsF;IACtF,SAAS;IAIT,8FAA8F;IAC9F,WAAkB,QAAQ,IAAI,wBAAwB,CAErD;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAGV;IAEH;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAIvB;;;;;OAKG;IACI,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB,EAAE,GAAG,SAAS;IAIzF,qFAAqF;IAC9E,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAI1F,+CAA+C;IACxC,KAAK,IAAI,IAAI;CAGvB"}
1
+ {"version":3,"file":"prior-turn-tool-result-cache.d.ts","sourceRoot":"","sources":["../src/prior-turn-tool-result-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAkE,MAAM,wBAAwB,CAAC;AACvH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAS9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,wBAAyB,SAAQ,aAAa,CAAC,wBAAwB,CAAC;IACjF;;;OAGG;IACH,SAAS;IAKT,8FAA8F;IAC9F,WAAkB,QAAQ,IAAI,wBAAwB,CAErD;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAGV;IAEH,iGAAiG;IACjG,OAAO,CAAC,eAAe,CAAmD;IAE1E,0HAA0H;IAC1H,OAAO,CAAC,MAAM,CAAC,QAAQ;IAIvB;;;;;;OAMG;IACI,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,EAAE,GAAG,SAAS;IAalH;;;OAGG;IACI,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,cAAc,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IAIzJ,6HAA6H;IACtH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjD,8EAA8E;IACvE,KAAK,IAAI,IAAI;IAKpB,mGAAmG;IACnG,OAAO,CAAC,aAAa;CAUxB"}
@@ -1,4 +1,6 @@
1
- import { BaseSingleton, MJLruCache, NormalizeUUID } from '@memberjunction/global';
1
+ import { BaseEntity } from '@memberjunction/core';
2
+ import { ConversationEngine, MJConversationDetailEntity } from '@memberjunction/core-entities';
3
+ import { BaseSingleton, MJEventType, MJGlobal, MJLruCache, NormalizeUUID } from '@memberjunction/global';
2
4
  /**
3
5
  * Process-wide cache of the most recent settled root run's Tool-step results per
4
6
  * conversation + agent, keeping the prior-turn carry-forward check off the database on
@@ -19,6 +21,13 @@ import { BaseSingleton, MJLruCache, NormalizeUUID } from '@memberjunction/global
19
21
  * - Entries are keyed by conversation AND agent, mirroring the DB path's `AgentID`
20
22
  * filter — in a multi-agent conversation, agent B must never inherit agent A's
21
23
  * results labeled "your previous turn".
24
+ * - Entries are also keyed by branch, mirroring the DB path's branch-path filter — a
25
+ * run never inherits results from a run whose reply row is off its path. A branch with
26
+ * no entry yet falls back to the DB path, which can return a trunk run from before the fork.
27
+ * - Entries carry the reply row of the run that stored them. When a save on this server
28
+ * marks that row replaced (`ReplacedAt` set by an in-place rerun of its turn), the entry
29
+ * is no longer served, just as the DB path leaves out runs whose reply row is replaced:
30
+ * a replaced answer's tool results are never carried forward.
22
31
  * - Values are the raw completed-`Tool`-step `OutputData` projections; eligibility is
23
32
  * still decided downstream by `BuildPriorTurnToolResultsMessage` via `toolFamily`,
24
33
  * identical for cached and DB-loaded records.
@@ -37,9 +46,14 @@ import { BaseSingleton, MJLruCache, NormalizeUUID } from '@memberjunction/global
37
46
  * the TTL bounds the staleness window, and each node self-heals on its next completed
38
47
  * run for that conversation — so the fallback keeps the default single-node deployment
39
48
  * exact while multi-node degrades gracefully rather than paying the queries every turn.
49
+ * The replaced-row rule has the same limit: a replacement saved on another server is not
50
+ * seen here, so this node can still serve that run's entry until it expires or is replaced.
40
51
  */
41
52
  export class PriorTurnToolResultCache extends BaseSingleton {
42
- /** Protected per the {@link BaseSingleton} contract — obtain via {@link Instance}. */
53
+ /**
54
+ * Protected per the {@link BaseSingleton} contract — obtain via {@link Instance}. Listens for
55
+ * entity saves on this server to learn which conversation details were replaced.
56
+ */
43
57
  constructor() {
44
58
  super();
45
59
  /**
@@ -52,34 +66,63 @@ export class PriorTurnToolResultCache extends BaseSingleton {
52
66
  maxSize: 500,
53
67
  ttlMs: 30 * 60 * 1000
54
68
  });
69
+ /** Normalized ids of conversation details replaced by an in-place rerun, seen on this server. */
70
+ this.replacedDetails = new MJLruCache({ maxSize: 5000 });
71
+ MJGlobal.Instance.GetEventListener(false).subscribe(event => this.onGlobalEvent(event));
55
72
  }
56
73
  /** Process-wide singleton accessor (Global Object Store backed, bundler-duplication safe). */
57
74
  static get Instance() {
58
75
  return super.getInstance();
59
76
  }
77
+ /** Key: conversation, agent and branch ('trunk' when none), so an entry serves only runs on the branch that stored it. */
78
+ static buildKey(conversationId, agentId, branchId) {
79
+ return `${NormalizeUUID(conversationId)}::${NormalizeUUID(agentId)}::${branchId ? NormalizeUUID(branchId) : 'trunk'}`;
80
+ }
60
81
  /**
61
- * Cache key: normalized conversation + agent, so agent B never inherits agent A's
62
- * results in a multi-agent conversation. `::` is safe (UUIDs cannot contain it).
82
+ * Returns the carry-forward records of this agent's most recent settled root run in
83
+ * the conversation on this node, on one branch path (`branchId` null is the trunk) —
84
+ * `[]` means "settled with no tool results" (a valid, query-skipping answer);
85
+ * `undefined` means "not known here, ask the database". An entry whose run's reply row
86
+ * was replaced is dropped and reads as `undefined`.
63
87
  */
64
- static buildKey(conversationId, agentId) {
65
- return `${NormalizeUUID(conversationId)}::${NormalizeUUID(agentId)}`;
88
+ Get(conversationId, agentId, branchId) {
89
+ const key = PriorTurnToolResultCache.buildKey(conversationId, agentId, branchId);
90
+ const entry = this.cache.Get(key);
91
+ if (!entry) {
92
+ return undefined;
93
+ }
94
+ if (entry.SourceDetailID && this.replacedDetails.Has(NormalizeUUID(entry.SourceDetailID))) {
95
+ this.cache.Delete(key);
96
+ return undefined;
97
+ }
98
+ return entry.Steps;
66
99
  }
67
100
  /**
68
- * Returns the carry-forward records of this agent's most recent settled root run in
69
- * the conversation on this node — `[]` means "settled with no tool results" (a
70
- * valid, query-skipping answer); `undefined` means "not known here, ask the
71
- * database".
101
+ * Records a settled root run's carry-forward projections (empty array included) for one branch path.
102
+ * `sourceDetailId` is the run's reply row; the entry is not served once that row is replaced.
72
103
  */
73
- Get(conversationId, agentId) {
74
- return this.cache.Get(PriorTurnToolResultCache.buildKey(conversationId, agentId));
104
+ Set(conversationId, agentId, branchId, steps, sourceDetailId = null) {
105
+ this.cache.Set(PriorTurnToolResultCache.buildKey(conversationId, agentId, branchId), { Steps: steps, SourceDetailID: sourceDetailId });
75
106
  }
76
- /** Records a settled root run's carry-forward projections (empty array included). */
77
- Set(conversationId, agentId, steps) {
78
- this.cache.Set(PriorTurnToolResultCache.buildKey(conversationId, agentId), steps);
107
+ /** Records that an in-place rerun replaced a conversation detail; entries whose run replied with it are no longer served. */
108
+ MarkDetailReplaced(detailId) {
109
+ this.replacedDetails.Set(NormalizeUUID(detailId), true);
79
110
  }
80
- /** Drops every entry — test isolation hook. */
111
+ /** Drops every entry and every replaced-detail mark — test isolation hook. */
81
112
  Clear() {
82
113
  this.cache.Clear();
114
+ this.replacedDetails.Clear();
115
+ }
116
+ /** Marks a conversation detail replaced when a save on this server leaves its `ReplacedAt` set. */
117
+ onGlobalEvent(event) {
118
+ if (event.event !== MJEventType.ComponentEvent || event.eventCode !== BaseEntity.BaseEventCode) {
119
+ return;
120
+ }
121
+ const entityEvent = event.args;
122
+ const detail = entityEvent?.baseEntity;
123
+ if (entityEvent?.type === 'save' && detail instanceof MJConversationDetailEntity && ConversationEngine.IsReplacedRow(detail)) {
124
+ this.MarkDetailReplaced(detail.ID);
125
+ }
83
126
  }
84
127
  }
85
128
  //# sourceMappingURL=prior-turn-tool-result-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prior-turn-tool-result-cache.js","sourceRoot":"","sources":["../src/prior-turn-tool-result-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,OAAO,wBAAyB,SAAQ,aAAuC;IACjF,sFAAsF;IACtF;QACI,KAAK,EAAE,CAAC;QAQZ;;;;;WAKG;QACK,UAAK,GAAG,IAAI,UAAU,CAAmC;YAC7D,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;SACxB,CAAC,CAAC;IAhBH,CAAC;IAED,8FAA8F;IACvF,MAAM,KAAK,QAAQ;QACtB,OAAO,KAAK,CAAC,WAAW,EAA4B,CAAC;IACzD,CAAC;IAaD;;;OAGG;IACK,MAAM,CAAC,QAAQ,CAAC,cAAsB,EAAE,OAAe;QAC3D,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAC,cAAsB,EAAE,OAAe;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,qFAAqF;IAC9E,GAAG,CAAC,cAAsB,EAAE,OAAe,EAAE,KAA+B;QAC/E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;IAED,+CAA+C;IACxC,KAAK;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACJ"}
1
+ {"version":3,"file":"prior-turn-tool-result-cache.js","sourceRoot":"","sources":["../src/prior-turn-tool-result-cache.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { IRealtimeSession, ChatMessage, RealtimeVoiceOption, RealtimeToolDefinition, AIAPIKeyResolver } from '@memberjunction/ai';
20
20
  import { IMetadataProvider, UserInfo } from '@memberjunction/core';
21
+ import { RealtimeHostToolsResolver } from './realtime-client-session-service.js';
21
22
  /**
22
23
  * The context a bridge passes to {@link CreateBridgeRealtimeSession}. Structurally compatible with the
23
24
  * LiveKit coordinator's `RealtimeSessionStartContext` (and any future bridge's equivalent) so this factory
@@ -70,6 +71,11 @@ export interface BridgeRealtimeSessionContext {
70
71
  * (see `GetBridgeRealtimeRuntime`).
71
72
  */
72
73
  HostTools?: RealtimeToolDefinition[];
74
+ /**
75
+ * Optional callback that allows the host to resolve host tools dynamically based on
76
+ * the model, vendor, and driver actually resolved for the session, before session opening.
77
+ */
78
+ ResolveHostTools?: RealtimeHostToolsResolver;
73
79
  /** Host-authored instructions appended to the system prompt (e.g. the phone-call and caller framing). */
74
80
  HostFraming?: string;
75
81
  /**
@@ -82,6 +88,17 @@ export interface BridgeRealtimeSessionContext {
82
88
  ConversationMessages?: ChatMessage[];
83
89
  /** The `MJ: Conversations` row the session writes to — stamped on the co-agent observability run. */
84
90
  ConversationID?: string;
91
+ /**
92
+ * `'room'` when the bridge's bot can publish the agent's avatar into the room (the LiveKit coordinator asks its native
93
+ * module first). Flows to the session's avatar request, so the driver may render it. Absent: audio only.
94
+ */
95
+ AvatarDelivery?: 'room';
96
+ /**
97
+ * `true` when the session is a phone call (a carrier call, or a SIP call in a LiveKit room). Flows to
98
+ * `params.data.realtimePhoneCall`: the session then asks the driver for no avatar (the caller sees no video) and
99
+ * reports `phone` as its avatar status.
100
+ */
101
+ PhoneCall?: boolean;
85
102
  }
86
103
  /**
87
104
  * Opens a raw {@link IRealtimeSession} for the agent named in `ctx`. Bind this onto a bridge's
@@ -106,20 +123,45 @@ export declare function CreateBridgeRealtimeSession(ctx: BridgeRealtimeSessionCo
106
123
  * @param provider The metadata provider (required — skipped without it).
107
124
  */
108
125
  export declare function FinalizeBridgeCoAgentRuns(agentSessionID: string, success: boolean, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<void>;
126
+ /**
127
+ * A voice the dev model/voice picker offers: one per persona, or one per voice only the driver declares. Two personas can
128
+ * share a voice `ID` (a voice, and the same voice with a face), so {@link PersonaID} tells them apart. A persona voice also
129
+ * carries the avatar that comes with it and the persona's preview image; a voice only the driver declares carries none of
130
+ * the three.
131
+ */
132
+ export interface RealtimeModelVoiceOption extends RealtimeVoiceOption {
133
+ /** The persona this voice belongs to (`MJ: AI Personas.ID`). Absent for a voice only the driver declares. */
134
+ PersonaID?: string;
135
+ /**
136
+ * The avatar that comes with this voice: the `APIName` of the persona's preset Video binding on the model's vendor,
137
+ * which is what `realtime.video.avatarId` takes. Absent when the persona has no such binding there, or only a custom
138
+ * one (custom avatars are not supported), and on a model that shows no avatar there (its Video/Output row turns
139
+ * video off, or its driver renders none on that vendor's endpoint).
140
+ */
141
+ AvatarID?: string;
142
+ /** The persona's preview image (`MJ: AI Personas.PreviewImageURL`), when it has one. */
143
+ PreviewImageURL?: string;
144
+ }
109
145
  /** An active Realtime model paired with the voices its driver supports — for the dev model/voice picker. */
110
146
  export interface RealtimeModelVoices {
111
147
  /** The `MJ: AI Models` row id. */
112
148
  ModelID: string;
113
149
  /** The model's display name. */
114
150
  ModelName: string;
115
- /** The provider-native voices the model's driver declares (empty when it declares none). */
116
- Voices: RealtimeVoiceOption[];
151
+ /** The model's persona voices on its vendor, then the driver's other voices (empty when there are none). */
152
+ Voices: RealtimeModelVoiceOption[];
117
153
  }
118
154
  /**
119
155
  * Enumerates the active Realtime models with each driver's supported voices — the source for the dev
120
156
  * model/voice picker. Only models with an Active vendor + resolvable API key + ClassFactory driver are
121
157
  * returned (a model you can't actually run isn't worth offering). Voices come from the driver
122
158
  * ({@link BaseRealtimeModel.SupportedVoices}) — the near-term, driver-owned source of truth.
159
+ * A persona voice whose persona also has a preset Video binding on the same vendor names that avatar
160
+ * ({@link RealtimeModelVoiceOption.AvatarID}), when the model shows avatars on that vendor
161
+ * ({@link RealtimeModelShowsAvatar}: its Video/Output row allows video or it has none, and the driver
162
+ * renders avatars on its endpoint); driver voices never do. So the picker marks a voice "Comes with an
163
+ * avatar" only where a call can show one. A persona with a face doesn't stand in for its plain voice, so
164
+ * the plain voice is listed too.
123
165
  *
124
166
  * @param contextUser The user the engine config runs as (server-side).
125
167
  * @param provider The request-scoped metadata provider (multi-provider safe).
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-realtime-session-factory.d.ts","sourceRoot":"","sources":["../../src/realtime/bridge-realtime-session-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAqB,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAwB,MAAM,oBAAoB,CAAC;AAC3K,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQ7E;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IACzC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,yGAAyG;IACzG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iGAAiG;IACjG,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC;IACrC,qGAAqG;IACrG,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+E9G;AA0CD;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC3C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,QAAQ,EACtB,QAAQ,CAAC,EAAE,iBAAiB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,4GAA4G;AAC5G,MAAM,WAAW,mBAAmB;IAChC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,MAAM,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CACxC,WAAW,CAAC,EAAE,QAAQ,EACtB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,aAAa,GAAE,gBAAyC,GACzD,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA8ChC"}
1
+ {"version":3,"file":"bridge-realtime-session-factory.d.ts","sourceRoot":"","sources":["../../src/realtime/bridge-realtime-session-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAqB,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAwB,MAAM,oBAAoB,CAAC;AAC3K,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAM7E,OAAO,EAAgC,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAI5G;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IACzC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,yGAAyG;IACzG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iGAAiG;IACjG,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC;IACrC,qGAAqG;IACrG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+E9G;AAmDD;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC3C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,QAAQ,EACtB,QAAQ,CAAC,EAAE,iBAAiB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACjE,6GAA6G;IAC7G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,4GAA4G;AAC5G,MAAM,WAAW,mBAAmB;IAChC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,4GAA4G;IAC5G,MAAM,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CACxC,WAAW,CAAC,EAAE,QAAQ,EACtB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,aAAa,GAAE,gBAAyC,GACzD,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA+BhC"}