@mastra/mssql 1.0.0-beta.4 → 1.0.0-beta.6

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,34 @@
1
1
  # @mastra/mssql
2
2
 
3
+ ## 1.0.0-beta.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Add delete workflow run API ([#10991](https://github.com/mastra-ai/mastra/pull/10991))
8
+
9
+ ```typescript
10
+ await workflow.deleteWorkflowRunById(runId);
11
+ ```
12
+
13
+ - Updated dependencies [[`edb07e4`](https://github.com/mastra-ai/mastra/commit/edb07e49283e0c28bd094a60e03439bf6ecf0221), [`b7e17d3`](https://github.com/mastra-ai/mastra/commit/b7e17d3f5390bb5a71efc112204413656fcdc18d), [`261473a`](https://github.com/mastra-ai/mastra/commit/261473ac637e633064a22076671e2e02b002214d), [`5d7000f`](https://github.com/mastra-ai/mastra/commit/5d7000f757cd65ea9dc5b05e662fd83dfd44e932), [`4f0331a`](https://github.com/mastra-ai/mastra/commit/4f0331a79bf6eb5ee598a5086e55de4b5a0ada03), [`8a000da`](https://github.com/mastra-ai/mastra/commit/8a000da0c09c679a2312f6b3aa05b2ca78ca7393)]:
14
+ - @mastra/core@1.0.0-beta.10
15
+
16
+ ## 1.0.0-beta.5
17
+
18
+ ### Patch Changes
19
+
20
+ - Fix saveScore not persisting ID correctly, breaking getScoreById retrieval ([#10915](https://github.com/mastra-ai/mastra/pull/10915))
21
+
22
+ **What Changed**
23
+ - saveScore now correctly returns scores that can be retrieved with getScoreById
24
+ - Validation errors now include contextual information (scorer, entity, trace details) for easier debugging
25
+
26
+ **Impact**
27
+ Previously, calling getScoreById after saveScore would return null because the generated ID wasn't persisted to the database. This is now fixed across all store implementations, ensuring consistent behavior and data integrity.
28
+
29
+ - Updated dependencies [[`0d41fe2`](https://github.com/mastra-ai/mastra/commit/0d41fe245355dfc66d61a0d9c85d9400aac351ff), [`6b3ba91`](https://github.com/mastra-ai/mastra/commit/6b3ba91494cc10394df96782f349a4f7b1e152cc), [`7907fd1`](https://github.com/mastra-ai/mastra/commit/7907fd1c5059813b7b870b81ca71041dc807331b)]:
30
+ - @mastra/core@1.0.0-beta.8
31
+
3
32
  ## 1.0.0-beta.4
4
33
 
5
34
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  var error = require('@mastra/core/error');
4
4
  var storage = require('@mastra/core/storage');
5
- var sql2 = require('mssql');
5
+ var sql3 = require('mssql');
6
6
  var agent = require('@mastra/core/agent');
7
7
  var utils = require('@mastra/core/utils');
8
8
  var crypto = require('crypto');
@@ -10,7 +10,7 @@ var evals = require('@mastra/core/evals');
10
10
 
11
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
12
 
13
- var sql2__default = /*#__PURE__*/_interopDefault(sql2);
13
+ var sql3__default = /*#__PURE__*/_interopDefault(sql3);
14
14
 
15
15
  // src/storage/index.ts
16
16
  function getSchemaName(schema) {
@@ -233,7 +233,7 @@ var MemoryMSSQL = class extends storage.MemoryStorage {
233
233
  dataRequest.input("resourceId", resourceId);
234
234
  dataRequest.input("offset", offset);
235
235
  if (limitValue > 2147483647) {
236
- dataRequest.input("perPage", sql2__default.default.BigInt, limitValue);
236
+ dataRequest.input("perPage", sql3__default.default.BigInt, limitValue);
237
237
  } else {
238
238
  dataRequest.input("perPage", limitValue);
239
239
  }
@@ -297,12 +297,12 @@ var MemoryMSSQL = class extends storage.MemoryStorage {
297
297
  req.input("title", thread.title);
298
298
  const metadata = thread.metadata ? JSON.stringify(thread.metadata) : null;
299
299
  if (metadata === null) {
300
- req.input("metadata", sql2__default.default.NVarChar, null);
300
+ req.input("metadata", sql3__default.default.NVarChar, null);
301
301
  } else {
302
302
  req.input("metadata", metadata);
303
303
  }
304
- req.input("createdAt", sql2__default.default.DateTime2, thread.createdAt);
305
- req.input("updatedAt", sql2__default.default.DateTime2, thread.updatedAt);
304
+ req.input("createdAt", sql3__default.default.DateTime2, thread.createdAt);
305
+ req.input("updatedAt", sql3__default.default.DateTime2, thread.updatedAt);
306
306
  await req.query(mergeSql);
307
307
  return thread;
308
308
  } catch (error$1) {
@@ -598,7 +598,7 @@ var MemoryMSSQL = class extends storage.MemoryStorage {
598
598
  return result2.recordset || [];
599
599
  }
600
600
  request.input("offset", offset);
601
- request.input("limit", perPage > 2147483647 ? sql2__default.default.BigInt : sql2__default.default.Int, perPage);
601
+ request.input("limit", perPage > 2147483647 ? sql3__default.default.BigInt : sql3__default.default.Int, perPage);
602
602
  const result = await request.query(
603
603
  `${baseQuery}${actualWhereClause} ${orderByStatement} OFFSET @offset ROWS FETCH NEXT @limit ROWS ONLY`
604
604
  );
@@ -723,7 +723,7 @@ var MemoryMSSQL = class extends storage.MemoryStorage {
723
723
  "content",
724
724
  typeof message.content === "string" ? message.content : JSON.stringify(message.content)
725
725
  );
726
- request.input("createdAt", sql2__default.default.DateTime2, message.createdAt);
726
+ request.input("createdAt", sql3__default.default.DateTime2, message.createdAt);
727
727
  request.input("role", message.role);
728
728
  request.input("type", message.type || "v2");
729
729
  request.input("resourceId", message.resourceId);
@@ -742,7 +742,7 @@ var MemoryMSSQL = class extends storage.MemoryStorage {
742
742
  await request.query(mergeSql);
743
743
  }
744
744
  const threadReq = transaction.request();
745
- threadReq.input("updatedAt", sql2__default.default.DateTime2, /* @__PURE__ */ new Date());
745
+ threadReq.input("updatedAt", sql3__default.default.DateTime2, /* @__PURE__ */ new Date());
746
746
  threadReq.input("id", threadId);
747
747
  await threadReq.query(`UPDATE ${tableThreads} SET [updatedAt] = @updatedAt WHERE id = @id`);
748
748
  await transaction.commit();
@@ -1443,7 +1443,7 @@ var StoreOperationsMSSQL = class extends storage.StoreOperations {
1443
1443
  const value = record[col];
1444
1444
  const preparedValue = this.prepareValue(value, col, tableName);
1445
1445
  if (preparedValue instanceof Date) {
1446
- request.input(`param${i}`, sql2__default.default.DateTime2, preparedValue);
1446
+ request.input(`param${i}`, sql3__default.default.DateTime2, preparedValue);
1447
1447
  } else if (preparedValue === null || preparedValue === void 0) {
1448
1448
  request.input(`param${i}`, this.getMssqlType(tableName, col), null);
1449
1449
  } else {
@@ -1781,23 +1781,23 @@ ${columns}
1781
1781
  const col = storage.TABLE_SCHEMAS[tableName]?.[columnName];
1782
1782
  switch (col?.type) {
1783
1783
  case "text":
1784
- return sql2__default.default.NVarChar;
1784
+ return sql3__default.default.NVarChar;
1785
1785
  case "timestamp":
1786
- return sql2__default.default.DateTime2;
1786
+ return sql3__default.default.DateTime2;
1787
1787
  case "uuid":
1788
- return sql2__default.default.UniqueIdentifier;
1788
+ return sql3__default.default.UniqueIdentifier;
1789
1789
  case "jsonb":
1790
- return sql2__default.default.NVarChar;
1790
+ return sql3__default.default.NVarChar;
1791
1791
  case "integer":
1792
- return sql2__default.default.Int;
1792
+ return sql3__default.default.Int;
1793
1793
  case "bigint":
1794
- return sql2__default.default.BigInt;
1794
+ return sql3__default.default.BigInt;
1795
1795
  case "float":
1796
- return sql2__default.default.Float;
1796
+ return sql3__default.default.Float;
1797
1797
  case "boolean":
1798
- return sql2__default.default.Bit;
1798
+ return sql3__default.default.Bit;
1799
1799
  default:
1800
- return sql2__default.default.NVarChar;
1800
+ return sql3__default.default.NVarChar;
1801
1801
  }
1802
1802
  }
1803
1803
  /**
@@ -2346,13 +2346,21 @@ var ScoresMSSQL = class extends storage.ScoresStorage {
2346
2346
  {
2347
2347
  id: storage.createStorageErrorId("MSSQL", "SAVE_SCORE", "VALIDATION_FAILED"),
2348
2348
  domain: error.ErrorDomain.STORAGE,
2349
- category: error.ErrorCategory.THIRD_PARTY
2349
+ category: error.ErrorCategory.USER,
2350
+ details: {
2351
+ scorer: score.scorer?.id ?? "unknown",
2352
+ entityId: score.entityId ?? "unknown",
2353
+ entityType: score.entityType ?? "unknown",
2354
+ traceId: score.traceId ?? "",
2355
+ spanId: score.spanId ?? ""
2356
+ }
2350
2357
  },
2351
2358
  error$1
2352
2359
  );
2353
2360
  }
2354
2361
  try {
2355
2362
  const scoreId = crypto.randomUUID();
2363
+ const now = /* @__PURE__ */ new Date();
2356
2364
  const {
2357
2365
  scorer,
2358
2366
  preprocessStepResult,
@@ -2379,12 +2387,11 @@ var ScoresMSSQL = class extends storage.ScoresStorage {
2379
2387
  requestContext: requestContext || null,
2380
2388
  entity: entity || null,
2381
2389
  scorer: scorer || null,
2382
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2383
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2390
+ createdAt: now.toISOString(),
2391
+ updatedAt: now.toISOString()
2384
2392
  }
2385
2393
  });
2386
- const scoreFromDb = await this.getScoreById({ id: scoreId });
2387
- return { score: scoreFromDb };
2394
+ return { score: { ...validatedScore, id: scoreId, createdAt: now, updatedAt: now } };
2388
2395
  } catch (error$1) {
2389
2396
  throw new error.MastraError(
2390
2397
  {
@@ -2690,7 +2697,7 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2690
2697
  const transaction = this.pool.transaction();
2691
2698
  try {
2692
2699
  await transaction.begin();
2693
- const selectRequest = new sql2__default.default.Request(transaction);
2700
+ const selectRequest = new sql3__default.default.Request(transaction);
2694
2701
  selectRequest.input("workflow_name", workflowName);
2695
2702
  selectRequest.input("run_id", runId);
2696
2703
  const existingSnapshotResult = await selectRequest.query(
@@ -2718,12 +2725,12 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2718
2725
  }
2719
2726
  snapshot.context[stepId] = result;
2720
2727
  snapshot.requestContext = { ...snapshot.requestContext, ...requestContext };
2721
- const upsertReq = new sql2__default.default.Request(transaction);
2728
+ const upsertReq = new sql3__default.default.Request(transaction);
2722
2729
  upsertReq.input("workflow_name", workflowName);
2723
2730
  upsertReq.input("run_id", runId);
2724
2731
  upsertReq.input("snapshot", JSON.stringify(snapshot));
2725
- upsertReq.input("createdAt", sql2__default.default.DateTime2, /* @__PURE__ */ new Date());
2726
- upsertReq.input("updatedAt", sql2__default.default.DateTime2, /* @__PURE__ */ new Date());
2732
+ upsertReq.input("createdAt", sql3__default.default.DateTime2, /* @__PURE__ */ new Date());
2733
+ upsertReq.input("updatedAt", sql3__default.default.DateTime2, /* @__PURE__ */ new Date());
2727
2734
  await upsertReq.query(
2728
2735
  `MERGE ${table} AS target
2729
2736
  USING (SELECT @workflow_name AS workflow_name, @run_id AS run_id) AS src
@@ -2763,7 +2770,7 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2763
2770
  const transaction = this.pool.transaction();
2764
2771
  try {
2765
2772
  await transaction.begin();
2766
- const selectRequest = new sql2__default.default.Request(transaction);
2773
+ const selectRequest = new sql3__default.default.Request(transaction);
2767
2774
  selectRequest.input("workflow_name", workflowName);
2768
2775
  selectRequest.input("run_id", runId);
2769
2776
  const existingSnapshotResult = await selectRequest.query(
@@ -2791,11 +2798,11 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2791
2798
  );
2792
2799
  }
2793
2800
  const updatedSnapshot = { ...snapshot, ...opts };
2794
- const updateRequest = new sql2__default.default.Request(transaction);
2801
+ const updateRequest = new sql3__default.default.Request(transaction);
2795
2802
  updateRequest.input("snapshot", JSON.stringify(updatedSnapshot));
2796
2803
  updateRequest.input("workflow_name", workflowName);
2797
2804
  updateRequest.input("run_id", runId);
2798
- updateRequest.input("updatedAt", sql2__default.default.DateTime2, /* @__PURE__ */ new Date());
2805
+ updateRequest.input("updatedAt", sql3__default.default.DateTime2, /* @__PURE__ */ new Date());
2799
2806
  await updateRequest.query(
2800
2807
  `UPDATE ${table} SET snapshot = @snapshot, [updatedAt] = @updatedAt WHERE workflow_name = @workflow_name AND run_id = @run_id`
2801
2808
  );
@@ -2835,8 +2842,8 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2835
2842
  request.input("run_id", runId);
2836
2843
  request.input("resourceId", resourceId);
2837
2844
  request.input("snapshot", JSON.stringify(snapshot));
2838
- request.input("createdAt", sql2__default.default.DateTime2, new Date(now));
2839
- request.input("updatedAt", sql2__default.default.DateTime2, new Date(now));
2845
+ request.input("createdAt", sql3__default.default.DateTime2, new Date(now));
2846
+ request.input("updatedAt", sql3__default.default.DateTime2, new Date(now));
2840
2847
  const mergeSql = `MERGE INTO ${table} AS target
2841
2848
  USING (SELECT @workflow_name AS workflow_name, @run_id AS run_id) AS src
2842
2849
  ON target.workflow_name = src.workflow_name AND target.run_id = src.run_id
@@ -2933,6 +2940,35 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2933
2940
  );
2934
2941
  }
2935
2942
  }
2943
+ async deleteWorkflowRunById({ runId, workflowName }) {
2944
+ const table = getTableName({ indexName: storage.TABLE_WORKFLOW_SNAPSHOT, schemaName: getSchemaName(this.schema) });
2945
+ const transaction = this.pool.transaction();
2946
+ try {
2947
+ await transaction.begin();
2948
+ const deleteRequest = new sql3__default.default.Request(transaction);
2949
+ deleteRequest.input("workflow_name", workflowName);
2950
+ deleteRequest.input("run_id", runId);
2951
+ await deleteRequest.query(`DELETE FROM ${table} WHERE workflow_name = @workflow_name AND run_id = @run_id`);
2952
+ await transaction.commit();
2953
+ } catch (error$1) {
2954
+ try {
2955
+ await transaction.rollback();
2956
+ } catch {
2957
+ }
2958
+ throw new error.MastraError(
2959
+ {
2960
+ id: storage.createStorageErrorId("MSSQL", "DELETE_WORKFLOW_RUN_BY_ID", "FAILED"),
2961
+ domain: error.ErrorDomain.STORAGE,
2962
+ category: error.ErrorCategory.THIRD_PARTY,
2963
+ details: {
2964
+ runId,
2965
+ workflowName
2966
+ }
2967
+ },
2968
+ error$1
2969
+ );
2970
+ }
2971
+ }
2936
2972
  async listWorkflowRuns({
2937
2973
  workflowName,
2938
2974
  fromDate,
@@ -2976,7 +3012,7 @@ var WorkflowsMSSQL = class extends storage.WorkflowsStorage {
2976
3012
  const request = this.pool.request();
2977
3013
  Object.entries(paramMap).forEach(([key, value]) => {
2978
3014
  if (value instanceof Date) {
2979
- request.input(key, sql2__default.default.DateTime, value);
3015
+ request.input(key, sql3__default.default.DateTime, value);
2980
3016
  } else {
2981
3017
  request.input(key, value);
2982
3018
  }
@@ -3039,7 +3075,7 @@ var MSSQLStore = class extends storage.MastraStorage {
3039
3075
  }
3040
3076
  }
3041
3077
  this.schema = config.schemaName || "dbo";
3042
- this.pool = "connectionString" in config ? new sql2__default.default.ConnectionPool(config.connectionString) : new sql2__default.default.ConnectionPool({
3078
+ this.pool = "connectionString" in config ? new sql3__default.default.ConnectionPool(config.connectionString) : new sql3__default.default.ConnectionPool({
3043
3079
  server: config.server,
3044
3080
  database: config.database,
3045
3081
  user: config.user,
@@ -3230,6 +3266,9 @@ var MSSQLStore = class extends storage.MastraStorage {
3230
3266
  }) {
3231
3267
  return this.stores.workflows.getWorkflowRunById({ runId, workflowName });
3232
3268
  }
3269
+ async deleteWorkflowRunById({ runId, workflowName }) {
3270
+ return this.stores.workflows.deleteWorkflowRunById({ runId, workflowName });
3271
+ }
3233
3272
  async close() {
3234
3273
  await this.pool.close();
3235
3274
  }
@@ -3308,8 +3347,8 @@ var MSSQLStore = class extends storage.MastraStorage {
3308
3347
  source: _source
3309
3348
  });
3310
3349
  }
3311
- async saveScore(_score) {
3312
- return this.stores.scores.saveScore(_score);
3350
+ async saveScore(score) {
3351
+ return this.stores.scores.saveScore(score);
3313
3352
  }
3314
3353
  async listScoresByRunId({
3315
3354
  runId: _runId,