@mastra/convex 1.2.1-alpha.0 → 1.2.1-alpha.1
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 +13 -0
- package/dist/{chunk-5T45UI6I.js → chunk-LXPDHMDN.js} +109 -7
- package/dist/chunk-LXPDHMDN.js.map +1 -0
- package/dist/{chunk-MECAZ6GY.cjs → chunk-ZFDTGYKC.cjs} +109 -7
- package/dist/chunk-ZFDTGYKC.cjs.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +6 -6
- package/dist/index.cjs +125 -102
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +120 -97
- package/dist/index.js.map +1 -1
- package/dist/schema.d.ts +11 -11
- package/dist/server/index.cjs +6 -6
- package/dist/server/index.js +1 -1
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/workflow-snapshot.d.ts.map +1 -1
- package/dist/storage/client.d.ts +1 -0
- package/dist/storage/client.d.ts.map +1 -1
- package/dist/storage/db/index.d.ts +21 -1
- package/dist/storage/db/index.d.ts.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/types.d.ts +22 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/vector/index.d.ts +1 -0
- package/dist/vector/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-5T45UI6I.js.map +0 -1
- package/dist/chunk-MECAZ6GY.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkZFDTGYKC_cjs = require('./chunk-ZFDTGYKC.cjs');
|
|
4
4
|
var chunkSFRHJGSM_cjs = require('./chunk-SFRHJGSM.cjs');
|
|
5
5
|
var cache = require('@mastra/core/cache');
|
|
6
6
|
var storage = require('@mastra/core/storage');
|
|
@@ -227,7 +227,8 @@ var ConvexAdminClient = class {
|
|
|
227
227
|
}
|
|
228
228
|
return {
|
|
229
229
|
result: storageResponse.result,
|
|
230
|
-
hasMore: storageResponse.hasMore
|
|
230
|
+
hasMore: storageResponse.hasMore,
|
|
231
|
+
continuationCursor: storageResponse.continuationCursor
|
|
231
232
|
};
|
|
232
233
|
}
|
|
233
234
|
async callStorage(request) {
|
|
@@ -355,6 +356,38 @@ var ConvexDB = class extends base.MastraBase {
|
|
|
355
356
|
record: this.normalizePatch(record)
|
|
356
357
|
});
|
|
357
358
|
}
|
|
359
|
+
async updateThread({
|
|
360
|
+
id,
|
|
361
|
+
title,
|
|
362
|
+
metadata,
|
|
363
|
+
updatedAt
|
|
364
|
+
}) {
|
|
365
|
+
return this.client.callStorage({
|
|
366
|
+
op: "updateThread",
|
|
367
|
+
tableName: storage.TABLE_THREADS,
|
|
368
|
+
id,
|
|
369
|
+
title,
|
|
370
|
+
metadata,
|
|
371
|
+
updatedAt: updatedAt.toISOString()
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
async updateResource({
|
|
375
|
+
resourceId,
|
|
376
|
+
workingMemory,
|
|
377
|
+
metadata,
|
|
378
|
+
createdAt,
|
|
379
|
+
updatedAt
|
|
380
|
+
}) {
|
|
381
|
+
return this.client.callStorage({
|
|
382
|
+
op: "updateResource",
|
|
383
|
+
tableName: storage.TABLE_RESOURCES,
|
|
384
|
+
resourceId,
|
|
385
|
+
...workingMemory !== void 0 ? { workingMemory } : {},
|
|
386
|
+
...metadata !== void 0 ? { metadata } : {},
|
|
387
|
+
createdAt: createdAt.toISOString(),
|
|
388
|
+
updatedAt: updatedAt.toISOString()
|
|
389
|
+
});
|
|
390
|
+
}
|
|
358
391
|
async load({ tableName, keys }) {
|
|
359
392
|
const result = await this.client.callStorage({
|
|
360
393
|
op: "load",
|
|
@@ -841,6 +874,23 @@ var ChannelsConvex = class extends storage.ChannelsStorage {
|
|
|
841
874
|
await this.#db.deleteMany(storage.TABLE_CHANNEL_CONFIG, [platform]);
|
|
842
875
|
}
|
|
843
876
|
};
|
|
877
|
+
function parseStoredThread(row) {
|
|
878
|
+
return {
|
|
879
|
+
...row,
|
|
880
|
+
metadata: typeof row.metadata === "string" ? storage.safelyParseJSON(row.metadata) : row.metadata,
|
|
881
|
+
createdAt: new Date(row.createdAt),
|
|
882
|
+
updatedAt: new Date(row.updatedAt)
|
|
883
|
+
};
|
|
884
|
+
}
|
|
885
|
+
function parseStoredResource(record) {
|
|
886
|
+
const metadata = typeof record.metadata === "string" ? storage.safelyParseJSON(record.metadata) : record.metadata;
|
|
887
|
+
return {
|
|
888
|
+
...record,
|
|
889
|
+
metadata: metadata ?? {},
|
|
890
|
+
createdAt: new Date(record.createdAt),
|
|
891
|
+
updatedAt: new Date(record.updatedAt)
|
|
892
|
+
};
|
|
893
|
+
}
|
|
844
894
|
var MemoryConvex = class extends storage.MemoryStorage {
|
|
845
895
|
#db;
|
|
846
896
|
constructor(config) {
|
|
@@ -864,12 +914,7 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
864
914
|
keys: { id: threadId }
|
|
865
915
|
});
|
|
866
916
|
if (!row || resourceId !== void 0 && row.resourceId !== resourceId) return null;
|
|
867
|
-
return
|
|
868
|
-
...row,
|
|
869
|
-
metadata: typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata,
|
|
870
|
-
createdAt: new Date(row.createdAt),
|
|
871
|
-
updatedAt: new Date(row.updatedAt)
|
|
872
|
-
};
|
|
917
|
+
return parseStoredThread(row);
|
|
873
918
|
}
|
|
874
919
|
async saveThread({ thread }) {
|
|
875
920
|
await this.#db.insert({
|
|
@@ -886,8 +931,13 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
886
931
|
title,
|
|
887
932
|
metadata
|
|
888
933
|
}) {
|
|
889
|
-
const
|
|
890
|
-
|
|
934
|
+
const updated = await this.#db.updateThread({
|
|
935
|
+
id,
|
|
936
|
+
title,
|
|
937
|
+
metadata,
|
|
938
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
939
|
+
});
|
|
940
|
+
if (!updated) {
|
|
891
941
|
throw new error.MastraError({
|
|
892
942
|
id: storage.createStorageErrorId("CONVEX", "UPDATE_THREAD", "THREAD_NOT_FOUND"),
|
|
893
943
|
domain: error.ErrorDomain.STORAGE,
|
|
@@ -895,17 +945,7 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
895
945
|
text: `Thread ${id} not found`
|
|
896
946
|
});
|
|
897
947
|
}
|
|
898
|
-
|
|
899
|
-
...existing,
|
|
900
|
-
title,
|
|
901
|
-
metadata: {
|
|
902
|
-
...existing.metadata,
|
|
903
|
-
...metadata
|
|
904
|
-
},
|
|
905
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
906
|
-
};
|
|
907
|
-
await this.saveThread({ thread: updated });
|
|
908
|
-
return updated;
|
|
948
|
+
return parseStoredThread(updated);
|
|
909
949
|
}
|
|
910
950
|
async deleteThread({ threadId }) {
|
|
911
951
|
const messages = await this.#db.queryTable(storage.TABLE_MESSAGES, [
|
|
@@ -933,6 +973,19 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
933
973
|
);
|
|
934
974
|
}
|
|
935
975
|
const perPage = storage.normalizePerPage(perPageInput, 100);
|
|
976
|
+
try {
|
|
977
|
+
this.validateMetadataKeys(filter?.metadata);
|
|
978
|
+
} catch (error$1) {
|
|
979
|
+
throw new error.MastraError(
|
|
980
|
+
{
|
|
981
|
+
id: storage.createStorageErrorId("CONVEX", "LIST_THREADS", "INVALID_METADATA_KEY"),
|
|
982
|
+
domain: error.ErrorDomain.STORAGE,
|
|
983
|
+
category: error.ErrorCategory.USER,
|
|
984
|
+
details: { metadataKeys: filter?.metadata ? Object.keys(filter.metadata).join(", ") : "" }
|
|
985
|
+
},
|
|
986
|
+
error$1 instanceof Error ? error$1 : new Error("Invalid metadata key")
|
|
987
|
+
);
|
|
988
|
+
}
|
|
936
989
|
const { field, direction } = this.parseOrderBy(orderBy);
|
|
937
990
|
const { offset, perPage: perPageForResponse } = storage.calculatePagination(page, perPageInput, perPage);
|
|
938
991
|
const queryFilters = [];
|
|
@@ -940,15 +993,10 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
940
993
|
queryFilters.push({ field: "resourceId", value: filter.resourceId });
|
|
941
994
|
}
|
|
942
995
|
const rows = await this.#db.queryTable(storage.TABLE_THREADS, queryFilters);
|
|
943
|
-
let threads = rows.map((row) => (
|
|
944
|
-
...row,
|
|
945
|
-
metadata: typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata,
|
|
946
|
-
createdAt: new Date(row.createdAt),
|
|
947
|
-
updatedAt: new Date(row.updatedAt)
|
|
948
|
-
}));
|
|
996
|
+
let threads = rows.map((row) => parseStoredThread(row));
|
|
949
997
|
if (filter?.metadata && Object.keys(filter.metadata).length > 0) {
|
|
950
998
|
threads = threads.filter((thread) => {
|
|
951
|
-
if (!thread.metadata) return false;
|
|
999
|
+
if (!thread.metadata || typeof thread.metadata !== "object" || Array.isArray(thread.metadata)) return false;
|
|
952
1000
|
return Object.entries(filter.metadata).every(([key, value]) => thread.metadata[key] === value);
|
|
953
1001
|
});
|
|
954
1002
|
}
|
|
@@ -1085,19 +1133,11 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
1085
1133
|
const threadIds = [...new Set(messages.map((m) => m.threadId).filter(Boolean))];
|
|
1086
1134
|
const now = /* @__PURE__ */ new Date();
|
|
1087
1135
|
for (const threadId of threadIds) {
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
...thread,
|
|
1094
|
-
id: thread.id,
|
|
1095
|
-
updatedAt: now.toISOString(),
|
|
1096
|
-
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,
|
|
1097
|
-
metadata: thread.metadata ?? {}
|
|
1098
|
-
}
|
|
1099
|
-
});
|
|
1100
|
-
}
|
|
1136
|
+
await this.#db.patch({
|
|
1137
|
+
tableName: storage.TABLE_THREADS,
|
|
1138
|
+
id: threadId,
|
|
1139
|
+
record: { updatedAt: now.toISOString() }
|
|
1140
|
+
});
|
|
1101
1141
|
}
|
|
1102
1142
|
const list = new agent.MessageList().add(messages, "memory");
|
|
1103
1143
|
return { messages: list.get.all.db() };
|
|
@@ -1143,19 +1183,11 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
1143
1183
|
}
|
|
1144
1184
|
const now = /* @__PURE__ */ new Date();
|
|
1145
1185
|
for (const threadId of affectedThreadIds) {
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
...thread,
|
|
1152
|
-
id: thread.id,
|
|
1153
|
-
updatedAt: now.toISOString(),
|
|
1154
|
-
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,
|
|
1155
|
-
metadata: thread.metadata ?? {}
|
|
1156
|
-
}
|
|
1157
|
-
});
|
|
1158
|
-
}
|
|
1186
|
+
await this.#db.patch({
|
|
1187
|
+
tableName: storage.TABLE_THREADS,
|
|
1188
|
+
id: threadId,
|
|
1189
|
+
record: { updatedAt: now.toISOString() }
|
|
1190
|
+
});
|
|
1159
1191
|
}
|
|
1160
1192
|
return updated;
|
|
1161
1193
|
}
|
|
@@ -1183,41 +1215,22 @@ var MemoryConvex = class extends storage.MemoryStorage {
|
|
|
1183
1215
|
keys: { id: resourceId }
|
|
1184
1216
|
});
|
|
1185
1217
|
if (!record) return null;
|
|
1186
|
-
return
|
|
1187
|
-
...record,
|
|
1188
|
-
metadata: typeof record.metadata === "string" ? storage.safelyParseJSON(record.metadata) : record.metadata,
|
|
1189
|
-
createdAt: new Date(record.createdAt),
|
|
1190
|
-
updatedAt: new Date(record.updatedAt)
|
|
1191
|
-
};
|
|
1218
|
+
return parseStoredResource(record);
|
|
1192
1219
|
}
|
|
1193
1220
|
async updateResource({
|
|
1194
1221
|
resourceId,
|
|
1195
1222
|
workingMemory,
|
|
1196
1223
|
metadata
|
|
1197
1224
|
}) {
|
|
1198
|
-
const existing = await this.getResourceById({ resourceId });
|
|
1199
1225
|
const now = /* @__PURE__ */ new Date();
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
createdAt: now,
|
|
1206
|
-
updatedAt: now
|
|
1207
|
-
};
|
|
1208
|
-
return this.saveResource({ resource: created });
|
|
1209
|
-
}
|
|
1210
|
-
const updated = {
|
|
1211
|
-
...existing,
|
|
1212
|
-
workingMemory: workingMemory ?? existing.workingMemory,
|
|
1213
|
-
metadata: {
|
|
1214
|
-
...existing.metadata,
|
|
1215
|
-
...metadata
|
|
1216
|
-
},
|
|
1226
|
+
const updated = await this.#db.updateResource({
|
|
1227
|
+
resourceId,
|
|
1228
|
+
workingMemory,
|
|
1229
|
+
metadata,
|
|
1230
|
+
createdAt: now,
|
|
1217
1231
|
updatedAt: now
|
|
1218
|
-
};
|
|
1219
|
-
|
|
1220
|
-
return updated;
|
|
1232
|
+
});
|
|
1233
|
+
return parseStoredResource(updated);
|
|
1221
1234
|
}
|
|
1222
1235
|
_sortMessages(messages, field, direction) {
|
|
1223
1236
|
return messages.sort((a, b) => {
|
|
@@ -1850,6 +1863,7 @@ var ConvexStore = class extends storage.MastraCompositeStore {
|
|
|
1850
1863
|
}
|
|
1851
1864
|
};
|
|
1852
1865
|
var INDEX_METADATA_TABLE = "mastra_vector_indexes";
|
|
1866
|
+
var VECTOR_QUERY_PAGE_SIZE = 256;
|
|
1853
1867
|
var ConvexVector = class extends vector.MastraVector {
|
|
1854
1868
|
client;
|
|
1855
1869
|
constructor(config) {
|
|
@@ -1902,10 +1916,7 @@ var ConvexVector = class extends vector.MastraVector {
|
|
|
1902
1916
|
if (!index) {
|
|
1903
1917
|
throw new Error(`Index ${indexName} not found`);
|
|
1904
1918
|
}
|
|
1905
|
-
const vectors = await this.
|
|
1906
|
-
op: "queryTable",
|
|
1907
|
-
tableName: this.vectorTable(indexName)
|
|
1908
|
-
});
|
|
1919
|
+
const vectors = await this.queryAllVectors(indexName);
|
|
1909
1920
|
return {
|
|
1910
1921
|
dimension: index.dimension,
|
|
1911
1922
|
count: vectors.length,
|
|
@@ -1942,10 +1953,7 @@ var ConvexVector = class extends vector.MastraVector {
|
|
|
1942
1953
|
details: { indexName }
|
|
1943
1954
|
});
|
|
1944
1955
|
}
|
|
1945
|
-
const vectors = await this.
|
|
1946
|
-
op: "queryTable",
|
|
1947
|
-
tableName: this.vectorTable(indexName)
|
|
1948
|
-
});
|
|
1956
|
+
const vectors = await this.queryAllVectors(indexName);
|
|
1949
1957
|
const filtered = filter && !this.isEmptyFilter(filter) ? vectors.filter((record) => this.matchesFilter(record.metadata, filter)) : vectors;
|
|
1950
1958
|
const scored = filtered.map((record) => ({
|
|
1951
1959
|
id: record.id,
|
|
@@ -1966,10 +1974,7 @@ var ConvexVector = class extends vector.MastraVector {
|
|
|
1966
1974
|
if (this.isEmptyFilter(filter)) {
|
|
1967
1975
|
throw new Error("ConvexVector.updateVector: cannot update with empty filter");
|
|
1968
1976
|
}
|
|
1969
|
-
const vectors = await this.
|
|
1970
|
-
op: "queryTable",
|
|
1971
|
-
tableName: this.vectorTable(params.indexName)
|
|
1972
|
-
});
|
|
1977
|
+
const vectors = await this.queryAllVectors(params.indexName);
|
|
1973
1978
|
const matching = vectors.filter((record) => this.matchesFilter(record.metadata, filter));
|
|
1974
1979
|
for (const existing2 of matching) {
|
|
1975
1980
|
const updated2 = {
|
|
@@ -2038,10 +2043,7 @@ var ConvexVector = class extends vector.MastraVector {
|
|
|
2038
2043
|
if (this.isEmptyFilter(filter)) {
|
|
2039
2044
|
throw new Error("ConvexVector.deleteVectors: cannot delete with empty filter");
|
|
2040
2045
|
}
|
|
2041
|
-
const vectors = await this.
|
|
2042
|
-
op: "queryTable",
|
|
2043
|
-
tableName: this.vectorTable(indexName)
|
|
2044
|
-
});
|
|
2046
|
+
const vectors = await this.queryAllVectors(indexName);
|
|
2045
2047
|
const matchingIds = vectors.filter((record) => this.matchesFilter(record.metadata, filter)).map((record) => record.id);
|
|
2046
2048
|
if (matchingIds.length > 0) {
|
|
2047
2049
|
await this.callStorage({
|
|
@@ -2129,6 +2131,27 @@ var ConvexVector = class extends vector.MastraVector {
|
|
|
2129
2131
|
async callStorage(request) {
|
|
2130
2132
|
return this.client.callStorage(request);
|
|
2131
2133
|
}
|
|
2134
|
+
async queryAllVectors(indexName) {
|
|
2135
|
+
const vectors = [];
|
|
2136
|
+
let cursor = null;
|
|
2137
|
+
let hasMore = true;
|
|
2138
|
+
while (hasMore) {
|
|
2139
|
+
const response = await this.client.callStorageRaw({
|
|
2140
|
+
op: "queryTable",
|
|
2141
|
+
tableName: this.vectorTable(indexName),
|
|
2142
|
+
pageSize: VECTOR_QUERY_PAGE_SIZE,
|
|
2143
|
+
cursor
|
|
2144
|
+
});
|
|
2145
|
+
vectors.push(...response.result);
|
|
2146
|
+
const nextCursor = response.continuationCursor ?? null;
|
|
2147
|
+
hasMore = response.hasMore ?? false;
|
|
2148
|
+
if (hasMore && (!nextCursor || nextCursor === cursor)) {
|
|
2149
|
+
throw new Error("ConvexVector: paginated vector query did not return a valid continuation cursor");
|
|
2150
|
+
}
|
|
2151
|
+
cursor = nextCursor;
|
|
2152
|
+
}
|
|
2153
|
+
return vectors;
|
|
2154
|
+
}
|
|
2132
2155
|
/**
|
|
2133
2156
|
* Call storage repeatedly until hasMore is false.
|
|
2134
2157
|
* Use for bulk operations like clearTable that may need multiple batches.
|
|
@@ -2406,23 +2429,23 @@ var ConvexNativeVector = class extends vector.MastraVector {
|
|
|
2406
2429
|
|
|
2407
2430
|
Object.defineProperty(exports, "mastraCache", {
|
|
2408
2431
|
enumerable: true,
|
|
2409
|
-
get: function () { return
|
|
2432
|
+
get: function () { return chunkZFDTGYKC_cjs.mastraCache; }
|
|
2410
2433
|
});
|
|
2411
2434
|
Object.defineProperty(exports, "mastraNativeVectorAction", {
|
|
2412
2435
|
enumerable: true,
|
|
2413
|
-
get: function () { return
|
|
2436
|
+
get: function () { return chunkZFDTGYKC_cjs.mastraNativeVectorAction; }
|
|
2414
2437
|
});
|
|
2415
2438
|
Object.defineProperty(exports, "mastraNativeVectorMutation", {
|
|
2416
2439
|
enumerable: true,
|
|
2417
|
-
get: function () { return
|
|
2440
|
+
get: function () { return chunkZFDTGYKC_cjs.mastraNativeVectorMutation; }
|
|
2418
2441
|
});
|
|
2419
2442
|
Object.defineProperty(exports, "mastraNativeVectorQuery", {
|
|
2420
2443
|
enumerable: true,
|
|
2421
|
-
get: function () { return
|
|
2444
|
+
get: function () { return chunkZFDTGYKC_cjs.mastraNativeVectorQuery; }
|
|
2422
2445
|
});
|
|
2423
2446
|
Object.defineProperty(exports, "mastraStorage", {
|
|
2424
2447
|
enumerable: true,
|
|
2425
|
-
get: function () { return
|
|
2448
|
+
get: function () { return chunkZFDTGYKC_cjs.mastraStorage; }
|
|
2426
2449
|
});
|
|
2427
2450
|
Object.defineProperty(exports, "TABLE_BACKGROUND_TASKS", {
|
|
2428
2451
|
enumerable: true,
|