@copilotkit/aimock 1.34.0 → 1.35.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +16 -0
- package/README.md +2 -1
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/bedrock-converse.cjs +110 -8
- package/dist/bedrock-converse.cjs.map +1 -1
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock-converse.js +111 -9
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +141 -4
- package/dist/bedrock.cjs.map +1 -1
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/bedrock.js +142 -5
- package/dist/bedrock.js.map +1 -1
- package/dist/cohere.cjs +89 -7
- package/dist/cohere.cjs.map +1 -1
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +90 -8
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/fixture-loader.cjs +121 -20
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +121 -20
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-interactions.cjs +97 -60
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +98 -61
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +71 -6
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +72 -7
- package/dist/gemini.js.map +1 -1
- package/dist/grok-video.cjs +834 -0
- package/dist/grok-video.cjs.map +1 -0
- package/dist/grok-video.d.cts +74 -0
- package/dist/grok-video.d.cts.map +1 -0
- package/dist/grok-video.d.ts +74 -0
- package/dist/grok-video.d.ts.map +1 -0
- package/dist/grok-video.js +829 -0
- package/dist/grok-video.js.map +1 -0
- package/dist/helpers.cjs +181 -2
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +33 -3
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +33 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +181 -3
- package/dist/helpers.js.map +1 -1
- package/dist/index.cjs +11 -0
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +4 -2
- package/dist/messages.cjs +99 -10
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +100 -11
- package/dist/messages.js.map +1 -1
- package/dist/metrics.cjs +11 -1
- package/dist/metrics.cjs.map +1 -1
- package/dist/metrics.d.cts.map +1 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +8 -1
- package/dist/metrics.js.map +1 -1
- package/dist/ollama.cjs +74 -4
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts.map +1 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +75 -5
- package/dist/ollama.js.map +1 -1
- package/dist/openrouter-video.cjs +19 -138
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.d.cts.map +1 -1
- package/dist/openrouter-video.d.ts.map +1 -1
- package/dist/openrouter-video.js +1 -120
- package/dist/openrouter-video.js.map +1 -1
- package/dist/recorder.cjs +12 -9
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.js +12 -9
- package/dist/recorder.js.map +1 -1
- package/dist/responses.cjs +136 -58
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts +2 -2
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts +2 -2
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +137 -59
- package/dist/responses.js.map +1 -1
- package/dist/server.cjs +162 -20
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +4 -0
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +164 -22
- package/dist/server.js.map +1 -1
- package/dist/stream-collapse.cjs +300 -74
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +17 -1
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +17 -1
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +300 -74
- package/dist/stream-collapse.js.map +1 -1
- package/dist/types.d.cts +104 -7
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +104 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/veo-video.cjs +794 -0
- package/dist/veo-video.cjs.map +1 -0
- package/dist/veo-video.d.cts +50 -0
- package/dist/veo-video.d.cts.map +1 -0
- package/dist/veo-video.d.ts +50 -0
- package/dist/veo-video.d.ts.map +1 -0
- package/dist/veo-video.js +789 -0
- package/dist/veo-video.js.map +1 -0
- package/dist/video-proxy-shared.cjs +145 -0
- package/dist/video-proxy-shared.cjs.map +1 -0
- package/dist/video-proxy-shared.js +140 -0
- package/dist/video-proxy-shared.js.map +1 -0
- package/dist/ws-gemini-live.cjs +96 -3
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +97 -4
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +281 -4
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +282 -5
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +1 -1
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.js +1 -1
- package/dist/ws-responses.js.map +1 -1
- package/fixtures/examples/llm/blocks-tool-first.json +13 -0
- package/package.json +1 -1
- package/skills/write-fixtures/SKILL.md +19 -1
package/dist/ws-realtime.cjs
CHANGED
|
@@ -546,6 +546,10 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
546
546
|
fixture
|
|
547
547
|
}
|
|
548
548
|
});
|
|
549
|
+
if (response.blocks && response.blocks.length > 0) {
|
|
550
|
+
await streamRealtimeBlocks(ws, require_helpers.resolveFixtureBlocks(response.blocks), responseId, fixture, defaults, latency, chunkSize, isBeta, conversationItems, journalEntry);
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
549
553
|
sendEvent(ws, {
|
|
550
554
|
type: "response.created",
|
|
551
555
|
response: {
|
|
@@ -598,7 +602,7 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
598
602
|
text: ""
|
|
599
603
|
}
|
|
600
604
|
}, isBeta);
|
|
601
|
-
const content = response.content;
|
|
605
|
+
const content = response.content ?? "";
|
|
602
606
|
const replaySpeed = fixture.replaySpeed ?? defaults.replaySpeed;
|
|
603
607
|
const { recordedTimings } = fixture;
|
|
604
608
|
let eventIndex = 0;
|
|
@@ -695,8 +699,9 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
695
699
|
return;
|
|
696
700
|
}
|
|
697
701
|
allOutputItems.push(textOutputItem);
|
|
698
|
-
|
|
699
|
-
|
|
702
|
+
const toolCalls = response.toolCalls ?? [];
|
|
703
|
+
for (let tcIdx = 0; tcIdx < toolCalls.length; tcIdx++) {
|
|
704
|
+
const tc = toolCalls[tcIdx];
|
|
700
705
|
const callId = tc.id ?? require_helpers.generateToolCallId();
|
|
701
706
|
const itemId = realtimeId("item");
|
|
702
707
|
const outputIndex = tcIdx + 1;
|
|
@@ -882,7 +887,7 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
882
887
|
text: ""
|
|
883
888
|
}
|
|
884
889
|
}, isBeta);
|
|
885
|
-
const content = response.content;
|
|
890
|
+
const content = response.content ?? "";
|
|
886
891
|
const replaySpeed = fixture.replaySpeed ?? defaults.replaySpeed;
|
|
887
892
|
const { recordedTimings } = fixture;
|
|
888
893
|
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
@@ -1147,6 +1152,278 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
1147
1152
|
});
|
|
1148
1153
|
buildErrorRealtimeEvent(ws, "Fixture response did not match any known type", isBeta, "server_error");
|
|
1149
1154
|
}
|
|
1155
|
+
/**
|
|
1156
|
+
* Stream a content+toolCalls fixture's ordered `blocks` over the Realtime WS
|
|
1157
|
+
* surface (#274). Each block becomes its own output item, sequenced on the wire
|
|
1158
|
+
* with an incrementing `output_index` so a client observes the blocks in array
|
|
1159
|
+
* order (text and tool-call items can interleave in any order, unlike the
|
|
1160
|
+
* separate channels of chat-completions). Emits the same per-item event shapes
|
|
1161
|
+
* as the legacy text/tool branches; a blocks-only fixture therefore never
|
|
1162
|
+
* produces an empty payload.
|
|
1163
|
+
*/
|
|
1164
|
+
async function streamRealtimeBlocks(ws, blocks, responseId, fixture, defaults, latency, chunkSize, isBeta, conversationItems, journalEntry) {
|
|
1165
|
+
sendEvent(ws, {
|
|
1166
|
+
type: "response.created",
|
|
1167
|
+
response: {
|
|
1168
|
+
id: responseId,
|
|
1169
|
+
object: "realtime.response",
|
|
1170
|
+
status: "in_progress",
|
|
1171
|
+
status_details: null,
|
|
1172
|
+
output: [],
|
|
1173
|
+
usage: null
|
|
1174
|
+
}
|
|
1175
|
+
}, isBeta);
|
|
1176
|
+
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
1177
|
+
let interrupted = false;
|
|
1178
|
+
const allOutputItems = [];
|
|
1179
|
+
const replaySpeed = fixture.replaySpeed ?? defaults.replaySpeed;
|
|
1180
|
+
const { recordedTimings } = fixture;
|
|
1181
|
+
let eventIndex = 0;
|
|
1182
|
+
const hasToolCalls = blocks.some((b) => b.type === "toolCall");
|
|
1183
|
+
for (let outputIndex = 0; outputIndex < blocks.length; outputIndex++) {
|
|
1184
|
+
if (ws.isClosed || interrupted) break;
|
|
1185
|
+
const block = blocks[outputIndex];
|
|
1186
|
+
if (block.type === "text") {
|
|
1187
|
+
const textItemId = realtimeId("item");
|
|
1188
|
+
const contentIndex = 0;
|
|
1189
|
+
const textPhase = hasToolCalls ? "commentary" : "final_answer";
|
|
1190
|
+
const text = block.text;
|
|
1191
|
+
const textOutputItem = {
|
|
1192
|
+
id: textItemId,
|
|
1193
|
+
type: "message",
|
|
1194
|
+
role: "assistant",
|
|
1195
|
+
status: "completed",
|
|
1196
|
+
content: [{
|
|
1197
|
+
type: "output_text",
|
|
1198
|
+
text
|
|
1199
|
+
}]
|
|
1200
|
+
};
|
|
1201
|
+
sendEvent(ws, {
|
|
1202
|
+
type: "response.output_item.added",
|
|
1203
|
+
response_id: responseId,
|
|
1204
|
+
output_index: outputIndex,
|
|
1205
|
+
item: {
|
|
1206
|
+
id: textItemId,
|
|
1207
|
+
type: "message",
|
|
1208
|
+
role: "assistant",
|
|
1209
|
+
status: "in_progress",
|
|
1210
|
+
content: [],
|
|
1211
|
+
phase: textPhase
|
|
1212
|
+
}
|
|
1213
|
+
}, isBeta);
|
|
1214
|
+
sendEvent(ws, {
|
|
1215
|
+
type: "response.content_part.added",
|
|
1216
|
+
response_id: responseId,
|
|
1217
|
+
item_id: textItemId,
|
|
1218
|
+
output_index: outputIndex,
|
|
1219
|
+
content_index: contentIndex,
|
|
1220
|
+
part: {
|
|
1221
|
+
type: "output_text",
|
|
1222
|
+
text: ""
|
|
1223
|
+
}
|
|
1224
|
+
}, isBeta);
|
|
1225
|
+
for (let i = 0; i < text.length; i += chunkSize) {
|
|
1226
|
+
if (ws.isClosed) break;
|
|
1227
|
+
const chunkDelay = require_sse_writer.calculateDelay(eventIndex, void 0, latency, recordedTimings, replaySpeed);
|
|
1228
|
+
if (chunkDelay > 0) await require_sse_writer.delay(chunkDelay, interruption?.signal);
|
|
1229
|
+
if (interruption?.signal.aborted) {
|
|
1230
|
+
interrupted = true;
|
|
1231
|
+
break;
|
|
1232
|
+
}
|
|
1233
|
+
if (ws.isClosed) break;
|
|
1234
|
+
const chunk = text.slice(i, i + chunkSize);
|
|
1235
|
+
try {
|
|
1236
|
+
sendEvent(ws, {
|
|
1237
|
+
type: "response.output_text.delta",
|
|
1238
|
+
response_id: responseId,
|
|
1239
|
+
item_id: textItemId,
|
|
1240
|
+
output_index: outputIndex,
|
|
1241
|
+
content_index: contentIndex,
|
|
1242
|
+
delta: chunk
|
|
1243
|
+
}, isBeta);
|
|
1244
|
+
} catch (err) {
|
|
1245
|
+
defaults.logger.debug("[ws-realtime] send failed during block text streaming, closing", err);
|
|
1246
|
+
break;
|
|
1247
|
+
}
|
|
1248
|
+
eventIndex++;
|
|
1249
|
+
interruption?.tick();
|
|
1250
|
+
if (interruption?.signal.aborted) {
|
|
1251
|
+
interrupted = true;
|
|
1252
|
+
break;
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
if (interrupted || ws.isClosed) break;
|
|
1256
|
+
sendEvent(ws, {
|
|
1257
|
+
type: "response.output_text.done",
|
|
1258
|
+
response_id: responseId,
|
|
1259
|
+
item_id: textItemId,
|
|
1260
|
+
output_index: outputIndex,
|
|
1261
|
+
content_index: contentIndex,
|
|
1262
|
+
text
|
|
1263
|
+
}, isBeta);
|
|
1264
|
+
if (ws.isClosed) break;
|
|
1265
|
+
sendEvent(ws, {
|
|
1266
|
+
type: "response.content_part.done",
|
|
1267
|
+
response_id: responseId,
|
|
1268
|
+
item_id: textItemId,
|
|
1269
|
+
output_index: outputIndex,
|
|
1270
|
+
content_index: contentIndex,
|
|
1271
|
+
part: {
|
|
1272
|
+
type: "output_text",
|
|
1273
|
+
text
|
|
1274
|
+
}
|
|
1275
|
+
}, isBeta);
|
|
1276
|
+
if (ws.isClosed) break;
|
|
1277
|
+
sendEvent(ws, {
|
|
1278
|
+
type: "response.output_item.done",
|
|
1279
|
+
response_id: responseId,
|
|
1280
|
+
output_index: outputIndex,
|
|
1281
|
+
item: {
|
|
1282
|
+
...textOutputItem,
|
|
1283
|
+
phase: textPhase
|
|
1284
|
+
}
|
|
1285
|
+
}, isBeta);
|
|
1286
|
+
sendEvent(ws, {
|
|
1287
|
+
type: "conversation.item.done",
|
|
1288
|
+
item: {
|
|
1289
|
+
id: textItemId,
|
|
1290
|
+
object: "realtime.item",
|
|
1291
|
+
type: "message",
|
|
1292
|
+
role: "assistant",
|
|
1293
|
+
status: "completed",
|
|
1294
|
+
content: textOutputItem.content
|
|
1295
|
+
}
|
|
1296
|
+
}, isBeta);
|
|
1297
|
+
if (ws.isClosed) break;
|
|
1298
|
+
allOutputItems.push(textOutputItem);
|
|
1299
|
+
} else {
|
|
1300
|
+
const callId = block.id ?? require_helpers.generateToolCallId();
|
|
1301
|
+
const itemId = realtimeId("item");
|
|
1302
|
+
const args = block.arguments;
|
|
1303
|
+
const toolOutputItem = {
|
|
1304
|
+
id: itemId,
|
|
1305
|
+
type: "function_call",
|
|
1306
|
+
status: "completed",
|
|
1307
|
+
call_id: callId,
|
|
1308
|
+
name: block.name,
|
|
1309
|
+
arguments: args
|
|
1310
|
+
};
|
|
1311
|
+
sendEvent(ws, {
|
|
1312
|
+
type: "response.output_item.added",
|
|
1313
|
+
response_id: responseId,
|
|
1314
|
+
output_index: outputIndex,
|
|
1315
|
+
item: {
|
|
1316
|
+
id: itemId,
|
|
1317
|
+
type: "function_call",
|
|
1318
|
+
status: "in_progress",
|
|
1319
|
+
call_id: callId,
|
|
1320
|
+
name: block.name,
|
|
1321
|
+
arguments: "",
|
|
1322
|
+
phase: "final_answer"
|
|
1323
|
+
}
|
|
1324
|
+
}, isBeta);
|
|
1325
|
+
for (let i = 0; i < args.length; i += chunkSize) {
|
|
1326
|
+
if (ws.isClosed) break;
|
|
1327
|
+
const chunkDelay = require_sse_writer.calculateDelay(eventIndex, void 0, latency, recordedTimings, replaySpeed);
|
|
1328
|
+
if (chunkDelay > 0) await require_sse_writer.delay(chunkDelay, interruption?.signal);
|
|
1329
|
+
if (interruption?.signal.aborted) {
|
|
1330
|
+
interrupted = true;
|
|
1331
|
+
break;
|
|
1332
|
+
}
|
|
1333
|
+
if (ws.isClosed) break;
|
|
1334
|
+
const chunk = args.slice(i, i + chunkSize);
|
|
1335
|
+
try {
|
|
1336
|
+
sendEvent(ws, {
|
|
1337
|
+
type: "response.function_call_arguments.delta",
|
|
1338
|
+
response_id: responseId,
|
|
1339
|
+
item_id: itemId,
|
|
1340
|
+
output_index: outputIndex,
|
|
1341
|
+
call_id: callId,
|
|
1342
|
+
delta: chunk
|
|
1343
|
+
}, isBeta);
|
|
1344
|
+
} catch (err) {
|
|
1345
|
+
defaults.logger.debug("[ws-realtime] send failed during block tool call streaming, closing", err);
|
|
1346
|
+
break;
|
|
1347
|
+
}
|
|
1348
|
+
eventIndex++;
|
|
1349
|
+
interruption?.tick();
|
|
1350
|
+
if (interruption?.signal.aborted) {
|
|
1351
|
+
interrupted = true;
|
|
1352
|
+
break;
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
if (interrupted || ws.isClosed) break;
|
|
1356
|
+
sendEvent(ws, {
|
|
1357
|
+
type: "response.function_call_arguments.done",
|
|
1358
|
+
response_id: responseId,
|
|
1359
|
+
item_id: itemId,
|
|
1360
|
+
output_index: outputIndex,
|
|
1361
|
+
call_id: callId,
|
|
1362
|
+
arguments: args
|
|
1363
|
+
}, isBeta);
|
|
1364
|
+
if (ws.isClosed) break;
|
|
1365
|
+
sendEvent(ws, {
|
|
1366
|
+
type: "response.output_item.done",
|
|
1367
|
+
response_id: responseId,
|
|
1368
|
+
output_index: outputIndex,
|
|
1369
|
+
item: {
|
|
1370
|
+
...toolOutputItem,
|
|
1371
|
+
phase: "final_answer"
|
|
1372
|
+
}
|
|
1373
|
+
}, isBeta);
|
|
1374
|
+
sendEvent(ws, {
|
|
1375
|
+
type: "conversation.item.done",
|
|
1376
|
+
item: {
|
|
1377
|
+
id: itemId,
|
|
1378
|
+
object: "realtime.item",
|
|
1379
|
+
type: "function_call",
|
|
1380
|
+
status: "completed",
|
|
1381
|
+
call_id: callId,
|
|
1382
|
+
name: block.name,
|
|
1383
|
+
arguments: args
|
|
1384
|
+
}
|
|
1385
|
+
}, isBeta);
|
|
1386
|
+
if (ws.isClosed) break;
|
|
1387
|
+
allOutputItems.push(toolOutputItem);
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
if (interrupted) {
|
|
1391
|
+
ws.destroy();
|
|
1392
|
+
journalEntry.response.interrupted = true;
|
|
1393
|
+
journalEntry.response.interruptReason = interruption?.reason();
|
|
1394
|
+
interruption?.cleanup();
|
|
1395
|
+
return;
|
|
1396
|
+
}
|
|
1397
|
+
interruption?.cleanup();
|
|
1398
|
+
if (ws.isClosed) return;
|
|
1399
|
+
sendEvent(ws, {
|
|
1400
|
+
type: "response.done",
|
|
1401
|
+
response: {
|
|
1402
|
+
id: responseId,
|
|
1403
|
+
object: "realtime.response",
|
|
1404
|
+
status: "completed",
|
|
1405
|
+
output: allOutputItems,
|
|
1406
|
+
usage: {
|
|
1407
|
+
total_tokens: 0,
|
|
1408
|
+
input_tokens: 0,
|
|
1409
|
+
output_tokens: 0
|
|
1410
|
+
}
|
|
1411
|
+
}
|
|
1412
|
+
}, isBeta);
|
|
1413
|
+
for (const item of allOutputItems) {
|
|
1414
|
+
const it = item;
|
|
1415
|
+
if (it.type === "message") conversationItems.push({
|
|
1416
|
+
type: "message",
|
|
1417
|
+
id: it.id,
|
|
1418
|
+
role: "assistant",
|
|
1419
|
+
content: [{
|
|
1420
|
+
type: "text",
|
|
1421
|
+
text: it.content?.[0]?.text ?? ""
|
|
1422
|
+
}]
|
|
1423
|
+
});
|
|
1424
|
+
else conversationItems.push(item);
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1150
1427
|
|
|
1151
1428
|
//#endregion
|
|
1152
1429
|
exports.handleWebSocketRealtime = handleWebSocketRealtime;
|