@mastra/server 1.66.0-alpha.2 → 1.66.0-alpha.4
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/dist/{conversations-DtnawNGm.js → conversations-D89Io31L.js} +2 -2
- package/dist/{conversations-DtnawNGm.js.map → conversations-D89Io31L.js.map} +1 -1
- package/dist/{conversations-PF0eKhIu.cjs → conversations-DJybpnE5.cjs} +2 -2
- package/dist/{conversations-PF0eKhIu.cjs.map → conversations-DJybpnE5.cjs.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-observability-tracing-trace-query.md +42 -0
- package/dist/dynamic-workflows-Cn9MXevC.js.map +1 -1
- package/dist/dynamic-workflows-DSg9_yec.cjs.map +1 -1
- package/dist/{memory-D0prxytx.cjs → memory-CVODqy7m.cjs} +19 -1
- package/dist/memory-CVODqy7m.cjs.map +1 -0
- package/dist/{memory-CBLqn9xl.js → memory-CjWJYFVI.js} +2 -2
- package/dist/memory-CjWJYFVI.js.map +1 -0
- package/dist/schedules-BcEUUuX_.js.map +1 -1
- package/dist/schedules-fj9U0_tA.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.cjs +86 -31
- package/dist/server/handlers/agent-controller.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.d.ts +57 -0
- package/dist/server/handlers/agent-controller.d.ts.map +1 -1
- package/dist/server/handlers/agent-controller.js +86 -31
- package/dist/server/handlers/agent-controller.js.map +1 -1
- package/dist/server/handlers/authorship.cjs.map +1 -1
- package/dist/server/handlers/authorship.js.map +1 -1
- package/dist/server/handlers/conversations.cjs +1 -1
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/mcp.cjs.map +1 -1
- package/dist/server/handlers/mcp.js.map +1 -1
- package/dist/server/handlers/memory.cjs +1 -1
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/schemas/index.cjs +5 -2
- package/dist/server/schemas/index.js +3 -3
- package/dist/server/schemas/memory.d.ts +36 -0
- package/dist/server/schemas/memory.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/memory-CBLqn9xl.js.map +0 -1
- package/dist/memory-D0prxytx.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as getThreadByIdResponseSchema } from "./memory-CjWJYFVI.js";
|
|
2
2
|
import { n as conversationItemSchema } from "./responses-DJNJgCTg.js";
|
|
3
3
|
import z from "zod";
|
|
4
4
|
//#region src/server/schemas/conversations.ts
|
|
@@ -30,4 +30,4 @@ const conversationItemsListSchema = z.object({
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { createConversationBodySchema as a, conversationObjectSchema as i, conversationIdPathParams as n, conversationItemsListSchema as r, conversationDeletedSchema as t };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=conversations-
|
|
33
|
+
//# sourceMappingURL=conversations-D89Io31L.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations-
|
|
1
|
+
{"version":3,"file":"conversations-D89Io31L.js","names":[],"sources":["../src/server/schemas/conversations.ts"],"sourcesContent":["import z from 'zod';\nimport { getThreadByIdResponseSchema } from './memory';\nimport { conversationItemSchema } from './responses';\n\nexport const conversationIdPathParams = z.object({\n conversationId: z.string().describe('Unique identifier for the conversation thread'),\n});\n\nexport const createConversationBodySchema = z.object({\n agent_id: z.string().describe('Mastra agent ID used to create the conversation thread'),\n conversation_id: z.string().optional().describe('Optional conversation ID to use as the raw threadId'),\n resource_id: z.string().optional().describe('Optional resource ID to associate with the conversation'),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type CreateConversationBody = z.infer<typeof createConversationBodySchema>;\n\nexport const conversationObjectSchema = z.object({\n id: z.string(),\n object: z.literal('conversation'),\n thread: getThreadByIdResponseSchema,\n});\n\nexport const conversationDeletedSchema = z.object({\n id: z.string(),\n object: z.literal('conversation.deleted'),\n deleted: z.literal(true),\n});\n\nexport const conversationItemsListSchema = z.object({\n object: z.literal('list'),\n data: z.array(conversationItemSchema),\n first_id: z.string().nullable(),\n last_id: z.string().nullable(),\n has_more: z.boolean(),\n});\n\nexport type ConversationObject = z.infer<typeof conversationObjectSchema>;\nexport type ConversationItemsList = z.infer<typeof conversationItemsListSchema>;\nexport type ConversationDeleted = z.infer<typeof conversationDeletedSchema>;\n"],"mappings":";;;;AAIA,MAAa,2BAA2B,EAAE,OAAO,EAC/C,gBAAgB,EAAE,OAAO,CAAC,CAAC,SAAS,+CAA+C,EACrF,CAAC;AAED,MAAa,+BAA+B,EAAE,OAAO;CACnD,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,wDAAwD;CACtF,iBAAiB,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,qDAAqD;CACrG,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,yDAAyD;CACrG,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AACvD,CAAC;AAID,MAAa,2BAA2B,EAAE,OAAO;CAC/C,IAAI,EAAE,OAAO;CACb,QAAQ,EAAE,QAAQ,cAAc;CAChC,QAAQ;AACV,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO;CAChD,IAAI,EAAE,OAAO;CACb,QAAQ,EAAE,QAAQ,sBAAsB;CACxC,SAAS,EAAE,QAAQ,IAAI;AACzB,CAAC;AAED,MAAa,8BAA8B,EAAE,OAAO;CAClD,QAAQ,EAAE,QAAQ,MAAM;CACxB,MAAM,EAAE,MAAM,sBAAsB;CACpC,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,UAAU,EAAE,QAAQ;AACtB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-Bd6kNlEP.cjs");
|
|
2
|
-
const require_memory = require("./memory-
|
|
2
|
+
const require_memory = require("./memory-CVODqy7m.cjs");
|
|
3
3
|
const require_responses = require("./responses-CKNdSRkS.cjs");
|
|
4
4
|
let zod = require("zod");
|
|
5
5
|
zod = require_rolldown_runtime.__toESM(zod, 1);
|
|
@@ -61,4 +61,4 @@ Object.defineProperty(exports, "createConversationBodySchema", {
|
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
//# sourceMappingURL=conversations-
|
|
64
|
+
//# sourceMappingURL=conversations-DJybpnE5.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations-
|
|
1
|
+
{"version":3,"file":"conversations-DJybpnE5.cjs","names":["z","getThreadByIdResponseSchema","conversationItemSchema"],"sources":["../src/server/schemas/conversations.ts"],"sourcesContent":["import z from 'zod';\nimport { getThreadByIdResponseSchema } from './memory';\nimport { conversationItemSchema } from './responses';\n\nexport const conversationIdPathParams = z.object({\n conversationId: z.string().describe('Unique identifier for the conversation thread'),\n});\n\nexport const createConversationBodySchema = z.object({\n agent_id: z.string().describe('Mastra agent ID used to create the conversation thread'),\n conversation_id: z.string().optional().describe('Optional conversation ID to use as the raw threadId'),\n resource_id: z.string().optional().describe('Optional resource ID to associate with the conversation'),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type CreateConversationBody = z.infer<typeof createConversationBodySchema>;\n\nexport const conversationObjectSchema = z.object({\n id: z.string(),\n object: z.literal('conversation'),\n thread: getThreadByIdResponseSchema,\n});\n\nexport const conversationDeletedSchema = z.object({\n id: z.string(),\n object: z.literal('conversation.deleted'),\n deleted: z.literal(true),\n});\n\nexport const conversationItemsListSchema = z.object({\n object: z.literal('list'),\n data: z.array(conversationItemSchema),\n first_id: z.string().nullable(),\n last_id: z.string().nullable(),\n has_more: z.boolean(),\n});\n\nexport type ConversationObject = z.infer<typeof conversationObjectSchema>;\nexport type ConversationItemsList = z.infer<typeof conversationItemsListSchema>;\nexport type ConversationDeleted = z.infer<typeof conversationDeletedSchema>;\n"],"mappings":";;;;;;AAIA,MAAa,2BAA2BA,IAAAA,QAAE,OAAO,EAC/C,gBAAgBA,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS,+CAA+C,EACrF,CAAC;AAED,MAAa,+BAA+BA,IAAAA,QAAE,OAAO;CACnD,UAAUA,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS,wDAAwD;CACtF,iBAAiBA,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,qDAAqD;CACrG,aAAaA,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,yDAAyD;CACrG,OAAOA,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,UAAUA,IAAAA,QAAE,OAAOA,IAAAA,QAAE,OAAO,GAAGA,IAAAA,QAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AACvD,CAAC;AAID,MAAa,2BAA2BA,IAAAA,QAAE,OAAO;CAC/C,IAAIA,IAAAA,QAAE,OAAO;CACb,QAAQA,IAAAA,QAAE,QAAQ,cAAc;CAChC,QAAQC,eAAAA;AACV,CAAC;AAED,MAAa,4BAA4BD,IAAAA,QAAE,OAAO;CAChD,IAAIA,IAAAA,QAAE,OAAO;CACb,QAAQA,IAAAA,QAAE,QAAQ,sBAAsB;CACxC,SAASA,IAAAA,QAAE,QAAQ,IAAI;AACzB,CAAC;AAED,MAAa,8BAA8BA,IAAAA,QAAE,OAAO;CAClD,QAAQA,IAAAA,QAAE,QAAQ,MAAM;CACxB,MAAMA,IAAAA,QAAE,MAAME,kBAAAA,sBAAsB;CACpC,UAAUF,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,SAASA,IAAAA,QAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,UAAUA,IAAAA,QAAE,QAAQ;AACtB,CAAC"}
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -111,6 +111,9 @@ Hono and Fastify enforce the request-body limit before JSON parsing. Express and
|
|
|
111
111
|
| Score | `scorerId`, `scorerVersion`, `scoreSource`, `entityVersionId`, `parentEntityVersionId`, `rootEntityVersionId` | `eq`, `ne`, `in`, `notIn`, `exists`, `notExists` |
|
|
112
112
|
| Score | `score`, `timestamp` | `eq`, `ne`, `in`, `notIn`, `lt`, `lte`, `gt`, `gte`, `exists`, `notExists` |
|
|
113
113
|
| Score | `spanId` | `exists`, `notExists` |
|
|
114
|
+
| Feedback | `feedbackType`, `feedbackSource`, `feedbackUserId`, `sourceId`, `entityVersionId`, `parentEntityVersionId`, `rootEntityVersionId` | `eq`, `ne`, `in`, `notIn`, `exists`, `notExists` |
|
|
115
|
+
| Feedback | `value`, `timestamp` | `eq`, `ne`, `in`, `notIn`, `lt`, `lte`, `gt`, `gte`, `exists`, `notExists` |
|
|
116
|
+
| Feedback | `comment` | `exists`, `notExists` |
|
|
114
117
|
|
|
115
118
|
Compose predicates with `{ op: 'and', args: [...] }`, `{ op: 'or', args: [...] }`, and `{ op: 'not', arg: ... }`. Comparison predicates place a field reference on the left and a literal on the right. Membership predicates use a field reference in `value` and a homogeneous literal array in `set`.
|
|
116
119
|
|
|
@@ -270,6 +273,45 @@ The key must name one top-level property. Empty keys and nested paths are reject
|
|
|
270
273
|
|
|
271
274
|
Metadata fields aren't available for grouping or field discovery.
|
|
272
275
|
|
|
276
|
+
### Filter by feedback
|
|
277
|
+
|
|
278
|
+
Every condition inside one `feedback.some` or `feedback.none` clause applies to the same current feedback record. `feedbackType` and `feedbackSource` are exact application-defined strings rather than built-in enums. This query finds traces with a numeric patient rating below zero:
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
const negativePatientRating = {
|
|
282
|
+
feedback: {
|
|
283
|
+
some: {
|
|
284
|
+
op: 'and',
|
|
285
|
+
args: [
|
|
286
|
+
{ op: 'eq', left: { path: 'feedbackType' }, right: { literal: 'rating' } },
|
|
287
|
+
{ op: 'eq', left: { path: 'feedbackSource' }, right: { literal: 'patient' } },
|
|
288
|
+
{ op: 'lt', left: { path: 'value' }, right: { literal: 0 } },
|
|
289
|
+
],
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Strict stored-value types are the portable contract for feedback predicates. PostgreSQL and ClickHouse distinguish numeric `3` from textual `'3'` for equality and ordered comparisons. DuckDB currently persists feedback values as `VARCHAR`, so numeric-looking strings may be coerced for equality and ordered numeric predicates. OBS-306 will remove this DuckDB exception through typed persistence. Ordered operators require a finite numeric literal. `eq` and `ne` accept one string or number, while `in` and `notIn` require a non-empty set containing only strings or only numbers. `exists` and `notExists` test for either value type.
|
|
296
|
+
|
|
297
|
+
Use `none` to select traces without a matching record. Traces with no feedback also match:
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
const missingClinicianReview = {
|
|
301
|
+
feedback: {
|
|
302
|
+
none: {
|
|
303
|
+
op: 'and',
|
|
304
|
+
args: [
|
|
305
|
+
{ op: 'eq', left: { path: 'feedbackType' }, right: { literal: 'clinical-review' } },
|
|
306
|
+
{ op: 'eq', left: { path: 'feedbackSource' }, right: { literal: 'clinician' } },
|
|
307
|
+
],
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Feedback `timestamp` predicates are independent of the root `timeRange`. Use `comment` only with `exists` or `notExists`. Comment contents aren't searchable. The deprecated feedback fields `source` and `userId` aren't available. Use `feedbackSource` and `feedbackUserId`.
|
|
314
|
+
|
|
273
315
|
## Responses
|
|
274
316
|
|
|
275
317
|
An ungrouped query returns only lightweight completed traces:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-workflows-Cn9MXevC.js","names":[],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// Optional identity/display fields on control-flow entries (mirrors core's\n// `StepFlowEntryOptions`). Declared explicitly because zod's default object\n// mode strips unknown keys — without these, posted fields would vanish\n// silently before reaching core.\nconst entryDisplayFields = {\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n};\nconst containerIdentityFields = {\n id: z.string().optional(),\n ...entryDisplayFields,\n};\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n ...entryDisplayFields,\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n ...containerIdentityFields,\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n ...entryDisplayFields,\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n ...entryDisplayFields,\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n ...containerIdentityFields,\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The wire schema is deliberately looser than the core authoring type:\n // it admits `mapping` entries as children of parallel/conditional/loop,\n // which `WorkflowBuilderExecutableInnerEntry` excludes. That is not\n // drift. Letting those through means a misplaced mapping surfaces from\n // the validation domain as a structured `invalid-map-placement` issue —\n // pointed at the offending path and carrying a machine-applicable\n // `remove-workflow-step` repair action that Studio's draft UI consumes —\n // instead of dying at the boundary as an opaque discriminated-union\n // error. `foreach` is excluded from this on purpose: core rejects a\n // foreach mapping body with an unstructured throw during rehydration,\n // so there is no repairable issue to preserve and the wire schema is\n // the better place to catch it.\n //\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration, so nothing reaches the engine unvalidated; the cast\n // documents this boundary. Narrowing the schema to delete the cast\n // would trade a repairable issue for a generic 400.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n (mastra as Mastra).removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dynamic-workflows-Cn9MXevC.js","names":[],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// Optional identity/display fields on control-flow entries (mirrors core's\n// `StepFlowEntryOptions`). Declared explicitly because zod's default object\n// mode strips unknown keys — without these, posted fields would vanish\n// silently before reaching core.\nconst entryDisplayFields = {\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n};\nconst containerIdentityFields = {\n id: z.string().optional(),\n ...entryDisplayFields,\n};\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n ...entryDisplayFields,\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n ...containerIdentityFields,\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n ...entryDisplayFields,\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n ...entryDisplayFields,\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n ...containerIdentityFields,\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The wire schema is deliberately looser than the core authoring type:\n // it admits `mapping` entries as children of parallel/conditional/loop,\n // which `WorkflowBuilderExecutableInnerEntry` excludes. That is not\n // drift. Letting those through means a misplaced mapping surfaces from\n // the validation domain as a structured `invalid-map-placement` issue —\n // pointed at the offending path and carrying a machine-applicable\n // `remove-workflow-step` repair action that Studio's draft UI consumes —\n // instead of dying at the boundary as an opaque discriminated-union\n // error. `foreach` is excluded from this on purpose: core rejects a\n // foreach mapping body with an unstructured throw during rehydration,\n // so there is no repairable issue to preserve and the wire schema is\n // the better place to catch it.\n //\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration, so nothing reaches the engine unvalidated; the cast\n // documents this boundary. Narrowing the schema to delete the cast\n // would trade a repairable issue for a generic 400.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n mastra.removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-workflows-DSg9_yec.cjs","names":["z","createRoute","HTTPException","handleError"],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// Optional identity/display fields on control-flow entries (mirrors core's\n// `StepFlowEntryOptions`). Declared explicitly because zod's default object\n// mode strips unknown keys — without these, posted fields would vanish\n// silently before reaching core.\nconst entryDisplayFields = {\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n};\nconst containerIdentityFields = {\n id: z.string().optional(),\n ...entryDisplayFields,\n};\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n ...entryDisplayFields,\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n ...containerIdentityFields,\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n ...entryDisplayFields,\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n ...entryDisplayFields,\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n ...containerIdentityFields,\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The wire schema is deliberately looser than the core authoring type:\n // it admits `mapping` entries as children of parallel/conditional/loop,\n // which `WorkflowBuilderExecutableInnerEntry` excludes. That is not\n // drift. Letting those through means a misplaced mapping surfaces from\n // the validation domain as a structured `invalid-map-placement` issue —\n // pointed at the offending path and carrying a machine-applicable\n // `remove-workflow-step` repair action that Studio's draft UI consumes —\n // instead of dying at the boundary as an opaque discriminated-union\n // error. `foreach` is excluded from this on purpose: core rejects a\n // foreach mapping body with an unstructured throw during rehydration,\n // so there is no repairable issue to preserve and the wire schema is\n // the better place to catch it.\n //\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration, so nothing reaches the engine unvalidated; the cast\n // documents this boundary. Narrowing the schema to delete the cast\n // would trade a repairable issue for a generic 400.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n (mastra as Mastra).removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dynamic-workflows-DSg9_yec.cjs","names":["z","createRoute","HTTPException","handleError"],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// Optional identity/display fields on control-flow entries (mirrors core's\n// `StepFlowEntryOptions`). Declared explicitly because zod's default object\n// mode strips unknown keys — without these, posted fields would vanish\n// silently before reaching core.\nconst entryDisplayFields = {\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n};\nconst containerIdentityFields = {\n id: z.string().optional(),\n ...entryDisplayFields,\n};\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n ...entryDisplayFields,\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n ...containerIdentityFields,\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n ...entryDisplayFields,\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n ...entryDisplayFields,\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n ...containerIdentityFields,\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n ...containerIdentityFields,\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The wire schema is deliberately looser than the core authoring type:\n // it admits `mapping` entries as children of parallel/conditional/loop,\n // which `WorkflowBuilderExecutableInnerEntry` excludes. That is not\n // drift. Letting those through means a misplaced mapping surfaces from\n // the validation domain as a structured `invalid-map-placement` issue —\n // pointed at the offending path and carrying a machine-applicable\n // `remove-workflow-step` repair action that Studio's draft UI consumes —\n // instead of dying at the boundary as an opaque discriminated-union\n // error. `foreach` is excluded from this on purpose: core rejects a\n // foreach mapping body with an unstructured throw during rehydration,\n // so there is no repairable issue to preserve and the wire schema is\n // the better place to catch it.\n //\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration, so nothing reaches the engine unvalidated; the cast\n // documents this boundary. Narrowing the schema to delete the cast\n // would trade a repairable issue for a generic 400.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n mastra.removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -636,6 +636,12 @@ Object.defineProperty(exports, "deleteThreadResponseSchema", {
|
|
|
636
636
|
return deleteThreadResponseSchema;
|
|
637
637
|
}
|
|
638
638
|
});
|
|
639
|
+
Object.defineProperty(exports, "filterSchema", {
|
|
640
|
+
enumerable: true,
|
|
641
|
+
get: function() {
|
|
642
|
+
return filterSchema;
|
|
643
|
+
}
|
|
644
|
+
});
|
|
639
645
|
Object.defineProperty(exports, "getMemoryConfigQuerySchema", {
|
|
640
646
|
enumerable: true,
|
|
641
647
|
get: function() {
|
|
@@ -696,6 +702,12 @@ Object.defineProperty(exports, "getWorkingMemoryResponseSchema", {
|
|
|
696
702
|
return getWorkingMemoryResponseSchema;
|
|
697
703
|
}
|
|
698
704
|
});
|
|
705
|
+
Object.defineProperty(exports, "includeSchema", {
|
|
706
|
+
enumerable: true,
|
|
707
|
+
get: function() {
|
|
708
|
+
return includeSchema;
|
|
709
|
+
}
|
|
710
|
+
});
|
|
699
711
|
Object.defineProperty(exports, "listMessagesNetworkQuerySchema", {
|
|
700
712
|
enumerable: true,
|
|
701
713
|
get: function() {
|
|
@@ -744,6 +756,12 @@ Object.defineProperty(exports, "memoryStatusResponseSchema", {
|
|
|
744
756
|
return memoryStatusResponseSchema;
|
|
745
757
|
}
|
|
746
758
|
});
|
|
759
|
+
Object.defineProperty(exports, "messageOrderBySchema", {
|
|
760
|
+
enumerable: true,
|
|
761
|
+
get: function() {
|
|
762
|
+
return messageOrderBySchema;
|
|
763
|
+
}
|
|
764
|
+
});
|
|
747
765
|
Object.defineProperty(exports, "optionalAgentIdQuerySchema", {
|
|
748
766
|
enumerable: true,
|
|
749
767
|
get: function() {
|
|
@@ -811,4 +829,4 @@ Object.defineProperty(exports, "updateWorkingMemoryResponseSchema", {
|
|
|
811
829
|
}
|
|
812
830
|
});
|
|
813
831
|
|
|
814
|
-
//# sourceMappingURL=memory-
|
|
832
|
+
//# sourceMappingURL=memory-CVODqy7m.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-CVODqy7m.cjs","names":["z","createPagePaginationSchema","paginationInfoSchema","successResponseSchema"],"sources":["../src/server/schemas/memory.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { paginationInfoSchema, createPagePaginationSchema, successResponseSchema } from './common';\n\n// Path parameter schemas\nexport const threadIdPathParams = z.object({\n threadId: z.string().describe('Unique identifier for the conversation thread'),\n});\n\n/**\n * Common query parameter: required agent ID\n */\nexport const agentIdQuerySchema = z.object({\n agentId: z.string(),\n});\n\n/**\n * Common query parameter: optional agent ID\n * Used for read operations that can fall back to storage when agentId is not provided\n */\nexport const optionalAgentIdQuerySchema = z.object({\n agentId: z.string().optional(),\n});\n\n/**\n * Storage order by configuration for threads and agents (have both createdAt and updatedAt)\n * Handles JSON parsing from query strings.\n *\n * The inner object is wrapped in `.optional()` so the preprocess can yield\n * `undefined` (e.g. when a legacy client sends a bare string like\n * `?orderBy=updatedAt`) without tripping a \"expected object, received undefined\"\n * Zod error. Without that inner `.optional()`, valid optional query usage\n * regresses into a hard 400.\n */\nconst storageOrderBySchema = z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return undefined;\n }\n }\n return val;\n },\n z\n .object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n })\n .optional(),\n )\n .optional();\n\n/**\n * Storage order by configuration for messages (only have createdAt)\n * Handles JSON parsing from query strings. See `storageOrderBySchema` for why\n * the inner object schema is also `.optional()`.\n */\nexport const messageOrderBySchema = z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return undefined;\n }\n }\n return val;\n },\n z\n .object({\n field: z.enum(['createdAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n })\n .optional(),\n )\n .optional();\n\n/**\n * Include schema for message listing - handles JSON parsing from query strings\n */\nexport const includeSchema = z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.array will reject string type)\n return val;\n }\n }\n return val;\n },\n z.array(\n z.object({\n id: z.string(),\n threadId: z.string().optional(),\n withPreviousMessages: z.number().optional(),\n withNextMessages: z.number().optional(),\n }),\n ),\n )\n .optional();\n\nconst metadataFilterValueSchema = z.union([z.string(), z.number().finite(), z.boolean(), z.null()]);\nconst metadataFilterKeySchema = z\n .string()\n .max(128)\n .regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/)\n .refine(key => !['__proto__', 'prototype', 'constructor'].includes(key));\n\n/**\n * Metadata filters are deliberately shallow scalar maps so storage adapters can\n * apply exact-match AND semantics consistently.\n */\nconst metadataFilterSchema = z.record(metadataFilterKeySchema, metadataFilterValueSchema);\n\n/**\n * Filter schema for message listing - handles JSON parsing from query strings\n */\nexport const filterSchema = z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.object will reject string type)\n return val;\n }\n }\n return val;\n },\n z.object({\n dateRange: z\n .object({\n start: z.coerce.date().optional(),\n end: z.coerce.date().optional(),\n startExclusive: z.boolean().optional(),\n endExclusive: z.boolean().optional(),\n })\n .optional(),\n roles: z.array(z.string()).optional(),\n metadata: metadataFilterSchema.optional(),\n }),\n )\n .optional();\n\n/**\n * Memory config schema - handles JSON parsing from query strings\n */\nconst memoryConfigSchema = z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.record will reject string type)\n return val;\n }\n }\n return val;\n },\n z.record(z.string(), z.unknown()),\n )\n .optional();\n\n/**\n * Thread object structure\n */\nconst threadSchema = z.object({\n id: z.string(),\n title: z.string().optional(),\n resourceId: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Message structure for storage\n * Extends coreMessageSchema with storage-specific fields\n */\nconst messageSchema = z.unknown();\n// const messageSchema = coreMessageSchema.extend({\n// id: z.string(),\n// createdAt: z.coerce.date(),\n// threadId: z.string().optional(),\n// resourceId: z.string().optional(),\n// });\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * GET /api/memory/status\n * Includes optional resourceId and threadId for OM status lookup\n */\nexport const getMemoryStatusQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * GET /memory/config\n */\nexport const getMemoryConfigQuerySchema = agentIdQuerySchema;\n\n/**\n * Inner schema for GET /memory/threads. The outer `listThreadsQuerySchema`\n * wraps this with a back-compat preprocess (see below) that rewrites the\n * legacy `?orderBy=<field>&sortDirection=<dir>` shape — emitted by\n * `@mastra/client-js` < 1.18 (e.g. mobile clients pinned to 1.4.x) — into the\n * current `{ orderBy: { field, direction } }` object shape.\n */\nconst listThreadsQueryInnerSchema = createPagePaginationSchema(100).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n metadata: z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.record will reject string type)\n return val;\n }\n }\n return val;\n },\n z.record(z.string(), z.unknown()),\n )\n .optional(),\n orderBy: storageOrderBySchema,\n});\n\n/**\n * GET /memory/threads\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - when omitted, returns all threads\n * metadata is optional - filters threads by metadata key-value pairs (AND logic)\n *\n * Accepts both the current shape (`orderBy[field]=...&orderBy[direction]=...`)\n * and the legacy shape used by `@mastra/client-js` < 1.18\n * (`orderBy=<field>&sortDirection=<dir>`). The legacy shape is fused into the\n * current shape before schema validation, so existing pinned clients continue\n * to work without server-side breakage.\n */\nexport const listThreadsQuerySchema = z.preprocess(val => {\n if (val === null || typeof val !== 'object' || Array.isArray(val)) return val;\n const record = val as Record<string, unknown>;\n const rawOrderBy = record.orderBy;\n // Only rewrite the legacy bare-string shape. Object / bracket-notation /\n // JSON-stringified orderBy is left alone and handled by storageOrderBySchema.\n if (typeof rawOrderBy !== 'string') return val;\n // A JSON-stringified object is the current \"stringified\" shape, not legacy —\n // let storageOrderBySchema's preprocess parse it.\n const trimmed = rawOrderBy.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) return val;\n // Legacy shape detected: fuse into `{ field, direction }`.\n const direction = typeof record.sortDirection === 'string' ? record.sortDirection : undefined;\n const { sortDirection: _legacyDir, ...rest } = record;\n return {\n ...rest,\n orderBy: {\n field: rawOrderBy,\n ...(direction !== undefined ? { direction } : {}),\n },\n };\n}, listThreadsQueryInnerSchema);\n\n/**\n * GET /memory/threads/:threadId\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const getThreadByIdQuerySchema = optionalAgentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * GET /memory/threads/:threadId/messages\n * agentId is optional - can use storage fallback when not provided\n */\nexport const listMessagesQuerySchema = createPagePaginationSchema(40).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n orderBy: messageOrderBySchema,\n include: includeSchema,\n filter: filterSchema,\n includeSystemReminders: z\n .preprocess(val => {\n if (val === undefined) return val;\n if (val === 'true') return true;\n if (val === 'false') return false;\n return val;\n }, z.boolean())\n .optional(),\n});\n\n/**\n * GET /memory/threads/:threadId/working-memory\n */\nexport const getWorkingMemoryQuerySchema = z.object({\n agentId: z.string(),\n resourceId: z.string().optional(),\n memoryConfig: memoryConfigSchema,\n});\n\n/**\n * DELETE /memory/threads/:threadId\n * agentId is required\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteThreadQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * POST /memory/messages/delete\n * agentId is required\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteMessagesQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n// ============================================================================\n// Legacy /network Query Parameter Schemas (backward compatibility)\n// ============================================================================\n\n/**\n * GET /memory/network/status\n */\nexport const getMemoryStatusNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * GET /memory/network/threads\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - when omitted, returns all threads\n * metadata is optional - filters threads by metadata key-value pairs (AND logic)\n */\nexport const listThreadsNetworkQuerySchema = createPagePaginationSchema(100).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n metadata: z\n .preprocess(\n val => {\n if (val === undefined) return val;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.record will reject string type)\n return val;\n }\n }\n return val;\n },\n z.record(z.string(), z.unknown()),\n )\n .optional(),\n orderBy: storageOrderBySchema,\n});\n\n/**\n * GET /memory/network/threads/:threadId\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const getThreadByIdNetworkQuerySchema = optionalAgentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * GET /memory/network/threads/:threadId/messages\n * agentId is optional - can use storage fallback when not provided\n */\nexport const listMessagesNetworkQuerySchema = createPagePaginationSchema(40).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n orderBy: messageOrderBySchema,\n include: includeSchema,\n filter: filterSchema,\n});\n\n/**\n * POST /memory/network/save-messages\n */\nexport const saveMessagesNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * POST /memory/network/threads\n */\nexport const createThreadNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * PATCH /memory/network/threads/:threadId\n */\nexport const updateThreadNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * DELETE /memory/network/threads/:threadId\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteThreadNetworkQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * POST /memory/network/messages/delete\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteMessagesNetworkQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Response for GET /memory/status\n */\nexport const memoryStatusResponseSchema = z.object({\n result: z.boolean(),\n memoryType: z.enum(['local', 'gateway']).optional(),\n observationalMemory: z\n .object({\n enabled: z.boolean(),\n hasRecord: z.boolean().optional(),\n originType: z.string().optional(),\n lastObservedAt: z.date().optional(),\n tokenCount: z.number().optional(),\n observationTokenCount: z.number().optional(),\n isObserving: z.boolean().optional(),\n isReflecting: z.boolean().optional(),\n })\n .optional(),\n});\n\n/**\n * Observational Memory config schema for API responses\n */\nconst observationalMemoryModelRoutingSchema = z.array(\n z.object({\n upTo: z.number(),\n model: z.string(),\n }),\n);\n\nconst observationalMemoryConfigSchema = z.object({\n enabled: z.boolean(),\n scope: z.enum(['thread', 'resource']).optional(),\n shareTokenBudget: z.boolean().optional(),\n messageTokens: z.union([z.number(), z.object({ min: z.number(), max: z.number() })]).optional(),\n observationTokens: z.union([z.number(), z.object({ min: z.number(), max: z.number() })]).optional(),\n observationModel: z.string().optional(),\n reflectionModel: z.string().optional(),\n observationModelRouting: observationalMemoryModelRoutingSchema.optional(),\n reflectionModelRouting: observationalMemoryModelRoutingSchema.optional(),\n});\n\n/**\n * Response for GET /memory/config\n * MemoryConfig is complex with many optional fields - using passthrough\n */\nexport const memoryConfigResponseSchema = z.object({\n memoryType: z.enum(['local', 'gateway']).optional(),\n config: z\n .object({\n lastMessages: z.union([z.number(), z.literal(false)]).optional(),\n semanticRecall: z.union([z.boolean(), z.unknown()]).optional(),\n workingMemory: z\n .object({\n enabled: z.boolean().optional(),\n scope: z.enum(['thread', 'resource']).optional(),\n template: z.string().optional(),\n schema: z.unknown().optional(),\n version: z.enum(['stable', 'vnext']).optional(),\n })\n .passthrough() // WorkingMemory has additional experimental fields (useStateSignals, agentManaged)\n .optional(),\n observationalMemory: observationalMemoryConfigSchema.optional(),\n })\n .nullable(),\n});\n\n/**\n * Response for GET /memory/threads\n */\nexport const listThreadsResponseSchema = paginationInfoSchema.extend({\n threads: z.array(threadSchema),\n});\n\n/**\n * Response for GET /memory/threads/:threadId\n */\nexport const getThreadByIdResponseSchema = threadSchema;\n\n/**\n * Response for GET /memory/threads/:threadId/messages\n */\nexport const listMessagesResponseSchema = z.object({\n messages: z.array(messageSchema),\n uiMessages: z.array(z.unknown()).nullable(), // Converted messages in UI format\n});\n\n/**\n * Response for GET /memory/threads/:threadId/working-memory\n */\nexport const getWorkingMemoryResponseSchema = z.object({\n workingMemory: z.unknown().nullable(), // Can be string or structured object depending on template\n source: z.enum(['thread', 'resource']),\n workingMemoryTemplate: z.unknown().nullable(), // Template structure varies\n threadExists: z.boolean(),\n});\n\n// ============================================================================\n// Body Parameter Schemas for POST/PUT/DELETE\n// ============================================================================\n\n/**\n * Body schema for POST /memory/messages\n */\nexport const saveMessagesBodySchema = z.object({\n messages: z.array(messageSchema),\n});\n\n/**\n * Body schema for POST /memory/threads\n */\nexport const createThreadBodySchema = z.object({\n resourceId: z.string(),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * Body schema for PUT /memory/threads/:threadId\n */\nexport const updateThreadBodySchema = z.object({\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n resourceId: z.string().optional(),\n});\n\n/**\n * Body schema for PUT /memory/threads/:threadId/working-memory\n */\nexport const updateWorkingMemoryBodySchema = z.object({\n workingMemory: z.string(),\n resourceId: z.string().optional(),\n memoryConfig: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Body schema for POST /memory/messages/delete\n * Accepts: string | string[] | { id: string } | { id: string }[]\n */\nexport const deleteMessagesBodySchema = z.object({\n messageIds: z.union([\n z.string(),\n z.array(z.string()),\n z.object({ id: z.string() }),\n z.array(z.object({ id: z.string() })),\n ]),\n});\n\n/**\n * Query schema for GET /memory/search\n */\nexport const searchMemoryQuerySchema = z.object({\n agentId: z.string(),\n searchQuery: z.string(),\n resourceId: z.string(),\n threadId: z.string().optional(),\n limit: z.coerce.number().optional().default(20),\n memoryConfig: memoryConfigSchema,\n});\n\n/**\n * Response schemas\n */\nexport const saveMessagesResponseSchema = z.object({\n messages: z.array(messageSchema),\n});\n\nexport const deleteThreadResponseSchema = z.object({\n result: z.string(),\n});\n\nexport const updateWorkingMemoryResponseSchema = successResponseSchema;\n\nexport const deleteMessagesResponseSchema = successResponseSchema.extend({\n message: z.string(),\n});\n\nexport const searchMemoryResponseSchema = z.object({\n results: z.array(z.unknown()),\n count: z.number(),\n query: z.string(),\n searchScope: z.string().optional(),\n searchType: z.string().optional(),\n});\n\n/**\n * Body schema for POST /memory/threads/:threadId/clone\n */\nexport const cloneThreadBodySchema = z.object({\n newThreadId: z.string().optional(),\n resourceId: z.string().optional(),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n options: z\n .object({\n messageLimit: z.number().optional(),\n messageFilter: z\n .object({\n startDate: z.coerce.date().optional(),\n endDate: z.coerce.date().optional(),\n messageIds: z.array(z.string()).optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Response schema for POST /memory/threads/:threadId/clone\n */\nexport const cloneThreadResponseSchema = z.object({\n thread: threadSchema,\n clonedMessages: z.array(messageSchema),\n});\n\n// ============================================================================\n// Observational Memory Schemas\n// ============================================================================\n\n/**\n * Query schema for GET /api/memory/observational-memory\n */\nexport const getObservationalMemoryQuerySchema = z.object({\n agentId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n from: z.coerce.date().optional(),\n to: z.coerce.date().optional(),\n offset: z.coerce.number().int().min(0).optional(),\n limit: z.coerce.number().int().min(1).optional(),\n});\n\n/**\n * Observational Memory record schema for API responses\n * Matches the ObservationalMemoryRecord type from @mastra/core/storage\n */\nconst bufferedObservationChunkSchema = z.object({\n id: z.string().optional(),\n cycleId: z.string(),\n observations: z.string(),\n tokenCount: z.number(),\n messageIds: z.array(z.string()).optional(),\n messageTokens: z.number(),\n lastObservedAt: z.date().optional(),\n createdAt: z.date().optional(),\n suggestedContinuation: z.string().optional(),\n currentTask: z.string().optional(),\n threadTitle: z.string().optional(),\n extractedValues: z.record(z.string(), z.unknown()).optional(),\n extractionFailures: z.array(z.object({ slug: z.string(), error: z.string() })).optional(),\n});\n\nconst observationalMemoryRecordSchema = z.object({\n id: z.string(),\n scope: z.enum(['thread', 'resource']),\n resourceId: z.string(),\n threadId: z.string().nullable(),\n activeObservations: z.string(),\n bufferedObservations: z.string().optional(),\n bufferedObservationChunks: z.array(bufferedObservationChunkSchema).optional(),\n bufferedReflection: z.string().optional(),\n originType: z.enum(['initial', 'observation', 'reflection']),\n generationCount: z.number(),\n lastObservedAt: z.date().optional(),\n totalTokensObserved: z.number(),\n observationTokenCount: z.number(),\n pendingMessageTokens: z.number(),\n isObserving: z.boolean(),\n isReflecting: z.boolean(),\n config: z.record(z.string(), z.unknown()),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\n/**\n * Response schema for GET /api/memory/observational-memory\n */\nexport const getObservationalMemoryResponseSchema = z.object({\n record: observationalMemoryRecordSchema.nullable(),\n history: z.array(observationalMemoryRecordSchema).optional(),\n});\n\n/**\n * Body schema for POST /api/memory/observational-memory/buffer-status\n */\nexport const awaitBufferStatusBodySchema = z.object({\n agentId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * Response schema for POST /api/memory/observational-memory/buffer-status\n */\nexport const awaitBufferStatusResponseSchema = z.object({\n record: observationalMemoryRecordSchema.nullable(),\n});\n"],"mappings":"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"}
|
|
@@ -552,6 +552,6 @@ const awaitBufferStatusBodySchema = z.object({
|
|
|
552
552
|
*/
|
|
553
553
|
const awaitBufferStatusResponseSchema = z.object({ record: observationalMemoryRecordSchema.nullable() });
|
|
554
554
|
//#endregion
|
|
555
|
-
export {
|
|
555
|
+
export { listThreadsNetworkQuerySchema as A, searchMemoryQuerySchema as B, getThreadByIdResponseSchema as C, listMessagesNetworkQuerySchema as D, includeSchema as E, messageOrderBySchema as F, updateWorkingMemoryBodySchema as G, threadIdPathParams as H, optionalAgentIdQuerySchema as I, updateWorkingMemoryResponseSchema as K, saveMessagesBodySchema as L, listThreadsResponseSchema as M, memoryConfigResponseSchema as N, listMessagesQuerySchema as O, memoryStatusResponseSchema as P, saveMessagesNetworkQuerySchema as R, getThreadByIdQuerySchema as S, getWorkingMemoryResponseSchema as T, updateThreadBodySchema as U, searchMemoryResponseSchema as V, updateThreadNetworkQuerySchema as W, getMemoryStatusNetworkQuerySchema as _, cloneThreadResponseSchema as a, getObservationalMemoryResponseSchema as b, deleteMessagesBodySchema as c, deleteMessagesResponseSchema as d, deleteThreadNetworkQuerySchema as f, getMemoryConfigQuerySchema as g, filterSchema as h, cloneThreadBodySchema as i, listThreadsQuerySchema as j, listMessagesResponseSchema as k, deleteMessagesNetworkQuerySchema as l, deleteThreadResponseSchema as m, awaitBufferStatusBodySchema as n, createThreadBodySchema as o, deleteThreadQuerySchema as p, awaitBufferStatusResponseSchema as r, createThreadNetworkQuerySchema as s, agentIdQuerySchema as t, deleteMessagesQuerySchema as u, getMemoryStatusQuerySchema as v, getWorkingMemoryQuerySchema as w, getThreadByIdNetworkQuerySchema as x, getObservationalMemoryQuerySchema as y, saveMessagesResponseSchema as z };
|
|
556
556
|
|
|
557
|
-
//# sourceMappingURL=memory-
|
|
557
|
+
//# sourceMappingURL=memory-CjWJYFVI.js.map
|