@mastra/convex 1.0.5 → 1.0.6-alpha.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/CHANGELOG.md +9 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-storage-convex.md +4 -4
- package/dist/docs/references/reference-vectors-convex.md +26 -26
- package/dist/index.cjs +92 -50
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +92 -50
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts +2 -0
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -318,6 +318,20 @@ var MemoryConvex = class extends MemoryStorage {
|
|
|
318
318
|
const perPage = normalizePerPage(perPageInput, 40);
|
|
319
319
|
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
320
320
|
const { field, direction } = this.parseOrderBy(orderBy, "ASC");
|
|
321
|
+
if (perPage === 0 && (!include || include.length === 0)) {
|
|
322
|
+
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
323
|
+
}
|
|
324
|
+
if (perPage === 0 && include && include.length > 0) {
|
|
325
|
+
const messages2 = await this._getIncludedMessages(include);
|
|
326
|
+
const list = new MessageList().add(messages2, "memory");
|
|
327
|
+
return {
|
|
328
|
+
messages: this._sortMessages(list.get.all.db(), field, direction),
|
|
329
|
+
total: 0,
|
|
330
|
+
page,
|
|
331
|
+
perPage: perPageForResponse,
|
|
332
|
+
hasMore: false
|
|
333
|
+
};
|
|
334
|
+
}
|
|
321
335
|
let rows = [];
|
|
322
336
|
for (const tid of threadIds) {
|
|
323
337
|
const threadRows = await this.#db.queryTable(TABLE_MESSAGES, [{ field: "thread_id", value: tid }]);
|
|
@@ -337,62 +351,27 @@ var MemoryConvex = class extends MemoryStorage {
|
|
|
337
351
|
});
|
|
338
352
|
const totalThreadMessages = rows.length;
|
|
339
353
|
const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);
|
|
340
|
-
|
|
354
|
+
let messages = paginatedRows.map((row) => this.parseStoredMessage(row));
|
|
341
355
|
const messageIds = new Set(messages.map((msg) => msg.id));
|
|
342
356
|
if (include && include.length > 0) {
|
|
343
|
-
const
|
|
344
|
-
|
|
345
|
-
const
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
let target;
|
|
351
|
-
for (const [tid, cachedRows] of threadMessagesCache) {
|
|
352
|
-
target = cachedRows.find((row) => row.id === includeItem.id);
|
|
353
|
-
if (target) {
|
|
354
|
-
targetThreadId = tid;
|
|
355
|
-
break;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
if (!target) {
|
|
359
|
-
const messageRows = await this.#db.queryTable(TABLE_MESSAGES, [
|
|
360
|
-
{ field: "id", value: includeItem.id }
|
|
361
|
-
]);
|
|
362
|
-
if (messageRows.length > 0) {
|
|
363
|
-
target = messageRows[0];
|
|
364
|
-
targetThreadId = target.thread_id;
|
|
365
|
-
if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {
|
|
366
|
-
const otherThreadRows = await this.#db.queryTable(TABLE_MESSAGES, [
|
|
367
|
-
{ field: "thread_id", value: targetThreadId }
|
|
368
|
-
]);
|
|
369
|
-
threadMessagesCache.set(targetThreadId, otherThreadRows);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
357
|
+
const preloadedThreads = /* @__PURE__ */ new Map();
|
|
358
|
+
if (!resourceId && !filter?.dateRange) {
|
|
359
|
+
for (const tid of threadIds) {
|
|
360
|
+
preloadedThreads.set(
|
|
361
|
+
tid,
|
|
362
|
+
rows.filter((r) => r.thread_id === tid)
|
|
363
|
+
);
|
|
372
364
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
365
|
+
}
|
|
366
|
+
const includedMessages = await this._getIncludedMessages(include, preloadedThreads);
|
|
367
|
+
for (const msg of includedMessages) {
|
|
368
|
+
if (!messageIds.has(msg.id)) {
|
|
369
|
+
messages.push(msg);
|
|
370
|
+
messageIds.add(msg.id);
|
|
377
371
|
}
|
|
378
|
-
const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];
|
|
379
|
-
await this.addContextMessages({
|
|
380
|
-
includeItem,
|
|
381
|
-
allMessages: targetThreadRows,
|
|
382
|
-
targetThreadId,
|
|
383
|
-
messageIds,
|
|
384
|
-
messages
|
|
385
|
-
});
|
|
386
372
|
}
|
|
387
373
|
}
|
|
388
|
-
messages.
|
|
389
|
-
const aValue = field === "createdAt" || field === "updatedAt" ? new Date(a[field]).getTime() : a[field];
|
|
390
|
-
const bValue = field === "createdAt" || field === "updatedAt" ? new Date(b[field]).getTime() : b[field];
|
|
391
|
-
if (typeof aValue === "number" && typeof bValue === "number") {
|
|
392
|
-
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
393
|
-
}
|
|
394
|
-
return direction === "ASC" ? String(aValue).localeCompare(String(bValue)) : String(bValue).localeCompare(String(aValue));
|
|
395
|
-
});
|
|
374
|
+
messages = this._sortMessages(messages, field, direction);
|
|
396
375
|
const hasMore = include && include.length > 0 ? new Set(messages.filter((m) => m.threadId === threadId).map((m) => m.id)).size < totalThreadMessages : perPageInput === false ? false : offset + perPage < totalThreadMessages;
|
|
397
376
|
return {
|
|
398
377
|
messages,
|
|
@@ -572,6 +551,69 @@ var MemoryConvex = class extends MemoryStorage {
|
|
|
572
551
|
await this.saveResource({ resource: updated });
|
|
573
552
|
return updated;
|
|
574
553
|
}
|
|
554
|
+
_sortMessages(messages, field, direction) {
|
|
555
|
+
return messages.sort((a, b) => {
|
|
556
|
+
const aValue = field === "createdAt" || field === "updatedAt" ? new Date(a[field]).getTime() : a[field];
|
|
557
|
+
const bValue = field === "createdAt" || field === "updatedAt" ? new Date(b[field]).getTime() : b[field];
|
|
558
|
+
if (typeof aValue === "number" && typeof bValue === "number") {
|
|
559
|
+
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
560
|
+
}
|
|
561
|
+
return direction === "ASC" ? String(aValue).localeCompare(String(bValue)) : String(bValue).localeCompare(String(aValue));
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
async _getIncludedMessages(include, preloadedThreads) {
|
|
565
|
+
if (include.length === 0) return [];
|
|
566
|
+
const messages = [];
|
|
567
|
+
const messageIds = /* @__PURE__ */ new Set();
|
|
568
|
+
const threadMessagesCache = new Map(preloadedThreads ?? []);
|
|
569
|
+
const cachedTargets = /* @__PURE__ */ new Map();
|
|
570
|
+
for (const [threadId, rows] of threadMessagesCache) {
|
|
571
|
+
for (const row of rows) {
|
|
572
|
+
cachedTargets.set(row.id, { threadId, row });
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
for (const includeItem of include) {
|
|
576
|
+
let targetThreadId;
|
|
577
|
+
let target;
|
|
578
|
+
const cached = cachedTargets.get(includeItem.id);
|
|
579
|
+
if (cached) {
|
|
580
|
+
target = cached.row;
|
|
581
|
+
targetThreadId = cached.threadId;
|
|
582
|
+
}
|
|
583
|
+
if (!target) {
|
|
584
|
+
const messageRows = await this.#db.queryTable(TABLE_MESSAGES, [
|
|
585
|
+
{ field: "id", value: includeItem.id }
|
|
586
|
+
]);
|
|
587
|
+
if (messageRows.length > 0) {
|
|
588
|
+
target = messageRows[0];
|
|
589
|
+
targetThreadId = target.thread_id;
|
|
590
|
+
if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {
|
|
591
|
+
const otherThreadRows = await this.#db.queryTable(TABLE_MESSAGES, [
|
|
592
|
+
{ field: "thread_id", value: targetThreadId }
|
|
593
|
+
]);
|
|
594
|
+
threadMessagesCache.set(targetThreadId, otherThreadRows);
|
|
595
|
+
for (const row of otherThreadRows) {
|
|
596
|
+
cachedTargets.set(row.id, { threadId: targetThreadId, row });
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
if (!target || !targetThreadId) continue;
|
|
602
|
+
if (!messageIds.has(target.id)) {
|
|
603
|
+
messages.push(this.parseStoredMessage(target));
|
|
604
|
+
messageIds.add(target.id);
|
|
605
|
+
}
|
|
606
|
+
const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];
|
|
607
|
+
await this.addContextMessages({
|
|
608
|
+
includeItem,
|
|
609
|
+
allMessages: targetThreadRows,
|
|
610
|
+
targetThreadId,
|
|
611
|
+
messageIds,
|
|
612
|
+
messages
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
return messages;
|
|
616
|
+
}
|
|
575
617
|
parseStoredMessage(message) {
|
|
576
618
|
const content = safelyParseJSON(message.content);
|
|
577
619
|
return {
|