@mastra/mysql 0.8.1-alpha.1 → 0.8.2-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 +59 -0
- package/dist/index.cjs +11 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/background-tasks/index.d.ts +3 -1
- package/dist/storage/domains/background-tasks/index.d.ts.map +1 -1
- package/dist/storage/domains/experiments/index.d.ts.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
# @mastra/mysql
|
|
2
2
|
|
|
3
|
+
## 0.8.2-alpha.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Experiment results now include isolated metadata snapshots from the dataset items that ran. ([#22005](https://github.com/mastra-ai/mastra/pull/22005))
|
|
8
|
+
|
|
9
|
+
- Enforce atomic conditional background task state updates so cancellation cannot be overwritten during dispatch. Background task storage is no longer exposed by Cloudflare KV or ClickHouse, which cannot provide the required compare-and-set semantics. ([#22228](https://github.com/mastra-ai/mastra/pull/22228))
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8)]:
|
|
12
|
+
- @mastra/core@1.62.0-alpha.8
|
|
13
|
+
|
|
14
|
+
## 0.8.1
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Added HTTP endpoints for caller-driven experiments: `POST /datasets/:datasetId/experiments` now accepts `start: false` to create an experiment without spawning the runner (with an optional target and run-level `scorerIds`), and new routes `POST /datasets/:datasetId/experiments/:experimentId/items/:itemId/run`, `POST /datasets/:datasetId/experiments/:experimentId/results`, and `POST /datasets/:datasetId/experiments/:experimentId/finalize` let external orchestrators run one item server-side, submit externally computed per-item results (idempotent upsert on retries), and finalize the run with server-computed counts. ([#21888](https://github.com/mastra-ai/mastra/pull/21888))
|
|
19
|
+
|
|
20
|
+
- Fixed concurrent resume() calls on the same suspended workflow run executing downstream steps more than once. A resume now atomically claims the run before executing anything, so only one caller continues a given suspension. Losing callers throw WORKFLOW_RESUME_ALREADY_CLAIMED without running any steps. Fixes #20443 ([#21725](https://github.com/mastra-ai/mastra/pull/21725))
|
|
21
|
+
|
|
22
|
+
- Added `createDatasetExperiment()`, `runExperimentItem()`, `submitExperimentResult()`, and `finalizeExperiment()` methods so a caller-owned orchestrator (for example Temporal) can drive an experiment loop while Mastra either executes each item server-side or ingests externally computed results. ([#21888](https://github.com/mastra-ai/mastra/pull/21888))
|
|
23
|
+
|
|
24
|
+
- Workflow state updates now support an optional expectedStatus guard, so a status change is only applied when the stored run is in an expected state. This is what makes concurrent workflow resumes safe. ([#21725](https://github.com/mastra-ai/mastra/pull/21725))
|
|
25
|
+
|
|
26
|
+
- Added `upsertExperimentResult()` to the experiments storage domain plus an `attempt` column on experiment results and a nullable target with an optional `scorerIds` column on experiments, enabling retry-safe result writes for caller-driven experiments (retried submissions with the same `(experimentId, itemId, attempt)` key converge on a single row). `saveScore()` now accepts an optional caller-supplied `id` and upserts on it, so retried experiment submissions replace their previous score rows (latest wins) instead of accumulating duplicates. ([#21888](https://github.com/mastra-ai/mastra/pull/21888))
|
|
27
|
+
|
|
28
|
+
- Resume conflicts now return 409 Conflict. When a suspended workflow run has already been resumed by another caller, the resume endpoints respond with 409 instead of a generic error. ([#21725](https://github.com/mastra-ai/mastra/pull/21725))
|
|
29
|
+
|
|
30
|
+
- Added caller-driven experiments so an external orchestrator (for example Temporal workers) can own the experiment loop while Mastra stays the system of record. ([#21888](https://github.com/mastra-ai/mastra/pull/21888))
|
|
31
|
+
|
|
32
|
+
Create an experiment with `dataset.createExperiment()` (idempotent when you pass your own id). With a target, Mastra runs each item for you: call `dataset.runExperimentItem()` per item and Mastra executes the registered agent or workflow, resolves scorers (experiment `scorers`, falling back to item `scorerIds`, then dataset `scorerIds`), and upserts the result. Without a target, run everything yourself and report per-item results with `dataset.submitExperimentResult()` (upsert semantics on `(experimentId, itemId, attempt)` so retried workers converge on a single row). Either way, close the run with `dataset.finalizeExperiment()` and Mastra computes per-item succeeded/failed/skipped counts from the persisted rows. Results go into the same storage as native runs, so Studio views, comparisons, and review summaries work unchanged.
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Caller drives the loop, Mastra runs each item
|
|
36
|
+
const { experimentId } = await dataset.createExperiment({
|
|
37
|
+
id: workflowRunId,
|
|
38
|
+
targetType: 'agent',
|
|
39
|
+
targetId: 'support-agent',
|
|
40
|
+
scorers: ['accuracy'],
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
await dataset.runExperimentItem({ experimentId, itemId });
|
|
44
|
+
|
|
45
|
+
// Or: caller runs everything, Mastra ingests results
|
|
46
|
+
const ingest = await dataset.createExperiment({ id: workflowRunId });
|
|
47
|
+
await dataset.submitExperimentResult({
|
|
48
|
+
experimentId: ingest.experimentId,
|
|
49
|
+
itemId,
|
|
50
|
+
output,
|
|
51
|
+
scores: [{ scorerId: 'accuracy', score: 0.92 }],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const experiment = await dataset.finalizeExperiment({ experimentId });
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- Fixed versioned dataset item lookups to return the item visible in the requested dataset snapshot. ([#21979](https://github.com/mastra-ai/mastra/pull/21979))
|
|
58
|
+
|
|
59
|
+
- Updated dependencies [[`88d14ca`](https://github.com/mastra-ai/mastra/commit/88d14cac008582a618fecc3d5c7fd3bdf4f6ddc3), [`480e491`](https://github.com/mastra-ai/mastra/commit/480e491588bd6a7a1c9ee4407590ad625dd33952), [`9267e9b`](https://github.com/mastra-ai/mastra/commit/9267e9b3d9c2fcf16936050495a787054c2431ab), [`acc3471`](https://github.com/mastra-ai/mastra/commit/acc3471de5f3fde8027ee4e355af292b2bc1bc30), [`b6a771e`](https://github.com/mastra-ai/mastra/commit/b6a771ef23d203ddb348efca8065eff65def8191), [`84a5b69`](https://github.com/mastra-ai/mastra/commit/84a5b699f84d6bae0a34efe5a970d891090b9f41), [`9267e9b`](https://github.com/mastra-ai/mastra/commit/9267e9b3d9c2fcf16936050495a787054c2431ab), [`3bb88dd`](https://github.com/mastra-ai/mastra/commit/3bb88ddf07fb98f3cd16d3bff94e51cd3b45d011), [`d23e75d`](https://github.com/mastra-ai/mastra/commit/d23e75d57cc7cf5b9bfdbee896bf5a6a2484fed7), [`c8faa4e`](https://github.com/mastra-ai/mastra/commit/c8faa4e1cfebaec56b65e754e90b9fe46d153359), [`d378d75`](https://github.com/mastra-ai/mastra/commit/d378d7511f71309ed61a8f6b93cd0361dc6cb70f), [`84a5b69`](https://github.com/mastra-ai/mastra/commit/84a5b699f84d6bae0a34efe5a970d891090b9f41), [`26d4016`](https://github.com/mastra-ai/mastra/commit/26d40160ff7f7d8bf95fee2039a52cbc83863533), [`7c60df5`](https://github.com/mastra-ai/mastra/commit/7c60df5c7872343fbac5c3e5b1175c8076a5abfd), [`9267e9b`](https://github.com/mastra-ai/mastra/commit/9267e9b3d9c2fcf16936050495a787054c2431ab), [`84a5b69`](https://github.com/mastra-ai/mastra/commit/84a5b699f84d6bae0a34efe5a970d891090b9f41), [`f2031a4`](https://github.com/mastra-ai/mastra/commit/f2031a47445e8f67a89ba1309036816f97ab7a65), [`9267e9b`](https://github.com/mastra-ai/mastra/commit/9267e9b3d9c2fcf16936050495a787054c2431ab), [`cad4208`](https://github.com/mastra-ai/mastra/commit/cad42082e6aa1776168a94914f523334be45d929), [`8e529d4`](https://github.com/mastra-ai/mastra/commit/8e529d4ac754efef04b225841349e0da9edf89a6), [`57c5103`](https://github.com/mastra-ai/mastra/commit/57c51035a2a36e3df3c4f32f46bb789a66ed5946), [`038b7b4`](https://github.com/mastra-ai/mastra/commit/038b7b405cb4ac25ab3f3031334111b1f87ac112), [`4132d61`](https://github.com/mastra-ai/mastra/commit/4132d61f8367077120ee9e6420d3224dffd93c93), [`d378d75`](https://github.com/mastra-ai/mastra/commit/d378d7511f71309ed61a8f6b93cd0361dc6cb70f)]:
|
|
60
|
+
- @mastra/core@1.61.0
|
|
61
|
+
|
|
3
62
|
## 0.8.1-alpha.1
|
|
4
63
|
|
|
5
64
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -1495,7 +1495,7 @@ var BackgroundTasksMySQL = class BackgroundTasksMySQL extends _mastra_core_stora
|
|
|
1495
1495
|
transformToSqlValue(task.completedAt)
|
|
1496
1496
|
]);
|
|
1497
1497
|
}
|
|
1498
|
-
async updateTask(taskId, update) {
|
|
1498
|
+
async updateTask(taskId, update, options) {
|
|
1499
1499
|
const setClauses = [];
|
|
1500
1500
|
const params = [];
|
|
1501
1501
|
if ("status" in update) {
|
|
@@ -1530,9 +1530,12 @@ var BackgroundTasksMySQL = class BackgroundTasksMySQL extends _mastra_core_stora
|
|
|
1530
1530
|
setClauses.push(`${quoteIdentifier("completedAt", "column name")} = ?`);
|
|
1531
1531
|
params.push(transformToSqlValue(update.completedAt));
|
|
1532
1532
|
}
|
|
1533
|
-
if (setClauses.length === 0) return;
|
|
1533
|
+
if (setClauses.length === 0) return false;
|
|
1534
1534
|
params.push(taskId);
|
|
1535
|
-
|
|
1535
|
+
const statusPredicate = options?.expectedStatus ? ` AND ${quoteIdentifier("status", "column name")} = ?` : "";
|
|
1536
|
+
if (options?.expectedStatus) params.push(options.expectedStatus);
|
|
1537
|
+
const [result] = await this.pool.execute(`UPDATE ${formatTableName(_mastra_core_storage.TABLE_BACKGROUND_TASKS)} SET ${setClauses.join(", ")} WHERE ${quoteIdentifier("id", "column name")} = ?${statusPredicate}`, params);
|
|
1538
|
+
return result.affectedRows > 0;
|
|
1536
1539
|
}
|
|
1537
1540
|
async getTask(taskId) {
|
|
1538
1541
|
const [rows] = await this.pool.execute(`SELECT * FROM ${formatTableName(_mastra_core_storage.TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier("id", "column name")} = ?`, [taskId]);
|
|
@@ -3027,6 +3030,7 @@ var ExperimentsMySQL = class ExperimentsMySQL extends _mastra_core_storage.Exper
|
|
|
3027
3030
|
schema: _mastra_core_storage.EXPERIMENT_RESULTS_SCHEMA,
|
|
3028
3031
|
ifNotExists: [
|
|
3029
3032
|
"comment",
|
|
3033
|
+
"metadata",
|
|
3030
3034
|
"organizationId",
|
|
3031
3035
|
"projectId",
|
|
3032
3036
|
"attempt"
|
|
@@ -3081,6 +3085,7 @@ var ExperimentsMySQL = class ExperimentsMySQL extends _mastra_core_storage.Exper
|
|
|
3081
3085
|
input: parseJSON$2(row.input),
|
|
3082
3086
|
output: row.output ? parseJSON$2(row.output) : null,
|
|
3083
3087
|
groundTruth: row.groundTruth ? parseJSON$2(row.groundTruth) : null,
|
|
3088
|
+
metadata: row.metadata ? parseJSON$2(row.metadata) ?? null : null,
|
|
3084
3089
|
error: row.error ? parseJSON$2(row.error) ?? null : null,
|
|
3085
3090
|
startedAt: parseDateTime(row.startedAt) ?? /* @__PURE__ */ new Date(),
|
|
3086
3091
|
completedAt: parseDateTime(row.completedAt) ?? /* @__PURE__ */ new Date(),
|
|
@@ -3384,6 +3389,7 @@ var ExperimentsMySQL = class ExperimentsMySQL extends _mastra_core_storage.Exper
|
|
|
3384
3389
|
input: JSON.stringify(input.input),
|
|
3385
3390
|
output: input.output != null ? JSON.stringify(input.output) : null,
|
|
3386
3391
|
groundTruth: input.groundTruth != null ? JSON.stringify(input.groundTruth) : null,
|
|
3392
|
+
metadata: input.metadata != null ? JSON.stringify(input.metadata) : null,
|
|
3387
3393
|
error: input.error ? JSON.stringify(input.error) : null,
|
|
3388
3394
|
startedAt: input.startedAt,
|
|
3389
3395
|
completedAt: input.completedAt,
|
|
@@ -3405,6 +3411,7 @@ var ExperimentsMySQL = class ExperimentsMySQL extends _mastra_core_storage.Exper
|
|
|
3405
3411
|
input: input.input,
|
|
3406
3412
|
output: input.output,
|
|
3407
3413
|
groundTruth: input.groundTruth,
|
|
3414
|
+
metadata: input.metadata ?? null,
|
|
3408
3415
|
error: input.error,
|
|
3409
3416
|
startedAt: input.startedAt,
|
|
3410
3417
|
completedAt: input.completedAt,
|
|
@@ -3470,6 +3477,7 @@ var ExperimentsMySQL = class ExperimentsMySQL extends _mastra_core_storage.Exper
|
|
|
3470
3477
|
input: JSON.stringify(input.input),
|
|
3471
3478
|
output: input.output != null ? JSON.stringify(input.output) : null,
|
|
3472
3479
|
groundTruth: input.groundTruth != null ? JSON.stringify(input.groundTruth) : null,
|
|
3480
|
+
metadata: input.metadata != null ? JSON.stringify(input.metadata) : null,
|
|
3473
3481
|
error: input.error ? JSON.stringify(input.error) : null,
|
|
3474
3482
|
startedAt: input.startedAt,
|
|
3475
3483
|
completedAt: input.completedAt,
|