@mastra/lance 1.2.1 → 1.2.2-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 CHANGED
@@ -1,5 +1,24 @@
1
1
  # @mastra/lance
2
2
 
3
+ ## 1.2.2-alpha.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed message, thread, and resource updates to avoid recreating incomplete records when an update target is missing. ([#20535](https://github.com/mastra-ai/mastra/pull/20535))
8
+
9
+ - Fixed nine storage adapters declaring a `@mastra/core` peer range that permitted core versions too old to load them. Each adapter imports `storageMessageMatchesMetadataFilter` from `@mastra/core/storage`, which core only exports from 1.53.0, but every one of them still advertised a floor below that — as low as `>=1.0.0-0`. Package managers accepted the incompatible pair without a warning and the install then failed at import time: ([#20591](https://github.com/mastra-ai/mastra/pull/20591))
10
+
11
+ ```
12
+ SyntaxError: The requested module '@mastra/core/storage' does not provide an export named 'storageMessageMatchesMetadataFilter'
13
+ ```
14
+
15
+ All nine now declare `>=1.53.0-0 <2.0.0-0`, so npm and pnpm surface a peer conflict at install time instead of letting the project break on first import.
16
+
17
+ Fixes [#20586](https://github.com/mastra-ai/mastra/issues/20586).
18
+
19
+ - Updated dependencies [[`82201f7`](https://github.com/mastra-ai/mastra/commit/82201f75fae8e050a8de2df08b74875ee74c6b83), [`fb18da5`](https://github.com/mastra-ai/mastra/commit/fb18da56fc35689ae370621a8f10b5b0d8606e20), [`fb18da5`](https://github.com/mastra-ai/mastra/commit/fb18da56fc35689ae370621a8f10b5b0d8606e20), [`0a6598b`](https://github.com/mastra-ai/mastra/commit/0a6598bde80bde008986ad6616bed9632b9294cb), [`9e1dad8`](https://github.com/mastra-ai/mastra/commit/9e1dad8f7b1cab2bb7ade90e5b7561f24577b88a), [`2f43145`](https://github.com/mastra-ai/mastra/commit/2f4314504c03cbba280414ac81ba3197448ee6b0), [`34d34d8`](https://github.com/mastra-ai/mastra/commit/34d34d8c811df512fef4dd5459f79b7821be1866)]:
20
+ - @mastra/core@1.56.0-alpha.6
21
+
3
22
  ## 1.2.1
4
23
 
5
24
  ### Patch Changes
@@ -3,7 +3,7 @@ name: mastra-lance
3
3
  description: Documentation for @mastra/lance. Use when working with @mastra/lance APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/lance"
6
- version: "1.2.1"
6
+ version: "1.2.2-alpha.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -14,9 +14,9 @@ Use this skill whenever you are working with @mastra/lance to obtain the domain-
14
14
 
15
15
  Read the individual reference documents for detailed explanations and code examples.
16
16
 
17
- ### Docs
17
+ ### Guides
18
18
 
19
- - [Storing embeddings in a vector database](references/docs-rag-vector-databases.md) - Guide on vector storage options in Mastra, including embedded and dedicated vector databases for similarity search.
19
+ - [Storing embeddings in a vector database](references/guides-rag-vector-databases.md) - Guide on vector storage options in Mastra, including embedded and dedicated vector databases for similarity search.
20
20
 
21
21
  ### Reference
22
22
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.1",
2
+ "version": "1.2.2-alpha.0",
3
3
  "package": "@mastra/lance",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -314,14 +314,14 @@ var LanceDB = class extends _mastra_core_base.MastraBase {
314
314
  }, error);
315
315
  }
316
316
  }
317
- async insert({ tableName, record }) {
317
+ async update({ tableName, record }) {
318
318
  try {
319
319
  if (!this.client) throw new Error("LanceDB client not initialized. Call LanceStorage.create() first.");
320
- if (!tableName) throw new Error("tableName is required for insert.");
321
- if (!record || Object.keys(record).length === 0) throw new Error("record is required and cannot be empty for insert.");
320
+ if (!tableName) throw new Error("tableName is required for update.");
321
+ if (!record || Object.keys(record).length === 0) throw new Error("record is required and cannot be empty for update.");
322
322
  } catch (validationError) {
323
323
  throw new _mastra_core_error.MastraError({
324
- id: (0, _mastra_core_storage.createStorageErrorId)("LANCE", "INSERT", "INVALID_ARGS"),
324
+ id: (0, _mastra_core_storage.createStorageErrorId)("LANCE", "UPDATE", "INVALID_ARGS"),
325
325
  domain: _mastra_core_error.ErrorDomain.STORAGE,
326
326
  category: _mastra_core_error.ErrorCategory.USER,
327
327
  text: validationError.message,
@@ -338,10 +338,10 @@ var LanceDB = class extends _mastra_core_base.MastraBase {
338
338
  }
339
339
  const filteredRecord = await this.filterRecordToKnownColumns(tableName, processedRecord);
340
340
  if (Object.keys(filteredRecord).length === 0) return;
341
- await table.mergeInsert(primaryId).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([filteredRecord]);
341
+ await table.mergeInsert(primaryId).whenMatchedUpdateAll().execute([filteredRecord]);
342
342
  } catch (error) {
343
343
  throw new _mastra_core_error.MastraError({
344
- id: (0, _mastra_core_storage.createStorageErrorId)("LANCE", "INSERT", "FAILED"),
344
+ id: (0, _mastra_core_storage.createStorageErrorId)("LANCE", "UPDATE", "FAILED"),
345
345
  domain: _mastra_core_error.ErrorDomain.STORAGE,
346
346
  category: _mastra_core_error.ErrorCategory.THIRD_PARTY,
347
347
  details: { tableName }
@@ -689,7 +689,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
689
689
  createdAt: new Date(thread.createdAt).getTime(),
690
690
  updatedAt: now
691
691
  };
692
- await threadsTable.mergeInsert("id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);
692
+ await threadsTable.mergeInsert("id").whenMatchedUpdateAll().execute([record]);
693
693
  }
694
694
  }
695
695
  } catch (error) {
@@ -760,7 +760,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
760
760
  metadata: JSON.stringify(mergedMetadata),
761
761
  updatedAt: (/* @__PURE__ */ new Date()).getTime()
762
762
  };
763
- await (await this.client.openTable(_mastra_core_storage.TABLE_THREADS)).mergeInsert("id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);
763
+ await (await this.client.openTable(_mastra_core_storage.TABLE_THREADS)).mergeInsert("id").whenMatchedUpdateAll().execute([record]);
764
764
  const updatedThread = await this.getThreadById({ threadId: id });
765
765
  if (!updatedThread) throw new Error(`Failed to retrieve updated thread ${id}`);
766
766
  return updatedThread;
@@ -945,13 +945,13 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
945
945
  try {
946
946
  const { messages } = args;
947
947
  if (messages.length === 0) return { messages: [] };
948
- const threadId = messages[0]?.threadId;
949
- if (!threadId) throw new Error("Thread ID is required");
948
+ const threadIds = /* @__PURE__ */ new Set();
950
949
  for (const message of messages) {
951
950
  if (!message.id) throw new Error("Message ID is required");
952
951
  if (!message.threadId) throw new Error("Thread ID is required for all messages");
953
952
  if (message.resourceId === null || message.resourceId === void 0) throw new Error("Resource ID cannot be null or undefined");
954
953
  if (!message.content) throw new Error("Message content is required");
954
+ threadIds.add(message.threadId);
955
955
  }
956
956
  const transformedMessages = messages.map((message) => {
957
957
  const { threadId, type, ...rest } = message;
@@ -962,13 +962,13 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
962
962
  content: JSON.stringify(message.content)
963
963
  };
964
964
  });
965
- await (await this.client.openTable(_mastra_core_storage.TABLE_MESSAGES)).mergeInsert("id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute(transformedMessages);
966
965
  const threadsTable = await this.client.openTable(_mastra_core_storage.TABLE_THREADS);
967
- const updateRecord = {
968
- id: threadId,
969
- updatedAt: (/* @__PURE__ */ new Date()).getTime()
970
- };
971
- await threadsTable.mergeInsert("id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([updateRecord]);
966
+ const currentTime = (/* @__PURE__ */ new Date()).getTime();
967
+ for (const id of threadIds) if ((await threadsTable.mergeInsert("id").whenMatchedUpdateAll().execute([{
968
+ id,
969
+ updatedAt: currentTime
970
+ }])).numUpdatedRows === 0) throw new Error(`Cannot save messages because parent thread ${id} does not exist`);
971
+ await (await this.client.openTable(_mastra_core_storage.TABLE_MESSAGES)).mergeInsert("id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute(transformedMessages);
972
972
  return { messages: new _mastra_core_agent.MessageList().add(messages, "memory").get.all.db() };
973
973
  } catch (error) {
974
974
  throw new _mastra_core_error.MastraError({
@@ -1202,7 +1202,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
1202
1202
  if ("parts" in updates.content && updates.content.parts !== void 0) newContent.parts = updates.content.parts;
1203
1203
  updatePayload.content = JSON.stringify(newContent);
1204
1204
  }
1205
- await this.#db.insert({
1205
+ await this.#db.update({
1206
1206
  tableName: _mastra_core_storage.TABLE_MESSAGES,
1207
1207
  record: {
1208
1208
  id,
@@ -1215,7 +1215,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
1215
1215
  });
1216
1216
  if (updatedMessage) updatedMessages.push(this.parseMessageData(updatedMessage));
1217
1217
  }
1218
- for (const threadId of affectedThreadIds) await this.#db.insert({
1218
+ for (const threadId of affectedThreadIds) await this.#db.update({
1219
1219
  tableName: _mastra_core_storage.TABLE_THREADS,
1220
1220
  record: {
1221
1221
  id: threadId,
@@ -1332,7 +1332,10 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
1332
1332
  metadata: updatedResource.metadata ? JSON.stringify(updatedResource.metadata) : "",
1333
1333
  updatedAt: updatedResource.updatedAt.getTime()
1334
1334
  };
1335
- await (await this.client.openTable(_mastra_core_storage.TABLE_RESOURCES)).mergeInsert("id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([record]);
1335
+ if ((await (await this.client.openTable(_mastra_core_storage.TABLE_RESOURCES)).mergeInsert("id").whenMatchedUpdateAll().execute([record])).numUpdatedRows === 0) {
1336
+ if (attempt < maxRetries - 1) continue;
1337
+ throw new Error(`Resource ${resourceId} disappeared while it was being updated`);
1338
+ }
1336
1339
  return updatedResource;
1337
1340
  } catch (error) {
1338
1341
  if (error.message?.includes("Commit conflict") && attempt < maxRetries - 1) {