@mastra/lance 1.2.2 → 1.3.0-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 CHANGED
@@ -1,5 +1,41 @@
1
1
  # @mastra/lance
2
2
 
3
+ ## 1.3.0-alpha.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed resource-scoped message includes across storage adapters so included context cannot cross resource boundaries. ([#20984](https://github.com/mastra-ai/mastra/pull/20984))
8
+
9
+ - Updated dependencies [[`6445eba`](https://github.com/mastra-ai/mastra/commit/6445eba6020abac681aba1cc9289f446cb400cbe), [`df31eb0`](https://github.com/mastra-ai/mastra/commit/df31eb0c7087d782a0d9346e467f9a4af4b0eef6), [`fcd0667`](https://github.com/mastra-ai/mastra/commit/fcd0667a4e378be35c9a1b1eb19cce78fbfd7282), [`bab06b1`](https://github.com/mastra-ai/mastra/commit/bab06b18923873a584bdfc71a6b4ec7fb4727fb7)]:
10
+ - @mastra/core@1.58.0-alpha.5
11
+
12
+ ## 1.3.0-alpha.0
13
+
14
+ ### Minor Changes
15
+
16
+ - Memory list reads now surface database errors instead of silently returning empty results. ([#17910](https://github.com/mastra-ai/mastra/pull/17910))
17
+
18
+ Previously, the paginated memory reads (`listThreads`, `listMessages`, `listMessagesByResourceId`, and `listMessagesById`) caught backend failures, logged them, and returned an empty payload like `{ threads: [], total: 0, hasMore: false }`. A transient outage (locked table, dropped connection) was therefore indistinguishable from a genuinely empty result, so an agent reading conversation history during a brief failure would treat it as "no history" and could overwrite real state. These methods now re-throw the failure as a `MastraError`. Validation (USER) errors and genuinely empty results are unchanged.
19
+
20
+ **Behavior change**
21
+
22
+ Callers that previously received an empty result on a backend failure will now receive a thrown `MastraError`. If you call these read methods directly (rather than through an agent, which already surfaces errors), wrap them so a transient outage doesn't crash the caller:
23
+
24
+ ```ts
25
+ try {
26
+ const { threads } = await storage.listThreads({ resourceId });
27
+ // ...use threads
28
+ } catch (error) {
29
+ // a real backend failure. Decide whether to retry, surface, or degrade.
30
+ // An empty thread list no longer hides here; it only means "no threads".
31
+ }
32
+ ```
33
+
34
+ ### Patch Changes
35
+
36
+ - Updated dependencies [[`e7109ee`](https://github.com/mastra-ai/mastra/commit/e7109ee6f731bacc79c885906f3c7dca8d8f013a), [`772c0c8`](https://github.com/mastra-ai/mastra/commit/772c0c897cec383258de2e6178147f8014767c7b), [`578bf2e`](https://github.com/mastra-ai/mastra/commit/578bf2e6a88e9d5b8bf502204e15a95dfbb679ae), [`06b2d87`](https://github.com/mastra-ai/mastra/commit/06b2d87e63bcdd0ed59215c6789692b9b12de376), [`ac01d63`](https://github.com/mastra-ai/mastra/commit/ac01d6355974aec73fdb8781449ed12bac582094), [`a810a05`](https://github.com/mastra-ai/mastra/commit/a810a058f62ad407cfc1701e0be36ae91145d7cf), [`f8da216`](https://github.com/mastra-ai/mastra/commit/f8da21633e7eb0e31c9ce0fc30567870d19416d3), [`6104347`](https://github.com/mastra-ai/mastra/commit/61043473ba6bfd0a25156824e853e13165562e6c), [`45bfb88`](https://github.com/mastra-ai/mastra/commit/45bfb88fd52f1dd3be20e2a38905777c96499c90), [`e3b9307`](https://github.com/mastra-ai/mastra/commit/e3b9307098daefbfae2a52ae2ef51bc9fc701190), [`d6834c5`](https://github.com/mastra-ai/mastra/commit/d6834c5a7866b16734d23900163c2414ed70d791), [`c52d346`](https://github.com/mastra-ai/mastra/commit/c52d3462ec831a5d95926ecd3d3373f5928ad2e5), [`0023e79`](https://github.com/mastra-ai/mastra/commit/0023e7919431078280abd11c89d1edeae35fcc69), [`c2ad51e`](https://github.com/mastra-ai/mastra/commit/c2ad51e2467f901eecba8c9f4a45e22a50bd7c18), [`3dc97ea`](https://github.com/mastra-ai/mastra/commit/3dc97ea415fad353b48a13095fad1835933cc12a), [`3d01cd3`](https://github.com/mastra-ai/mastra/commit/3d01cd387321b6f9c5cac31d487c84bf51b19c78), [`7bf3086`](https://github.com/mastra-ai/mastra/commit/7bf308663f0115ca74ad20554ade740f06640859), [`a8dd139`](https://github.com/mastra-ai/mastra/commit/a8dd1391a9fe9a6632c25809ef236980afa9a020), [`e5786be`](https://github.com/mastra-ai/mastra/commit/e5786be02bb903073082bd9d6da880ebaacc343f), [`2093fbd`](https://github.com/mastra-ai/mastra/commit/2093fbd53bb744bae19ec89f6d73db9a66fbe8a7), [`e7a5da4`](https://github.com/mastra-ai/mastra/commit/e7a5da4ef8e4dd452d2f232961b4e682a85ffe43), [`7b4393d`](https://github.com/mastra-ai/mastra/commit/7b4393d557411fdcf07b0e30e5acaf7cc85154ae)]:
37
+ - @mastra/core@1.58.0-alpha.1
38
+
3
39
  ## 1.2.2
4
40
 
5
41
  ### 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.2"
6
+ version: "1.3.0-alpha.1"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.2",
2
+ "version": "1.3.0-alpha.1",
3
3
  "package": "@mastra/lance",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -869,7 +869,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
869
869
  hasMore: false
870
870
  };
871
871
  if (perPage === 0 && include && include.length > 0) {
872
- const includedMessages = await this._getIncludedMessages(table, include);
872
+ const includedMessages = await this._getIncludedMessages(table, include, resourceId);
873
873
  const list = new _mastra_core_agent.MessageList().add(includedMessages, "memory");
874
874
  return {
875
875
  messages: this._sortMessages(list.get.all.db(), field, direction),
@@ -902,7 +902,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
902
902
  const primaryPageCount = messages.length;
903
903
  const messageIds = new Set(messages.map((m) => m.id));
904
904
  if (include && include.length > 0) {
905
- const includedMessages = await this._getIncludedMessages(table, include);
905
+ const includedMessages = await this._getIncludedMessages(table, include, resourceId);
906
906
  for (const includeMsg of includedMessages) if (!messageIds.has(includeMsg.id)) {
907
907
  messages.push(includeMsg);
908
908
  messageIds.add(includeMsg.id);
@@ -921,6 +921,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
921
921
  hasMore
922
922
  };
923
923
  } catch (error) {
924
+ if (error instanceof _mastra_core_error.MastraError && error.category === _mastra_core_error.ErrorCategory.USER) throw error;
924
925
  const mastraError = new _mastra_core_error.MastraError({
925
926
  id: (0, _mastra_core_storage.createStorageErrorId)("LANCE", "LIST_MESSAGES", "FAILED"),
926
927
  domain: _mastra_core_error.ErrorDomain.STORAGE,
@@ -932,13 +933,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
932
933
  }, error);
933
934
  this.logger?.error?.(mastraError.toString());
934
935
  this.logger?.trackException?.(mastraError);
935
- return {
936
- messages: [],
937
- total: 0,
938
- page,
939
- perPage: perPageForResponse,
940
- hasMore: false
941
- };
936
+ throw mastraError;
942
937
  }
943
938
  }
944
939
  async saveMessages(args) {
@@ -1046,6 +1041,7 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
1046
1041
  hasMore: offset + perPage < total
1047
1042
  };
1048
1043
  } catch (error) {
1044
+ if (error instanceof _mastra_core_error.MastraError && error.category === _mastra_core_error.ErrorCategory.USER) throw error;
1049
1045
  throw new _mastra_core_error.MastraError({
1050
1046
  id: (0, _mastra_core_storage.createStorageErrorId)("LANCE", "LIST_THREADS", "FAILED"),
1051
1047
  domain: _mastra_core_error.ErrorDomain.STORAGE,
@@ -1064,16 +1060,25 @@ var StoreMemoryLance = class extends _mastra_core_storage.MemoryStorage {
1064
1060
  return direction === "ASC" ? aValue - bValue : bValue - aValue;
1065
1061
  });
1066
1062
  }
1067
- async _getIncludedMessages(table, include) {
1063
+ /**
1064
+ * Fetches the messages named by `include` together with their surrounding context.
1065
+ *
1066
+ * @param table - Open handle to the messages table.
1067
+ * @param include - Message ids to pin, each with an optional before/after window.
1068
+ * @param resourceId - When set, restricts both the pinned messages and their context
1069
+ * to that resource so an id from another resource returns nothing.
1070
+ */
1071
+ async _getIncludedMessages(table, include, resourceId) {
1068
1072
  if (include.length === 0) return [];
1073
+ const resourceCondition = resourceId ? ` AND resourceId = '${this.escapeSql(resourceId)}'` : "";
1069
1074
  const targetIds = include.map((item) => item.id);
1070
1075
  const idCondition = targetIds.length === 1 ? `id = '${this.escapeSql(targetIds[0])}'` : `id IN (${targetIds.map((id) => `'${this.escapeSql(id)}'`).join(", ")})`;
1071
- const targetRecords = await table.query().where(idCondition).toArray();
1076
+ const targetRecords = await table.query().where(`${idCondition}${resourceCondition}`).toArray();
1072
1077
  if (!include.some((item) => item.withPreviousMessages || item.withNextMessages)) return targetRecords.map((row) => this.normalizeMessage(row));
1073
1078
  const threadIdsToFetch = [...new Set(targetRecords.map((r) => r.thread_id))];
1074
1079
  const threadCache = /* @__PURE__ */ new Map();
1075
1080
  for (const tid of threadIdsToFetch) {
1076
- const threadRecords = await table.query().where(`thread_id = '${this.escapeSql(tid)}'`).toArray();
1081
+ const threadRecords = await table.query().where(`thread_id = '${this.escapeSql(tid)}'${resourceCondition}`).toArray();
1077
1082
  threadRecords.sort((a, b) => a.createdAt - b.createdAt);
1078
1083
  threadCache.set(tid, threadRecords);
1079
1084
  }