@memberjunction/conversations-runtime 6.2.0-edge.0 → 6.2.0-edge.2

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 (43) hide show
  1. package/dist/ConversationsRuntime.d.ts +27 -0
  2. package/dist/ConversationsRuntime.d.ts.map +1 -1
  3. package/dist/ConversationsRuntime.js +36 -0
  4. package/dist/ConversationsRuntime.js.map +1 -1
  5. package/dist/agent-runner/ConversationAgentRunner.d.ts +27 -1
  6. package/dist/agent-runner/ConversationAgentRunner.d.ts.map +1 -1
  7. package/dist/agent-runner/ConversationAgentRunner.js +26 -3
  8. package/dist/agent-runner/ConversationAgentRunner.js.map +1 -1
  9. package/dist/default-agent/DefaultAgentResolver.d.ts +2 -0
  10. package/dist/default-agent/DefaultAgentResolver.d.ts.map +1 -1
  11. package/dist/default-agent/DefaultAgentResolver.js +5 -1
  12. package/dist/default-agent/DefaultAgentResolver.js.map +1 -1
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/mentions/MentionAutocomplete.d.ts +29 -2
  18. package/dist/mentions/MentionAutocomplete.d.ts.map +1 -1
  19. package/dist/mentions/MentionAutocomplete.js +80 -41
  20. package/dist/mentions/MentionAutocomplete.js.map +1 -1
  21. package/dist/mentions/MentionParser.d.ts +10 -0
  22. package/dist/mentions/MentionParser.d.ts.map +1 -1
  23. package/dist/mentions/MentionParser.js +25 -5
  24. package/dist/mentions/MentionParser.js.map +1 -1
  25. package/dist/mentions/MentionSuggestion.d.ts +26 -0
  26. package/dist/mentions/MentionSuggestion.d.ts.map +1 -1
  27. package/dist/streaming/ConversationLiveness.d.ts +93 -0
  28. package/dist/streaming/ConversationLiveness.d.ts.map +1 -0
  29. package/dist/streaming/ConversationLiveness.js +126 -0
  30. package/dist/streaming/ConversationLiveness.js.map +1 -0
  31. package/dist/streaming/ConversationStreaming.d.ts +94 -1
  32. package/dist/streaming/ConversationStreaming.d.ts.map +1 -1
  33. package/dist/streaming/ConversationStreaming.js +221 -17
  34. package/dist/streaming/ConversationStreaming.js.map +1 -1
  35. package/dist/streaming/ConversationTail.d.ts +38 -0
  36. package/dist/streaming/ConversationTail.d.ts.map +1 -0
  37. package/dist/streaming/ConversationTail.js +93 -0
  38. package/dist/streaming/ConversationTail.js.map +1 -0
  39. package/dist/timeline/RealtimeSessionTimeline.d.ts +71 -3
  40. package/dist/timeline/RealtimeSessionTimeline.d.ts.map +1 -1
  41. package/dist/timeline/RealtimeSessionTimeline.js +123 -9
  42. package/dist/timeline/RealtimeSessionTimeline.js.map +1 -1
  43. package/package.json +8 -8
@@ -16,10 +16,29 @@
16
16
  */
17
17
  import { BehaviorSubject, Subject } from 'rxjs';
18
18
  import { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';
19
+ import { NormalizeUUID } from '@memberjunction/global';
19
20
  /** How long late-arrival completion events remain replayable. */
20
21
  const RECENT_COMPLETION_TTL_MS = 5 * 60 * 1000;
21
- /** Reconnection delay after a subscription error or completion. */
22
+ /**
23
+ * How long a run's or message's last-heard time is kept. Cleared on completion; this only bounds
24
+ * entries whose completion never arrived. Longer than any silence the UI still reports on.
25
+ */
26
+ const RUN_ACTIVITY_TTL_MS = 15 * 60 * 1000;
27
+ /** The `type` the server's liveness pulse carries. It names a run but has no progress text. */
28
+ const HEARTBEAT_MESSAGE_TYPE = 'Heartbeat';
29
+ /** Base reconnection delay after a subscription error or completion. Doubles per attempt. */
22
30
  const RECONNECTION_DELAY_MS = 5_000;
31
+ /**
32
+ * Ceiling on the backoff, and the only bound on the retry rate. Retries never stop, so a
33
+ * permanently unreachable server settles at one attempt per minute per tab rather than the
34
+ * every-5s storm an uncapped base delay would produce.
35
+ */
36
+ const MAX_RECONNECTION_DELAY_MS = 60_000;
37
+ /**
38
+ * Up to this fraction is taken off each reconnection delay at random, so tabs that lost the same
39
+ * server do not all retry at the same moment. Only ever subtracted: the ceiling stays a ceiling.
40
+ */
41
+ const RECONNECTION_JITTER_RATIO = 0.2;
23
42
  /**
24
43
  * Global streaming service that manages PubSub subscriptions for all conversations.
25
44
  *
@@ -30,6 +49,10 @@ const RECONNECTION_DELAY_MS = 5_000;
30
49
  * Usually accessed via `ConversationsRuntime.Instance.Streaming`.
31
50
  */
32
51
  export class ConversationStreaming {
52
+ /** @deprecated Use {@link CompletionEvents$}. */
53
+ get completionEvents$() {
54
+ return this.CompletionEvents$;
55
+ }
33
56
  /**
34
57
  * @param context Runtime context providing live access to the registered
35
58
  * {@link IActiveTaskTracker}. Read on every event dispatch so adapter swaps
@@ -49,27 +72,51 @@ export class ConversationStreaming {
49
72
  */
50
73
  this.streamingAccumulator = new Map();
51
74
  this.recentCompletions = new Map();
75
+ /** Browser time (ms) of the last frame received for each agent run, keyed by normalized run ID. */
76
+ this.lastHeardAtByRunId = new Map();
77
+ /** Browser time (ms) of the last frame that named each message, keyed by normalized detail ID. */
78
+ this.lastHeardAtByDetailId = new Map();
52
79
  this.connectionStatus$ = new BehaviorSubject('disconnected');
53
80
  this.initialized = false;
81
+ /** Consecutive failed reconnects; drives the backoff. */
82
+ this.reconnectionAttempts = 0;
83
+ /** True while recovering from a drop, so a successful re-subscribe can be told from first boot. */
84
+ this.reconnecting = false;
85
+ /**
86
+ * Fires when the push-status subscription is re-established after having dropped — never on
87
+ * the first successful subscribe.
88
+ *
89
+ * Events published while the subscription was down are gone: the server's topic is an
90
+ * in-memory `PubSub` with no replay, and the client's `Subject` is explicitly unbuffered.
91
+ * A listener must therefore reconcile against durable state rather than assume the stream
92
+ * resumed seamlessly. Consumed by `ConversationLiveness` (MJ #4222).
93
+ */
94
+ this.StreamReconnected$ = new Subject();
54
95
  /**
55
96
  * Observable for components to subscribe to completion events in real-time.
56
97
  * Emits enriched completion data once per agent finish.
57
98
  */
58
- this.completionEvents$ = new Subject();
99
+ this.CompletionEvents$ = new Subject();
59
100
  }
60
101
  /**
61
102
  * Initialize the global PubSub subscription. Idempotent — safe to call multiple
62
103
  * times. Should be called once at app startup (e.g., the Angular widget calls
63
104
  * this when the workspace mounts).
64
105
  */
65
- initialize() {
106
+ Initialize() {
66
107
  if (this.initialized) {
67
108
  return;
68
109
  }
69
110
  try {
70
111
  const dataProvider = GraphQLDataProvider.Instance;
112
+ this.watchSocketAcknowledgement(dataProvider);
71
113
  this.pushStatusSubscription = dataProvider.PushStatusUpdates().subscribe({
72
114
  next: (status) => {
115
+ // First frame on a new subscription is the only proof the transport actually
116
+ // works. Subscribing succeeds against a dead socket — graphql-ws accepts the
117
+ // request and returns an iterator that never yields — so this, not
118
+ // Initialize() returning, is what clears the backoff.
119
+ this.noteStreamAlive();
73
120
  void this.handlePushStatusUpdate(status);
74
121
  },
75
122
  error: (error) => {
@@ -84,6 +131,18 @@ export class ConversationStreaming {
84
131
  });
85
132
  this.initialized = true;
86
133
  this.connectionStatus$.next('connected');
134
+ if (this.reconnecting) {
135
+ // Ask for a reconcile: whatever the server published during the gap was dropped,
136
+ // and reconciliation reads durable state over HTTP, so it is worth doing even if
137
+ // this subscription turns out to be dead too.
138
+ //
139
+ // `reconnectionAttempts` is deliberately NOT cleared here. Re-subscribing proves
140
+ // nothing — the call returns normally against a black-holed socket — so clearing it
141
+ // here would reset the counter every cycle and pin the delay at its base value.
142
+ // Only a delivered frame clears it; see noteStreamAlive().
143
+ this.reconnecting = false;
144
+ this.StreamReconnected$.next();
145
+ }
87
146
  }
88
147
  catch (error) {
89
148
  console.error('[ConversationStreaming] Failed to initialize:', error);
@@ -91,28 +150,44 @@ export class ConversationStreaming {
91
150
  this.scheduleReconnection();
92
151
  }
93
152
  }
153
+ /** @deprecated Use {@link Initialize}. */
154
+ initialize() {
155
+ return this.Initialize();
156
+ }
94
157
  /** Current connection status as an observable. */
95
- getConnectionStatus$() {
158
+ GetConnectionStatus$() {
96
159
  return this.connectionStatus$.asObservable();
97
160
  }
161
+ /** @deprecated Use {@link GetConnectionStatus$}. */
162
+ getConnectionStatus$() {
163
+ return this.GetConnectionStatus$();
164
+ }
98
165
  /** Current connection status value (synchronous). */
99
- getConnectionStatus() {
166
+ GetConnectionStatus() {
100
167
  return this.connectionStatus$.value;
101
168
  }
169
+ /** @deprecated Use {@link GetConnectionStatus}. */
170
+ getConnectionStatus() {
171
+ return this.GetConnectionStatus();
172
+ }
102
173
  /**
103
174
  * Register a callback for a specific conversation detail (message). The callback
104
175
  * is invoked whenever progress updates arrive for that message.
105
176
  */
106
- registerMessageCallback(conversationDetailId, callback) {
177
+ RegisterMessageCallback(conversationDetailId, callback) {
107
178
  const existing = this.callbackRegistry.get(conversationDetailId) ?? [];
108
179
  existing.push(callback);
109
180
  this.callbackRegistry.set(conversationDetailId, existing);
110
181
  }
182
+ /** @deprecated Use {@link RegisterMessageCallback}. */
183
+ registerMessageCallback(conversationDetailId, callback) {
184
+ return this.RegisterMessageCallback(conversationDetailId, callback);
185
+ }
111
186
  /**
112
187
  * Unregister a callback for a specific conversation detail. When `callback` is
113
188
  * omitted, ALL callbacks for that message are removed.
114
189
  */
115
- unregisterMessageCallback(conversationDetailId, callback) {
190
+ UnregisterMessageCallback(conversationDetailId, callback) {
116
191
  if (callback) {
117
192
  const existing = this.callbackRegistry.get(conversationDetailId) ?? [];
118
193
  const filtered = existing.filter((cb) => cb !== callback);
@@ -127,35 +202,78 @@ export class ConversationStreaming {
127
202
  this.callbackRegistry.delete(conversationDetailId);
128
203
  }
129
204
  }
205
+ /** @deprecated Use {@link UnregisterMessageCallback}. */
206
+ unregisterMessageCallback(conversationDetailId, callback) {
207
+ return this.UnregisterMessageCallback(conversationDetailId, callback);
208
+ }
130
209
  /** Total number of registered callbacks (diagnostic). */
131
- getRegisteredCallbackCount() {
210
+ GetRegisteredCallbackCount() {
132
211
  let count = 0;
133
212
  for (const callbacks of this.callbackRegistry.values()) {
134
213
  count += callbacks.length;
135
214
  }
136
215
  return count;
137
216
  }
217
+ /** @deprecated Use {@link GetRegisteredCallbackCount}. */
218
+ getRegisteredCallbackCount() {
219
+ return this.GetRegisteredCallbackCount();
220
+ }
138
221
  /** Number of distinct messages currently being tracked (diagnostic). */
139
- getTrackedMessageCount() {
222
+ GetTrackedMessageCount() {
140
223
  return this.callbackRegistry.size;
141
224
  }
225
+ /** @deprecated Use {@link GetTrackedMessageCount}. */
226
+ getTrackedMessageCount() {
227
+ return this.GetTrackedMessageCount();
228
+ }
142
229
  /**
143
230
  * Replay a recently completed event so a late-mounting component can pick it up.
144
231
  * Returns `undefined` if no completion is in the 5-minute replay window.
145
232
  */
146
- getRecentCompletion(conversationDetailId) {
233
+ GetRecentCompletion(conversationDetailId) {
147
234
  const completion = this.recentCompletions.get(conversationDetailId);
148
235
  return completion ? { agentRunId: completion.agentRunId } : undefined;
149
236
  }
237
+ /** @deprecated Use {@link GetRecentCompletion}. */
238
+ getRecentCompletion(conversationDetailId) {
239
+ return this.GetRecentCompletion(conversationDetailId);
240
+ }
241
+ /**
242
+ * Browser time (ms since epoch) at which the last push frame for this agent run arrived:
243
+ * progress, streamed content, or the server's liveness pulse.
244
+ *
245
+ * This is the reliable "still running" signal. The run object inside progress frames is the
246
+ * server's in-memory entity, whose timestamps do not move until the run ends.
247
+ *
248
+ * @returns `undefined` when nothing has been heard for the run, or it has completed.
249
+ */
250
+ LastHeardFromRun(agentRunId) {
251
+ return this.lastHeardAtByRunId.get(NormalizeUUID(agentRunId));
252
+ }
253
+ /**
254
+ * Browser time (ms since epoch) at which the last push frame that names this message arrived.
255
+ *
256
+ * Covers a row with no MJ agent run to look up, such as one written by a host's own turn
257
+ * handler that reports progress through the same publisher.
258
+ *
259
+ * @returns `undefined` when nothing has named the message, or it has completed.
260
+ */
261
+ LastHeardForMessage(conversationDetailId) {
262
+ return this.lastHeardAtByDetailId.get(NormalizeUUID(conversationDetailId));
263
+ }
150
264
  /** Clear a recent completion after the late-mounting component has handled it. */
151
- clearRecentCompletion(conversationDetailId) {
265
+ ClearRecentCompletion(conversationDetailId) {
152
266
  this.recentCompletions.delete(conversationDetailId);
153
267
  }
268
+ /** @deprecated Use {@link ClearRecentCompletion}. */
269
+ clearRecentCompletion(conversationDetailId) {
270
+ return this.ClearRecentCompletion(conversationDetailId);
271
+ }
154
272
  /**
155
273
  * Diagnostic snapshot for a specific message — used by debugging tools to dump
156
274
  * live in-memory state.
157
275
  */
158
- getDiagnosticSnapshot(messageId) {
276
+ GetDiagnosticSnapshot(messageId) {
159
277
  const callbacks = this.callbackRegistry.get(messageId);
160
278
  return {
161
279
  hasCallbacks: !!callbacks && callbacks.length > 0,
@@ -164,6 +282,10 @@ export class ConversationStreaming {
164
282
  connectionStatus: this.connectionStatus$.getValue(),
165
283
  };
166
284
  }
285
+ /** @deprecated Use {@link GetDiagnosticSnapshot}. */
286
+ getDiagnosticSnapshot(messageId) {
287
+ return this.GetDiagnosticSnapshot(messageId);
288
+ }
167
289
  /**
168
290
  * Tear down subscriptions and clear state. Call at app shutdown or in tests
169
291
  * between cases.
@@ -177,10 +299,14 @@ export class ConversationStreaming {
177
299
  this.pushStatusSubscription.unsubscribe();
178
300
  this.pushStatusSubscription = undefined;
179
301
  }
302
+ this.socketStateSubscription?.unsubscribe();
303
+ this.socketStateSubscription = undefined;
180
304
  this.callbackRegistry.clear();
181
305
  this.recentCompletions.clear();
182
306
  this.streamingAccumulator.clear();
183
- this.completionEvents$.complete();
307
+ this.lastHeardAtByRunId.clear();
308
+ this.lastHeardAtByDetailId.clear();
309
+ this.CompletionEvents$.complete();
184
310
  this.connectionStatus$.complete();
185
311
  this.initialized = false;
186
312
  }
@@ -202,9 +328,15 @@ export class ConversationStreaming {
202
328
  ? JSON.parse(status)
203
329
  : status;
204
330
  if (statusObj.resolver === 'TaskOrchestrator') {
331
+ this.noteActivity(statusObj);
205
332
  await this.routeTaskProgress(statusObj);
206
333
  }
207
334
  else if (statusObj.resolver === 'RunAIAgentResolver') {
335
+ this.noteActivity(statusObj);
336
+ if (statusObj.type === HEARTBEAT_MESSAGE_TYPE) {
337
+ // A pulse only proves the run is alive; it has nothing to route.
338
+ return;
339
+ }
208
340
  await this.routeAgentProgress(statusObj);
209
341
  }
210
342
  }
@@ -291,7 +423,7 @@ export class ConversationStreaming {
291
423
  agentRunId,
292
424
  timestamp: new Date(),
293
425
  });
294
- this.completionEvents$.next({
426
+ this.CompletionEvents$.next({
295
427
  conversationDetailId,
296
428
  agentRunId,
297
429
  success,
@@ -406,6 +538,31 @@ export class ConversationStreaming {
406
538
  }
407
539
  }
408
540
  }
541
+ /**
542
+ * Record evidence that the transport is genuinely alive: a delivered frame, or the server's
543
+ * connection acknowledgement. Clears the reconnection backoff so the next outage starts from
544
+ * scratch. A bare re-subscribe is not evidence; it succeeds against a dead socket.
545
+ */
546
+ noteStreamAlive() {
547
+ if (this.reconnectionAttempts !== 0) {
548
+ this.reconnectionAttempts = 0;
549
+ }
550
+ }
551
+ /**
552
+ * Clear the backoff whenever the socket reports `connected`. That state follows the server's
553
+ * connection acknowledgement, a real round trip, so a quiet but healthy stream does not start
554
+ * its next outage at the ceiling. Subscribes once for the life of the service.
555
+ */
556
+ watchSocketAcknowledgement(dataProvider) {
557
+ if (this.socketStateSubscription || !dataProvider.SocketConnectivity$) {
558
+ return;
559
+ }
560
+ this.socketStateSubscription = dataProvider.SocketConnectivity$.subscribe((state) => {
561
+ if (state === 'connected') {
562
+ this.noteStreamAlive();
563
+ }
564
+ });
565
+ }
409
566
  /** Schedule a reconnection attempt after a connection error or completion. */
410
567
  scheduleReconnection() {
411
568
  if (this.reconnectionTimeout) {
@@ -417,12 +574,19 @@ export class ConversationStreaming {
417
574
  // flow still delivers the correct final message), which also keeps
418
575
  // abandoned entries from lingering for the session.
419
576
  this.streamingAccumulator.clear();
577
+ // Exponential backoff with a ceiling, retried for as long as the page lives. Recovery has
578
+ // to be autonomous: no host calls Initialize() outside ngOnInit, so a stream that stopped
579
+ // retrying would stay stopped until a reload.
580
+ const capped = Math.min(RECONNECTION_DELAY_MS * 2 ** this.reconnectionAttempts, MAX_RECONNECTION_DELAY_MS);
581
+ const delay = capped - Math.random() * capped * RECONNECTION_JITTER_RATIO;
582
+ this.reconnectionAttempts++;
583
+ this.reconnecting = true;
420
584
  this.connectionStatus$.next('reconnecting');
421
585
  this.reconnectionTimeout = setTimeout(() => {
422
- console.log('[ConversationStreaming] Attempting to reconnect...');
586
+ console.log(`[ConversationStreaming] Attempting to reconnect (attempt ${this.reconnectionAttempts})...`);
423
587
  this.initialized = false;
424
- this.initialize();
425
- }, RECONNECTION_DELAY_MS);
588
+ this.Initialize();
589
+ }, delay);
426
590
  }
427
591
  /** Evict completions older than the replay window to bound memory. */
428
592
  cleanupOldCompletions() {
@@ -432,6 +596,46 @@ export class ConversationStreaming {
432
596
  this.recentCompletions.delete(id);
433
597
  }
434
598
  }
599
+ const activityCutoff = Date.now() - RUN_ACTIVITY_TTL_MS;
600
+ for (const map of [this.lastHeardAtByRunId, this.lastHeardAtByDetailId]) {
601
+ for (const [id, heardAt] of map) {
602
+ if (heardAt < activityCutoff) {
603
+ map.delete(id);
604
+ }
605
+ }
606
+ }
607
+ }
608
+ /**
609
+ * Record that a frame naming an agent run or a message arrived, or forget both when the frame
610
+ * completes them.
611
+ *
612
+ * Progress, streaming and completion frames name the run as `data.agentRunId`; the liveness
613
+ * pulse names it as `data.runId`. The message is `data.conversationDetailId`, or the
614
+ * `ConversationDetailID` of the run a progress frame carries.
615
+ */
616
+ noteActivity(statusObj) {
617
+ const data = statusObj.data;
618
+ if (!data) {
619
+ return;
620
+ }
621
+ const agentRun = data.agentRun;
622
+ const rawRunId = (data.agentRunId ?? data.runId);
623
+ const rawDetailId = (data.conversationDetailId ?? agentRun?.ConversationDetailID);
624
+ const isComplete = data.type === 'complete';
625
+ const record = (map, rawId) => {
626
+ if (!rawId || rawId === 'unknown') {
627
+ return;
628
+ }
629
+ const id = NormalizeUUID(rawId);
630
+ if (isComplete) {
631
+ map.delete(id);
632
+ }
633
+ else {
634
+ map.set(id, Date.now());
635
+ }
636
+ };
637
+ record(this.lastHeardAtByRunId, rawRunId);
638
+ record(this.lastHeardAtByDetailId, rawDetailId);
435
639
  }
436
640
  }
437
641
  //# sourceMappingURL=ConversationStreaming.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationStreaming.js","sourceRoot":"","sources":["../../src/streaming/ConversationStreaming.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConversationStreaming.js","sourceRoot":"","sources":["../../src/streaming/ConversationStreaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ConversationTailResult } from '@memberjunction/graphql-dataprovider';
2
+ export type { ConversationTailResult };
3
+ /**
4
+ * Tracks a read cursor per conversation detail and tails durable run events from it.
5
+ *
6
+ * Usually reached via `ConversationsRuntime.Instance.Tail`.
7
+ */
8
+ export declare class ConversationTail {
9
+ /** conversationDetailId → highest `Seq` already delivered to this client. */
10
+ private cursors;
11
+ private client?;
12
+ /**
13
+ * Read everything that has landed for a message since the last call.
14
+ *
15
+ * The cursor advances only on a successful read, so a failed call costs a repeat rather than a
16
+ * gap. Never throws — this is the recovery path, and a recovery path that throws takes down the
17
+ * reconciliation that called it.
18
+ *
19
+ * @param conversationDetailId The message to tail.
20
+ */
21
+ Tail(conversationDetailId: string): Promise<ConversationTailResult>;
22
+ /** Highest sequence delivered for a message so far. 0 when nothing has been read. */
23
+ CursorFor(conversationDetailId: string): number;
24
+ /**
25
+ * Drop a message's cursor. Call when a message reaches a terminal state, so the map does not
26
+ * grow without bound across a long session.
27
+ */
28
+ Forget(conversationDetailId: string): void;
29
+ /** Drop every cursor. */
30
+ Reset(): void;
31
+ /**
32
+ * Resolved on first use rather than in the constructor: the runtime singleton can be touched
33
+ * before the data provider is configured, and a client bound to a provider that did not exist
34
+ * yet would be permanently useless.
35
+ */
36
+ private getClient;
37
+ }
38
+ //# sourceMappingURL=ConversationTail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationTail.d.ts","sourceRoot":"","sources":["../../src/streaming/ConversationTail.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAEvC;;;;GAIG;AACH,qBAAa,gBAAgB;IACzB,6EAA6E;IAC7E,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAC,CAA4B;IAE3C;;;;;;;;OAQG;IACU,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAqBhF,qFAAqF;IAC9E,SAAS,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM;IAItD;;;OAGG;IACI,MAAM,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI;IAIjD,yBAAyB;IAClB,KAAK,IAAI,IAAI;IAIpB;;;;OAIG;IACH,OAAO,CAAC,SAAS;CAepB"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @fileoverview Durable, resumable read of agent-run progress, with per-message cursors (MJ #4222).
3
+ *
4
+ * WHY THIS EXISTS. Push is the only delivery path a conversation has, and it has no replay. The
5
+ * server topic is an in-memory `graphql-subscriptions` PubSub and the client subject is explicitly
6
+ * unbuffered, so an event published while the socket was half-open is simply gone. Tier 0 makes the
7
+ * dead socket close and Tier 1 gives recovery its own triggers, but both still leave the client
8
+ * re-reading whole rows to guess what it missed. This class closes the loop: the client keeps the
9
+ * highest sequence it has seen per message and re-reads from exactly there.
10
+ *
11
+ * Runs over plain HTTP, deliberately. The recovery case is "the WebSocket is dead and may stay
12
+ * dead", so the repair path must not need the WebSocket.
13
+ *
14
+ * CURSORS ARE HELD HERE, NOT IN THE COMPONENT. An Angular component is destroyed and rebuilt on
15
+ * every conversation switch; a cursor that died with it would replay the whole run on return.
16
+ */
17
+ import { GraphQLConversationClient, GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';
18
+ /**
19
+ * Tracks a read cursor per conversation detail and tails durable run events from it.
20
+ *
21
+ * Usually reached via `ConversationsRuntime.Instance.Tail`.
22
+ */
23
+ export class ConversationTail {
24
+ constructor() {
25
+ /** conversationDetailId → highest `Seq` already delivered to this client. */
26
+ this.cursors = new Map();
27
+ }
28
+ /**
29
+ * Read everything that has landed for a message since the last call.
30
+ *
31
+ * The cursor advances only on a successful read, so a failed call costs a repeat rather than a
32
+ * gap. Never throws — this is the recovery path, and a recovery path that throws takes down the
33
+ * reconciliation that called it.
34
+ *
35
+ * @param conversationDetailId The message to tail.
36
+ */
37
+ async Tail(conversationDetailId) {
38
+ const since = this.cursors.get(conversationDetailId) ?? 0;
39
+ const client = this.getClient();
40
+ if (!client) {
41
+ return {
42
+ Success: false,
43
+ Message: 'No data provider available',
44
+ Events: [],
45
+ LatestSeq: since,
46
+ // Unknown is treated as still running — see GraphQLConversationClient.
47
+ IsInFlight: true
48
+ };
49
+ }
50
+ const result = await client.TailConversationEvents(conversationDetailId, since);
51
+ if (result.Success && result.LatestSeq > since) {
52
+ this.cursors.set(conversationDetailId, result.LatestSeq);
53
+ }
54
+ return result;
55
+ }
56
+ /** Highest sequence delivered for a message so far. 0 when nothing has been read. */
57
+ CursorFor(conversationDetailId) {
58
+ return this.cursors.get(conversationDetailId) ?? 0;
59
+ }
60
+ /**
61
+ * Drop a message's cursor. Call when a message reaches a terminal state, so the map does not
62
+ * grow without bound across a long session.
63
+ */
64
+ Forget(conversationDetailId) {
65
+ this.cursors.delete(conversationDetailId);
66
+ }
67
+ /** Drop every cursor. */
68
+ Reset() {
69
+ this.cursors.clear();
70
+ }
71
+ /**
72
+ * Resolved on first use rather than in the constructor: the runtime singleton can be touched
73
+ * before the data provider is configured, and a client bound to a provider that did not exist
74
+ * yet would be permanently useless.
75
+ */
76
+ getClient() {
77
+ if (this.client) {
78
+ return this.client;
79
+ }
80
+ try {
81
+ const provider = GraphQLDataProvider.Instance;
82
+ if (!provider) {
83
+ return undefined;
84
+ }
85
+ this.client = new GraphQLConversationClient(provider);
86
+ return this.client;
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=ConversationTail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationTail.js","sourceRoot":"","sources":["../../src/streaming/ConversationTail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAKtG;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAA7B;QACI,6EAA6E;QACrE,YAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAuEhD,CAAC;IApEG;;;;;;;;OAQG;IACI,KAAK,CAAC,IAAI,CAAC,oBAA4B;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,4BAA4B;gBACrC,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,KAAK;gBAChB,uEAAuE;gBACvE,UAAU,EAAE,IAAI;aACnB,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,qFAAqF;IAC9E,SAAS,CAAC,oBAA4B;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,oBAA4B;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC9C,CAAC;IAED,yBAAyB;IAClB,KAAK;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACK,SAAS;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;CACJ"}