@mastra/mssql 1.6.0 → 1.7.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/mssql
2
2
 
3
+ ## 1.7.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.7.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.6.0
4
40
 
5
41
  ### Minor Changes
@@ -3,7 +3,7 @@ name: mastra-mssql
3
3
  description: Documentation for @mastra/mssql. Use when working with @mastra/mssql APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/mssql"
6
- version: "1.6.0"
6
+ version: "1.7.0-alpha.1"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.6.0",
2
+ "version": "1.7.0-alpha.1",
3
3
  "package": "@mastra/mssql",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -2364,13 +2364,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2364
2364
  }, error);
2365
2365
  this.logger?.error?.(mastraError.toString());
2366
2366
  this.logger?.trackException?.(mastraError);
2367
- return {
2368
- threads: [],
2369
- total: 0,
2370
- page,
2371
- perPage: perPageForResponse,
2372
- hasMore: false
2373
- };
2367
+ throw mastraError;
2374
2368
  }
2375
2369
  }
2376
2370
  async saveThread({ thread }) {
@@ -2517,7 +2511,14 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2517
2511
  return diff !== 0 ? diff : a.id.localeCompare(b.id);
2518
2512
  });
2519
2513
  }
2520
- async _getIncludedMessages({ include }) {
2514
+ /**
2515
+ * Fetches the messages named by `include` together with their surrounding context.
2516
+ *
2517
+ * @param include - Message ids to pin, each with an optional before/after window.
2518
+ * @param resourceId - When set, restricts both the pinned messages and their context
2519
+ * to that resource so an id from another resource returns nothing.
2520
+ */
2521
+ async _getIncludedMessages({ include, resourceId }) {
2521
2522
  if (!include || include.length === 0) return null;
2522
2523
  const unionQueries = [];
2523
2524
  const paramValues = [];
@@ -2527,6 +2528,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2527
2528
  indexName: _mastra_core_storage.TABLE_MESSAGES,
2528
2529
  schemaName: getSchemaName(this.schema)
2529
2530
  });
2531
+ const resourceCondition = resourceId ? ` AND [resourceId] = @presource` : "";
2530
2532
  for (const inc of include) {
2531
2533
  const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;
2532
2534
  const pId = `@p${paramIdx}`;
@@ -2545,7 +2547,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2545
2547
  FROM (
2546
2548
  SELECT *, ROW_NUMBER() OVER (ORDER BY [createdAt] ASC) as row_num
2547
2549
  FROM ${tableName}
2548
- WHERE [thread_id] = (SELECT thread_id FROM ${tableName} WHERE id = ${pId})
2550
+ WHERE [thread_id] = (SELECT thread_id FROM ${tableName} WHERE id = ${pId}${resourceCondition})${resourceCondition}
2549
2551
  ) AS m
2550
2552
  WHERE m.id = ${pId}
2551
2553
  OR EXISTS (
@@ -2553,7 +2555,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2553
2555
  FROM (
2554
2556
  SELECT *, ROW_NUMBER() OVER (ORDER BY [createdAt] ASC) as row_num
2555
2557
  FROM ${tableName}
2556
- WHERE [thread_id] = (SELECT thread_id FROM ${tableName} WHERE id = ${pId})
2558
+ WHERE [thread_id] = (SELECT thread_id FROM ${tableName} WHERE id = ${pId}${resourceCondition})${resourceCondition}
2557
2559
  ) AS target
2558
2560
  WHERE target.id = ${pId}
2559
2561
  AND (
@@ -2577,6 +2579,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2577
2579
  `;
2578
2580
  const req = this.pool.request();
2579
2581
  for (let i = 0; i < paramValues.length; ++i) req.input(paramNames[i], paramValues[i]);
2582
+ if (resourceId) req.input("presource", resourceId);
2580
2583
  const includedRows = (await req.query(finalQuery)).recordset || [];
2581
2584
  const seen = /* @__PURE__ */ new Set();
2582
2585
  return includedRows.filter((row) => {
@@ -2624,7 +2627,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2624
2627
  }, error);
2625
2628
  this.logger?.error?.(mastraError.toString());
2626
2629
  this.logger?.trackException?.(mastraError);
2627
- return { messages: [] };
2630
+ throw mastraError;
2628
2631
  }
2629
2632
  }
2630
2633
  async listMessages(args) {
@@ -2676,7 +2679,10 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2676
2679
  hasMore: false
2677
2680
  };
2678
2681
  if (perPage === 0 && include && include.length > 0) {
2679
- const includeMessages = await this._getIncludedMessages({ include });
2682
+ const includeMessages = await this._getIncludedMessages({
2683
+ include,
2684
+ resourceId
2685
+ });
2680
2686
  const messages = this._parseAndFormatMessages(includeMessages ?? [], "v2");
2681
2687
  return {
2682
2688
  messages: this._sortMessages(messages, field, direction),
@@ -2713,7 +2719,10 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2713
2719
  };
2714
2720
  if (include?.length) {
2715
2721
  const messageIds = new Set(messages.map((m) => m.id));
2716
- (await this._getIncludedMessages({ include }))?.forEach((msg) => {
2722
+ (await this._getIncludedMessages({
2723
+ include,
2724
+ resourceId
2725
+ }))?.forEach((msg) => {
2717
2726
  if (!messageIds.has(msg.id)) {
2718
2727
  messages.push(msg);
2719
2728
  messageIds.add(msg.id);
@@ -2743,6 +2752,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2743
2752
  hasMore: metadataFilter ? perPageInput !== false && offset + primaryPageCount < total : perPageInput !== false && returnedThreadMessageCount < total && offset + perPage < total
2744
2753
  };
2745
2754
  } catch (error) {
2755
+ if (error instanceof _mastra_core_error.MastraError && error.category === _mastra_core_error.ErrorCategory.USER) throw error;
2746
2756
  const mastraError = new _mastra_core_error.MastraError({
2747
2757
  id: (0, _mastra_core_storage.createStorageErrorId)("MSSQL", "LIST_MESSAGES", "FAILED"),
2748
2758
  domain: _mastra_core_error.ErrorDomain.STORAGE,
@@ -2754,13 +2764,7 @@ var MemoryMSSQL = class MemoryMSSQL extends _mastra_core_storage.MemoryStorage {
2754
2764
  }, error);
2755
2765
  this.logger?.error?.(mastraError.toString());
2756
2766
  this.logger?.trackException?.(mastraError);
2757
- return {
2758
- messages: [],
2759
- total: 0,
2760
- page,
2761
- perPage: perPageForResponse,
2762
- hasMore: false
2763
- };
2767
+ throw mastraError;
2764
2768
  }
2765
2769
  }
2766
2770
  async saveMessages({ messages }) {