@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
@@ -66,6 +66,16 @@ export interface RealtimeSessionTimelineMeta {
66
66
  /** Why the session closed (`Error` | `Explicit` | `Janitor` | `Shutdown`), when closed. */
67
67
  CloseReason: string | null;
68
68
  ClosedAt: Date | null;
69
+ /**
70
+ * When the session row was created, which is when the call started. That is earlier than the
71
+ * first caption, so it measures the call better than the transcript does. Optional, so meta built
72
+ * before this field existed still type-checks.
73
+ */
74
+ StartedAt?: Date | null;
75
+ /** The user whose call it was (`MJ: AI Agent Sessions.UserID`). */
76
+ UserID?: string | null;
77
+ /** That user's display name (the session view's denormalized `User`). */
78
+ UserName?: string | null;
69
79
  }
70
80
  /** One renderable timeline entry: a normal chat message OR a collapsed session block. */
71
81
  export type ConversationTimelineItem<T extends RealtimeTimelineSourceDetail> = {
@@ -112,7 +122,9 @@ export interface RealtimeSessionStatusChip {
112
122
  Tone: 'live' | 'idle' | 'error' | 'neutral';
113
123
  }
114
124
  /**
115
- * The card's title: the agent's name when the session lookup supplied one, else the generic label.
125
+ * The card's title, in the words the rest of the product uses for a realtime session ("Start a
126
+ * voice call with…", "End call"): "Voice call with Sage", or "Voice call" when the lookup did not
127
+ * name the agent.
116
128
  *
117
129
  * @param meta The session-row enrichment, or null when the lookup was unavailable.
118
130
  */
@@ -136,6 +148,56 @@ export declare function SessionCardStatusChip(meta: RealtimeSessionTimelineMeta
136
148
  * @param group The collapsed session block.
137
149
  */
138
150
  export declare function SessionCardIsSameDayRange(group: RealtimeSessionTimelineGroup | null | undefined): boolean;
151
+ /**
152
+ * When the call started: the session row's creation time when the lookup supplied it, else the
153
+ * first caption's. The row is the better answer, because the transcript only begins once somebody
154
+ * speaks.
155
+ *
156
+ * @param group The collapsed session block.
157
+ * @param meta The session-row enrichment, or null when the lookup was unavailable.
158
+ */
159
+ export declare function SessionCardStartedAt(group: RealtimeSessionTimelineGroup | null | undefined, meta: RealtimeSessionTimelineMeta | null | undefined): Date | null;
160
+ /**
161
+ * How long the call lasted, as a person would say it: "Under a minute", "12 min", "1 hr 5 min".
162
+ *
163
+ * Measured from the session row's start and close when the lookup supplied them, since the
164
+ * transcript runs from the first thing said to the last and so comes up short. Otherwise it falls
165
+ * back to the transcript's own span.
166
+ *
167
+ * `null` while the call is still going (Active or Idle), and whenever there is no span to measure.
168
+ * A single caption says nothing about how long a call ran, so it gets no duration rather than a
169
+ * confident "Under a minute".
170
+ *
171
+ * @param group The collapsed session block.
172
+ * @param meta The session-row enrichment, or null when the lookup was unavailable.
173
+ */
174
+ export declare function SessionCardDurationLabel(group: RealtimeSessionTimelineGroup | null | undefined, meta: RealtimeSessionTimelineMeta | null | undefined): string | null;
175
+ /**
176
+ * The card's message count: "No messages", "1 message", "12 messages".
177
+ *
178
+ * Counts the same visible turns review mode lists ({@link IsVisibleRealtimeTurn}), so the card and
179
+ * the transcript it opens agree.
180
+ *
181
+ * @param group The collapsed session block.
182
+ */
183
+ export declare function SessionCardMessageCountLabel(group: RealtimeSessionTimelineGroup | null | undefined): string;
184
+ /**
185
+ * Who said the card's quoted line.
186
+ *
187
+ * An agent turn is labeled with the agent's name, or "Agent" when the lookup did not supply one.
188
+ * A user turn is labeled "You" on the viewer's own call and with the caller's name on anyone
189
+ * else's. When the session row doesn't say whose call it was, the label is the neutral "Caller",
190
+ * so a shared conversation never labels someone else's call as yours.
191
+ *
192
+ * `fallbackUserName` is used only when the caller passes no viewer id, and so can't tell whose
193
+ * call it was either way.
194
+ *
195
+ * @param role Who spoke the line (`RealtimeSessionTimelineGroup.LastTurnRole`).
196
+ * @param meta The session-row enrichment, or null when the lookup was unavailable.
197
+ * @param viewerUserID The signed-in user's id, or null when the caller does not know it.
198
+ * @param fallbackUserName Label for a user turn when the caller passes no viewer id.
199
+ */
200
+ export declare function SessionCardSpeakerLabel(role: RealtimeSessionTimelineGroup['LastTurnRole'], meta: RealtimeSessionTimelineMeta | null | undefined, viewerUserID: string | null | undefined, fallbackUserName?: string): string;
139
201
  /**
140
202
  * The `MJ: AI Agent Sessions` row shape the meta lookup reads.
141
203
  *
@@ -149,6 +211,12 @@ export interface RealtimeSessionMetaRow {
149
211
  Status?: 'Active' | 'Closed' | 'Idle' | null;
150
212
  CloseReason?: string | null;
151
213
  ClosedAt?: Date | string | null;
214
+ /** The user whose call it was. */
215
+ UserID?: string | null;
216
+ /** Denormalized display name of that user from the session view. */
217
+ User?: string | null;
218
+ /** When the row was created, which is when the call started. */
219
+ __mj_CreatedAt?: Date | string | null;
152
220
  }
153
221
  /**
154
222
  * The columns the meta lookup needs, so both surfaces ask for the same ones.
@@ -171,8 +239,8 @@ export declare function CollectRealtimeSessionIDs(details: readonly RealtimeTime
171
239
  * Maps session rows to the card's meta, keyed by {@link NormalizeUUID} so lookups match however
172
240
  * the database cased the id.
173
241
  *
174
- * Tolerant: an unparseable `ClosedAt` becomes `null` rather than an Invalid Date, which would
175
- * otherwise render as "Invalid Date" on the card.
242
+ * Tolerant: an unparseable `ClosedAt` or `__mj_CreatedAt` becomes `null` rather than an Invalid
243
+ * Date, which would otherwise render as "Invalid Date" on the card.
176
244
  *
177
245
  * @param rows Rows from `MJ: AI Agent Sessions` (see {@link REALTIME_SESSION_META_FIELDS}).
178
246
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RealtimeSessionTimeline.d.ts","sourceRoot":"","sources":["../../src/timeline/RealtimeSessionTimeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealtimeSessionTimeline.d.ts","sourceRoot":"","sources":["../../src/timeline/RealtimeSessionTimeline.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@
20
20
  * that renders a conversation needs this, so it belongs with the engine they all share.
21
21
  * `ng-conversations` re-exports it, so its own consumers are unaffected.
22
22
  */
23
- import { NormalizeUUID } from '@memberjunction/global';
23
+ import { NormalizeUUID, UUIDsEqual } from '@memberjunction/global';
24
24
  /**
25
25
  * Builds the renderable conversation timeline from the loaded detail rows (chronological,
26
26
  * as the engine returns them):
@@ -111,13 +111,15 @@ function toDate(value) {
111
111
  return isNaN(date.getTime()) ? null : date;
112
112
  }
113
113
  /**
114
- * The card's title: the agent's name when the session lookup supplied one, else the generic label.
114
+ * The card's title, in the words the rest of the product uses for a realtime session ("Start a
115
+ * voice call with…", "End call"): "Voice call with Sage", or "Voice call" when the lookup did not
116
+ * name the agent.
115
117
  *
116
118
  * @param meta The session-row enrichment, or null when the lookup was unavailable.
117
119
  */
118
120
  export function SessionCardTitle(meta) {
119
121
  const agent = meta?.AgentName?.trim();
120
- return agent ? `Realtime session · ${agent}` : 'Realtime session';
122
+ return agent ? `Voice call with ${agent}` : 'Voice call';
121
123
  }
122
124
  /**
123
125
  * The card's status chip, or `null` to hide it entirely.
@@ -156,6 +158,106 @@ export function SessionCardIsSameDayRange(group) {
156
158
  }
157
159
  return start.toDateString() === end.toDateString();
158
160
  }
161
+ /**
162
+ * When the call started: the session row's creation time when the lookup supplied it, else the
163
+ * first caption's. The row is the better answer, because the transcript only begins once somebody
164
+ * speaks.
165
+ *
166
+ * @param group The collapsed session block.
167
+ * @param meta The session-row enrichment, or null when the lookup was unavailable.
168
+ */
169
+ export function SessionCardStartedAt(group, meta) {
170
+ return meta?.StartedAt ?? group?.StartedAt ?? null;
171
+ }
172
+ /**
173
+ * How long the call lasted, as a person would say it: "Under a minute", "12 min", "1 hr 5 min".
174
+ *
175
+ * Measured from the session row's start and close when the lookup supplied them, since the
176
+ * transcript runs from the first thing said to the last and so comes up short. Otherwise it falls
177
+ * back to the transcript's own span.
178
+ *
179
+ * `null` while the call is still going (Active or Idle), and whenever there is no span to measure.
180
+ * A single caption says nothing about how long a call ran, so it gets no duration rather than a
181
+ * confident "Under a minute".
182
+ *
183
+ * @param group The collapsed session block.
184
+ * @param meta The session-row enrichment, or null when the lookup was unavailable.
185
+ */
186
+ export function SessionCardDurationLabel(group, meta) {
187
+ if (meta?.Status === 'Active' || meta?.Status === 'Idle') {
188
+ return null;
189
+ }
190
+ const start = SessionCardStartedAt(group, meta);
191
+ const end = meta?.ClosedAt ?? group?.EndedAt ?? null;
192
+ if (!start || !end) {
193
+ return null;
194
+ }
195
+ const elapsedMs = end.getTime() - start.getTime();
196
+ // `> 0` rather than `<= 0` so a NaN from a bad date falls through to "no duration" too.
197
+ return elapsedMs > 0 ? formatCallDuration(elapsedMs) : null;
198
+ }
199
+ /**
200
+ * The card's message count: "No messages", "1 message", "12 messages".
201
+ *
202
+ * Counts the same visible turns review mode lists ({@link IsVisibleRealtimeTurn}), so the card and
203
+ * the transcript it opens agree.
204
+ *
205
+ * @param group The collapsed session block.
206
+ */
207
+ export function SessionCardMessageCountLabel(group) {
208
+ const count = group?.TurnCount ?? 0;
209
+ if (count === 0) {
210
+ return 'No messages';
211
+ }
212
+ return count === 1 ? '1 message' : `${count} messages`;
213
+ }
214
+ /**
215
+ * Who said the card's quoted line.
216
+ *
217
+ * An agent turn is labeled with the agent's name, or "Agent" when the lookup did not supply one.
218
+ * A user turn is labeled "You" on the viewer's own call and with the caller's name on anyone
219
+ * else's. When the session row doesn't say whose call it was, the label is the neutral "Caller",
220
+ * so a shared conversation never labels someone else's call as yours.
221
+ *
222
+ * `fallbackUserName` is used only when the caller passes no viewer id, and so can't tell whose
223
+ * call it was either way.
224
+ *
225
+ * @param role Who spoke the line (`RealtimeSessionTimelineGroup.LastTurnRole`).
226
+ * @param meta The session-row enrichment, or null when the lookup was unavailable.
227
+ * @param viewerUserID The signed-in user's id, or null when the caller does not know it.
228
+ * @param fallbackUserName Label for a user turn when the caller passes no viewer id.
229
+ */
230
+ export function SessionCardSpeakerLabel(role, meta, viewerUserID, fallbackUserName = 'You') {
231
+ if (role === 'Assistant') {
232
+ return meta?.AgentName?.trim() || 'Agent';
233
+ }
234
+ const viewerID = viewerUserID?.trim();
235
+ if (!viewerID) {
236
+ return fallbackUserName;
237
+ }
238
+ const ownerID = meta?.UserID?.trim();
239
+ if (!ownerID) {
240
+ return 'Caller';
241
+ }
242
+ if (UUIDsEqual(ownerID, viewerID)) {
243
+ return 'You';
244
+ }
245
+ // Someone else's call: their name if the row carried it.
246
+ return meta?.UserName?.trim() || 'Caller';
247
+ }
248
+ /** Formats a positive span in milliseconds for {@link SessionCardDurationLabel}. */
249
+ function formatCallDuration(elapsedMs) {
250
+ if (elapsedMs < 60_000) {
251
+ return 'Under a minute';
252
+ }
253
+ const totalMinutes = Math.round(elapsedMs / 60_000);
254
+ const hours = Math.floor(totalMinutes / 60);
255
+ const minutes = totalMinutes % 60;
256
+ if (hours === 0) {
257
+ return `${minutes} min`;
258
+ }
259
+ return minutes === 0 ? `${hours} hr` : `${hours} hr ${minutes} min`;
260
+ }
159
261
  /** Maps a close reason to its chip. `Error` is the only one that reads as a failure. */
160
262
  function closeReasonChip(reason) {
161
263
  switch (reason) {
@@ -166,7 +268,8 @@ function closeReasonChip(reason) {
166
268
  case 'Janitor':
167
269
  return { Label: 'Timed out', Tone: 'neutral' };
168
270
  case 'Shutdown':
169
- return { Label: 'Server shutdown', Tone: 'neutral' };
271
+ // The server restarted under the call. Worded for the person on it, who never saw a server.
272
+ return { Label: 'Interrupted', Tone: 'neutral' };
170
273
  default:
171
274
  return { Label: 'Closed', Tone: 'neutral' };
172
275
  }
@@ -177,7 +280,16 @@ function closeReasonChip(reason) {
177
280
  * A host that trims this list gets cards missing their chips on that host only — the kind of
178
281
  * divergence that is invisible until someone compares two screenshots.
179
282
  */
180
- export const REALTIME_SESSION_META_FIELDS = ['ID', 'Agent', 'Status', 'CloseReason', 'ClosedAt'];
283
+ export const REALTIME_SESSION_META_FIELDS = [
284
+ 'ID',
285
+ 'Agent',
286
+ 'Status',
287
+ 'CloseReason',
288
+ 'ClosedAt',
289
+ 'UserID',
290
+ 'User',
291
+ '__mj_CreatedAt'
292
+ ];
181
293
  /**
182
294
  * The DISTINCT session ids stamped across `details`, in first-seen order.
183
295
  *
@@ -207,21 +319,23 @@ export function CollectRealtimeSessionIDs(details) {
207
319
  * Maps session rows to the card's meta, keyed by {@link NormalizeUUID} so lookups match however
208
320
  * the database cased the id.
209
321
  *
210
- * Tolerant: an unparseable `ClosedAt` becomes `null` rather than an Invalid Date, which would
211
- * otherwise render as "Invalid Date" on the card.
322
+ * Tolerant: an unparseable `ClosedAt` or `__mj_CreatedAt` becomes `null` rather than an Invalid
323
+ * Date, which would otherwise render as "Invalid Date" on the card.
212
324
  *
213
325
  * @param rows Rows from `MJ: AI Agent Sessions` (see {@link REALTIME_SESSION_META_FIELDS}).
214
326
  */
215
327
  export function MapRealtimeSessionMeta(rows) {
216
328
  const map = new Map();
217
329
  for (const row of rows ?? []) {
218
- const closedAt = toDate(row.ClosedAt);
219
330
  map.set(NormalizeUUID(row.ID), {
220
331
  SessionID: row.ID,
221
332
  AgentName: row.Agent ?? null,
222
333
  Status: row.Status ?? null,
223
334
  CloseReason: row.CloseReason ?? null,
224
- ClosedAt: closedAt
335
+ ClosedAt: toDate(row.ClosedAt),
336
+ StartedAt: toDate(row.__mj_CreatedAt),
337
+ UserID: row.UserID ?? null,
338
+ UserName: row.User ?? null
225
339
  });
226
340
  }
227
341
  return map;
@@ -1 +1 @@
1
- {"version":3,"file":"RealtimeSessionTimeline.js","sourceRoot":"","sources":["../../src/timeline/RealtimeSessionTimeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealtimeSessionTimeline.js","sourceRoot":"","sources":["../../src/timeline/RealtimeSessionTimeline.ts"],"names":[],"mappings":"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"}
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.0",
4
+ "version": "6.2.0-edge.2",
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.0",
15
- "@memberjunction/ai-core-plus": "6.2.0-edge.0",
16
- "@memberjunction/ai-engine-base": "6.2.0-edge.0",
17
- "@memberjunction/core": "6.2.0-edge.0",
18
- "@memberjunction/core-entities": "6.2.0-edge.0",
19
- "@memberjunction/global": "6.2.0-edge.0",
20
- "@memberjunction/graphql-dataprovider": "6.2.0-edge.0",
14
+ "@memberjunction/ai-agent-client": "6.2.0-edge.2",
15
+ "@memberjunction/ai-core-plus": "6.2.0-edge.2",
16
+ "@memberjunction/ai-engine-base": "6.2.0-edge.2",
17
+ "@memberjunction/core": "6.2.0-edge.2",
18
+ "@memberjunction/core-entities": "6.2.0-edge.2",
19
+ "@memberjunction/global": "6.2.0-edge.2",
20
+ "@memberjunction/graphql-dataprovider": "6.2.0-edge.2",
21
21
  "rxjs": "^7.8.2"
22
22
  },
23
23
  "devDependencies": {