@mastra/spanner 1.6.0-alpha.0 → 1.6.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,14 @@
1
1
  # @mastra/spanner
2
2
 
3
+ ## 1.6.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
+
3
12
  ## 1.6.0-alpha.0
4
13
 
5
14
  ### Minor Changes
@@ -3,7 +3,7 @@ name: mastra-spanner
3
3
  description: Documentation for @mastra/spanner. Use when working with @mastra/spanner APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/spanner"
6
- version: "1.6.0-alpha.0"
6
+ version: "1.6.0-alpha.1"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.6.0-alpha.0",
2
+ "version": "1.6.0-alpha.1",
3
3
  "package": "@mastra/spanner",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -6738,12 +6738,20 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
6738
6738
  throw mastraError;
6739
6739
  }
6740
6740
  }
6741
- /** Resolves the `include` clause: pinned messages plus their before/after windows. */
6742
- async getIncludedMessages({ include }) {
6741
+ /**
6742
+ * Resolves the `include` clause: pinned messages plus their before/after windows.
6743
+ *
6744
+ * @param include - Message ids to pin, each with an optional before/after window.
6745
+ * @param resourceId - When set, restricts both the pinned messages and their context
6746
+ * to that resource so an id from another resource returns nothing.
6747
+ */
6748
+ async getIncludedMessages({ include, resourceId }) {
6743
6749
  if (!include || include.length === 0) return null;
6750
+ const resourceCondition = resourceId ? ` AND ${quoteIdent("resourceId", "column name")} = @scopedResourceId` : "";
6751
+ const resourceParams = resourceId ? { scopedResourceId: resourceId } : {};
6744
6752
  const ids = include.map((i) => i.id);
6745
6753
  const placeholders = [];
6746
- const idParams = {};
6754
+ const idParams = { ...resourceParams };
6747
6755
  ids.forEach((id, i) => {
6748
6756
  const name = `tid${i}`;
6749
6757
  placeholders.push(`@${name}`);
@@ -6751,7 +6759,7 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
6751
6759
  });
6752
6760
  const targetsSql = `SELECT id, content, role, type, ${quoteIdent("createdAt", "column name")}, ${quoteIdent("thread_id", "column name")} AS threadId, ${quoteIdent("resourceId", "column name")}
6753
6761
  FROM ${quoteIdent(_mastra_core_storage.TABLE_MESSAGES, "table name")}
6754
- WHERE id IN (${placeholders.join(", ")})`;
6762
+ WHERE id IN (${placeholders.join(", ")})${resourceCondition}`;
6755
6763
  const [targetRows] = await this.database.run({
6756
6764
  sql: targetsSql,
6757
6765
  params: idParams,
@@ -6776,14 +6784,15 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
6776
6784
  sql: `SELECT id, content, role, type, ${quoteIdent("createdAt", "column name")}, ${quoteIdent("thread_id", "column name")} AS threadId, ${quoteIdent("resourceId", "column name")}
6777
6785
  FROM ${quoteIdent(_mastra_core_storage.TABLE_MESSAGES, "table name")}
6778
6786
  WHERE ${quoteIdent("thread_id", "column name")} = @threadId
6779
- AND (${quoteIdent("createdAt", "column name")} < @ts OR (${quoteIdent("createdAt", "column name")} = @ts AND id < @id))
6787
+ AND (${quoteIdent("createdAt", "column name")} < @ts OR (${quoteIdent("createdAt", "column name")} = @ts AND id < @id))${resourceCondition}
6780
6788
  ORDER BY ${quoteIdent("createdAt", "column name")} DESC, id DESC
6781
6789
  LIMIT @lim`,
6782
6790
  params: {
6783
6791
  threadId,
6784
6792
  ts: targetCreatedAt,
6785
6793
  id: target.id,
6786
- lim: withPreviousMessages
6794
+ lim: withPreviousMessages,
6795
+ ...resourceParams
6787
6796
  },
6788
6797
  json: true
6789
6798
  });
@@ -6797,14 +6806,15 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
6797
6806
  sql: `SELECT id, content, role, type, ${quoteIdent("createdAt", "column name")}, ${quoteIdent("thread_id", "column name")} AS threadId, ${quoteIdent("resourceId", "column name")}
6798
6807
  FROM ${quoteIdent(_mastra_core_storage.TABLE_MESSAGES, "table name")}
6799
6808
  WHERE ${quoteIdent("thread_id", "column name")} = @threadId
6800
- AND (${quoteIdent("createdAt", "column name")} > @ts OR (${quoteIdent("createdAt", "column name")} = @ts AND id > @id))
6809
+ AND (${quoteIdent("createdAt", "column name")} > @ts OR (${quoteIdent("createdAt", "column name")} = @ts AND id > @id))${resourceCondition}
6801
6810
  ORDER BY ${quoteIdent("createdAt", "column name")} ASC, id ASC
6802
6811
  LIMIT @lim`,
6803
6812
  params: {
6804
6813
  threadId,
6805
6814
  ts: targetCreatedAt,
6806
6815
  id: target.id,
6807
- lim: withNextMessages
6816
+ lim: withNextMessages,
6817
+ ...resourceParams
6808
6818
  },
6809
6819
  json: true
6810
6820
  });
@@ -6857,7 +6867,10 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
6857
6867
  hasMore: false
6858
6868
  };
6859
6869
  if (perPage === 0 && include && include.length > 0) {
6860
- const includeMessages = await this.getIncludedMessages({ include }) ?? [];
6870
+ const includeMessages = await this.getIncludedMessages({
6871
+ include,
6872
+ resourceId
6873
+ }) ?? [];
6861
6874
  const parsedIncludes = this.parseAndFormatMessages(includeMessages, "v2");
6862
6875
  const dirMul = direction === "ASC" ? 1 : -1;
6863
6876
  return {
@@ -6915,7 +6928,10 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
6915
6928
  };
6916
6929
  if (include?.length) {
6917
6930
  const seen = new Set(messages.map((m) => m.id));
6918
- (await this.getIncludedMessages({ include }))?.forEach((msg) => {
6931
+ (await this.getIncludedMessages({
6932
+ include,
6933
+ resourceId
6934
+ }))?.forEach((msg) => {
6919
6935
  if (!seen.has(msg.id)) {
6920
6936
  messages.push(msg);
6921
6937
  seen.add(msg.id);