@mastra/spanner 1.5.0-alpha.0 → 1.5.0-alpha.2
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 +73 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +182 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +183 -6
- 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/dist/storage/domains/workflow-definitions/index.d.ts +22 -0
- package/dist/storage/domains/workflow-definitions/index.d.ts.map +1 -0
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,78 @@
|
|
|
1
1
|
# @mastra/spanner
|
|
2
2
|
|
|
3
|
+
## 1.5.0-alpha.2
|
|
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
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 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))
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
await dataset.addItem({
|
|
24
|
+
input: 'Evaluate this response',
|
|
25
|
+
scorerIds: [],
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- 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)]:
|
|
30
|
+
- @mastra/core@1.56.0-alpha.6
|
|
31
|
+
|
|
32
|
+
## 1.5.0-alpha.1
|
|
33
|
+
|
|
34
|
+
### Minor Changes
|
|
35
|
+
|
|
36
|
+
- Stored workflow definitions now persist across restarts on every major database backend. ([#20471](https://github.com/mastra-ai/mastra/pull/20471))
|
|
37
|
+
|
|
38
|
+
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.
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
const workflowDefinitions = await storage.getStore('workflowDefinitions');
|
|
42
|
+
if (!workflowDefinitions) {
|
|
43
|
+
throw new Error('This storage adapter does not support the workflowDefinitions domain');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await workflowDefinitions.upsert({
|
|
47
|
+
id: 'greeting-workflow',
|
|
48
|
+
inputSchema: { type: 'object', properties: { name: { type: 'string' } }, required: ['name'] },
|
|
49
|
+
outputSchema: { type: 'object', properties: { text: { type: 'string' } }, required: ['text'] },
|
|
50
|
+
graph: [{ type: 'agent', id: 'greet', agentId: 'greeter-agent' }],
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const { definitions, total } = await workflowDefinitions.list({ status: 'active' });
|
|
54
|
+
const definition = await workflowDefinitions.get('greeting-workflow');
|
|
55
|
+
await workflowDefinitions.delete('greeting-workflow');
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Each adapter now ships a `WorkflowDefinitions*` domain that:
|
|
59
|
+
|
|
60
|
+
- Creates the shared `mastra_workflow_definitions` table (or Mongo collection) from `WORKFLOW_DEFINITIONS_SCHEMA` during `init()`, plus a default index on `status`.
|
|
61
|
+
- 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.
|
|
62
|
+
- 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.
|
|
63
|
+
- 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.
|
|
64
|
+
|
|
65
|
+
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.
|
|
66
|
+
|
|
67
|
+
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.
|
|
68
|
+
|
|
69
|
+
`@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).
|
|
70
|
+
|
|
71
|
+
### Patch Changes
|
|
72
|
+
|
|
73
|
+
- Updated dependencies [[`4844167`](https://github.com/mastra-ai/mastra/commit/4844167cff2d5ec5004e94edd34970833040fa3f), [`5faf93f`](https://github.com/mastra-ai/mastra/commit/5faf93f03e19daea394b9e2a923f2e4f833407f2), [`80ad891`](https://github.com/mastra-ai/mastra/commit/80ad891f8cd10379aa5b5af7510c763783b2ab56), [`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)]:
|
|
74
|
+
- @mastra/core@1.56.0-alpha.4
|
|
75
|
+
|
|
3
76
|
## 1.5.0-alpha.0
|
|
4
77
|
|
|
5
78
|
### Minor Changes
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-spanner
|
|
|
3
3
|
description: Documentation for @mastra/spanner. Use when working with @mastra/spanner APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/spanner"
|
|
6
|
-
version: "1.5.0-alpha.
|
|
6
|
+
version: "1.5.0-alpha.2"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
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",
|
|
@@ -11501,6 +11512,169 @@ var SkillsSpanner = class SkillsSpanner extends _mastra_core_storage.SkillsStora
|
|
|
11501
11512
|
}
|
|
11502
11513
|
};
|
|
11503
11514
|
//#endregion
|
|
11515
|
+
//#region src/storage/domains/workflow-definitions/index.ts
|
|
11516
|
+
function rowToDefinition(row) {
|
|
11517
|
+
const parsed = transformFromSpannerRow({
|
|
11518
|
+
tableName: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS,
|
|
11519
|
+
row
|
|
11520
|
+
});
|
|
11521
|
+
if (parsed.inputSchema == null || parsed.outputSchema == null || parsed.graph == null) throw new Error(`Workflow definition row "${String(parsed.id)}" is missing required JSON columns.`);
|
|
11522
|
+
const def = {
|
|
11523
|
+
id: String(parsed.id),
|
|
11524
|
+
inputSchema: parsed.inputSchema,
|
|
11525
|
+
outputSchema: parsed.outputSchema,
|
|
11526
|
+
graph: parsed.graph,
|
|
11527
|
+
status: parsed.status,
|
|
11528
|
+
source: parsed.source,
|
|
11529
|
+
createdAt: parsed.createdAt instanceof Date ? parsed.createdAt : new Date(parsed.createdAt),
|
|
11530
|
+
updatedAt: parsed.updatedAt instanceof Date ? parsed.updatedAt : new Date(parsed.updatedAt)
|
|
11531
|
+
};
|
|
11532
|
+
if (parsed.description != null) def.description = parsed.description;
|
|
11533
|
+
if (parsed.metadata != null) def.metadata = parsed.metadata;
|
|
11534
|
+
if (parsed.stateSchema != null) def.stateSchema = parsed.stateSchema;
|
|
11535
|
+
if (parsed.requestContextSchema != null) def.requestContextSchema = parsed.requestContextSchema;
|
|
11536
|
+
if (parsed.authorId != null) def.authorId = parsed.authorId;
|
|
11537
|
+
return def;
|
|
11538
|
+
}
|
|
11539
|
+
var WorkflowDefinitionsSpanner = class WorkflowDefinitionsSpanner extends _mastra_core_storage.WorkflowDefinitionsStorage {
|
|
11540
|
+
database;
|
|
11541
|
+
db;
|
|
11542
|
+
skipDefaultIndexes;
|
|
11543
|
+
indexes;
|
|
11544
|
+
static MANAGED_TABLES = [_mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS];
|
|
11545
|
+
constructor(config) {
|
|
11546
|
+
super();
|
|
11547
|
+
const { database, indexes, skipDefaultIndexes, initMode } = resolveSpannerConfig(config);
|
|
11548
|
+
this.database = database;
|
|
11549
|
+
this.db = new SpannerDB({
|
|
11550
|
+
database,
|
|
11551
|
+
skipDefaultIndexes,
|
|
11552
|
+
initMode
|
|
11553
|
+
});
|
|
11554
|
+
this.skipDefaultIndexes = skipDefaultIndexes;
|
|
11555
|
+
this.indexes = indexes?.filter((idx) => WorkflowDefinitionsSpanner.MANAGED_TABLES.includes(idx.table));
|
|
11556
|
+
}
|
|
11557
|
+
async init() {
|
|
11558
|
+
await this.db.createTable({
|
|
11559
|
+
tableName: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS,
|
|
11560
|
+
schema: _mastra_core_storage.WORKFLOW_DEFINITIONS_SCHEMA
|
|
11561
|
+
});
|
|
11562
|
+
await this.createDefaultIndexes();
|
|
11563
|
+
await this.createCustomIndexes();
|
|
11564
|
+
}
|
|
11565
|
+
getDefaultIndexDefinitions() {
|
|
11566
|
+
return [{
|
|
11567
|
+
name: "mastra_workflow_definitions_status_idx",
|
|
11568
|
+
table: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS,
|
|
11569
|
+
columns: ["status"]
|
|
11570
|
+
}];
|
|
11571
|
+
}
|
|
11572
|
+
async createDefaultIndexes() {
|
|
11573
|
+
if (this.skipDefaultIndexes) return;
|
|
11574
|
+
await this.db.createIndexes(this.getDefaultIndexDefinitions());
|
|
11575
|
+
}
|
|
11576
|
+
async createCustomIndexes() {
|
|
11577
|
+
if (!this.indexes || this.indexes.length === 0) return;
|
|
11578
|
+
await this.db.createIndexes(this.indexes);
|
|
11579
|
+
}
|
|
11580
|
+
async dangerouslyClearAll() {
|
|
11581
|
+
await this.db.clearTable({ tableName: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS });
|
|
11582
|
+
}
|
|
11583
|
+
async upsert(input) {
|
|
11584
|
+
const now = /* @__PURE__ */ new Date();
|
|
11585
|
+
if (!await this.get(input.id)) {
|
|
11586
|
+
if (!("inputSchema" in input) || input.inputSchema === void 0) throw new Error(`Cannot create workflow definition "${input.id}": inputSchema is required.`);
|
|
11587
|
+
if (!("outputSchema" in input) || input.outputSchema === void 0) throw new Error(`Cannot create workflow definition "${input.id}": outputSchema is required.`);
|
|
11588
|
+
if (!("graph" in input) || input.graph === void 0) throw new Error(`Cannot create workflow definition "${input.id}": graph is required.`);
|
|
11589
|
+
const record = {
|
|
11590
|
+
id: input.id,
|
|
11591
|
+
description: input.description ?? null,
|
|
11592
|
+
metadata: input.metadata ?? null,
|
|
11593
|
+
inputSchema: input.inputSchema,
|
|
11594
|
+
outputSchema: input.outputSchema,
|
|
11595
|
+
stateSchema: input.stateSchema ?? null,
|
|
11596
|
+
requestContextSchema: input.requestContextSchema ?? null,
|
|
11597
|
+
graph: input.graph,
|
|
11598
|
+
status: "active",
|
|
11599
|
+
source: "storage",
|
|
11600
|
+
authorId: "authorId" in input ? input.authorId ?? null : null,
|
|
11601
|
+
createdAt: now,
|
|
11602
|
+
updatedAt: now
|
|
11603
|
+
};
|
|
11604
|
+
try {
|
|
11605
|
+
await this.db.insert({
|
|
11606
|
+
tableName: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS,
|
|
11607
|
+
record
|
|
11608
|
+
});
|
|
11609
|
+
} catch (error) {
|
|
11610
|
+
if (!await this.get(input.id)) throw error;
|
|
11611
|
+
return this.applyUpdate(input, now);
|
|
11612
|
+
}
|
|
11613
|
+
const created = await this.get(input.id);
|
|
11614
|
+
if (!created) throw new Error(`Failed to persist workflow definition "${input.id}".`);
|
|
11615
|
+
return created;
|
|
11616
|
+
}
|
|
11617
|
+
return this.applyUpdate(input, now);
|
|
11618
|
+
}
|
|
11619
|
+
async applyUpdate(input, now) {
|
|
11620
|
+
const data = { updatedAt: now };
|
|
11621
|
+
if ("description" in input && input.description !== void 0) data.description = input.description;
|
|
11622
|
+
if ("metadata" in input && input.metadata !== void 0) data.metadata = input.metadata;
|
|
11623
|
+
if ("inputSchema" in input && input.inputSchema !== void 0) data.inputSchema = input.inputSchema;
|
|
11624
|
+
if ("outputSchema" in input && input.outputSchema !== void 0) data.outputSchema = input.outputSchema;
|
|
11625
|
+
if ("stateSchema" in input && input.stateSchema !== void 0) data.stateSchema = input.stateSchema;
|
|
11626
|
+
if ("requestContextSchema" in input && input.requestContextSchema !== void 0) data.requestContextSchema = input.requestContextSchema;
|
|
11627
|
+
if ("graph" in input && input.graph !== void 0) data.graph = input.graph;
|
|
11628
|
+
if ("status" in input && input.status !== void 0) data.status = input.status;
|
|
11629
|
+
if ("authorId" in input && input.authorId !== void 0) data.authorId = input.authorId;
|
|
11630
|
+
await this.db.update({
|
|
11631
|
+
tableName: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS,
|
|
11632
|
+
keys: { id: input.id },
|
|
11633
|
+
data
|
|
11634
|
+
});
|
|
11635
|
+
const updated = await this.get(input.id);
|
|
11636
|
+
if (!updated) throw new Error(`Failed to update workflow definition "${input.id}".`);
|
|
11637
|
+
return updated;
|
|
11638
|
+
}
|
|
11639
|
+
async get(id) {
|
|
11640
|
+
const row = await this.db.load({
|
|
11641
|
+
tableName: _mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS,
|
|
11642
|
+
keys: { id }
|
|
11643
|
+
});
|
|
11644
|
+
return row ? rowToDefinition(row) : null;
|
|
11645
|
+
}
|
|
11646
|
+
async list(args) {
|
|
11647
|
+
const params = {};
|
|
11648
|
+
const conditions = [];
|
|
11649
|
+
if (args?.status) {
|
|
11650
|
+
params.status = args.status;
|
|
11651
|
+
conditions.push(`${quoteIdent("status", "column name")} = @status`);
|
|
11652
|
+
}
|
|
11653
|
+
if (args?.authorId !== void 0) {
|
|
11654
|
+
params.authorId = args.authorId;
|
|
11655
|
+
conditions.push(`${quoteIdent("authorId", "column name")} = @authorId`);
|
|
11656
|
+
}
|
|
11657
|
+
const where = conditions.length ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
11658
|
+
const sql = `SELECT * FROM ${quoteIdent(_mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS, "table name")} ${where} ORDER BY ${quoteIdent("updatedAt", "column name")} DESC`;
|
|
11659
|
+
const [rows] = await this.database.run({
|
|
11660
|
+
sql,
|
|
11661
|
+
params,
|
|
11662
|
+
json: true
|
|
11663
|
+
});
|
|
11664
|
+
const definitions = rows.map(rowToDefinition);
|
|
11665
|
+
return {
|
|
11666
|
+
definitions,
|
|
11667
|
+
total: definitions.length
|
|
11668
|
+
};
|
|
11669
|
+
}
|
|
11670
|
+
async delete(id) {
|
|
11671
|
+
await this.db.runDml({
|
|
11672
|
+
sql: `DELETE FROM ${quoteIdent(_mastra_core_storage.TABLE_WORKFLOW_DEFINITIONS, "table name")} WHERE id = @id`,
|
|
11673
|
+
params: { id }
|
|
11674
|
+
});
|
|
11675
|
+
}
|
|
11676
|
+
};
|
|
11677
|
+
//#endregion
|
|
11504
11678
|
//#region src/storage/domains/workflows/index.ts
|
|
11505
11679
|
/**
|
|
11506
11680
|
* Spanner-backed storage for workflow run snapshots, including persistence,
|
|
@@ -12669,7 +12843,8 @@ const SPANNER_DOMAIN_KEYS = [
|
|
|
12669
12843
|
"datasets",
|
|
12670
12844
|
"experiments",
|
|
12671
12845
|
"favorites",
|
|
12672
|
-
"workspaces"
|
|
12846
|
+
"workspaces",
|
|
12847
|
+
"workflowDefinitions"
|
|
12673
12848
|
];
|
|
12674
12849
|
const isPreConfiguredDatabase = (config) => "database" in config && !!config.database;
|
|
12675
12850
|
/**
|
|
@@ -12757,7 +12932,8 @@ var SpannerStore = class extends _mastra_core_storage.MastraCompositeStore {
|
|
|
12757
12932
|
...wants("datasets") && { datasets: new DatasetsSpanner(domainConfig) },
|
|
12758
12933
|
...wants("experiments") && { experiments: new ExperimentsSpanner(domainConfig) },
|
|
12759
12934
|
...wants("favorites") && { favorites: new FavoritesSpanner(domainConfig) },
|
|
12760
|
-
...wants("workspaces") && { workspaces: new WorkspacesSpanner(domainConfig) }
|
|
12935
|
+
...wants("workspaces") && { workspaces: new WorkspacesSpanner(domainConfig) },
|
|
12936
|
+
...wants("workflowDefinitions") && { workflowDefinitions: new WorkflowDefinitionsSpanner(domainConfig) }
|
|
12761
12937
|
};
|
|
12762
12938
|
} catch (e) {
|
|
12763
12939
|
throw new _mastra_core_error.MastraError({
|
|
@@ -12813,7 +12989,8 @@ var SpannerStore = class extends _mastra_core_storage.MastraCompositeStore {
|
|
|
12813
12989
|
"datasets",
|
|
12814
12990
|
"experiments",
|
|
12815
12991
|
"workspaces",
|
|
12816
|
-
"favorites"
|
|
12992
|
+
"favorites",
|
|
12993
|
+
"workflowDefinitions"
|
|
12817
12994
|
]) {
|
|
12818
12995
|
const store = this.stores?.[key];
|
|
12819
12996
|
if (store) await store.init();
|
|
@@ -12863,6 +13040,7 @@ exports.ScorerDefinitionsSpanner = ScorerDefinitionsSpanner;
|
|
|
12863
13040
|
exports.ScoresSpanner = ScoresSpanner;
|
|
12864
13041
|
exports.SkillsSpanner = SkillsSpanner;
|
|
12865
13042
|
exports.SpannerStore = SpannerStore;
|
|
13043
|
+
exports.WorkflowDefinitionsSpanner = WorkflowDefinitionsSpanner;
|
|
12866
13044
|
exports.WorkflowsSpanner = WorkflowsSpanner;
|
|
12867
13045
|
exports.WorkspacesSpanner = WorkspacesSpanner;
|
|
12868
13046
|
|