@convai/web-sdk 1.8.0-beta.5 → 1.8.0-beta.7

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 (110) hide show
  1. package/README.md +333 -13
  2. package/dist/core/CharacterRoster.d.ts +84 -0
  3. package/dist/core/CharacterRoster.d.ts.map +1 -0
  4. package/dist/core/CharacterRoster.js +348 -0
  5. package/dist/core/CharacterRoster.js.map +1 -0
  6. package/dist/core/ConvaiClient.d.ts +152 -2
  7. package/dist/core/ConvaiClient.d.ts.map +1 -1
  8. package/dist/core/ConvaiClient.js +1036 -49
  9. package/dist/core/ConvaiClient.js.map +1 -1
  10. package/dist/core/ConvaiRoomError.d.ts +48 -0
  11. package/dist/core/ConvaiRoomError.d.ts.map +1 -0
  12. package/dist/core/ConvaiRoomError.js +111 -0
  13. package/dist/core/ConvaiRoomError.js.map +1 -0
  14. package/dist/core/MessageHandler.d.ts +25 -0
  15. package/dist/core/MessageHandler.d.ts.map +1 -1
  16. package/dist/core/MessageHandler.js +431 -30
  17. package/dist/core/MessageHandler.js.map +1 -1
  18. package/dist/core/SSESession.d.ts +15 -0
  19. package/dist/core/SSESession.d.ts.map +1 -1
  20. package/dist/core/SSESession.js +92 -3
  21. package/dist/core/SSESession.js.map +1 -1
  22. package/dist/core/connectRequest.d.ts +38 -2
  23. package/dist/core/connectRequest.d.ts.map +1 -1
  24. package/dist/core/connectRequest.js +57 -0
  25. package/dist/core/connectRequest.js.map +1 -1
  26. package/dist/core/index.d.ts +6 -1
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/index.js +5 -1
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/core/logicalTurn.d.ts +4 -1
  31. package/dist/core/logicalTurn.d.ts.map +1 -1
  32. package/dist/core/logicalTurn.js +35 -4
  33. package/dist/core/logicalTurn.js.map +1 -1
  34. package/dist/core/modelOutput.d.ts +40 -0
  35. package/dist/core/modelOutput.d.ts.map +1 -0
  36. package/dist/core/modelOutput.js +187 -0
  37. package/dist/core/modelOutput.js.map +1 -0
  38. package/dist/core/publishedChat.d.ts +9 -0
  39. package/dist/core/publishedChat.d.ts.map +1 -0
  40. package/dist/core/publishedChat.js +13 -0
  41. package/dist/core/publishedChat.js.map +1 -0
  42. package/dist/core/rosterRequest.d.ts +57 -0
  43. package/dist/core/rosterRequest.d.ts.map +1 -0
  44. package/dist/core/rosterRequest.js +210 -0
  45. package/dist/core/rosterRequest.js.map +1 -0
  46. package/dist/core/types.d.ts +667 -10
  47. package/dist/core/types.d.ts.map +1 -1
  48. package/dist/core/types.js.map +1 -1
  49. package/dist/embed/ConvaiChatElement.d.ts +27 -0
  50. package/dist/embed/ConvaiChatElement.d.ts.map +1 -0
  51. package/dist/embed/ConvaiChatElement.js +300 -0
  52. package/dist/embed/ConvaiChatElement.js.map +1 -0
  53. package/dist/embed/browser.d.ts +3 -0
  54. package/dist/embed/browser.d.ts.map +1 -0
  55. package/dist/embed/browser.js +5 -0
  56. package/dist/embed/browser.js.map +1 -0
  57. package/dist/embed/chat-embed-v1.js +100 -0
  58. package/dist/embed/chat-embed-v1.js.map +7 -0
  59. package/dist/embed/index.d.ts +9 -0
  60. package/dist/embed/index.d.ts.map +1 -0
  61. package/dist/embed/index.js +9 -0
  62. package/dist/embed/index.js.map +1 -0
  63. package/dist/embed/publicationApi.d.ts +23 -0
  64. package/dist/embed/publicationApi.d.ts.map +1 -0
  65. package/dist/embed/publicationApi.js +141 -0
  66. package/dist/embed/publicationApi.js.map +1 -0
  67. package/dist/react/components/ConvaiWidget.d.ts +11 -1
  68. package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
  69. package/dist/react/components/ConvaiWidget.js +67 -11
  70. package/dist/react/components/ConvaiWidget.js.map +1 -1
  71. package/dist/react/components/rtc-widget/components/MarkdownRenderer.d.ts.map +1 -1
  72. package/dist/react/components/rtc-widget/components/MarkdownRenderer.js +39 -44
  73. package/dist/react/components/rtc-widget/components/MarkdownRenderer.js.map +1 -1
  74. package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +1 -1
  75. package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +1 -1
  76. package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js +2 -2
  77. package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -1
  78. package/dist/react/hooks/useConvaiClient.d.ts +2 -0
  79. package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
  80. package/dist/react/hooks/useConvaiClient.js +16 -0
  81. package/dist/react/hooks/useConvaiClient.js.map +1 -1
  82. package/dist/react/index.d.ts +1 -1
  83. package/dist/react/index.d.ts.map +1 -1
  84. package/dist/react/index.js +1 -1
  85. package/dist/react/index.js.map +1 -1
  86. package/dist/utils/inlineMarkdown.d.ts +38 -0
  87. package/dist/utils/inlineMarkdown.d.ts.map +1 -0
  88. package/dist/utils/inlineMarkdown.js +106 -0
  89. package/dist/utils/inlineMarkdown.js.map +1 -0
  90. package/dist/vanilla/AudioRenderer.d.ts.map +1 -1
  91. package/dist/vanilla/AudioRenderer.js +6 -0
  92. package/dist/vanilla/AudioRenderer.js.map +1 -1
  93. package/dist/vanilla/ConvaiWidget.d.ts.map +1 -1
  94. package/dist/vanilla/ConvaiWidget.js +224 -89
  95. package/dist/vanilla/ConvaiWidget.js.map +1 -1
  96. package/dist/vanilla/WidgetEventSubscriptions.d.ts +15 -0
  97. package/dist/vanilla/WidgetEventSubscriptions.d.ts.map +1 -0
  98. package/dist/vanilla/WidgetEventSubscriptions.js +37 -0
  99. package/dist/vanilla/WidgetEventSubscriptions.js.map +1 -0
  100. package/dist/vanilla/index.d.ts +2 -1
  101. package/dist/vanilla/index.d.ts.map +1 -1
  102. package/dist/vanilla/index.js +2 -1
  103. package/dist/vanilla/index.js.map +1 -1
  104. package/dist/vanilla/types.d.ts +8 -1
  105. package/dist/vanilla/types.d.ts.map +1 -1
  106. package/dist/vanilla/types.js.map +1 -1
  107. package/dist/version.d.ts +1 -1
  108. package/dist/version.js +1 -1
  109. package/dist/version.js.map +1 -1
  110. package/package.json +19 -6
@@ -0,0 +1,348 @@
1
+ const PROVISIONING_STATUSES = [
2
+ "dispatch_queued",
3
+ "dispatch_accepted",
4
+ "dispatch_failed",
5
+ ];
6
+ /**
7
+ * Coerce a wire status into the closed union.
8
+ *
9
+ * An unrecognised value becomes `dispatch_queued`, the one state that promises
10
+ * nothing: it means "still working", so a client waits for `bot-ready` rather
11
+ * than acting. Mapping to `dispatch_accepted` would imply an actor exists, and
12
+ * to `dispatch_failed` would hide a member that is actually coming up.
13
+ */
14
+ function toProvisioningStatus(value) {
15
+ return typeof value === "string" && PROVISIONING_STATUSES.includes(value)
16
+ ? value
17
+ : "dispatch_queued";
18
+ }
19
+ /**
20
+ * Convert a wire entry into an instance, or null when it cannot be attributed.
21
+ *
22
+ * A member with no `membership_id` is unaddressable: it cannot be targeted,
23
+ * removed, or matched to a participant. The contract's rule throughout is to
24
+ * fail closed rather than guess, so it is dropped instead of being given a
25
+ * synthesised id that would later collide.
26
+ */
27
+ function toInstance(raw) {
28
+ if (!raw?.membership_id)
29
+ return null;
30
+ return {
31
+ membershipId: raw.membership_id,
32
+ characterId: raw.character_id ?? "",
33
+ sessionId: raw.session_id ?? null,
34
+ characterSessionId: raw.character_session_id ?? null,
35
+ // Identity is derivable and always `character:{membership_id}`. Falling
36
+ // back to it is safe; falling back to a positional name or a LiveKit SID
37
+ // would not be, so those are never used.
38
+ participantIdentity: raw.participant_identity || `character:${raw.membership_id}`,
39
+ isInitial: raw.is_initial === true,
40
+ provisioningStatus: toProvisioningStatus(raw.provisioning_status),
41
+ displayName: raw.display_name ?? null,
42
+ description: raw.description ?? null,
43
+ failureCode: raw.failure_code ?? null,
44
+ isReady: false,
45
+ };
46
+ }
47
+ export class CharacterRoster {
48
+ constructor() {
49
+ this._characters = [];
50
+ this._activeMembershipId = null;
51
+ this._roomSessionId = null;
52
+ this._roomName = null;
53
+ this._requestTraceId = null;
54
+ this._routeEpoch = 0;
55
+ this._rosterEpoch = 0;
56
+ this._partialDispatch = false;
57
+ }
58
+ /** Character instances in roster order. Empty in single-character mode. */
59
+ get characters() {
60
+ return this._characters;
61
+ }
62
+ /** Membership currently receiving user turns, or null. */
63
+ get activeMembershipId() {
64
+ return this._activeMembershipId;
65
+ }
66
+ get roomSessionId() {
67
+ return this._roomSessionId;
68
+ }
69
+ get routeEpoch() {
70
+ return this._routeEpoch;
71
+ }
72
+ get rosterEpoch() {
73
+ return this._rosterEpoch;
74
+ }
75
+ /** True once a multi-character connect response has been applied. */
76
+ get isMultiCharacter() {
77
+ return this._characters.length > 0;
78
+ }
79
+ /** The server-owned snapshot, or null for a single-character session. */
80
+ get roomSession() {
81
+ if (!this._roomSessionId)
82
+ return null;
83
+ return {
84
+ roomSessionId: this._roomSessionId,
85
+ roomName: this._roomName,
86
+ requestTraceId: this._requestTraceId,
87
+ activeMembershipId: this._activeMembershipId,
88
+ routeEpoch: this._routeEpoch,
89
+ rosterEpoch: this._rosterEpoch,
90
+ partialDispatch: this._partialDispatch,
91
+ characters: this._characters,
92
+ };
93
+ }
94
+ find(membershipId) {
95
+ return this._characters.find((c) => c.membershipId === membershipId);
96
+ }
97
+ /** Members that have sent their own `bot-ready`. */
98
+ get readyCharacters() {
99
+ return this._characters.filter((c) => c.isReady);
100
+ }
101
+ /**
102
+ * Mark a member ready from its own `bot-ready`, filling in any detail the
103
+ * connect response did not yet have.
104
+ *
105
+ * Returns whether anything changed, so the caller only pushes state when it
106
+ * did. A single-character `bot-ready` also carries these fields, so nothing
107
+ * is tracked until a roster is actually seeded.
108
+ */
109
+ applyBotReady(about) {
110
+ if (!about || !this.isMultiCharacter)
111
+ return false;
112
+ const incoming = toInstance(about);
113
+ if (!incoming)
114
+ return false;
115
+ const index = this._characters.findIndex((c) => c.membershipId === incoming.membershipId);
116
+ if (index === -1) {
117
+ // A member added at runtime announces itself this way.
118
+ this._characters = [...this._characters, { ...incoming, isReady: true }];
119
+ return true;
120
+ }
121
+ const existing = this._characters[index];
122
+ const merged = {
123
+ ...existing,
124
+ characterSessionId: incoming.characterSessionId ?? existing.characterSessionId,
125
+ sessionId: incoming.sessionId ?? existing.sessionId,
126
+ displayName: incoming.displayName ?? existing.displayName,
127
+ participantIdentity: incoming.participantIdentity || existing.participantIdentity,
128
+ isReady: true,
129
+ };
130
+ if (existing.isReady &&
131
+ merged.characterSessionId === existing.characterSessionId &&
132
+ merged.sessionId === existing.sessionId &&
133
+ merged.participantIdentity === existing.participantIdentity) {
134
+ return false;
135
+ }
136
+ this._characters = [
137
+ ...this._characters.slice(0, index),
138
+ merged,
139
+ ...this._characters.slice(index + 1),
140
+ ];
141
+ return true;
142
+ }
143
+ /**
144
+ * Apply a `character-status` transition. Readiness recorded here is
145
+ * bookkeeping for replacement selection; `bot-ready` remains what gates
146
+ * interaction.
147
+ */
148
+ applyCharacterStatus(status) {
149
+ const index = this._characters.findIndex((c) => c.membershipId === status.membershipId);
150
+ if (index === -1)
151
+ return false;
152
+ const existing = this._characters[index];
153
+ const next = {
154
+ ...existing,
155
+ ...(status.status === "failed"
156
+ ? {
157
+ provisioningStatus: "dispatch_failed",
158
+ failureCode: status.failureCode ?? existing.failureCode,
159
+ isReady: false,
160
+ }
161
+ : {}),
162
+ };
163
+ if (next.provisioningStatus === existing.provisioningStatus &&
164
+ next.failureCode === existing.failureCode &&
165
+ next.isReady === existing.isReady) {
166
+ return false;
167
+ }
168
+ this._characters = [
169
+ ...this._characters.slice(0, index),
170
+ next,
171
+ ...this._characters.slice(index + 1),
172
+ ];
173
+ if (status.status === "failed")
174
+ this._partialDispatch = true;
175
+ return true;
176
+ }
177
+ /**
178
+ * Pick a member to take over routing when the active one is removed.
179
+ *
180
+ * The runtime refuses a replacement that has not sent `bot-ready`
181
+ * (`replacement_target_unavailable`), so ready survivors come first. Falling
182
+ * back to any survivor at least produces a nameable rejection rather than
183
+ * `replacement_target_required`.
184
+ */
185
+ pickReplacement(removing) {
186
+ const removed = new Set(removing);
187
+ const survivors = this._characters.filter((c) => !removed.has(c.membershipId));
188
+ return (survivors.find((c) => c.isReady)?.membershipId ?? survivors[0]?.membershipId);
189
+ }
190
+ /** Payload that switches the active member. */
191
+ buildInteractionTarget(membershipId, commandId) {
192
+ return {
193
+ room_session_id: this._roomSessionId,
194
+ target_membership_id: membershipId,
195
+ expected_route_epoch: this._routeEpoch,
196
+ command_id: commandId,
197
+ };
198
+ }
199
+ /** Payload that adds and removes members. */
200
+ buildRosterUpdate(options, commandId) {
201
+ const add = (options.add ?? []).map((spec) => ({
202
+ character_id: spec.characterId.trim(),
203
+ ...(spec.characterSessionId
204
+ ? { character_session_id: spec.characterSessionId }
205
+ : {}),
206
+ }));
207
+ return {
208
+ room_session_id: this._roomSessionId,
209
+ expected_roster_epoch: this._rosterEpoch,
210
+ command_id: commandId,
211
+ ...(add.length > 0 && { add }),
212
+ ...(options.remove?.length && { remove_membership_ids: options.remove }),
213
+ ...(options.replacementTarget && {
214
+ replacement_target_membership_id: options.replacementTarget,
215
+ }),
216
+ };
217
+ }
218
+ /**
219
+ * Adopt the server's authoritative epochs and active member from any
220
+ * response, errors included.
221
+ *
222
+ * A `stale_route_epoch` rejection carries the real epoch, and adopting it is
223
+ * precisely what makes the single retry meaningful rather than a repeat of
224
+ * the same losing bet.
225
+ */
226
+ adoptEpochs(extras) {
227
+ if (!extras)
228
+ return;
229
+ if (typeof extras.route_epoch === "number")
230
+ this._routeEpoch = extras.route_epoch;
231
+ if (typeof extras.roster_epoch === "number")
232
+ this._rosterEpoch = extras.roster_epoch;
233
+ if (extras.active_membership_id !== undefined) {
234
+ this._activeMembershipId = extras.active_membership_id ?? null;
235
+ }
236
+ }
237
+ /**
238
+ * Apply a successful `interaction-target` ack. Returns the change even when
239
+ * the target did not move, so a caller awaiting the promise always learns the
240
+ * authoritative state.
241
+ */
242
+ applyInteractionTarget(extras) {
243
+ const previous = extras?.previous_membership_id !== undefined
244
+ ? extras.previous_membership_id
245
+ : this._activeMembershipId;
246
+ this.adoptEpochs(extras);
247
+ return {
248
+ previous: previous ?? null,
249
+ active: this._activeMembershipId,
250
+ routeEpoch: this._routeEpoch,
251
+ };
252
+ }
253
+ /** Apply a successful `character-roster-update` ack, mutating the roster. */
254
+ applyRosterUpdate(extras) {
255
+ const added = (Array.isArray(extras?.added) ? extras.added : [])
256
+ .map((c) => toInstance(c))
257
+ .filter((c) => c !== null);
258
+ const removedIds = new Set(Array.isArray(extras?.removed_membership_ids)
259
+ ? extras.removed_membership_ids
260
+ : []);
261
+ // Prefer the roster's own record of a removed member: the ack echoes only
262
+ // its id, and the caller wants the instance it had been rendering.
263
+ const removed = [...removedIds].map((id) => this.find(id) ?? {
264
+ membershipId: id,
265
+ characterId: "",
266
+ sessionId: null,
267
+ characterSessionId: null,
268
+ participantIdentity: `character:${id}`,
269
+ isInitial: false,
270
+ provisioningStatus: "dispatch_failed",
271
+ displayName: null,
272
+ description: null,
273
+ failureCode: null,
274
+ isReady: false,
275
+ });
276
+ const addedIds = new Set(added.map((c) => c.membershipId));
277
+ this._characters = [
278
+ ...this._characters.filter((c) => !removedIds.has(c.membershipId) && !addedIds.has(c.membershipId)),
279
+ ...added,
280
+ ];
281
+ this.adoptEpochs(extras);
282
+ // A removal can retire the member that was active; the ack names the
283
+ // survivor, and adoptEpochs has already taken it.
284
+ if (this._activeMembershipId &&
285
+ !this.find(this._activeMembershipId)) {
286
+ this._activeMembershipId = this._characters[0]?.membershipId ?? null;
287
+ }
288
+ return {
289
+ added,
290
+ removed,
291
+ characters: this._characters,
292
+ rosterEpoch: this._rosterEpoch,
293
+ routeEpoch: this._routeEpoch,
294
+ activeMembershipId: this._activeMembershipId,
295
+ };
296
+ }
297
+ reset() {
298
+ this._characters = [];
299
+ this._activeMembershipId = null;
300
+ this._roomSessionId = null;
301
+ this._roomName = null;
302
+ this._requestTraceId = null;
303
+ this._routeEpoch = 0;
304
+ this._rosterEpoch = 0;
305
+ this._partialDispatch = false;
306
+ }
307
+ /**
308
+ * Seed the roster from a `/connect` response, for either a create or a join.
309
+ *
310
+ * Returns false for a response with no `characters` array — that is an
311
+ * ordinary single-character session, and the roster stays empty so
312
+ * `isMultiCharacter` keeps distinguishing the two.
313
+ */
314
+ applyConnectResponse(data) {
315
+ const raw = data?.characters;
316
+ if (!Array.isArray(raw) || raw.length === 0)
317
+ return false;
318
+ const characters = raw
319
+ .map((c) => toInstance(c))
320
+ .filter((c) => c !== null);
321
+ if (characters.length === 0)
322
+ return false;
323
+ this._characters = characters;
324
+ this._roomSessionId = asString(data.room_session_id);
325
+ this._roomName = asString(data.room_name);
326
+ this._requestTraceId = asString(data.request_trace_id);
327
+ // The server names the active member. Falling back to the initial entry,
328
+ // then to position zero, matches the rule that `characters[0]` is initial.
329
+ this._activeMembershipId =
330
+ asString(data.active_membership_id) ??
331
+ characters.find((c) => c.isInitial)?.membershipId ??
332
+ characters[0]?.membershipId ??
333
+ null;
334
+ this._routeEpoch = asNumber(data.route_epoch) ?? 0;
335
+ this._rosterEpoch = asNumber(data.roster_epoch) ?? 0;
336
+ this._partialDispatch =
337
+ data.partial_dispatch === true ||
338
+ characters.some((c) => c.provisioningStatus === "dispatch_failed");
339
+ return true;
340
+ }
341
+ }
342
+ function asString(value) {
343
+ return typeof value === "string" && value ? value : null;
344
+ }
345
+ function asNumber(value) {
346
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
347
+ }
348
+ //# sourceMappingURL=CharacterRoster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CharacterRoster.js","sourceRoot":"","sources":["../../src/core/CharacterRoster.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ActiveCharacterChange,\n CharacterProvisioningStatus,\n CharacterRosterChange,\n ConvaiCharacterInstance,\n ConvaiCharacterSpec,\n ConvaiRoomSession,\n ServerResponseExtras,\n UpdateCharacterRosterOptions,\n} from \"./types\";\n\n/**\n * Roster state for a multi-character room: which character instances exist,\n * which one receives user turns, and the epochs that fence concurrent changes.\n *\n * Pure state — it owns no transport. `ConvaiClient` feeds it from the connect\n * response, from per-instance readiness events, and from server acks, and\n * publishes whatever commands it builds.\n *\n * Slice A populates the read half below. Roster mutation (`interaction-target`,\n * `character-roster-update`) grows this same class rather than a second home\n * for the same state.\n */\n\n/** A roster entry as it appears on the wire, in any of the places it appears. */\ninterface RawCharacter {\n membership_id?: string;\n character_id?: string;\n session_id?: string | null;\n character_session_id?: string | null;\n participant_identity?: string;\n is_initial?: boolean;\n provisioning_status?: string;\n failure_code?: string | null;\n display_name?: string | null;\n description?: string | null;\n}\n\nconst PROVISIONING_STATUSES: readonly string[] = [\n \"dispatch_queued\",\n \"dispatch_accepted\",\n \"dispatch_failed\",\n];\n\n/**\n * Coerce a wire status into the closed union.\n *\n * An unrecognised value becomes `dispatch_queued`, the one state that promises\n * nothing: it means \"still working\", so a client waits for `bot-ready` rather\n * than acting. Mapping to `dispatch_accepted` would imply an actor exists, and\n * to `dispatch_failed` would hide a member that is actually coming up.\n */\nfunction toProvisioningStatus(value: unknown): CharacterProvisioningStatus {\n return typeof value === \"string\" && PROVISIONING_STATUSES.includes(value)\n ? (value as CharacterProvisioningStatus)\n : \"dispatch_queued\";\n}\n\n/**\n * Convert a wire entry into an instance, or null when it cannot be attributed.\n *\n * A member with no `membership_id` is unaddressable: it cannot be targeted,\n * removed, or matched to a participant. The contract's rule throughout is to\n * fail closed rather than guess, so it is dropped instead of being given a\n * synthesised id that would later collide.\n */\nfunction toInstance(raw: RawCharacter | undefined): ConvaiCharacterInstance | null {\n if (!raw?.membership_id) return null;\n return {\n membershipId: raw.membership_id,\n characterId: raw.character_id ?? \"\",\n sessionId: raw.session_id ?? null,\n characterSessionId: raw.character_session_id ?? null,\n // Identity is derivable and always `character:{membership_id}`. Falling\n // back to it is safe; falling back to a positional name or a LiveKit SID\n // would not be, so those are never used.\n participantIdentity:\n raw.participant_identity || `character:${raw.membership_id}`,\n isInitial: raw.is_initial === true,\n provisioningStatus: toProvisioningStatus(raw.provisioning_status),\n displayName: raw.display_name ?? null,\n description: raw.description ?? null,\n failureCode: raw.failure_code ?? null,\n isReady: false,\n };\n}\n\nexport class CharacterRoster {\n private _characters: ConvaiCharacterInstance[] = [];\n private _activeMembershipId: string | null = null;\n private _roomSessionId: string | null = null;\n private _roomName: string | null = null;\n private _requestTraceId: string | null = null;\n private _routeEpoch = 0;\n private _rosterEpoch = 0;\n private _partialDispatch = false;\n\n /** Character instances in roster order. Empty in single-character mode. */\n get characters(): ConvaiCharacterInstance[] {\n return this._characters;\n }\n\n /** Membership currently receiving user turns, or null. */\n get activeMembershipId(): string | null {\n return this._activeMembershipId;\n }\n\n get roomSessionId(): string | null {\n return this._roomSessionId;\n }\n\n get routeEpoch(): number {\n return this._routeEpoch;\n }\n\n get rosterEpoch(): number {\n return this._rosterEpoch;\n }\n\n /** True once a multi-character connect response has been applied. */\n get isMultiCharacter(): boolean {\n return this._characters.length > 0;\n }\n\n /** The server-owned snapshot, or null for a single-character session. */\n get roomSession(): ConvaiRoomSession | null {\n if (!this._roomSessionId) return null;\n return {\n roomSessionId: this._roomSessionId,\n roomName: this._roomName,\n requestTraceId: this._requestTraceId,\n activeMembershipId: this._activeMembershipId,\n routeEpoch: this._routeEpoch,\n rosterEpoch: this._rosterEpoch,\n partialDispatch: this._partialDispatch,\n characters: this._characters,\n };\n }\n\n find(membershipId: string): ConvaiCharacterInstance | undefined {\n return this._characters.find((c) => c.membershipId === membershipId);\n }\n\n /** Members that have sent their own `bot-ready`. */\n get readyCharacters(): ConvaiCharacterInstance[] {\n return this._characters.filter((c) => c.isReady);\n }\n\n /**\n * Mark a member ready from its own `bot-ready`, filling in any detail the\n * connect response did not yet have.\n *\n * Returns whether anything changed, so the caller only pushes state when it\n * did. A single-character `bot-ready` also carries these fields, so nothing\n * is tracked until a roster is actually seeded.\n */\n applyBotReady(about: Record<string, unknown> | undefined): boolean {\n if (!about || !this.isMultiCharacter) return false;\n const incoming = toInstance(about as RawCharacter);\n if (!incoming) return false;\n\n const index = this._characters.findIndex(\n (c) => c.membershipId === incoming.membershipId,\n );\n if (index === -1) {\n // A member added at runtime announces itself this way.\n this._characters = [...this._characters, { ...incoming, isReady: true }];\n return true;\n }\n\n const existing = this._characters[index]!;\n const merged: ConvaiCharacterInstance = {\n ...existing,\n characterSessionId:\n incoming.characterSessionId ?? existing.characterSessionId,\n sessionId: incoming.sessionId ?? existing.sessionId,\n displayName: incoming.displayName ?? existing.displayName,\n participantIdentity:\n incoming.participantIdentity || existing.participantIdentity,\n isReady: true,\n };\n if (\n existing.isReady &&\n merged.characterSessionId === existing.characterSessionId &&\n merged.sessionId === existing.sessionId &&\n merged.participantIdentity === existing.participantIdentity\n ) {\n return false;\n }\n this._characters = [\n ...this._characters.slice(0, index),\n merged,\n ...this._characters.slice(index + 1),\n ];\n return true;\n }\n\n /**\n * Apply a `character-status` transition. Readiness recorded here is\n * bookkeeping for replacement selection; `bot-ready` remains what gates\n * interaction.\n */\n applyCharacterStatus(status: {\n membershipId: string;\n status: \"starting\" | \"ready\" | \"failed\";\n failureCode: string | null;\n }): boolean {\n const index = this._characters.findIndex(\n (c) => c.membershipId === status.membershipId,\n );\n if (index === -1) return false;\n const existing = this._characters[index]!;\n\n const next: ConvaiCharacterInstance = {\n ...existing,\n ...(status.status === \"failed\"\n ? {\n provisioningStatus: \"dispatch_failed\" as const,\n failureCode: status.failureCode ?? existing.failureCode,\n isReady: false,\n }\n : {}),\n };\n if (\n next.provisioningStatus === existing.provisioningStatus &&\n next.failureCode === existing.failureCode &&\n next.isReady === existing.isReady\n ) {\n return false;\n }\n this._characters = [\n ...this._characters.slice(0, index),\n next,\n ...this._characters.slice(index + 1),\n ];\n if (status.status === \"failed\") this._partialDispatch = true;\n return true;\n }\n\n /**\n * Pick a member to take over routing when the active one is removed.\n *\n * The runtime refuses a replacement that has not sent `bot-ready`\n * (`replacement_target_unavailable`), so ready survivors come first. Falling\n * back to any survivor at least produces a nameable rejection rather than\n * `replacement_target_required`.\n */\n pickReplacement(removing: string[]): string | undefined {\n const removed = new Set(removing);\n const survivors = this._characters.filter(\n (c) => !removed.has(c.membershipId),\n );\n return (\n survivors.find((c) => c.isReady)?.membershipId ?? survivors[0]?.membershipId\n );\n }\n\n /** Payload that switches the active member. */\n buildInteractionTarget(\n membershipId: string | null,\n commandId: string,\n ): Record<string, unknown> {\n return {\n room_session_id: this._roomSessionId,\n target_membership_id: membershipId,\n expected_route_epoch: this._routeEpoch,\n command_id: commandId,\n };\n }\n\n /** Payload that adds and removes members. */\n buildRosterUpdate(\n options: UpdateCharacterRosterOptions,\n commandId: string,\n ): Record<string, unknown> {\n const add = (options.add ?? []).map((spec: ConvaiCharacterSpec) => ({\n character_id: spec.characterId.trim(),\n ...(spec.characterSessionId\n ? { character_session_id: spec.characterSessionId }\n : {}),\n }));\n return {\n room_session_id: this._roomSessionId,\n expected_roster_epoch: this._rosterEpoch,\n command_id: commandId,\n ...(add.length > 0 && { add }),\n ...(options.remove?.length && { remove_membership_ids: options.remove }),\n ...(options.replacementTarget && {\n replacement_target_membership_id: options.replacementTarget,\n }),\n };\n }\n\n /**\n * Adopt the server's authoritative epochs and active member from any\n * response, errors included.\n *\n * A `stale_route_epoch` rejection carries the real epoch, and adopting it is\n * precisely what makes the single retry meaningful rather than a repeat of\n * the same losing bet.\n */\n adoptEpochs(extras: ServerResponseExtras | null | undefined): void {\n if (!extras) return;\n if (typeof extras.route_epoch === \"number\") this._routeEpoch = extras.route_epoch;\n if (typeof extras.roster_epoch === \"number\") this._rosterEpoch = extras.roster_epoch;\n if (extras.active_membership_id !== undefined) {\n this._activeMembershipId = (extras.active_membership_id as string) ?? null;\n }\n }\n\n /**\n * Apply a successful `interaction-target` ack. Returns the change even when\n * the target did not move, so a caller awaiting the promise always learns the\n * authoritative state.\n */\n applyInteractionTarget(\n extras: ServerResponseExtras | null | undefined,\n ): ActiveCharacterChange {\n const previous =\n extras?.previous_membership_id !== undefined\n ? (extras.previous_membership_id as string | null)\n : this._activeMembershipId;\n this.adoptEpochs(extras);\n return {\n previous: previous ?? null,\n active: this._activeMembershipId,\n routeEpoch: this._routeEpoch,\n };\n }\n\n /** Apply a successful `character-roster-update` ack, mutating the roster. */\n applyRosterUpdate(\n extras: ServerResponseExtras | null | undefined,\n ): CharacterRosterChange {\n const added = (Array.isArray(extras?.added) ? extras!.added : [])\n .map((c) => toInstance(c as RawCharacter))\n .filter((c): c is ConvaiCharacterInstance => c !== null);\n\n const removedIds = new Set<string>(\n Array.isArray(extras?.removed_membership_ids)\n ? (extras!.removed_membership_ids as string[])\n : [],\n );\n // Prefer the roster's own record of a removed member: the ack echoes only\n // its id, and the caller wants the instance it had been rendering.\n const removed = [...removedIds].map(\n (id) =>\n this.find(id) ?? {\n membershipId: id,\n characterId: \"\",\n sessionId: null,\n characterSessionId: null,\n participantIdentity: `character:${id}`,\n isInitial: false,\n provisioningStatus: \"dispatch_failed\" as const,\n displayName: null,\n description: null,\n failureCode: null,\n isReady: false,\n },\n );\n\n const addedIds = new Set(added.map((c) => c.membershipId));\n this._characters = [\n ...this._characters.filter(\n (c) => !removedIds.has(c.membershipId) && !addedIds.has(c.membershipId),\n ),\n ...added,\n ];\n this.adoptEpochs(extras);\n // A removal can retire the member that was active; the ack names the\n // survivor, and adoptEpochs has already taken it.\n if (\n this._activeMembershipId &&\n !this.find(this._activeMembershipId)\n ) {\n this._activeMembershipId = this._characters[0]?.membershipId ?? null;\n }\n return {\n added,\n removed,\n characters: this._characters,\n rosterEpoch: this._rosterEpoch,\n routeEpoch: this._routeEpoch,\n activeMembershipId: this._activeMembershipId,\n };\n }\n\n reset(): void {\n this._characters = [];\n this._activeMembershipId = null;\n this._roomSessionId = null;\n this._roomName = null;\n this._requestTraceId = null;\n this._routeEpoch = 0;\n this._rosterEpoch = 0;\n this._partialDispatch = false;\n }\n\n /**\n * Seed the roster from a `/connect` response, for either a create or a join.\n *\n * Returns false for a response with no `characters` array — that is an\n * ordinary single-character session, and the roster stays empty so\n * `isMultiCharacter` keeps distinguishing the two.\n */\n applyConnectResponse(data: Record<string, unknown>): boolean {\n const raw = data?.characters;\n if (!Array.isArray(raw) || raw.length === 0) return false;\n\n const characters = raw\n .map((c) => toInstance(c as RawCharacter))\n .filter((c): c is ConvaiCharacterInstance => c !== null);\n if (characters.length === 0) return false;\n\n this._characters = characters;\n this._roomSessionId = asString(data.room_session_id);\n this._roomName = asString(data.room_name);\n this._requestTraceId = asString(data.request_trace_id);\n // The server names the active member. Falling back to the initial entry,\n // then to position zero, matches the rule that `characters[0]` is initial.\n this._activeMembershipId =\n asString(data.active_membership_id) ??\n characters.find((c) => c.isInitial)?.membershipId ??\n characters[0]?.membershipId ??\n null;\n this._routeEpoch = asNumber(data.route_epoch) ?? 0;\n this._rosterEpoch = asNumber(data.roster_epoch) ?? 0;\n this._partialDispatch =\n data.partial_dispatch === true ||\n characters.some((c) => c.provisioningStatus === \"dispatch_failed\");\n return true;\n }\n}\n\nfunction asString(value: unknown): string | null {\n return typeof value === \"string\" && value ? value : null;\n}\n\nfunction asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n"]}
@@ -1,10 +1,28 @@
1
1
  import { Room } from "livekit-client";
2
- import { ConvaiConfig, ConvaiClientState, ChatMessage, IConvaiClient, AudioControls, VideoControls, ScreenShareControls, DynamicInfo, ContextUpdateOptions, UploadFileOptions, WebSocketSessionFactory, RespondModeUpdateOptions, UpdateSceneMetadataOptions, VisionStatusOptions, VisionTriggerOptions, ConnectionData, SendUserTextMessageOptions } from "./types.js";
2
+ import { ConvaiConfig, ConvaiClientState, ChatMessage, IConvaiClient, PublishedChatConnectOptions, AudioControls, VideoControls, ScreenShareControls, DynamicInfo, ContextUpdateOptions, UploadFileOptions, ServerResponse, WebSocketSessionFactory, RespondModeUpdateOptions, UpdateSceneMetadataOptions, VisionStatusOptions, VisionTriggerOptions, ConnectionData, SendUserTextMessageOptions, ConvaiCharacterInstance, ConvaiRoomSession, JoinRoomOptions, ActiveCharacterChange, CharacterRosterChange, UpdateCharacterRosterOptions, AppendMessageOptions, ConvaiEventMap, ActionResult, ActionResultAck, ActionResultAckFailureReason, ActionResultAckOptions } from "./types.js";
3
3
  import { EventEmitter } from "./EventEmitter.js";
4
4
  import { BlendshapeQueue } from "./BlendshapeQueue.js";
5
5
  import { MemoryManager } from "./MemoryManager.js";
6
6
  import { CharacterVersionManager } from "./CharacterVersionManager.js";
7
7
  import { type CharacterVersionSelector } from "./characterReference.js";
8
+ /**
9
+ * Rejection from {@link ConvaiClient.sendActionResultAndWait} after local
10
+ * validation succeeds. Inspect `reason` rather than parsing the message.
11
+ */
12
+ export declare class ActionResultAckError extends Error {
13
+ readonly reason: ActionResultAckFailureReason;
14
+ readonly toolCallId: string;
15
+ readonly errorCode?: string;
16
+ readonly response?: ServerResponse;
17
+ readonly cause?: unknown;
18
+ constructor(message: string, options: {
19
+ reason: ActionResultAckFailureReason;
20
+ toolCallId: string;
21
+ errorCode?: string;
22
+ response?: ServerResponse;
23
+ cause?: unknown;
24
+ });
25
+ }
8
26
  /**
9
27
  * Main Convai client class for managing AI voice assistant connections
10
28
  * Provides complete interface for connecting to Convai's voice assistants,
@@ -53,6 +71,12 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
53
71
  private _characterVersionManager;
54
72
  private _characterVersionManagerKey;
55
73
  private _characterSessionId;
74
+ /** Roster state for multi-character rooms. Empty for single-character sessions. */
75
+ private _roster;
76
+ /** Roster commands awaiting their ack, keyed by command id. */
77
+ private _pendingRosterCommands;
78
+ private _rosterCommandSeq;
79
+ private _requestTraceId;
56
80
  private _isBotReady;
57
81
  private _participantSid;
58
82
  private _audioSettings;
@@ -69,11 +93,14 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
69
93
  private _sseSession;
70
94
  private _logRtviMessages;
71
95
  private _isDisconnecting;
96
+ private _isPublishedChatSession;
72
97
  private _clientReadyRetryTimer;
73
98
  private _clientReadyTimeoutTimer;
74
99
  private _clientReadyMsgId;
100
+ private _pendingActionResultAcks;
75
101
  private static readonly CLIENT_READY_RETRY_MS;
76
102
  private static readonly CLIENT_READY_TIMEOUT_MS;
103
+ private static readonly ACTION_RESULT_ACK_TIMEOUT_MS;
77
104
  /**
78
105
  * Register the WebSocket transport factory. Called automatically as a side-effect
79
106
  * when you import `@convai/web-sdk/vanilla/websocket` (or the react equivalent).
@@ -90,7 +117,8 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
90
117
  private _memoryManager;
91
118
  constructor(config?: ConvaiConfig);
92
119
  get state(): ConvaiClientState;
93
- get connectionType(): "audio" | "video" | null;
120
+ get connectionType(): "audio" | "video" | "text" | null;
121
+ get isPublishedChatSession(): boolean;
94
122
  get apiKey(): string | null;
95
123
  get authToken(): string | null;
96
124
  get characterId(): string | null;
@@ -107,6 +135,36 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
107
135
  get chatMessages(): ChatMessage[];
108
136
  get userTranscription(): string;
109
137
  get characterSessionId(): string | null;
138
+ /**
139
+ * Subscribe to a client event. Typed against {@link ConvaiEventMap}, so a
140
+ * listener for a known event gets its payload inferred instead of `any`.
141
+ * The plain-string form is kept so existing callers and dynamic event names
142
+ * still build -- which also means a misspelt literal is not a compile error.
143
+ */
144
+ on<E extends keyof ConvaiEventMap>(event: E, callback: (...args: ConvaiEventMap[E]) => void): () => void;
145
+ on(event: string, callback: (...args: any[]) => void): () => void;
146
+ /**
147
+ * Server-owned snapshot of a multi-character room, or null for a
148
+ * single-character session. Carries the room id, epochs and roster.
149
+ */
150
+ get roomSession(): ConvaiRoomSession | null;
151
+ /**
152
+ * Character instances in a multi-character room, in roster order. Empty for a
153
+ * single-character session, so `length` distinguishes the two.
154
+ */
155
+ get characters(): ConvaiCharacterInstance[];
156
+ /** Membership currently receiving user turns, or null. */
157
+ get activeMembershipId(): string | null;
158
+ /**
159
+ * Start or stop the server streaming per-turn usage/cost breakdowns as
160
+ * `usageUpdate` events. Informational only; server-side usage tracking and
161
+ * billing are unaffected either way.
162
+ */
163
+ toggleUsageUpdates(enabled: boolean): void;
164
+ /** Insert a transcript line locally. Nothing is sent; nothing is billed. */
165
+ appendMessage(message: AppendMessageOptions): ChatMessage;
166
+ /** Trace id of the /connect that produced this session; quote it to backend support. */
167
+ get requestTraceId(): string | null;
110
168
  get isBotReady(): boolean;
111
169
  get audioControls(): AudioControls;
112
170
  get videoControls(): VideoControls;
@@ -134,6 +192,11 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
134
192
  * For WebSocket: sends via PipecatClient.sendClientMessage (wrapped in {t,d} envelope).
135
193
  */
136
194
  private publishMessage;
195
+ /**
196
+ * Publish exactly one message while retaining the transport's local completion
197
+ * signal. Server acceptance is still proved separately by `serverResponse`.
198
+ */
199
+ private publishMessageAndWaitForLocalPublication;
137
200
  /**
138
201
  * Returns true when a message can be sent on the active transport.
139
202
  */
@@ -162,6 +225,74 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
162
225
  * await client.connectWithConnectionData(data)
163
226
  */
164
227
  connectWithConnectionData(data: ConnectionData, config?: ConvaiConfig): Promise<void>;
228
+ /**
229
+ * How long to wait for a roster command's ack.
230
+ *
231
+ * A timeout is *not* a failure. Every character participant observes the
232
+ * broadcast and duplicate forwards are response-suppressed after one actor
233
+ * answers, so a lost ack is an expected outcome. The contract's rule is to
234
+ * treat it as unknown and reconcile from the next authoritative snapshot,
235
+ * which is what the rejection below tells the caller to do.
236
+ */
237
+ private static readonly ROSTER_COMMAND_TIMEOUT_MS;
238
+ /** Correlate roster acks back to the promise that issued the command. */
239
+ private _handleRosterServerResponse;
240
+ /**
241
+ * Settle every in-flight roster command.
242
+ *
243
+ * Without this a caller who disconnects mid-command keeps a live 10s timer
244
+ * and gets a rejection long after the session ended -- an unhandled rejection
245
+ * if they stopped awaiting when they tore the client down. The roster is
246
+ * reset alongside, so the command could not be applied meaningfully anyway.
247
+ */
248
+ private _failPendingRosterCommands;
249
+ private _pushRosterState;
250
+ /** Publish a roster command and settle when its ack arrives. */
251
+ private _sendRosterCommand;
252
+ /**
253
+ * Route subsequent user turns to a different character instance.
254
+ *
255
+ * Pass null to close every gate, so no member consumes the user until a
256
+ * target is set again.
257
+ */
258
+ setInteractionTarget(membershipId: string | null): Promise<ActiveCharacterChange>;
259
+ /** Add or remove character instances on a live room, without reconnecting. */
260
+ updateCharacterRoster(options: UpdateCharacterRosterOptions): Promise<CharacterRosterChange>;
261
+ /** Default bounded retry while a roster room is still provisioning. */
262
+ private static readonly ROSTER_RETRY_ATTEMPTS;
263
+ private static readonly ROSTER_RETRY_INITIAL_MS;
264
+ /**
265
+ * Run a room request, retrying only the conflicts that mean "still working".
266
+ *
267
+ * The runtime answers a create that collides with an in-flight identical
268
+ * create with 409 `ROSTER_PROVISIONING_IN_PROGRESS`, and the documented
269
+ * recovery is to retry the same key with bounded backoff. Left to callers,
270
+ * every integration reimplements that, usually without a cap. The payload is
271
+ * replayed verbatim -- changing it would turn the retry into a fingerprint
272
+ * mismatch.
273
+ */
274
+ private _withProvisioningRetry;
275
+ /**
276
+ * Join a multi-character room that already exists.
277
+ *
278
+ * A join supplies a locator and the joining human, and nothing else: the
279
+ * roster is server-owned, so resending topology is rejected. It never spawns,
280
+ * removes or repairs a character -- only room creation does that.
281
+ *
282
+ * Capacity counts distinct speakers derived from `endUserId`, and defaults to
283
+ * one, so raise `maxNumParticipants` at creation before expecting a second
284
+ * human to get in.
285
+ *
286
+ * @example
287
+ * ```ts
288
+ * const client = new ConvaiClient({ apiKey: 'YOUR_API_KEY' })
289
+ * await client.joinRoom({
290
+ * roomSessionId: 'the-room-session-id',
291
+ * endUserId: 'player-99',
292
+ * })
293
+ * ```
294
+ */
295
+ joinRoom(options: JoinRoomOptions): Promise<void>;
165
296
  /**
166
297
  * Add default URL, apply RTVI-logging config, and validate that either an
167
298
  * API key or auth token plus a character ID are present.
@@ -182,6 +313,14 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
182
313
  */
183
314
  private consumeConnectionData;
184
315
  private cleanupWebSocketSessionAfterConnectFailure;
316
+ /**
317
+ * Connect to a published text-chat revision without publisher credentials.
318
+ *
319
+ * The launch grant is single-use and is never retained for reconnect. This
320
+ * path is LiveKit data-only: it does not enable microphone, camera, TTS,
321
+ * video, or lipsync.
322
+ */
323
+ connectWithPublicationGrant(launchToken: string, options?: PublishedChatConnectOptions): Promise<void>;
185
324
  /**
186
325
  * RTVI client-ready handshake. Server-side gates bot-ready emission on
187
326
  * receipt of client-ready (and re-emits bot-ready on every client-ready),
@@ -210,6 +349,17 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
210
349
  * Send a text message to the character
211
350
  */
212
351
  sendUserTextMessage(text: string, options?: SendUserTextMessageOptions): void;
352
+ /**
353
+ * Return a correlated terminal result for a client-executed tool call.
354
+ */
355
+ sendActionResult(result: ActionResult): void;
356
+ /**
357
+ * Publish one correlated terminal result and wait for Core's exact
358
+ * `server-response` acknowledgement. This method performs one publication;
359
+ * callers own any idempotent retry policy.
360
+ */
361
+ sendActionResultAndWait(result: ActionResult, options?: ActionResultAckOptions): Promise<ActionResultAck>;
362
+ private buildActionResultPayload;
213
363
  /**
214
364
  * Send a trigger message to invoke specific character actions
215
365
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ConvaiClient.d.ts","sourceRoot":"","sources":["../../src/core/ConvaiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConvaiClient.d.ts","sourceRoot":"","sources":["../../src/core/ConvaiClient.ts"],"names":[],"mappings":"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"}