@memberjunction/conversations-runtime 6.2.0-edge.1 → 6.2.0-edge.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConversationsRuntime.d.ts +27 -0
- package/dist/ConversationsRuntime.d.ts.map +1 -1
- package/dist/ConversationsRuntime.js +36 -0
- package/dist/ConversationsRuntime.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/streaming/ConversationLiveness.d.ts +93 -0
- package/dist/streaming/ConversationLiveness.d.ts.map +1 -0
- package/dist/streaming/ConversationLiveness.js +126 -0
- package/dist/streaming/ConversationLiveness.js.map +1 -0
- package/dist/streaming/ConversationStreaming.d.ts +60 -0
- package/dist/streaming/ConversationStreaming.d.ts.map +1 -1
- package/dist/streaming/ConversationStreaming.js +163 -3
- package/dist/streaming/ConversationStreaming.js.map +1 -1
- package/dist/streaming/ConversationTail.d.ts +38 -0
- package/dist/streaming/ConversationTail.d.ts.map +1 -0
- package/dist/streaming/ConversationTail.js +93 -0
- package/dist/streaming/ConversationTail.js.map +1 -0
- package/package.json +8 -8
|
@@ -31,6 +31,8 @@ import { ConversationBridge } from './bridge/ConversationBridge.js';
|
|
|
31
31
|
import { DefaultAgentResolver } from './default-agent/DefaultAgentResolver.js';
|
|
32
32
|
import { SessionsObserver } from './sessions/SessionsObserver.js';
|
|
33
33
|
import { ConversationStreaming } from './streaming/ConversationStreaming.js';
|
|
34
|
+
import { ConversationLiveness } from './streaming/ConversationLiveness.js';
|
|
35
|
+
import { ConversationTail } from './streaming/ConversationTail.js';
|
|
34
36
|
import { ConversationAgentRunner } from './agent-runner/ConversationAgentRunner.js';
|
|
35
37
|
import { INotificationAdapter } from './adapters/INotificationAdapter.js';
|
|
36
38
|
import { IActiveTaskTracker } from './adapters/IActiveTaskTracker.js';
|
|
@@ -126,6 +128,8 @@ export declare class ConversationsRuntime extends BaseEngine<ConversationsRuntim
|
|
|
126
128
|
private readonly _defaultAgent;
|
|
127
129
|
private readonly _sessions;
|
|
128
130
|
private _streaming?;
|
|
131
|
+
private _liveness?;
|
|
132
|
+
private _tail?;
|
|
129
133
|
private _agentRunner?;
|
|
130
134
|
/** Mention parser — pure string logic. See {@link MentionParser}. */
|
|
131
135
|
get Mentions(): MentionParser;
|
|
@@ -166,6 +170,29 @@ export declare class ConversationsRuntime extends BaseEngine<ConversationsRuntim
|
|
|
166
170
|
* Hosts must call `.initialize()` once after `Config()` to open the subscription.
|
|
167
171
|
*/
|
|
168
172
|
get Streaming(): ConversationStreaming;
|
|
173
|
+
/**
|
|
174
|
+
* Liveness supervisor — emits when client state may have fallen behind the server and a
|
|
175
|
+
* reconciliation against durable state is needed. See {@link ConversationLiveness}.
|
|
176
|
+
*
|
|
177
|
+
* Wired to {@link Streaming} so a stream re-subscribe counts as a reconciliation trigger
|
|
178
|
+
* alongside the socket-level one. Hosts additionally feed it DOM events (`visibilitychange`,
|
|
179
|
+
* `online`), which this package cannot observe itself because it is documented as
|
|
180
|
+
* Node-consumable.
|
|
181
|
+
*
|
|
182
|
+
* Initialized on every access, not only the first. An access that comes before the data
|
|
183
|
+
* provider exists cannot attach the socket signal, and a later access attaches it. Once
|
|
184
|
+
* attached, `Initialize` returns at once.
|
|
185
|
+
*/
|
|
186
|
+
get Liveness(): ConversationLiveness;
|
|
187
|
+
/**
|
|
188
|
+
* Durable tail over agent-run progress, with a read cursor per message. See
|
|
189
|
+
* {@link ConversationTail}.
|
|
190
|
+
*
|
|
191
|
+
* The counterpart to {@link Streaming}: the subscription is the fast path, this is the one that
|
|
192
|
+
* survives a dropped frame. Cursors live on the runtime, not on a component, so switching
|
|
193
|
+
* conversations does not replay a run from the start.
|
|
194
|
+
*/
|
|
195
|
+
get Tail(): ConversationTail;
|
|
169
196
|
/**
|
|
170
197
|
* Agent-run orchestrator — wraps `AgentClientSession.RunAgentFromConversationDetail`
|
|
171
198
|
* with default-agent resolution and permission-filtered candidate lists. See
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationsRuntime.d.ts","sourceRoot":"","sources":["../src/ConversationsRuntime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConversationsRuntime.d.ts","sourceRoot":"","sources":["../src/ConversationsRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,8 @@ import { ConversationBridge } from './bridge/ConversationBridge.js';
|
|
|
39
39
|
import { DefaultAgentResolver } from './default-agent/DefaultAgentResolver.js';
|
|
40
40
|
import { SessionsObserver } from './sessions/SessionsObserver.js';
|
|
41
41
|
import { ConversationStreaming } from './streaming/ConversationStreaming.js';
|
|
42
|
+
import { ConversationLiveness } from './streaming/ConversationLiveness.js';
|
|
43
|
+
import { ConversationTail } from './streaming/ConversationTail.js';
|
|
42
44
|
import { ConversationAgentRunner } from './agent-runner/ConversationAgentRunner.js';
|
|
43
45
|
import { ConsoleNotificationAdapter, } from './adapters/INotificationAdapter.js';
|
|
44
46
|
import { NoOpActiveTaskTracker, } from './adapters/IActiveTaskTracker.js';
|
|
@@ -209,6 +211,40 @@ let ConversationsRuntime = class ConversationsRuntime extends BaseEngine {
|
|
|
209
211
|
}
|
|
210
212
|
return this._streaming;
|
|
211
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Liveness supervisor — emits when client state may have fallen behind the server and a
|
|
216
|
+
* reconciliation against durable state is needed. See {@link ConversationLiveness}.
|
|
217
|
+
*
|
|
218
|
+
* Wired to {@link Streaming} so a stream re-subscribe counts as a reconciliation trigger
|
|
219
|
+
* alongside the socket-level one. Hosts additionally feed it DOM events (`visibilitychange`,
|
|
220
|
+
* `online`), which this package cannot observe itself because it is documented as
|
|
221
|
+
* Node-consumable.
|
|
222
|
+
*
|
|
223
|
+
* Initialized on every access, not only the first. An access that comes before the data
|
|
224
|
+
* provider exists cannot attach the socket signal, and a later access attaches it. Once
|
|
225
|
+
* attached, `Initialize` returns at once.
|
|
226
|
+
*/
|
|
227
|
+
get Liveness() {
|
|
228
|
+
if (!this._liveness) {
|
|
229
|
+
this._liveness = new ConversationLiveness();
|
|
230
|
+
}
|
|
231
|
+
this._liveness.Initialize(this.Streaming.StreamReconnected$);
|
|
232
|
+
return this._liveness;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Durable tail over agent-run progress, with a read cursor per message. See
|
|
236
|
+
* {@link ConversationTail}.
|
|
237
|
+
*
|
|
238
|
+
* The counterpart to {@link Streaming}: the subscription is the fast path, this is the one that
|
|
239
|
+
* survives a dropped frame. Cursors live on the runtime, not on a component, so switching
|
|
240
|
+
* conversations does not replay a run from the start.
|
|
241
|
+
*/
|
|
242
|
+
get Tail() {
|
|
243
|
+
if (!this._tail) {
|
|
244
|
+
this._tail = new ConversationTail();
|
|
245
|
+
}
|
|
246
|
+
return this._tail;
|
|
247
|
+
}
|
|
212
248
|
/**
|
|
213
249
|
* Agent-run orchestrator — wraps `AgentClientSession.RunAgentFromConversationDetail`
|
|
214
250
|
* with default-agent resolution and permission-filtered candidate lists. See
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationsRuntime.js","sourceRoot":"","sources":["../src/ConversationsRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAmC,kBAAkB,EAAY,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAEH,0BAA0B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEH,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AAMvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOI,IAAM,oBAAoB,GAA1B,MAAM,oBACT,SAAQ,UAAgC;IADrC;;QAYH,uEAAuE;QACvE,iEAAiE;QACjE,uEAAuE;QAE/D,kBAAa,GAAyB,IAAI,0BAA0B,EAAE,CAAC;QACvE,WAAM,GAAuB,IAAI,qBAAqB,EAAE,CAAC;QAuDjE,uEAAuE;QACvE,wEAAwE;QACxE,kCAAkC;QAClC,uEAAuE;QAEtD,cAAS,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,YAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACnC,WAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAClC,kBAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC3C,cAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationsRuntime.js","sourceRoot":"","sources":["../src/ConversationsRuntime.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export { ConversationBridge, type ConversationSwitchEvent, type ConversationDeep
|
|
|
17
17
|
export { DefaultAgentResolver, type DefaultAgentResolveOptions, } from './default-agent/DefaultAgentResolver.js';
|
|
18
18
|
export { SessionsObserver, type SessionLifecycleEvent, type SessionChannelState, type SessionEndReason, } from './sessions/SessionsObserver.js';
|
|
19
19
|
export { ConversationStreaming, type CompletionEvent, type MessageProgressUpdate, type MessageProgressMetadata, type MessageProgressCallback, type StreamingConnectionStatus, } from './streaming/ConversationStreaming.js';
|
|
20
|
+
export { ConversationLiveness, RECONCILE_THROTTLE_MS, type ReconciliationReason, } from './streaming/ConversationLiveness.js';
|
|
21
|
+
export { ConversationTail, type ConversationTailResult, } from './streaming/ConversationTail.js';
|
|
20
22
|
export { ConversationAgentRunner, type ProcessMessageInput, } from './agent-runner/ConversationAgentRunner.js';
|
|
21
23
|
export { type INotificationAdapter, type NotificationLevel, ConsoleNotificationAdapter, } from './adapters/INotificationAdapter.js';
|
|
22
24
|
export { type IActiveTaskTracker, NoOpActiveTaskTracker, } from './adapters/IActiveTaskTracker.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtI,OAAO,EACH,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,GACpC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,oBAAoB,EACpB,KAAK,0BAA0B,GAClC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,uBAAuB,EACvB,KAAK,mBAAmB,GAC3B,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,0BAA0B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACH,KAAK,kBAAkB,EACvB,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,KAAK,gBAAgB,EACrB,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAIrC,YAAY,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAM3F,OAAO,EACH,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACzB,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtI,OAAO,EACH,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,GACpC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,oBAAoB,EACpB,KAAK,0BAA0B,GAClC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,oBAAoB,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACH,gBAAgB,EAChB,KAAK,sBAAsB,GAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,uBAAuB,EACvB,KAAK,mBAAmB,GAC3B,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,0BAA0B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACH,KAAK,kBAAkB,EACvB,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,KAAK,gBAAgB,EACrB,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAIrC,YAAY,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAM3F,OAAO,EACH,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACzB,MAAM,iCAAiC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,8 @@ export { ConversationBridge, } from './bridge/ConversationBridge.js';
|
|
|
18
18
|
export { DefaultAgentResolver, } from './default-agent/DefaultAgentResolver.js';
|
|
19
19
|
export { SessionsObserver, } from './sessions/SessionsObserver.js';
|
|
20
20
|
export { ConversationStreaming, } from './streaming/ConversationStreaming.js';
|
|
21
|
+
export { ConversationLiveness, RECONCILE_THROTTLE_MS, } from './streaming/ConversationLiveness.js';
|
|
22
|
+
export { ConversationTail, } from './streaming/ConversationTail.js';
|
|
21
23
|
export { ConversationAgentRunner, } from './agent-runner/ConversationAgentRunner.js';
|
|
22
24
|
// Adapter interfaces + defaults
|
|
23
25
|
export { ConsoleNotificationAdapter, } from './adapters/INotificationAdapter.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAyC,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACH,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,GAOnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,GAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,oBAAoB,GAEvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,gBAAgB,GAInB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,qBAAqB,GAMxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,uBAAuB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,gCAAgC;AAChC,OAAO,EAGH,0BAA0B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEH,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEH,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAMrC,qFAAqF;AACrF,wFAAwF;AACxF,qFAAqF;AACrF,iEAAiE;AACjE,OAAO,EACH,kBAAkB,GAGrB,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAyC,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACH,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,GAOnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,GAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,oBAAoB,GAEvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,gBAAgB,GAInB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,qBAAqB,GAMxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,oBAAoB,EACpB,qBAAqB,GAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACH,gBAAgB,GAEnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,uBAAuB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,gCAAgC;AAChC,OAAO,EAGH,0BAA0B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEH,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEH,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAMrC,qFAAqF;AACrF,wFAAwF;AACxF,qFAAqF;AACrF,iEAAiE;AACjE,OAAO,EACH,kBAAkB,GAGrB,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Liveness supervisor — decides when client state may have fallen behind the
|
|
3
|
+
* server and a reconciliation against durable state is required (MJ #4222).
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. The conversations stack had five recovery mechanisms — graphql-ws's
|
|
6
|
+
* `retryAttempts`, `GraphQLDataProvider._socketStateSubject`, Explorer's
|
|
7
|
+
* `ServerConnectivityService`, `ConversationStreaming.scheduleReconnection()` and
|
|
8
|
+
* `FireAndForgetHelper.onStreamEnd` — and every one of them is triggered by the WebSocket
|
|
9
|
+
* `closed` event. The failure they all needed to catch is precisely the one where the socket
|
|
10
|
+
* NEVER closes, so they failed together. That is not defence in depth; it is one layer drawn
|
|
11
|
+
* five times.
|
|
12
|
+
*
|
|
13
|
+
* This class is the independent trigger. It aggregates signals that do NOT depend on a clean
|
|
14
|
+
* close — a socket retry, a stream re-subscribe, a tab regaining focus, the browser coming back
|
|
15
|
+
* online — and emits a single coalesced "go re-read the truth" event.
|
|
16
|
+
*
|
|
17
|
+
* WHY L0 (this package) AND NOT THE ANGULAR LAYER. `ServerConnectivityService` already does
|
|
18
|
+
* something similar, but it lives in `@memberjunction/ng-explorer-core`, and
|
|
19
|
+
* `@memberjunction/ng-conversations` declares `"mjUILayer": "widgets"`, which
|
|
20
|
+
* `packages/Standards/src/checks/ui-layers.ts` forbids from importing any `ng-explorer*`
|
|
21
|
+
* package at severity `error`. This package already depends on `@memberjunction/graphql-dataprovider`
|
|
22
|
+
* and has no Angular dependency, so it is the layer-legal home — and it serves headless consumers
|
|
23
|
+
* (Node workers, CLI tools, test harnesses) for free.
|
|
24
|
+
*
|
|
25
|
+
* DOM EVENTS ARE DELIBERATELY NOT HANDLED HERE. This package is documented as Node-consumable,
|
|
26
|
+
* so `document`/`window` are not assumed to exist. The Angular host translates those events into
|
|
27
|
+
* {@link ConversationLiveness.NotifyTabVisible} / {@link ConversationLiveness.NotifyBrowserOnline}.
|
|
28
|
+
*/
|
|
29
|
+
import { Observable } from 'rxjs';
|
|
30
|
+
/** What prompted a reconciliation. Carried through for logging and for test assertions. */
|
|
31
|
+
export type ReconciliationReason =
|
|
32
|
+
/** The WebSocket dropped and came back. Anything published while it was down is gone. */
|
|
33
|
+
'socket-reconnected'
|
|
34
|
+
/** The push-status subscription was torn down and re-established. */
|
|
35
|
+
| 'stream-reconnected'
|
|
36
|
+
/** The tab regained focus after being hidden. */
|
|
37
|
+
| 'tab-visible'
|
|
38
|
+
/** The browser reported the network came back. A hint only — never proof. */
|
|
39
|
+
| 'browser-online'
|
|
40
|
+
/** A message's progress pill has heard nothing about its run for a while. */
|
|
41
|
+
| 'message-liveness';
|
|
42
|
+
/**
|
|
43
|
+
* Coalescing window. Closing a laptop lid and reopening it produces a socket reconnect, a stream
|
|
44
|
+
* re-init, a `visibilitychange` and an `online` within roughly a second of each other. Downstream
|
|
45
|
+
* reconciliation is idempotent but expensive (a `RunView` plus, per repaired message, a window
|
|
46
|
+
* refresh and an artifact rebuild), so collapse the storm into one pass.
|
|
47
|
+
*
|
|
48
|
+
* Leading-edge, NOT trailing: recovery is user-visible and should start immediately rather than
|
|
49
|
+
* waiting out the window. Subsequent triggers inside the window are absorbed.
|
|
50
|
+
*/
|
|
51
|
+
export declare const RECONCILE_THROTTLE_MS = 500;
|
|
52
|
+
/**
|
|
53
|
+
* Emits when something suggests the client may have missed server events and should re-read
|
|
54
|
+
* authoritative state.
|
|
55
|
+
*
|
|
56
|
+
* Usually reached via `ConversationsRuntime.Instance.Liveness`. Call {@link Initialize} once after
|
|
57
|
+
* the data provider exists; hosts translate DOM events in via the `Notify*` methods.
|
|
58
|
+
*/
|
|
59
|
+
export declare class ConversationLiveness {
|
|
60
|
+
private readonly triggers$;
|
|
61
|
+
private subscriptions;
|
|
62
|
+
private initialized;
|
|
63
|
+
private streamWired;
|
|
64
|
+
/**
|
|
65
|
+
* Fires when client state may be stale. Already coalesced — subscribe and reconcile.
|
|
66
|
+
*
|
|
67
|
+
* Deliberately does NOT replay: a late subscriber must not be handed a reconciliation
|
|
68
|
+
* request for an outage that was already resolved.
|
|
69
|
+
*/
|
|
70
|
+
readonly ReconciliationRequired$: Observable<ReconciliationReason>;
|
|
71
|
+
/**
|
|
72
|
+
* Wire up the transport-level signals. Idempotent.
|
|
73
|
+
*
|
|
74
|
+
* @param streamReconnected$ Optional stream-level reconnect signal, supplied by
|
|
75
|
+
* {@link ConversationStreaming}. Passed in rather than imported so this class stays
|
|
76
|
+
* independent of the streaming implementation and is trivially testable.
|
|
77
|
+
*/
|
|
78
|
+
Initialize(streamReconnected$?: Observable<void>): void;
|
|
79
|
+
/** The tab became visible again. Called by the host's `visibilitychange` handler. */
|
|
80
|
+
NotifyTabVisible(): void;
|
|
81
|
+
/**
|
|
82
|
+
* The browser reported it is back online. Called by the host's `online` handler.
|
|
83
|
+
*
|
|
84
|
+
* `navigator.onLine` only describes the link layer — it reads true behind a captive portal
|
|
85
|
+
* or a dead VPN — so this is a reason to re-check, never evidence that anything is reachable.
|
|
86
|
+
*/
|
|
87
|
+
NotifyBrowserOnline(): void;
|
|
88
|
+
/** Raise a reconciliation request directly. Exposed for hosts with their own signals. */
|
|
89
|
+
Trigger(reason: ReconciliationReason): void;
|
|
90
|
+
/** Tear down transport subscriptions. Safe to call more than once. */
|
|
91
|
+
Dispose(): void;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=ConversationLiveness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationLiveness.d.ts","sourceRoot":"","sources":["../../src/streaming/ConversationLiveness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,UAAU,EAAuC,MAAM,MAAM,CAAC;AAGvE,2FAA2F;AAC3F,MAAM,MAAM,oBAAoB;AAC5B,yFAAyF;AACvF,oBAAoB;AACtB,qEAAqE;GACnE,oBAAoB;AACtB,iDAAiD;GAC/C,aAAa;AACf,6EAA6E;GAC3E,gBAAgB;AAClB,6EAA6E;GAC3E,kBAAkB,CAAC;AAEzB;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;IACH,SAAgB,uBAAuB,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAEvE;IAEF;;;;;;OAMG;IACI,UAAU,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI;IAqC9D,qFAAqF;IAC9E,gBAAgB,IAAI,IAAI;IAI/B;;;;;OAKG;IACI,mBAAmB,IAAI,IAAI;IAIlC,yFAAyF;IAClF,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAIlD,sEAAsE;IAC/D,OAAO,IAAI,IAAI;CAMzB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Liveness supervisor — decides when client state may have fallen behind the
|
|
3
|
+
* server and a reconciliation against durable state is required (MJ #4222).
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. The conversations stack had five recovery mechanisms — graphql-ws's
|
|
6
|
+
* `retryAttempts`, `GraphQLDataProvider._socketStateSubject`, Explorer's
|
|
7
|
+
* `ServerConnectivityService`, `ConversationStreaming.scheduleReconnection()` and
|
|
8
|
+
* `FireAndForgetHelper.onStreamEnd` — and every one of them is triggered by the WebSocket
|
|
9
|
+
* `closed` event. The failure they all needed to catch is precisely the one where the socket
|
|
10
|
+
* NEVER closes, so they failed together. That is not defence in depth; it is one layer drawn
|
|
11
|
+
* five times.
|
|
12
|
+
*
|
|
13
|
+
* This class is the independent trigger. It aggregates signals that do NOT depend on a clean
|
|
14
|
+
* close — a socket retry, a stream re-subscribe, a tab regaining focus, the browser coming back
|
|
15
|
+
* online — and emits a single coalesced "go re-read the truth" event.
|
|
16
|
+
*
|
|
17
|
+
* WHY L0 (this package) AND NOT THE ANGULAR LAYER. `ServerConnectivityService` already does
|
|
18
|
+
* something similar, but it lives in `@memberjunction/ng-explorer-core`, and
|
|
19
|
+
* `@memberjunction/ng-conversations` declares `"mjUILayer": "widgets"`, which
|
|
20
|
+
* `packages/Standards/src/checks/ui-layers.ts` forbids from importing any `ng-explorer*`
|
|
21
|
+
* package at severity `error`. This package already depends on `@memberjunction/graphql-dataprovider`
|
|
22
|
+
* and has no Angular dependency, so it is the layer-legal home — and it serves headless consumers
|
|
23
|
+
* (Node workers, CLI tools, test harnesses) for free.
|
|
24
|
+
*
|
|
25
|
+
* DOM EVENTS ARE DELIBERATELY NOT HANDLED HERE. This package is documented as Node-consumable,
|
|
26
|
+
* so `document`/`window` are not assumed to exist. The Angular host translates those events into
|
|
27
|
+
* {@link ConversationLiveness.NotifyTabVisible} / {@link ConversationLiveness.NotifyBrowserOnline}.
|
|
28
|
+
*/
|
|
29
|
+
import { Subject, Subscription, throttleTime } from 'rxjs';
|
|
30
|
+
import { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';
|
|
31
|
+
/**
|
|
32
|
+
* Coalescing window. Closing a laptop lid and reopening it produces a socket reconnect, a stream
|
|
33
|
+
* re-init, a `visibilitychange` and an `online` within roughly a second of each other. Downstream
|
|
34
|
+
* reconciliation is idempotent but expensive (a `RunView` plus, per repaired message, a window
|
|
35
|
+
* refresh and an artifact rebuild), so collapse the storm into one pass.
|
|
36
|
+
*
|
|
37
|
+
* Leading-edge, NOT trailing: recovery is user-visible and should start immediately rather than
|
|
38
|
+
* waiting out the window. Subsequent triggers inside the window are absorbed.
|
|
39
|
+
*/
|
|
40
|
+
export const RECONCILE_THROTTLE_MS = 500;
|
|
41
|
+
/**
|
|
42
|
+
* Emits when something suggests the client may have missed server events and should re-read
|
|
43
|
+
* authoritative state.
|
|
44
|
+
*
|
|
45
|
+
* Usually reached via `ConversationsRuntime.Instance.Liveness`. Call {@link Initialize} once after
|
|
46
|
+
* the data provider exists; hosts translate DOM events in via the `Notify*` methods.
|
|
47
|
+
*/
|
|
48
|
+
export class ConversationLiveness {
|
|
49
|
+
constructor() {
|
|
50
|
+
this.triggers$ = new Subject();
|
|
51
|
+
this.subscriptions = new Subscription();
|
|
52
|
+
this.initialized = false;
|
|
53
|
+
this.streamWired = false;
|
|
54
|
+
/**
|
|
55
|
+
* Fires when client state may be stale. Already coalesced — subscribe and reconcile.
|
|
56
|
+
*
|
|
57
|
+
* Deliberately does NOT replay: a late subscriber must not be handed a reconciliation
|
|
58
|
+
* request for an outage that was already resolved.
|
|
59
|
+
*/
|
|
60
|
+
this.ReconciliationRequired$ = this.triggers$.pipe(throttleTime(RECONCILE_THROTTLE_MS, undefined, { leading: true, trailing: false }));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Wire up the transport-level signals. Idempotent.
|
|
64
|
+
*
|
|
65
|
+
* @param streamReconnected$ Optional stream-level reconnect signal, supplied by
|
|
66
|
+
* {@link ConversationStreaming}. Passed in rather than imported so this class stays
|
|
67
|
+
* independent of the streaming implementation and is trivially testable.
|
|
68
|
+
*/
|
|
69
|
+
Initialize(streamReconnected$) {
|
|
70
|
+
if (this.initialized) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let socketWired = false;
|
|
74
|
+
try {
|
|
75
|
+
// `Instance` returns undefined rather than throwing when the provider is not yet
|
|
76
|
+
// constructed, so a missing provider is a falsy value here, not a caught error.
|
|
77
|
+
const provider = GraphQLDataProvider.Instance;
|
|
78
|
+
if (provider) {
|
|
79
|
+
// `SocketReconnected$` fires on `wasRetry`, which is the only trustworthy
|
|
80
|
+
// reconnect indicator: graphql-ws restores subscriptions transparently, so the
|
|
81
|
+
// RxJS stream may never error and the socket state may never pass through
|
|
82
|
+
// 'disconnected'.
|
|
83
|
+
this.subscriptions.add(provider.SocketReconnected$.subscribe(() => this.Trigger('socket-reconnected')));
|
|
84
|
+
socketWired = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// A provider that is not yet constructed is not a failure — the DOM-level and
|
|
89
|
+
// stream-level triggers still work, and the socket signal is retried below.
|
|
90
|
+
console.warn('[ConversationLiveness] Socket signal unavailable:', error);
|
|
91
|
+
}
|
|
92
|
+
// Wired at most once, because the retry path below can bring execution back here.
|
|
93
|
+
if (streamReconnected$ && !this.streamWired) {
|
|
94
|
+
this.subscriptions.add(streamReconnected$.subscribe(() => this.Trigger('stream-reconnected')));
|
|
95
|
+
this.streamWired = true;
|
|
96
|
+
}
|
|
97
|
+
// Complete only once the socket signal is attached. Marking initialized without it would
|
|
98
|
+
// early-return every later call and leave that signal unwired for the life of the page.
|
|
99
|
+
this.initialized = socketWired;
|
|
100
|
+
}
|
|
101
|
+
/** The tab became visible again. Called by the host's `visibilitychange` handler. */
|
|
102
|
+
NotifyTabVisible() {
|
|
103
|
+
this.Trigger('tab-visible');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The browser reported it is back online. Called by the host's `online` handler.
|
|
107
|
+
*
|
|
108
|
+
* `navigator.onLine` only describes the link layer — it reads true behind a captive portal
|
|
109
|
+
* or a dead VPN — so this is a reason to re-check, never evidence that anything is reachable.
|
|
110
|
+
*/
|
|
111
|
+
NotifyBrowserOnline() {
|
|
112
|
+
this.Trigger('browser-online');
|
|
113
|
+
}
|
|
114
|
+
/** Raise a reconciliation request directly. Exposed for hosts with their own signals. */
|
|
115
|
+
Trigger(reason) {
|
|
116
|
+
this.triggers$.next(reason);
|
|
117
|
+
}
|
|
118
|
+
/** Tear down transport subscriptions. Safe to call more than once. */
|
|
119
|
+
Dispose() {
|
|
120
|
+
this.subscriptions.unsubscribe();
|
|
121
|
+
this.subscriptions = new Subscription();
|
|
122
|
+
this.initialized = false;
|
|
123
|
+
this.streamWired = false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=ConversationLiveness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationLiveness.js","sourceRoot":"","sources":["../../src/streaming/ConversationLiveness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAc,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAe3E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IAAjC;QACqB,cAAS,GAAG,IAAI,OAAO,EAAwB,CAAC;QACzD,kBAAa,GAAG,IAAI,YAAY,EAAE,CAAC;QACnC,gBAAW,GAAG,KAAK,CAAC;QACpB,gBAAW,GAAG,KAAK,CAAC;QAE5B;;;;;WAKG;QACa,4BAAuB,GAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,CAC3F,YAAY,CAAC,qBAAqB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CACrF,CAAC;IAyEN,CAAC;IAvEG;;;;;;OAMG;IACI,UAAU,CAAC,kBAAqC;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC;YACD,iFAAiF;YACjF,gFAAgF;YAChF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC;YAC9C,IAAI,QAAQ,EAAE,CAAC;gBACX,0EAA0E;gBAC1E,+EAA+E;gBAC/E,0EAA0E;gBAC1E,kBAAkB;gBAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CAClB,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAClF,CAAC;gBACF,WAAW,GAAG,IAAI,CAAC;YACvB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,8EAA8E;YAC9E,4EAA4E;YAC5E,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;QAC7E,CAAC;QAED,kFAAkF;QAClF,IAAI,kBAAkB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,yFAAyF;QACzF,wFAAwF;QACxF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,qFAAqF;IAC9E,gBAAgB;QACnB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACI,mBAAmB;QACtB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,CAAC;IAED,yFAAyF;IAClF,OAAO,CAAC,MAA4B;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,sEAAsE;IAC/D,OAAO;QACV,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ"}
|
|
@@ -91,6 +91,8 @@ export type StreamingConnectionStatus = 'connected' | 'disconnected' | 'error' |
|
|
|
91
91
|
export declare class ConversationStreaming {
|
|
92
92
|
private readonly context;
|
|
93
93
|
private pushStatusSubscription?;
|
|
94
|
+
/** Watches the socket for a server acknowledgement, which clears the backoff. */
|
|
95
|
+
private socketStateSubscription?;
|
|
94
96
|
private readonly callbackRegistry;
|
|
95
97
|
/**
|
|
96
98
|
* Per-message accumulation of streamed final-response deltas, keyed by
|
|
@@ -103,9 +105,27 @@ export declare class ConversationStreaming {
|
|
|
103
105
|
*/
|
|
104
106
|
private readonly streamingAccumulator;
|
|
105
107
|
private readonly recentCompletions;
|
|
108
|
+
/** Browser time (ms) of the last frame received for each agent run, keyed by normalized run ID. */
|
|
109
|
+
private readonly lastHeardAtByRunId;
|
|
110
|
+
/** Browser time (ms) of the last frame that named each message, keyed by normalized detail ID. */
|
|
111
|
+
private readonly lastHeardAtByDetailId;
|
|
106
112
|
private readonly connectionStatus$;
|
|
107
113
|
private initialized;
|
|
108
114
|
private reconnectionTimeout?;
|
|
115
|
+
/** Consecutive failed reconnects; drives the backoff. */
|
|
116
|
+
private reconnectionAttempts;
|
|
117
|
+
/** True while recovering from a drop, so a successful re-subscribe can be told from first boot. */
|
|
118
|
+
private reconnecting;
|
|
119
|
+
/**
|
|
120
|
+
* Fires when the push-status subscription is re-established after having dropped — never on
|
|
121
|
+
* the first successful subscribe.
|
|
122
|
+
*
|
|
123
|
+
* Events published while the subscription was down are gone: the server's topic is an
|
|
124
|
+
* in-memory `PubSub` with no replay, and the client's `Subject` is explicitly unbuffered.
|
|
125
|
+
* A listener must therefore reconcile against durable state rather than assume the stream
|
|
126
|
+
* resumed seamlessly. Consumed by `ConversationLiveness` (MJ #4222).
|
|
127
|
+
*/
|
|
128
|
+
readonly StreamReconnected$: Subject<void>;
|
|
109
129
|
/**
|
|
110
130
|
* Observable for components to subscribe to completion events in real-time.
|
|
111
131
|
* Emits enriched completion data once per agent finish.
|
|
@@ -168,6 +188,25 @@ export declare class ConversationStreaming {
|
|
|
168
188
|
getRecentCompletion(conversationDetailId: string): {
|
|
169
189
|
agentRunId: string;
|
|
170
190
|
} | undefined;
|
|
191
|
+
/**
|
|
192
|
+
* Browser time (ms since epoch) at which the last push frame for this agent run arrived:
|
|
193
|
+
* progress, streamed content, or the server's liveness pulse.
|
|
194
|
+
*
|
|
195
|
+
* This is the reliable "still running" signal. The run object inside progress frames is the
|
|
196
|
+
* server's in-memory entity, whose timestamps do not move until the run ends.
|
|
197
|
+
*
|
|
198
|
+
* @returns `undefined` when nothing has been heard for the run, or it has completed.
|
|
199
|
+
*/
|
|
200
|
+
LastHeardFromRun(agentRunId: string): number | undefined;
|
|
201
|
+
/**
|
|
202
|
+
* Browser time (ms since epoch) at which the last push frame that names this message arrived.
|
|
203
|
+
*
|
|
204
|
+
* Covers a row with no MJ agent run to look up, such as one written by a host's own turn
|
|
205
|
+
* handler that reports progress through the same publisher.
|
|
206
|
+
*
|
|
207
|
+
* @returns `undefined` when nothing has named the message, or it has completed.
|
|
208
|
+
*/
|
|
209
|
+
LastHeardForMessage(conversationDetailId: string): number | undefined;
|
|
171
210
|
/** Clear a recent completion after the late-mounting component has handled it. */
|
|
172
211
|
ClearRecentCompletion(conversationDetailId: string): void;
|
|
173
212
|
/** @deprecated Use {@link ClearRecentCompletion}. */
|
|
@@ -232,9 +271,30 @@ export declare class ConversationStreaming {
|
|
|
232
271
|
private routeStreamingContent;
|
|
233
272
|
/** Invoke every callback registered for `conversationDetailId`, swallowing per-callback errors. */
|
|
234
273
|
private dispatchCallbacks;
|
|
274
|
+
/**
|
|
275
|
+
* Record evidence that the transport is genuinely alive: a delivered frame, or the server's
|
|
276
|
+
* connection acknowledgement. Clears the reconnection backoff so the next outage starts from
|
|
277
|
+
* scratch. A bare re-subscribe is not evidence; it succeeds against a dead socket.
|
|
278
|
+
*/
|
|
279
|
+
private noteStreamAlive;
|
|
280
|
+
/**
|
|
281
|
+
* Clear the backoff whenever the socket reports `connected`. That state follows the server's
|
|
282
|
+
* connection acknowledgement, a real round trip, so a quiet but healthy stream does not start
|
|
283
|
+
* its next outage at the ceiling. Subscribes once for the life of the service.
|
|
284
|
+
*/
|
|
285
|
+
private watchSocketAcknowledgement;
|
|
235
286
|
/** Schedule a reconnection attempt after a connection error or completion. */
|
|
236
287
|
private scheduleReconnection;
|
|
237
288
|
/** Evict completions older than the replay window to bound memory. */
|
|
238
289
|
private cleanupOldCompletions;
|
|
290
|
+
/**
|
|
291
|
+
* Record that a frame naming an agent run or a message arrived, or forget both when the frame
|
|
292
|
+
* completes them.
|
|
293
|
+
*
|
|
294
|
+
* Progress, streaming and completion frames name the run as `data.agentRunId`; the liveness
|
|
295
|
+
* pulse names it as `data.runId`. The message is `data.conversationDetailId`, or the
|
|
296
|
+
* `ConversationDetailID` of the run a progress frame carries.
|
|
297
|
+
*/
|
|
298
|
+
private noteActivity;
|
|
239
299
|
}
|
|
240
300
|
//# sourceMappingURL=ConversationStreaming.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationStreaming.d.ts","sourceRoot":"","sources":["../../src/streaming/ConversationStreaming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAmB,OAAO,EAAgB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationStreaming.d.ts","sourceRoot":"","sources":["../../src/streaming/ConversationStreaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
/**
|
|
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
|
*
|
|
@@ -53,8 +72,26 @@ export class ConversationStreaming {
|
|
|
53
72
|
*/
|
|
54
73
|
this.streamingAccumulator = new Map();
|
|
55
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();
|
|
56
79
|
this.connectionStatus$ = new BehaviorSubject('disconnected');
|
|
57
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();
|
|
58
95
|
/**
|
|
59
96
|
* Observable for components to subscribe to completion events in real-time.
|
|
60
97
|
* Emits enriched completion data once per agent finish.
|
|
@@ -72,8 +109,14 @@ export class ConversationStreaming {
|
|
|
72
109
|
}
|
|
73
110
|
try {
|
|
74
111
|
const dataProvider = GraphQLDataProvider.Instance;
|
|
112
|
+
this.watchSocketAcknowledgement(dataProvider);
|
|
75
113
|
this.pushStatusSubscription = dataProvider.PushStatusUpdates().subscribe({
|
|
76
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();
|
|
77
120
|
void this.handlePushStatusUpdate(status);
|
|
78
121
|
},
|
|
79
122
|
error: (error) => {
|
|
@@ -88,6 +131,18 @@ export class ConversationStreaming {
|
|
|
88
131
|
});
|
|
89
132
|
this.initialized = true;
|
|
90
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
|
+
}
|
|
91
146
|
}
|
|
92
147
|
catch (error) {
|
|
93
148
|
console.error('[ConversationStreaming] Failed to initialize:', error);
|
|
@@ -183,6 +238,29 @@ export class ConversationStreaming {
|
|
|
183
238
|
getRecentCompletion(conversationDetailId) {
|
|
184
239
|
return this.GetRecentCompletion(conversationDetailId);
|
|
185
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
|
+
}
|
|
186
264
|
/** Clear a recent completion after the late-mounting component has handled it. */
|
|
187
265
|
ClearRecentCompletion(conversationDetailId) {
|
|
188
266
|
this.recentCompletions.delete(conversationDetailId);
|
|
@@ -221,9 +299,13 @@ export class ConversationStreaming {
|
|
|
221
299
|
this.pushStatusSubscription.unsubscribe();
|
|
222
300
|
this.pushStatusSubscription = undefined;
|
|
223
301
|
}
|
|
302
|
+
this.socketStateSubscription?.unsubscribe();
|
|
303
|
+
this.socketStateSubscription = undefined;
|
|
224
304
|
this.callbackRegistry.clear();
|
|
225
305
|
this.recentCompletions.clear();
|
|
226
306
|
this.streamingAccumulator.clear();
|
|
307
|
+
this.lastHeardAtByRunId.clear();
|
|
308
|
+
this.lastHeardAtByDetailId.clear();
|
|
227
309
|
this.CompletionEvents$.complete();
|
|
228
310
|
this.connectionStatus$.complete();
|
|
229
311
|
this.initialized = false;
|
|
@@ -246,9 +328,15 @@ export class ConversationStreaming {
|
|
|
246
328
|
? JSON.parse(status)
|
|
247
329
|
: status;
|
|
248
330
|
if (statusObj.resolver === 'TaskOrchestrator') {
|
|
331
|
+
this.noteActivity(statusObj);
|
|
249
332
|
await this.routeTaskProgress(statusObj);
|
|
250
333
|
}
|
|
251
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
|
+
}
|
|
252
340
|
await this.routeAgentProgress(statusObj);
|
|
253
341
|
}
|
|
254
342
|
}
|
|
@@ -450,6 +538,31 @@ export class ConversationStreaming {
|
|
|
450
538
|
}
|
|
451
539
|
}
|
|
452
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
|
+
}
|
|
453
566
|
/** Schedule a reconnection attempt after a connection error or completion. */
|
|
454
567
|
scheduleReconnection() {
|
|
455
568
|
if (this.reconnectionTimeout) {
|
|
@@ -461,12 +574,19 @@ export class ConversationStreaming {
|
|
|
461
574
|
// flow still delivers the correct final message), which also keeps
|
|
462
575
|
// abandoned entries from lingering for the session.
|
|
463
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;
|
|
464
584
|
this.connectionStatus$.next('reconnecting');
|
|
465
585
|
this.reconnectionTimeout = setTimeout(() => {
|
|
466
|
-
console.log(
|
|
586
|
+
console.log(`[ConversationStreaming] Attempting to reconnect (attempt ${this.reconnectionAttempts})...`);
|
|
467
587
|
this.initialized = false;
|
|
468
588
|
this.Initialize();
|
|
469
|
-
},
|
|
589
|
+
}, delay);
|
|
470
590
|
}
|
|
471
591
|
/** Evict completions older than the replay window to bound memory. */
|
|
472
592
|
cleanupOldCompletions() {
|
|
@@ -476,6 +596,46 @@ export class ConversationStreaming {
|
|
|
476
596
|
this.recentCompletions.delete(id);
|
|
477
597
|
}
|
|
478
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);
|
|
479
639
|
}
|
|
480
640
|
}
|
|
481
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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,OAAO,EAAgB,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAwEvD,iEAAiE;AACjE,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/C;;;GAGG;AACH,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,+FAA+F;AAC/F,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAE3C,6FAA6F;AAC7F,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAEpC;;;;GAIG;AACH,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEzC;;;GAGG;AACH,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IAgD9B,iDAAiD;IACjD,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,YAA6B,OAAqC;QAArC,YAAO,GAAP,OAAO,CAA8B;QAtDjD,qBAAgB,GAAG,IAAI,GAAG,EAAqC,CAAC;QACjF;;;;;;;;WAQG;QACc,yBAAoB,GAAG,IAAI,GAAG,EAAgD,CAAC;QAC/E,sBAAiB,GAAG,IAAI,GAAG,EAGzC,CAAC;QACJ,mGAAmG;QAClF,uBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChE,kGAAkG;QACjF,0BAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,sBAAiB,GAAG,IAAI,eAAe,CAA4B,cAAc,CAAC,CAAC;QAC5F,gBAAW,GAAG,KAAK,CAAC;QAE5B,yDAAyD;QACjD,yBAAoB,GAAG,CAAC,CAAC;QACjC,mGAAmG;QAC3F,iBAAY,GAAG,KAAK,CAAC;QAE7B;;;;;;;;WAQG;QACa,uBAAkB,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEzD;;;WAGG;QACa,sBAAiB,GAAG,IAAI,OAAO,EAAmB,CAAC;IAYE,CAAC;IAEtE;;;;OAIG;IACI,UAAU;QACb,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC;YAClD,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC;gBACrE,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE;oBACtB,6EAA6E;oBAC7E,6EAA6E;oBAC7E,mEAAmE;oBACnE,sDAAsD;oBACtD,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,KAAK,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBACD,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE;oBACtB,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;oBACzE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACX,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC5C,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,CAAC;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,iFAAiF;gBACjF,iFAAiF;gBACjF,8CAA8C;gBAC9C,EAAE;gBACF,iFAAiF;gBACjF,oFAAoF;gBACpF,gFAAgF;gBAChF,2DAA2D;gBAC3D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChC,CAAC;IACL,CAAC;IAED,0CAA0C;IACnC,UAAU;QACb,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAED,kDAAkD;IAC3C,oBAAoB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;IACjD,CAAC;IAED,oDAAoD;IAC7C,oBAAoB;QACvB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACvC,CAAC;IAED,qDAAqD;IAC9C,mBAAmB;QACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,mDAAmD;IAC5C,mBAAmB;QACtB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,uBAAuB,CAC1B,oBAA4B,EAC5B,QAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACvE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,uDAAuD;IAChD,uBAAuB,CAC1B,oBAA4B,EAC5B,QAAiC;QAEjC,OAAO,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACI,yBAAyB,CAC5B,oBAA4B,EAC5B,QAAkC;QAElC,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,yDAAyD;IAClD,yBAAyB,CAC5B,oBAA4B,EAC5B,QAAkC;QAElC,OAAO,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,yDAAyD;IAClD,0BAA0B;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACrD,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,0DAA0D;IACnD,0BAA0B;QAC7B,OAAO,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC7C,CAAC;IAED,wEAAwE;IACjE,sBAAsB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACtC,CAAC;IAED,sDAAsD;IAC/C,sBAAsB;QACzB,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,oBAA4B;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAED,mDAAmD;IAC5C,mBAAmB,CAAC,oBAA4B;QACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;OAQG;IACI,gBAAgB,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;;OAOG;IACI,mBAAmB,CAAC,oBAA4B;QACnD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,kFAAkF;IAC3E,qBAAqB,CAAC,oBAA4B;QACrD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,qDAAqD;IAC9C,qBAAqB,CAAC,oBAA4B;QACrD,OAAO,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACI,qBAAqB,CAAC,SAAiB;QAM1C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO;YACH,YAAY,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YACjD,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;YACrC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;YACvD,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;SACtD,CAAC;IACN,CAAC;IAED,qDAAqD;IAC9C,qBAAqB,CAAC,SAAiB;QAM1C,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACvC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,uBAAuB,EAAE,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,uEAAuE;IACvE,YAAY;IACZ,uEAAuE;IAEvE;;;OAGG;IACK,KAAK,CAAC,sBAAsB,CAAC,MAAe;QAChD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,wEAAwE;YACxE,MAAM,SAAS,GACX,OAAO,MAAM,KAAK,QAAQ;gBACtB,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAA6B;gBACjD,CAAC,CAAE,MAAkC,CAAC;YAE9C,IAAI,SAAS,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC7B,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,oBAAoB,EAAE,CAAC;gBACrD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC7B,IAAI,SAAS,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBAC5C,iEAAiE;oBACjE,OAAO;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,KAAK,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAAC,SAAkC;QAC9D,IAAI,CAAC;YACD,MAAM,IAAI,GAAI,SAAS,CAAC,IAA4C,IAAI,EAAE,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAC;YACnD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAqC,CAAC;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;YACtE,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAA0C,CAAC;YAE7E,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;gBACtF,OAAO;YACX,CAAC;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,8EAA8E,EAAE;oBACzF,QAAQ;oBACR,OAAO;iBACV,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACxE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,oEAAoE;gBACpE,2EAA2E;gBAC3E,OAAO;YACX,CAAC;YAED,MAAM,cAAc,GAA0B;gBAC1C,OAAO;gBACP,eAAe;gBACf,QAAQ;gBACR,oBAAoB;gBACpB,QAAQ;gBACR,QAAQ,EAAE,kBAAkB;aAC/B,CAAC;YAEF,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kEAAkE,EAAE,KAAK,CAAC,CAAC;QAC7F,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAAC,SAAkC;QAC/D,IAAI,CAAC;YACD,MAAM,IAAI,GAAI,SAAS,CAAC,IAA4C,IAAI,EAAE,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;YACtE,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAC;YAE7C,qEAAqE;YACrE,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACjD,OAAO;YACX,CAAC;YAED,2EAA2E;YAC3E,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACtB,MAAM,UAAU,GAAI,IAAI,CAAC,UAAiC,IAAI,EAAE,CAAC;gBACjE,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAA0C,CAAC;gBAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8B,CAAC;gBACpD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAkC,CAAC;gBAE7D,IAAI,UAAU,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;oBAClE,IAAI,OAAO,EAAE,CAAC;wBACV,OAAO,CAAC,GAAG,CACP,qCAAqC,UAAU,uCAAuC,CACzF,CAAC;oBACN,CAAC;gBACL,CAAC;gBAED,IAAI,oBAAoB,EAAE,CAAC;oBACvB,0EAA0E;oBAC1E,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBAEvD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,oBAAoB,EAAE;wBAC7C,oBAAoB;wBACpB,UAAU;wBACV,SAAS,EAAE,IAAI,IAAI,EAAE;qBACxB,CAAC,CAAC;oBAEH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;wBACxB,oBAAoB;wBACpB,UAAU;wBACV,OAAO;wBACP,YAAY;qBACf,CAAC,CAAC;oBAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAE7B,OAAO,CAAC,GAAG,CACP,4DAA4D,oBAAoB,cAAc,MAAM,CAAC,OAAO,CAAC,GAAG,CACnH,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,IAAI,CACR,4FAA4F,UAAU,EAAE,CAC3G,CAAC;gBACN,CAAC;gBAED,OAAO;YACX,CAAC;YAED,4BAA4B;YAC5B,MAAM,oBAAoB,GAAG,QAAQ,EAAE,oBAA0C,CAAC;YAClF,MAAM,OAAO,GAAG,QAAQ,EAAE,OAA6B,CAAC;YACxD,MAAM,eAAe,GAAG,QAAQ,EAAE,UAAgC,CAAC;YACnE,MAAM,SAAS,GAAG,QAAQ,EAAE,SAA+B,CAAC;YAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;gBACpF,OAAO;YACX,CAAC;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CACR,4EAA4E,EAC5E,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAC1C,CAAC;gBACF,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACxE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEnC,MAAM,cAAc,GAA0B;gBAC1C,OAAO;gBACP,eAAe;gBACf,QAAQ,EAAG,QAAQ,EAAE,KAA4B,IAAI,OAAO;gBAC5D,oBAAoB;gBACpB,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAA6B;gBAC3D,SAAS;gBACT,QAAQ,EAAE,oBAAoB;aACjC,CAAC;YAEF,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,oEAAoE,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACK,KAAK,CAAC,qBAAqB,CAC/B,IAA6B,EAC7B,QAA6C;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAER,CAAC;QAEhB,IAAI,SAAS,EAAE,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACvC,OAAO,CAAC,gEAAgE;QAC5E,CAAC;QAED,MAAM,oBAAoB,GAAG,QAAQ,EAAE,oBAA0C,CAAC;QAClF,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,sEAAsE,EAAE;gBACjF,SAAS,EAAE,QAAQ,EAAE,KAAK;aAC7B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,6DAA6D;QAC7D,MAAM,UAAU,GAAI,IAAI,CAAC,UAAiC,IAAI,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC3D,CAAC;QAED,0EAA0E;QAC1E,oEAAoE;QACpE,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEnC,MAAM,cAAc,GAA0B;YAC1C,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAG,QAAQ,EAAE,KAA4B,IAAI,OAAO;YAC5D,oBAAoB;YACpB,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE;gBACP,OAAO,EAAE,WAAW;gBACpB,SAAS;gBACT,IAAI,EAAE,SAAS,CAAC,IAAI;aACvB;SACJ,CAAC;QAEF,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;IAClF,CAAC;IAED,mGAAmG;IAC3F,KAAK,CAAC,iBAAiB,CAC3B,SAAoC,EACpC,cAAqC,EACrC,oBAA4B;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACD,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACT,sDAAsD,oBAAoB,GAAG,EAC7E,KAAK,CACR,CAAC;gBACF,wEAAwE;YAC5E,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,eAAe;QACnB,IAAI,IAAI,CAAC,oBAAoB,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,0BAA0B,CAAC,YAAiC;QAChE,IAAI,IAAI,CAAC,uBAAuB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;YACpE,OAAO;QACX,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YAChF,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,8EAA8E;IACtE,oBAAoB;QACxB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC3C,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,mEAAmE;QACnE,oDAAoD;QACpD,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAElC,0FAA0F;QAC1F,0FAA0F;QAC1F,8CAA8C;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACnB,qBAAqB,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,EACtD,yBAAyB,CAC5B,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,yBAAyB,CAAC;QAC1E,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,EAAE;YACvC,OAAO,CAAC,GAAG,CAAC,4DAA4D,IAAI,CAAC,oBAAoB,MAAM,CAAC,CAAC;YACzG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC;IAED,sEAAsE;IAC9D,qBAAqB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,CAAC;QACrD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;gBACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACtE,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC9B,IAAI,OAAO,GAAG,cAAc,EAAE,CAAC;oBAC3B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACK,YAAY,CAAC,SAAkC;QACnD,MAAM,IAAI,GAAG,SAAS,CAAC,IAA2C,CAAC;QACnE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;QACtE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAuB,CAAC;QACvE,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,QAAQ,EAAE,oBAAoB,CAAuB,CAAC;QACxG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;QAE5C,MAAM,MAAM,GAAG,CAAC,GAAwB,EAAE,KAAyB,EAAQ,EAAE;YACzE,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO;YACX,CAAC;YACD,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,UAAU,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;CACJ"}
|
|
@@ -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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/conversations-runtime",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.2.0-edge.
|
|
4
|
+
"version": "6.2.0-edge.3",
|
|
5
5
|
"description": "MemberJunction: Framework-agnostic Conversations Runtime — orchestration, mention parsing, overlay/workspace bridge, default-agent resolution, client-tool registry, sessions observability. Pure TypeScript, zero UX dependencies. Consumable from browser (Angular widget, React, Vue, etc.) or server (Node workers, CLI tools, test harnesses).",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"author": "MemberJunction.com",
|
|
12
12
|
"license": "BUSL-1.1",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@memberjunction/ai-agent-client": "6.2.0-edge.
|
|
15
|
-
"@memberjunction/ai-core-plus": "6.2.0-edge.
|
|
16
|
-
"@memberjunction/ai-engine-base": "6.2.0-edge.
|
|
17
|
-
"@memberjunction/core": "6.2.0-edge.
|
|
18
|
-
"@memberjunction/core-entities": "6.2.0-edge.
|
|
19
|
-
"@memberjunction/global": "6.2.0-edge.
|
|
20
|
-
"@memberjunction/graphql-dataprovider": "6.2.0-edge.
|
|
14
|
+
"@memberjunction/ai-agent-client": "6.2.0-edge.3",
|
|
15
|
+
"@memberjunction/ai-core-plus": "6.2.0-edge.3",
|
|
16
|
+
"@memberjunction/ai-engine-base": "6.2.0-edge.3",
|
|
17
|
+
"@memberjunction/core": "6.2.0-edge.3",
|
|
18
|
+
"@memberjunction/core-entities": "6.2.0-edge.3",
|
|
19
|
+
"@memberjunction/global": "6.2.0-edge.3",
|
|
20
|
+
"@memberjunction/graphql-dataprovider": "6.2.0-edge.3",
|
|
21
21
|
"rxjs": "^7.8.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|