@mastra/mysql 0.4.0-alpha.0 → 0.5.0-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,56 @@
1
1
  # @mastra/mysql
2
2
 
3
+ ## 0.5.0-alpha.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Added exact metadata filtering to message history queries across Memory APIs and supported storage providers. ([#19991](https://github.com/mastra-ai/mastra/pull/19991))
8
+
9
+ ```ts
10
+ const messages = await memory.recall({
11
+ threadId: 'thread-1',
12
+ filter: {
13
+ metadata: {
14
+ status: 'done',
15
+ priority: 'high',
16
+ },
17
+ },
18
+ });
19
+ ```
20
+
21
+ Multiple fields use AND semantics. Supported values are strings, finite numbers, booleans, and `null`.
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [[`0dca9d0`](https://github.com/mastra-ai/mastra/commit/0dca9d0b1356024a53b72ea6f040db528b126caa)]:
26
+ - @mastra/core@1.54.0-alpha.0
27
+
28
+ ## 0.4.0
29
+
30
+ ### Minor Changes
31
+
32
+ - Added atomic caller-defined dataset IDs for idempotent dataset creation across built-in storage adapters. Supplying `id` to `mastra.datasets.create()` now creates the dataset once and resolves compatible retries to the persisted record; incompatible immutable identity fields throw `DATASET_ID_CONFLICT`. ([#19370](https://github.com/mastra-ai/mastra/pull/19370))
33
+
34
+ - Added caller-defined dataset item identities for safe retries across all dataset storage adapters. ([#19384](https://github.com/mastra-ai/mastra/pull/19384))
35
+
36
+ Dataset items can now include an `externalId` when calling `addItem` or `addItems`:
37
+
38
+ ```ts
39
+ await dataset.addItem({
40
+ externalId: 'source-item-123',
41
+ input: { prompt: 'Hello' },
42
+ });
43
+ ```
44
+
45
+ Retrying with the same identity and payload returns the existing item. Reusing an identity with different content returns a typed conflict, including during concurrent writes. Updates and deletes preserve the identity, Spanner retries transactions without changing the outcome, and MySQL batch writes now preserve every supported dataset item field.
46
+
47
+ ### Patch Changes
48
+
49
+ - Raised the `@mastra/core` peer dependency floor to `>=1.51.0-0` so the dataset item identity helpers used by the storage adapters are available at runtime. ([#19384](https://github.com/mastra-ai/mastra/pull/19384))
50
+
51
+ - Updated dependencies [[`bd6d240`](https://github.com/mastra-ai/mastra/commit/bd6d2402db93dddaef0721667e7e8a030e7c6e16), [`0111486`](https://github.com/mastra-ai/mastra/commit/01114867612593eef5cfa2fda6a1194dfedda841), [`96a3749`](https://github.com/mastra-ai/mastra/commit/96a37492235f5b8076b3e3177d83ed5a5e44a640), [`fe1bda0`](https://github.com/mastra-ai/mastra/commit/fe1bda06f6af92a694a51712db747cda1e7185f0), [`25e7c12`](https://github.com/mastra-ai/mastra/commit/25e7c126a770069ae7fb7ecf1d2adb40e017b009), [`1ce5121`](https://github.com/mastra-ai/mastra/commit/1ce512155d122bb21f47d98383e82ffbf84b39e8), [`fb8aea3`](https://github.com/mastra-ai/mastra/commit/fb8aea384291e77311be3a64ee1717320d5c3c73), [`4adc391`](https://github.com/mastra-ai/mastra/commit/4adc3911075249c352bb4832d2471922826344de), [`a5c6337`](https://github.com/mastra-ai/mastra/commit/a5c6337d23c7686c81a32ce62f550f610543a240), [`3cfc47a`](https://github.com/mastra-ai/mastra/commit/3cfc47a6b89940aadd0f46fb01ae9624a73a865d), [`2bb7817`](https://github.com/mastra-ai/mastra/commit/2bb78176112fde628483de2830528f7eee911e56), [`51d9870`](https://github.com/mastra-ai/mastra/commit/51d987032c689c2855374d0f244f5d654da809d1), [`5cab274`](https://github.com/mastra-ai/mastra/commit/5cab2744250e22d12fefa7b32637dce224233cee), [`7fa27d3`](https://github.com/mastra-ai/mastra/commit/7fa27d3b6f5ed68cd34e454a4d3ad9c482a0cfbc), [`8b97958`](https://github.com/mastra-ai/mastra/commit/8b979589f9aa59ba67cac565949475f2ffeb4ac3), [`8410541`](https://github.com/mastra-ai/mastra/commit/84105412c60ecd3bb33a9838146f59c4b588228f), [`a58dcbb`](https://github.com/mastra-ai/mastra/commit/a58dcbb546d7e1d65ebdc1f39e55f0908fcd9391), [`aa38805`](https://github.com/mastra-ai/mastra/commit/aa38805b878b827403be785eb90688d7172f5a40), [`153bd3b`](https://github.com/mastra-ai/mastra/commit/153bd3b396bdfed6b74cf43de12db8fd2d83c04a), [`45a8e65`](https://github.com/mastra-ai/mastra/commit/45a8e65e1556d1362cb3f25187023c36de26661d), [`e955965`](https://github.com/mastra-ai/mastra/commit/e955965dce575a903e37cf054d28ea99aa48785e), [`2d22570`](https://github.com/mastra-ai/mastra/commit/2d22570c7dfdd02123d0ecc529efb05ccba2d9fc), [`07bb863`](https://github.com/mastra-ai/mastra/commit/07bb8631919c6f7cf377dccd45b096e0f17fbed0), [`c8ed116`](https://github.com/mastra-ai/mastra/commit/c8ed11699f62bcac70102ab4ec84d80d20541da6), [`01b338c`](https://github.com/mastra-ai/mastra/commit/01b338c56271f0219606710e3e8b26dee27ac6c2), [`a99eae8`](https://github.com/mastra-ai/mastra/commit/a99eae8908e500c1b2d12f9d277be616b98617a5), [`860ef7e`](https://github.com/mastra-ai/mastra/commit/860ef7e77d92b63469cbe5857aa1e626197e43e9), [`17e818c`](https://github.com/mastra-ai/mastra/commit/17e818c51a958ba90641b1a959dc38faf8c034e9), [`edce8d2`](https://github.com/mastra-ai/mastra/commit/edce8d2769f19e27a05737c627af2d765472a4f8), [`8a586ec`](https://github.com/mastra-ai/mastra/commit/8a586eca9a4914f31dff6140d0d45ac375b00669), [`4451dfe`](https://github.com/mastra-ai/mastra/commit/4451dfe857428e7abcc0261a507a2e186dae6d47), [`8b7361d`](https://github.com/mastra-ai/mastra/commit/8b7361d35de68b80d05d30a74e0c69e7218fd612), [`1d39058`](https://github.com/mastra-ai/mastra/commit/1d39058e548efd691799985d5c8af2737f1c3bd2), [`3927473`](https://github.com/mastra-ai/mastra/commit/392747323ddb10c643d12be7b9ae913159dfaeed), [`dce50dc`](https://github.com/mastra-ai/mastra/commit/dce50dc9a1c1fcd0f427bb5f6250ec74910cb04b), [`fd13f8e`](https://github.com/mastra-ai/mastra/commit/fd13f8e21990f9904c3eedba3a626bb4a929cdb8), [`634caff`](https://github.com/mastra-ai/mastra/commit/634caff29a9200ad058b67d53f96d9e5832fb8a2), [`f703f87`](https://github.com/mastra-ai/mastra/commit/f703f878de072d51fda557f9c50867d8252bef05), [`3e26c87`](https://github.com/mastra-ai/mastra/commit/3e26c87de0c5bc2583b795ce6ca5889b6b161acb), [`33f2b88`](https://github.com/mastra-ai/mastra/commit/33f2b88842c09a567f906fac4cb61cd5277ced59), [`177010f`](https://github.com/mastra-ai/mastra/commit/177010ff096d2e4b28d89803be5b1a4cad2a0d6b), [`0ad646f`](https://github.com/mastra-ai/mastra/commit/0ad646f71a530f2454664299e5e01bfd13fa12e5), [`b486abf`](https://github.com/mastra-ai/mastra/commit/b486abfa2a7528c6f527e4015c819ea9fa54aaad), [`54a51e0`](https://github.com/mastra-ai/mastra/commit/54a51e0a484fe1ebad3fb1f7ef5282a075709eb7), [`c43f3a9`](https://github.com/mastra-ai/mastra/commit/c43f3a9d1efde99b38789364ba4d0ba670f430e3), [`a5008f2`](https://github.com/mastra-ai/mastra/commit/a5008f22ae710ad9402ea9f2547d8c02f74d384b), [`e2d5f37`](https://github.com/mastra-ai/mastra/commit/e2d5f373bd289be534d5f8694d34465010533df6), [`4ce0163`](https://github.com/mastra-ai/mastra/commit/4ce0163dc86e675a86809685c8ce6c49f1aeb87e), [`4378341`](https://github.com/mastra-ai/mastra/commit/43783412df5ea3dd35f5b1f6e4851e79c346fc89)]:
52
+ - @mastra/core@1.51.0
53
+
3
54
  ## 0.4.0-alpha.0
4
55
 
5
56
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -5216,6 +5216,22 @@ function parseJSON3(value) {
5216
5216
  return null;
5217
5217
  }
5218
5218
  }
5219
+ function addMySQLMessageMetadataFilter(conditions, params, metadataFilter) {
5220
+ if (!metadataFilter) return;
5221
+ for (const [key, value] of Object.entries(metadataFilter)) {
5222
+ const path = `$.metadata.${key}`;
5223
+ conditions.push(`JSON_VALID(${quoteIdentifier("content", "column name")})`);
5224
+ conditions.push(`JSON_CONTAINS_PATH(${quoteIdentifier("content", "column name")}, 'one', ?)`);
5225
+ params.push(path);
5226
+ if (value === null) {
5227
+ conditions.push(`JSON_TYPE(JSON_EXTRACT(${quoteIdentifier("content", "column name")}, ?)) = 'NULL'`);
5228
+ params.push(path);
5229
+ } else {
5230
+ conditions.push(`JSON_EXTRACT(${quoteIdentifier("content", "column name")}, ?) = CAST(? AS JSON)`);
5231
+ params.push(path, JSON.stringify(value));
5232
+ }
5233
+ }
5234
+ }
5219
5235
  var MemoryMySQL = class _MemoryMySQL extends storage.MemoryStorage {
5220
5236
  supportsObservationalMemory = true;
5221
5237
  pool;
@@ -6071,6 +6087,7 @@ var MemoryMySQL = class _MemoryMySQL extends storage.MemoryStorage {
6071
6087
  const { threadId, resourceId, filter, orderBy, page = 0, perPage: perPageInput } = args;
6072
6088
  const selectBy = args.selectBy;
6073
6089
  const include = args.include ?? selectBy?.include;
6090
+ const metadataFilter = storage.validateStorageMetadataFilter(filter?.metadata);
6074
6091
  const threadIds = Array.isArray(threadId) ? threadId : [threadId];
6075
6092
  if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
6076
6093
  throw emitValidationError("threadId must be a non-empty string or array of non-empty strings");
@@ -6117,6 +6134,7 @@ var MemoryMySQL = class _MemoryMySQL extends storage.MemoryStorage {
6117
6134
  conditions.push(`${quoteIdentifier("createdAt", "column name")} ${endOp} ?`);
6118
6135
  params.push(transformToSqlValue(filter.dateRange.end));
6119
6136
  }
6137
+ addMySQLMessageMetadataFilter(conditions, params, metadataFilter);
6120
6138
  if (selectBy?.vectorSearchString) {
6121
6139
  conditions.push(`${quoteIdentifier("content", "column name")} LIKE ?`);
6122
6140
  params.push(`%${selectBy.vectorSearchString}%`);
@@ -6198,7 +6216,7 @@ var MemoryMySQL = class _MemoryMySQL extends storage.MemoryStorage {
6198
6216
  const mainThreadMessageCount = messages.filter(
6199
6217
  (msg) => msg.threadId !== void 0 && threadIdSet.has(msg.threadId)
6200
6218
  ).length;
6201
- const hasMore = include && include.length ? mainThreadMessageCount >= total ? false : baseHasMore : baseHasMore;
6219
+ const hasMore = metadataFilter || !include?.length || mainThreadMessageCount < total ? baseHasMore : false;
6202
6220
  return {
6203
6221
  messages,
6204
6222
  total,
@@ -6227,6 +6245,7 @@ var MemoryMySQL = class _MemoryMySQL extends storage.MemoryStorage {
6227
6245
  }
6228
6246
  async listMessagesByResourceId(args) {
6229
6247
  const { resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
6248
+ const metadataFilter = storage.validateStorageMetadataFilter(filter?.metadata);
6230
6249
  if (!resourceId || typeof resourceId !== "string" || resourceId.trim().length === 0) {
6231
6250
  throw new error.MastraError(
6232
6251
  {
@@ -6267,6 +6286,7 @@ var MemoryMySQL = class _MemoryMySQL extends storage.MemoryStorage {
6267
6286
  conditions.push(`${quoteIdentifier("createdAt", "column name")} ${endOp} ?`);
6268
6287
  params.push(transformToSqlValue(filter.dateRange.end));
6269
6288
  }
6289
+ addMySQLMessageMetadataFilter(conditions, params, metadataFilter);
6270
6290
  const whereSql = `WHERE ${conditions.join(" AND ")}`;
6271
6291
  const tableName = formatTableName(storage.TABLE_MESSAGES);
6272
6292
  const [countRows] = await this.pool.execute(