@mastra/spanner 1.5.0-alpha.1 → 1.5.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 +104 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +12 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/datasets/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/metrics.d.ts.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,109 @@
|
|
|
1
1
|
# @mastra/spanner
|
|
2
2
|
|
|
3
|
+
## 1.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added batch trace ID filtering to observability metric queries. ([#20535](https://github.com/mastra-ai/mastra/pull/20535))
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
const result = await observability.getMetricBreakdown({
|
|
11
|
+
name: ['mastra_model_total_input_tokens'],
|
|
12
|
+
aggregation: 'sum',
|
|
13
|
+
groupBy: ['traceId'],
|
|
14
|
+
filters: { traceIds: ['trace-1', 'trace-2'] },
|
|
15
|
+
});
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- Added persistence for dataset item undeclared tool policies. ([#19643](https://github.com/mastra-ai/mastra/pull/19643))
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
await dataset.addItem({
|
|
22
|
+
input: 'What is the weather?',
|
|
23
|
+
unmockedToolPolicy: 'deny',
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- Stored workflow definitions now persist across restarts on every major database backend. ([#20471](https://github.com/mastra-ai/mastra/pull/20471))
|
|
28
|
+
|
|
29
|
+
Implement the `workflowDefinitions` storage domain for libsql, pg, mysql, mssql, mongodb, and spanner. Previously the stored-workflow persistence path (`POST /stored/workflows`, `Mastra.addStoredWorkflow`) only worked against `@mastra/core`'s in-memory store. Persistent adapters returned `undefined` from `storage.getStore('workflowDefinitions')` and threw when the HTTP handler tried to read/write a workflow.
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const workflowDefinitions = await storage.getStore('workflowDefinitions');
|
|
33
|
+
if (!workflowDefinitions) {
|
|
34
|
+
throw new Error('This storage adapter does not support the workflowDefinitions domain');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
await workflowDefinitions.upsert({
|
|
38
|
+
id: 'greeting-workflow',
|
|
39
|
+
inputSchema: { type: 'object', properties: { name: { type: 'string' } }, required: ['name'] },
|
|
40
|
+
outputSchema: { type: 'object', properties: { text: { type: 'string' } }, required: ['text'] },
|
|
41
|
+
graph: [{ type: 'agent', id: 'greet', agentId: 'greeter-agent' }],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const { definitions, total } = await workflowDefinitions.list({ status: 'active' });
|
|
45
|
+
const definition = await workflowDefinitions.get('greeting-workflow');
|
|
46
|
+
await workflowDefinitions.delete('greeting-workflow');
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Each adapter now ships a `WorkflowDefinitions*` domain that:
|
|
50
|
+
|
|
51
|
+
- Creates the shared `mastra_workflow_definitions` table (or Mongo collection) from `WORKFLOW_DEFINITIONS_SCHEMA` during `init()`, plus a default index on `status`.
|
|
52
|
+
- Implements `upsert` / `get` / `list` / `delete` matching `WorkflowDefinitionsStorage` semantics (`list` supports `status` and `authorId` filters and orders by `updatedAt` desc). Partial upserts preserve unspecified fields, including `authorId` updates and `createdAt` / `updatedAt` semantics.
|
|
53
|
+
- Handles concurrent first-writes race-safely: if two callers upsert the same new id simultaneously, the losing insert detects the duplicate key, re-reads the row, and applies the partial-update path instead of failing.
|
|
54
|
+
- Round-trips the JSON columns (`inputSchema`, `outputSchema`, `stateSchema`, `requestContextSchema`, `metadata`, `graph`) through each adapter's JSON handling, so declarative workflow graphs rehydrate identically no matter which backend they were stored in. Malformed persisted JSON surfaces as an actionable error naming the row and column instead of hydrating raw strings.
|
|
55
|
+
|
|
56
|
+
Exported class names by adapter: `WorkflowDefinitionsLibSQL`, `WorkflowDefinitionsPG`, `WorkflowDefinitionsMySQL`, `WorkflowDefinitionsMSSQL`, `MongoDBWorkflowDefinitionsStore`, `WorkflowDefinitionsSpanner`. The composite stores (`LibSQLStore`, `PostgresStore`, `MySQLStore`, `MSSQLStore`, `MongoDBStore`, `SpannerStore`) auto-wire the new domain, so callers do not need to construct it manually — `storage.getStore('workflowDefinitions')` now returns a live handle.
|
|
57
|
+
|
|
58
|
+
The pg adapter reads `createdAt` / `updatedAt` from the auto-added `createdAtZ` / `updatedAtZ` `timestamptz` companion columns to avoid the naive-timestamp / local-TZ drift that a plain `TIMESTAMP` read exhibits under node-pg.
|
|
59
|
+
|
|
60
|
+
`@mastra/clickhouse` and `@mastra/cloudflare` register the new `mastra_workflow_definitions` table in their table/type maps so shared table constants stay exhaustive (no workflow-definitions domain implementation yet).
|
|
61
|
+
|
|
62
|
+
### Patch Changes
|
|
63
|
+
|
|
64
|
+
- Added a comment column to experiment results so review comments persist. The column is added automatically and non-destructively on startup for existing databases (https://github.com/mastra-ai/mastra/issues/19857). ([#19865](https://github.com/mastra-ai/mastra/pull/19865))
|
|
65
|
+
|
|
66
|
+
- Dataset item scorer selections now persist across Spanner writes and reads. Setting `scorerIds` to `null` clears an item override, while `[]` remains an explicit override with no scorers. ([#20191](https://github.com/mastra-ai/mastra/pull/20191))
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
await dataset.addItem({
|
|
70
|
+
input: 'Evaluate this response',
|
|
71
|
+
scorerIds: [],
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- Updated dependencies [[`4844167`](https://github.com/mastra-ai/mastra/commit/4844167cff2d5ec5004e94edd34970833040fa3f), [`c5e56ff`](https://github.com/mastra-ai/mastra/commit/c5e56ff3bcabdf062708f2d48744fec304df6792), [`594f7b2`](https://github.com/mastra-ai/mastra/commit/594f7b28f5263fb9982fd50d95c471fb971ea984), [`7f4e26d`](https://github.com/mastra-ai/mastra/commit/7f4e26dd57bd9b23c278ea21235ab823a3810a6c), [`311f943`](https://github.com/mastra-ai/mastra/commit/311f943bee60e8fdf5c84499ea50e884276c936c), [`322daa6`](https://github.com/mastra-ai/mastra/commit/322daa6d90552909204044790d850958f6745fed), [`db4e6ff`](https://github.com/mastra-ai/mastra/commit/db4e6ff744503112eb64deeaf6c2b54bf26a54c7), [`5faf93f`](https://github.com/mastra-ai/mastra/commit/5faf93f03e19daea394b9e2a923f2e4f833407f2), [`82201f7`](https://github.com/mastra-ai/mastra/commit/82201f75fae8e050a8de2df08b74875ee74c6b83), [`cadaa13`](https://github.com/mastra-ai/mastra/commit/cadaa1372e1077c8e85eb64c5499ba8803caa323), [`0c89896`](https://github.com/mastra-ai/mastra/commit/0c8989673fb7d106837098398131e570c6023b68), [`6d19a65`](https://github.com/mastra-ai/mastra/commit/6d19a6517f5da3911023d446b7e2d5dad8adb1cb), [`23b4238`](https://github.com/mastra-ai/mastra/commit/23b423844ad0bcf2a502a68dd62866d6160f9f6d), [`80ad891`](https://github.com/mastra-ai/mastra/commit/80ad891f8cd10379aa5b5af7510c763783b2ab56), [`fb18da5`](https://github.com/mastra-ai/mastra/commit/fb18da56fc35689ae370621a8f10b5b0d8606e20), [`fb18da5`](https://github.com/mastra-ai/mastra/commit/fb18da56fc35689ae370621a8f10b5b0d8606e20), [`e320a76`](https://github.com/mastra-ai/mastra/commit/e320a763feaf65c6be3cebecf746defcbde161b3), [`03b4918`](https://github.com/mastra-ai/mastra/commit/03b4918c80d188ce375334c393e131c6e94bd7eb), [`14ef73a`](https://github.com/mastra-ai/mastra/commit/14ef73a4bbd73e7808414816eb0628ce1d80b5d7), [`b582f7f`](https://github.com/mastra-ai/mastra/commit/b582f7fa2f9c1f87d19efc63d344fbe5dda2608c), [`0a6598b`](https://github.com/mastra-ai/mastra/commit/0a6598bde80bde008986ad6616bed9632b9294cb), [`06000d7`](https://github.com/mastra-ai/mastra/commit/06000d73712911572e913b8a83339270296d0a22), [`1d677d5`](https://github.com/mastra-ai/mastra/commit/1d677d5f99d7db403f7828585e8c25f299f72628), [`9e1dad8`](https://github.com/mastra-ai/mastra/commit/9e1dad8f7b1cab2bb7ade90e5b7561f24577b88a), [`2f43145`](https://github.com/mastra-ai/mastra/commit/2f4314504c03cbba280414ac81ba3197448ee6b0), [`4e35a56`](https://github.com/mastra-ai/mastra/commit/4e35a56cdf8d74a5ff6d5eda01f2c1deaf6cc7be), [`d94b8e1`](https://github.com/mastra-ai/mastra/commit/d94b8e1cee67416d518a8c30099040061bef6a1c), [`93e28ec`](https://github.com/mastra-ai/mastra/commit/93e28ecce9031c02397e0ae8406593e5c7a95883), [`729dab4`](https://github.com/mastra-ai/mastra/commit/729dab408faccfaef0cbb048e5a4338f9172847e), [`484003d`](https://github.com/mastra-ai/mastra/commit/484003d33ff59330c86b19863e4a38732d7e4155), [`3de0188`](https://github.com/mastra-ai/mastra/commit/3de0188bfaf9a9c09c95fe322b53838cf52c70b6), [`34d34d8`](https://github.com/mastra-ai/mastra/commit/34d34d8c811df512fef4dd5459f79b7821be1866), [`b582f7f`](https://github.com/mastra-ai/mastra/commit/b582f7fa2f9c1f87d19efc63d344fbe5dda2608c), [`933d291`](https://github.com/mastra-ai/mastra/commit/933d291146b789c19442ad206f94da3e4be90c64), [`a1cb98d`](https://github.com/mastra-ai/mastra/commit/a1cb98d11990b560b98482292a1f34aa1a2d9092), [`598ad82`](https://github.com/mastra-ai/mastra/commit/598ad82d41c41389a686338a1d0e50b7400e1938), [`1fd6aad`](https://github.com/mastra-ai/mastra/commit/1fd6aad1ea4a9d32f65efa832307c35e981a4c0a)]:
|
|
76
|
+
- @mastra/core@1.56.0
|
|
77
|
+
|
|
78
|
+
## 1.5.0-alpha.2
|
|
79
|
+
|
|
80
|
+
### Minor Changes
|
|
81
|
+
|
|
82
|
+
- Added batch trace ID filtering to observability metric queries. ([#20535](https://github.com/mastra-ai/mastra/pull/20535))
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
const result = await observability.getMetricBreakdown({
|
|
86
|
+
name: ['mastra_model_total_input_tokens'],
|
|
87
|
+
aggregation: 'sum',
|
|
88
|
+
groupBy: ['traceId'],
|
|
89
|
+
filters: { traceIds: ['trace-1', 'trace-2'] },
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Patch Changes
|
|
94
|
+
|
|
95
|
+
- Dataset item scorer selections now persist across Spanner writes and reads. Setting `scorerIds` to `null` clears an item override, while `[]` remains an explicit override with no scorers. ([#20191](https://github.com/mastra-ai/mastra/pull/20191))
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
await dataset.addItem({
|
|
99
|
+
input: 'Evaluate this response',
|
|
100
|
+
scorerIds: [],
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- Updated dependencies [[`82201f7`](https://github.com/mastra-ai/mastra/commit/82201f75fae8e050a8de2df08b74875ee74c6b83), [`fb18da5`](https://github.com/mastra-ai/mastra/commit/fb18da56fc35689ae370621a8f10b5b0d8606e20), [`fb18da5`](https://github.com/mastra-ai/mastra/commit/fb18da56fc35689ae370621a8f10b5b0d8606e20), [`0a6598b`](https://github.com/mastra-ai/mastra/commit/0a6598bde80bde008986ad6616bed9632b9294cb), [`9e1dad8`](https://github.com/mastra-ai/mastra/commit/9e1dad8f7b1cab2bb7ade90e5b7561f24577b88a), [`2f43145`](https://github.com/mastra-ai/mastra/commit/2f4314504c03cbba280414ac81ba3197448ee6b0), [`34d34d8`](https://github.com/mastra-ai/mastra/commit/34d34d8c811df512fef4dd5459f79b7821be1866)]:
|
|
105
|
+
- @mastra/core@1.56.0-alpha.6
|
|
106
|
+
|
|
3
107
|
## 1.5.0-alpha.1
|
|
4
108
|
|
|
5
109
|
### Minor Changes
|
package/dist/docs/SKILL.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -2789,6 +2789,7 @@ function rowToItem(row) {
|
|
|
2789
2789
|
expectedTrajectory: t.expectedTrajectory ?? void 0,
|
|
2790
2790
|
toolMocks: t.toolMocks ?? void 0,
|
|
2791
2791
|
unmockedToolPolicy: t.unmockedToolPolicy ?? void 0,
|
|
2792
|
+
scorerIds: t.scorerIds ?? void 0,
|
|
2792
2793
|
requestContext: t.requestContext ?? void 0,
|
|
2793
2794
|
metadata: t.metadata ?? void 0,
|
|
2794
2795
|
source: t.source ?? void 0,
|
|
@@ -2887,7 +2888,8 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
2887
2888
|
"organizationId",
|
|
2888
2889
|
"projectId",
|
|
2889
2890
|
"externalId",
|
|
2890
|
-
"unmockedToolPolicy"
|
|
2891
|
+
"unmockedToolPolicy",
|
|
2892
|
+
"scorerIds"
|
|
2891
2893
|
]
|
|
2892
2894
|
});
|
|
2893
2895
|
await this.createDefaultIndexes();
|
|
@@ -3353,6 +3355,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3353
3355
|
expectedTrajectory: args.expectedTrajectory ?? null,
|
|
3354
3356
|
toolMocks: args.toolMocks ?? null,
|
|
3355
3357
|
unmockedToolPolicy: args.unmockedToolPolicy ?? null,
|
|
3358
|
+
scorerIds: args.scorerIds ?? null,
|
|
3356
3359
|
requestContext: args.requestContext ?? null,
|
|
3357
3360
|
metadata: args.metadata ?? null,
|
|
3358
3361
|
source: args.source ?? null,
|
|
@@ -3374,6 +3377,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3374
3377
|
expectedTrajectory: args.expectedTrajectory,
|
|
3375
3378
|
toolMocks: args.toolMocks,
|
|
3376
3379
|
unmockedToolPolicy: args.unmockedToolPolicy,
|
|
3380
|
+
scorerIds: args.scorerIds,
|
|
3377
3381
|
requestContext: args.requestContext,
|
|
3378
3382
|
metadata: args.metadata,
|
|
3379
3383
|
source: args.source,
|
|
@@ -3424,6 +3428,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3424
3428
|
expectedTrajectory: args.expectedTrajectory !== void 0 ? args.expectedTrajectory : existing.expectedTrajectory,
|
|
3425
3429
|
toolMocks: args.toolMocks !== void 0 ? args.toolMocks : existing.toolMocks,
|
|
3426
3430
|
unmockedToolPolicy: args.unmockedToolPolicy !== void 0 ? args.unmockedToolPolicy : existing.unmockedToolPolicy,
|
|
3431
|
+
scorerIds: args.scorerIds !== void 0 ? args.scorerIds ?? void 0 : existing.scorerIds,
|
|
3427
3432
|
requestContext: args.requestContext !== void 0 ? args.requestContext : existing.requestContext,
|
|
3428
3433
|
metadata: args.metadata !== void 0 ? args.metadata : existing.metadata,
|
|
3429
3434
|
source: args.source !== void 0 ? args.source : existing.source
|
|
@@ -3450,6 +3455,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3450
3455
|
expectedTrajectory: merged.expectedTrajectory ?? null,
|
|
3451
3456
|
toolMocks: merged.toolMocks ?? null,
|
|
3452
3457
|
unmockedToolPolicy: merged.unmockedToolPolicy ?? null,
|
|
3458
|
+
scorerIds: merged.scorerIds ?? null,
|
|
3453
3459
|
requestContext: merged.requestContext ?? null,
|
|
3454
3460
|
metadata: merged.metadata ?? null,
|
|
3455
3461
|
source: merged.source ?? null,
|
|
@@ -3472,6 +3478,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3472
3478
|
expectedTrajectory: merged.expectedTrajectory,
|
|
3473
3479
|
toolMocks: merged.toolMocks,
|
|
3474
3480
|
unmockedToolPolicy: merged.unmockedToolPolicy,
|
|
3481
|
+
scorerIds: merged.scorerIds,
|
|
3475
3482
|
requestContext: merged.requestContext,
|
|
3476
3483
|
metadata: merged.metadata,
|
|
3477
3484
|
source: merged.source,
|
|
@@ -3531,6 +3538,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3531
3538
|
expectedTrajectory: existing.expectedTrajectory ?? null,
|
|
3532
3539
|
toolMocks: existing.toolMocks ?? null,
|
|
3533
3540
|
unmockedToolPolicy: existing.unmockedToolPolicy ?? null,
|
|
3541
|
+
scorerIds: existing.scorerIds ?? null,
|
|
3534
3542
|
requestContext: existing.requestContext ?? null,
|
|
3535
3543
|
metadata: existing.metadata ?? null,
|
|
3536
3544
|
source: existing.source ?? null,
|
|
@@ -3848,6 +3856,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3848
3856
|
expectedTrajectory: insert.item.expectedTrajectory,
|
|
3849
3857
|
toolMocks: insert.item.toolMocks,
|
|
3850
3858
|
unmockedToolPolicy: insert.item.unmockedToolPolicy,
|
|
3859
|
+
scorerIds: insert.item.scorerIds,
|
|
3851
3860
|
requestContext: insert.item.requestContext,
|
|
3852
3861
|
metadata: insert.item.metadata,
|
|
3853
3862
|
source: insert.item.source,
|
|
@@ -3917,6 +3926,7 @@ var DatasetsSpanner = class DatasetsSpanner extends _mastra_core_storage.Dataset
|
|
|
3917
3926
|
expectedTrajectory: existing.expectedTrajectory ?? null,
|
|
3918
3927
|
toolMocks: existing.toolMocks ?? null,
|
|
3919
3928
|
unmockedToolPolicy: existing.unmockedToolPolicy ?? null,
|
|
3929
|
+
scorerIds: existing.scorerIds ?? null,
|
|
3920
3930
|
requestContext: existing.requestContext ?? null,
|
|
3921
3931
|
metadata: existing.metadata ?? null,
|
|
3922
3932
|
source: existing.source ?? null,
|
|
@@ -7730,6 +7740,7 @@ function buildWhereClause(filters, startIndex = 0) {
|
|
|
7730
7740
|
const ts = filters.timestamp;
|
|
7731
7741
|
if (ts?.start) bindScalar("timestamp", ts.start, ts.startExclusive ? ">" : ">=");
|
|
7732
7742
|
if (ts?.end) bindScalar("timestamp", ts.end, ts.endExclusive ? "<" : "<=");
|
|
7743
|
+
if (Array.isArray(filters.traceIds)) bindIn("traceId", filters.traceIds);
|
|
7733
7744
|
for (const k of [
|
|
7734
7745
|
"traceId",
|
|
7735
7746
|
"spanId",
|